From c8466e606c7a4da2c4e2e1d904e3501383b6266a Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 2 May 2014 12:06:59 -0400 Subject: [PATCH 001/248] closed anchor tag --- not_so_obvious_python_stuff.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/not_so_obvious_python_stuff.ipynb b/not_so_obvious_python_stuff.ipynb index ca70215..932b43f 100644 --- a/not_so_obvious_python_stuff.ipynb +++ b/not_so_obvious_python_stuff.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:f2f197ff240bf1759d4cf4537d7ed82331d608b53fc97fe2cac43003f8429ea7" + "signature": "sha256:80251f5a867d952a8908417662c4e9a63acad3a148fcbcd67d9a19345eb1828f" }, "nbformat": 3, "nbformat_minor": 0, @@ -2992,7 +2992,7 @@ "source": [ "
\n", "
\n", - "" + "" ] }, { From 81610f64f6f659de7fd5aaf688e3286d77e6665f Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 2 May 2014 14:29:16 -0400 Subject: [PATCH 002/248] metaclasses section --- ...t_so_obvious_python_stuff-checkpoint.ipynb | 330 ++++++++++++++++-- not_so_obvious_python_stuff.ipynb | 121 ++++++- 2 files changed, 424 insertions(+), 27 deletions(-) diff --git a/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb b/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb index 3ea736a..848d37c 100644 --- a/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb +++ b/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:9a07a78204a51f0faab65e52657f0446cd604ed470627f9c6af1ba74c047fe23" + "signature": "sha256:92f953fd8004f1dd1e9969ce61096f5a0b43190de3f3c7c8f85642b667754fae" }, "nbformat": 3, "nbformat_minor": 0, @@ -81,7 +81,9 @@ "- [Function annotations - What are those `->`'s in my Python code?](#function_annotation)\n", "- [Abortive statements in `finally` blocks](#finally_blocks)\n", "- [Assigning types to variables as values](#variable_types)\n", - "- [Keyword argument unpacking syntax - `*args` and `**kwargs`](#splat_op)" + "- [Only the first clause of generators is evaluated immediately](#generator_rhs)\n", + "- [Keyword argument unpacking syntax - `*args` and `**kwargs`](#splat_op)\n", + "- [Metaclasses - What creates a new instance of a class?](#new_instance)" ] }, { @@ -275,13 +277,13 @@ "collapsed": false, "input": [ "a_list = []\n", - "print('ID:',id(a_list))\n", + "print(a_list, '\\nID (initial):',id(a_list), '\\n')\n", "\n", "a_list.append(1)\n", - "print('ID (append):',id(a_list))\n", + "print(a_list, '\\nID (append):',id(a_list), '\\n')\n", "\n", - "a_list.append(2)\n", - "print('ID (extend):',id(a_list))" + "a_list.extend([2])\n", + "print(a_list, '\\nID (extend):',id(a_list))" ], "language": "python", "metadata": {}, @@ -290,13 +292,18 @@ "output_type": "stream", "stream": "stdout", "text": [ - "ID: 4366495544\n", - "ID (append): 4366495544\n", - "ID (extend): 4366495544\n" + "[] \n", + "ID (initial): 140704077653128 \n", + "\n", + "[1] \n", + "ID (append): 140704077653128 \n", + "\n", + "[1, 2] \n", + "ID (extend): 140704077653128\n" ] } ], - "prompt_number": 7 + "prompt_number": 6 }, { "cell_type": "code", @@ -2980,6 +2987,109 @@ ], "prompt_number": 4 }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Only the first clause of generators is evaluated immediately" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The main reason why we love to use generators in certain cases (i.e., when we are dealing with large numbers of computations) is that it only computes the next value when it is needed, which is also known as \"lazy\" evaluation.\n", + "However, the first clause of an generator is already checked upon it's creation, as the following example demonstrates:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "gen_fails = (i for i in 1/0)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "ZeroDivisionError", + "evalue": "division by zero", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgen_fails\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mZeroDivisionError\u001b[0m: division by zero" + ] + } + ], + "prompt_number": 18 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Certainly, this is a nice feature, since it notifies us about syntax erros immediately. However, this is (unfortunately) not the case if we have multiple cases in our generator." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "gen_succeeds = (i for i in range(5) for j in 1/0)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 19 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('But obviously fails when we iterate ...')\n", + "for i in gen_succeeds:\n", + " print(i)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "ZeroDivisionError", + "evalue": "division by zero", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mZeroDivisionError\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[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'But obviously fails when we iterate ...'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mgen_succeeds\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgen_succeeds\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mj\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mZeroDivisionError\u001b[0m: division by zero" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "But obviously fails when we iterate ...\n" + ] + } + ], + "prompt_number": 20 + }, { "cell_type": "markdown", "metadata": {}, @@ -2996,6 +3106,13 @@ "##Keyword argument unpacking syntax - `*args` and `**kwargs`" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -3034,7 +3151,7 @@ ] } ], - "prompt_number": 30 + "prompt_number": 1 }, { "cell_type": "markdown", @@ -3062,12 +3179,12 @@ "stream": "stdout", "text": [ "type of kwargs: \n", - "kwargs contents: {'d': 4, 'c': 3, 'b': 2, 'a': 1}\n", + "kwargs contents: {'b': 2, 'a': 1, 'c': 3, 'd': 4}\n", "value of argument a: 1\n" ] } ], - "prompt_number": 35 + "prompt_number": 2 }, { "cell_type": "markdown", @@ -3097,7 +3214,176 @@ ] } ], - "prompt_number": 36 + "prompt_number": 3 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Metaclasses - What creates a new instance of a class?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Usually, it is the `__init__` method when we think of instanciating a new object from a class. However, it is the static method `__new__` (it is not a class method!) that creates and returns a new instance before `__init__()` is called. \n", + "\n", + "\n", + "`__new__` is a so-called static method that returns \n", + "`return super(, cls).__new__(subcls, *args, **kwargs)`" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print(help(object.__new__))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Help on built-in function __new__:\n", + "\n", + "__new__(...)\n", + " T.__new__(S, ...) -> a new object with type S, a subtype of T\n", + "\n", + "None\n" + ] + } + ], + "prompt_number": 17 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print(dir(object))\n", + "print(help(object.__new__))\n", + "print(help(object.__init__))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']\n", + "Help on built-in function __new__:\n", + "\n", + "__new__(...)\n", + " T.__new__(S, ...) -> a new object with type S, a subtype of T\n", + "\n", + "None\n", + "Help on wrapper_descriptor:\n", + "\n", + "__init__(...)\n", + " x.__init__(...) initializes x; see help(type(x)) for signature\n", + "\n", + "None\n" + ] + } + ], + "prompt_number": 18 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "class a_class(object):\n", + " def __new__(clss, *args, **kwargs):\n", + " print('excecuted __new__')\n", + " return None\n", + " def __init__(self, an_arg):\n", + " print('excecuted __init__')\n", + " self.an_arg = an_arg\n", + " \n", + "a_object = a_class(1)\n", + "print('Type of a_object:', type(a_object))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "excecuted __new__\n", + "Type of a_object: \n" + ] + } + ], + "prompt_number": 33 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "class a_class(object):\n", + " def __new__(clss, *args, **kwargs):\n", + " print('excecuted __new__')\n", + " inst = super(a_class, clss).__new__(clss, *args, **kwargs)\n", + " return inst\n", + " def __init__(self):\n", + " print('excecuted __init__')\n", + " \n", + "a_object = a_class()\n", + "print('Type of a_object:', type(a_object))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "excecuted __new__\n", + "excecuted __init__\n", + "Type of a_object: \n" + ] + } + ], + "prompt_number": 40 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "class a_class(object):\n", + " def __init__(self, an_arg):\n", + " print('excecuted __init__')\n", + " self.an_arg = an_arg\n", + " \n", + "a_object = a_class(1)\n", + "print('Type of a_object:', type(a_object))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "excecuted __init__\n", + "Type of a_object \n" + ] + } + ], + "prompt_number": 24 }, { "cell_type": "markdown", @@ -3128,23 +3414,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "#### 05/02/2014\n", + "- new section: Metaclasses - What creates a new instance of a class? \n", + "\n", "#### 05/01/2014\n", "- new section: keyword argument unpacking syntax\n", "\n", "#### 04/27/2014\n", - "- minor fixes of typos\n", - "- single- vs. double-underscore clarification in the private class section." + "- minor fixes of typos \n", + "- new section: \"Only the first clause of generators is evaluated immediately\"" ] }, - { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 1 - }, { "cell_type": "code", "collapsed": false, diff --git a/not_so_obvious_python_stuff.ipynb b/not_so_obvious_python_stuff.ipynb index 932b43f..ced0fb1 100644 --- a/not_so_obvious_python_stuff.ipynb +++ b/not_so_obvious_python_stuff.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:80251f5a867d952a8908417662c4e9a63acad3a148fcbcd67d9a19345eb1828f" + "signature": "sha256:8d4ed5310005c7fea9f7cfda8b7624b8b3cb390a566950a3bc179c516f89b410" }, "nbformat": 3, "nbformat_minor": 0, @@ -82,7 +82,8 @@ "- [Abortive statements in `finally` blocks](#finally_blocks)\n", "- [Assigning types to variables as values](#variable_types)\n", "- [Only the first clause of generators is evaluated immediately](#generator_rhs)\n", - "- [Keyword argument unpacking syntax - `*args` and `**kwargs`](#splat_op)" + "- [Keyword argument unpacking syntax - `*args` and `**kwargs`](#splat_op)\n", + "- [Metaclasses - What creates a new instance of a class?](#new_instance)" ] }, { @@ -3002,6 +3003,13 @@ "# Only the first clause of generators is evaluated immediately" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -3098,6 +3106,13 @@ "##Keyword argument unpacking syntax - `*args` and `**kwargs`" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -3201,6 +3216,105 @@ ], "prompt_number": 3 }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Metaclasses - What creates a new instance of a class?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Usually, it is the `__init__` method when we think of instanciating a new object from a class. However, it is the static method `__new__` (it is not a class method!) that creates and returns a new instance before `__init__()` is called. \n", + "More specifically, this is what is returned: \n", + "`return super(, cls).__new__(subcls, *args, **kwargs)` \n", + "\n", + "For more information about the `__new__` method, please see the [documentation](https://www.python.org/download/releases/2.2/descrintro/#__new__).\n", + "\n", + "As a little experiment, let us screw with `__new__` so that it returns `None` and see if `__init__` will be executed:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "class a_class(object):\n", + " def __new__(clss, *args, **kwargs):\n", + " print('excecuted __new__')\n", + " return None\n", + " def __init__(self, an_arg):\n", + " print('excecuted __init__')\n", + " self.an_arg = an_arg\n", + " \n", + "a_object = a_class(1)\n", + "print('Type of a_object:', type(a_object))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "excecuted __new__\n", + "Type of a_object: \n" + ] + } + ], + "prompt_number": 53 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we can see in the code above, `__init__` requires the returned instance from `__new__` in order to called. So, here we just created a `NoneType` object. \n", + "Let us override the `__new__`, now and let us confirm that `__init__` is called now to instantiate the new object\":" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "class a_class(object):\n", + " def __new__(cls, *args, **kwargs):\n", + " print('excecuted __new__')\n", + " inst = super(a_class, cls).__new__(cls)\n", + " return inst\n", + " def __init__(self, an_arg):\n", + " print('excecuted __init__')\n", + " self.an_arg = an_arg\n", + " \n", + "a_object = a_class(1)\n", + "print('Type of a_object:', type(a_object))\n", + "print('a_object.an_arg: ', a_object.an_arg)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "excecuted __new__\n", + "excecuted __init__\n", + "Type of a_object: \n", + "a_object.an_arg: 1\n" + ] + } + ], + "prompt_number": 54 + }, { "cell_type": "markdown", "metadata": {}, @@ -3230,6 +3344,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "#### 05/02/2014\n", + "- new section: Metaclasses - What creates a new instance of a class? \n", + "\n", "#### 05/01/2014\n", "- new section: keyword argument unpacking syntax\n", "\n", From afacae6cc4638ac900cbec09ffda10ca0c601e17 Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 2 May 2014 14:52:17 -0400 Subject: [PATCH 003/248] 2 new sections --- ...t_so_obvious_python_stuff-checkpoint.ipynb | 130 ++++-------------- not_so_obvious_python_stuff.ipynb | 20 +-- 2 files changed, 32 insertions(+), 118 deletions(-) diff --git a/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb b/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb index 848d37c..9c32267 100644 --- a/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb +++ b/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:92f953fd8004f1dd1e9969ce61096f5a0b43190de3f3c7c8f85642b667754fae" + "signature": "sha256:70671a8e3f32d21b27867ecdc6d80f3b5c10f00339a2fae3860c4db8930dc7c6" }, "nbformat": 3, "nbformat_minor": 0, @@ -13,7 +13,7 @@ "metadata": {}, "source": [ "Sebastian Raschka \n", - "last updated: 04/27/2014 ([Changelog](#changelog))\n", + "last updated: 05/02/2014 ([Changelog](#changelog))\n", "\n", "[Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb)\n", "\n", @@ -3151,7 +3151,7 @@ ] } ], - "prompt_number": 1 + "prompt_number": 55 }, { "cell_type": "markdown", @@ -3179,12 +3179,12 @@ "stream": "stdout", "text": [ "type of kwargs: \n", - "kwargs contents: {'b': 2, 'a': 1, 'c': 3, 'd': 4}\n", + "kwargs contents: {'d': 4, 'a': 1, 'c': 3, 'b': 2}\n", "value of argument a: 1\n" ] } ], - "prompt_number": 2 + "prompt_number": 56 }, { "cell_type": "markdown", @@ -3214,7 +3214,7 @@ ] } ], - "prompt_number": 3 + "prompt_number": 57 }, { "cell_type": "markdown", @@ -3237,69 +3237,14 @@ "metadata": {}, "source": [ "Usually, it is the `__init__` method when we think of instanciating a new object from a class. However, it is the static method `__new__` (it is not a class method!) that creates and returns a new instance before `__init__()` is called. \n", + "More specifically, this is what is returned: \n", + "`return super(, cls).__new__(subcls, *args, **kwargs)` \n", "\n", + "For more information about the `__new__` method, please see the [documentation](https://www.python.org/download/releases/2.2/descrintro/#__new__).\n", "\n", - "`__new__` is a so-called static method that returns \n", - "`return super(, cls).__new__(subcls, *args, **kwargs)`" + "As a little experiment, let us screw with `__new__` so that it returns `None` and see if `__init__` will be executed:" ] }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print(help(object.__new__))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Help on built-in function __new__:\n", - "\n", - "__new__(...)\n", - " T.__new__(S, ...) -> a new object with type S, a subtype of T\n", - "\n", - "None\n" - ] - } - ], - "prompt_number": 17 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print(dir(object))\n", - "print(help(object.__new__))\n", - "print(help(object.__init__))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']\n", - "Help on built-in function __new__:\n", - "\n", - "__new__(...)\n", - " T.__new__(S, ...) -> a new object with type S, a subtype of T\n", - "\n", - "None\n", - "Help on wrapper_descriptor:\n", - "\n", - "__init__(...)\n", - " x.__init__(...) initializes x; see help(type(x)) for signature\n", - "\n", - "None\n" - ] - } - ], - "prompt_number": 18 - }, { "cell_type": "code", "collapsed": false, @@ -3327,49 +3272,32 @@ ] } ], - "prompt_number": 33 + "prompt_number": 53 }, { - "cell_type": "code", - "collapsed": false, - "input": [ - "class a_class(object):\n", - " def __new__(clss, *args, **kwargs):\n", - " print('excecuted __new__')\n", - " inst = super(a_class, clss).__new__(clss, *args, **kwargs)\n", - " return inst\n", - " def __init__(self):\n", - " print('excecuted __init__')\n", - " \n", - "a_object = a_class()\n", - "print('Type of a_object:', type(a_object))" - ], - "language": "python", + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "excecuted __new__\n", - "excecuted __init__\n", - "Type of a_object: \n" - ] - } - ], - "prompt_number": 40 + "source": [ + "As we can see in the code above, `__init__` requires the returned instance from `__new__` in order to called. So, here we just created a `NoneType` object. \n", + "Let us override the `__new__`, now and let us confirm that `__init__` is called now to instantiate the new object\":" + ] }, { "cell_type": "code", "collapsed": false, "input": [ "class a_class(object):\n", + " def __new__(cls, *args, **kwargs):\n", + " print('excecuted __new__')\n", + " inst = super(a_class, cls).__new__(cls)\n", + " return inst\n", " def __init__(self, an_arg):\n", " print('excecuted __init__')\n", " self.an_arg = an_arg\n", " \n", "a_object = a_class(1)\n", - "print('Type of a_object:', type(a_object))" + "print('Type of a_object:', type(a_object))\n", + "print('a_object.an_arg: ', a_object.an_arg)" ], "language": "python", "metadata": {}, @@ -3378,12 +3306,14 @@ "output_type": "stream", "stream": "stdout", "text": [ + "excecuted __new__\n", "excecuted __init__\n", - "Type of a_object \n" + "Type of a_object: \n", + "a_object.an_arg: 1\n" ] } ], - "prompt_number": 24 + "prompt_number": 54 }, { "cell_type": "markdown", @@ -3424,14 +3354,6 @@ "- minor fixes of typos \n", "- new section: \"Only the first clause of generators is evaluated immediately\"" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [] } ], "metadata": {} diff --git a/not_so_obvious_python_stuff.ipynb b/not_so_obvious_python_stuff.ipynb index ced0fb1..9c32267 100644 --- a/not_so_obvious_python_stuff.ipynb +++ b/not_so_obvious_python_stuff.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:8d4ed5310005c7fea9f7cfda8b7624b8b3cb390a566950a3bc179c516f89b410" + "signature": "sha256:70671a8e3f32d21b27867ecdc6d80f3b5c10f00339a2fae3860c4db8930dc7c6" }, "nbformat": 3, "nbformat_minor": 0, @@ -13,7 +13,7 @@ "metadata": {}, "source": [ "Sebastian Raschka \n", - "last updated: 04/27/2014 ([Changelog](#changelog))\n", + "last updated: 05/02/2014 ([Changelog](#changelog))\n", "\n", "[Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb)\n", "\n", @@ -3151,7 +3151,7 @@ ] } ], - "prompt_number": 1 + "prompt_number": 55 }, { "cell_type": "markdown", @@ -3179,12 +3179,12 @@ "stream": "stdout", "text": [ "type of kwargs: \n", - "kwargs contents: {'b': 2, 'a': 1, 'c': 3, 'd': 4}\n", + "kwargs contents: {'d': 4, 'a': 1, 'c': 3, 'b': 2}\n", "value of argument a: 1\n" ] } ], - "prompt_number": 2 + "prompt_number": 56 }, { "cell_type": "markdown", @@ -3214,7 +3214,7 @@ ] } ], - "prompt_number": 3 + "prompt_number": 57 }, { "cell_type": "markdown", @@ -3354,14 +3354,6 @@ "- minor fixes of typos \n", "- new section: \"Only the first clause of generators is evaluated immediately\"" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [] } ], "metadata": {} From 3c42a45c609f401574b640a24b62c25e09b7a3f1 Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 2 May 2014 16:10:00 -0400 Subject: [PATCH 004/248] output fix for for-loop leak --- ...cope_resolution_legb_rule-checkpoint.ipynb | 1084 +++++++++++++++++ not_so_obvious_python_stuff.ipynb | 48 +- tutorials/scope_resolution_legb_rule.ipynb | 5 +- 3 files changed, 1134 insertions(+), 3 deletions(-) create mode 100644 .ipynb_checkpoints/scope_resolution_legb_rule-checkpoint.ipynb diff --git a/.ipynb_checkpoints/scope_resolution_legb_rule-checkpoint.ipynb b/.ipynb_checkpoints/scope_resolution_legb_rule-checkpoint.ipynb new file mode 100644 index 0000000..f1924c9 --- /dev/null +++ b/.ipynb_checkpoints/scope_resolution_legb_rule-checkpoint.ipynb @@ -0,0 +1,1084 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:1e3a847a38ee33d41e745f74fe6b8a143b9aeb47d0a1e3029ea52899d97687cb" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Sebastian Raschka](http://www.sebastianraschka.com) \n", + "last updated: 04/28/2014\n", + "\n", + "- [Link to the containing GitHub Repository](https://github.com/rasbt/python_reference)\n", + "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb)\n", + "\n", + "Note: The code in this IPython notebook was executed in Python 3.4.0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "I am really looking forward to your comments and suggestions to improve and extend this tutorial! Just send me a quick note \n", + "via Twitter: [@rasbt](https://twitter.com/rasbt) \n", + "or Email: [bluewoodtree@gmail.com](mailto:bluewoodtree@gmail.com)\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#A beginner's guide to Python's namespaces, scope resolution, and the LEGB rule" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is a short tutorial about Python's namespaces and the scope resolution for variable names using the LEGB-rule. The following sections will provide short example code blocks that should illustrate the problem followed by short explanations. You can simply read this tutorial from start to end, but I'd like to encourage you to execute the code snippets - you can either copy & paste them, or for your convenience, simply [download this IPython notebook](https://raw.githubusercontent.com/rasbt/python_reference/master/tutorials/scope_resolution_legb_rule.ipynb)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sections\n", + "- [Introduction to namespaces and scopes](#introduction) \n", + "- [1. LG - Local and Global scopes](#section_1) \n", + "- [2. LEG - Local, Enclosed, and Global scope](#section_2) \n", + "- [3. LEGB - Local, Enclosed, Global, Built-in](#section_3) \n", + "- [Self-assessment exercise](#assessment)\n", + "- [Conclusion](#conclusion) \n", + "- [Solutions](#solutions)\n", + "- [Warning: For-loop variables \"leaking\" into the global namespace](#for_loop)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Objectives\n", + "- Namespaces and scopes - where does Python look for variable names?\n", + "- Can we define/reuse variable names for multiple objects at the same time?\n", + "- In which order does Python search different namespaces for variable names?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction to namespaces and scopes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Namespaces" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Roughly speaking, namespaces are just containers for mapping names to objects. As you might have already heard, everything in Python - literals, lists, dictionaries, functions, classes, etc. - is an object. \n", + "Such a \"name-to-object\" mapping allows us to access an object by a name that we've assigned to it. E.g., if we make a simple string assignment via `a_string = \"Hello string\"`, we created a reference to the `\"Hello string\"` object, and henceforth we can access via its variable name `a_string`.\n", + "\n", + "We can picture a namespace as a Python dictionary structure, where the dictionary keys represent the names and the dictionary values the object itself (and this is also how namespaces are currently implemented in Python), e.g., \n", + "\n", + "
a_namespace = {'name_a':object_1, 'name_b':object_2, ...}
\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, the tricky part is that we have multiple independent namespaces in Python, and names can be reused for different namespaces (only the objects are unique, for example:\n", + "\n", + "
a_namespace = {'name_a':object_1, 'name_b':object_2, ...}\n",
+      "b_namespace = {'name_a':object_3, 'name_b':object_4, ...}
\n", + "\n", + "For example, everytime we call a `for-loop` or define a function, it will create its own namespace. Namespaces also have different levels of hierarchy (the so-called \"scope\"), which we will discuss in more detail in the next section." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Scope" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the section above, we have learned that namespaces can exist independently from each other and that they are structured in a certain hierarchy, which brings us to the concept of \"scope\". The \"scope\" in Python defines the \"hierarchy level\" in which we search namespaces for certain \"name-to-object\" mappings. \n", + "For example, let us consider the following code:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "i = 1\n", + "\n", + "def foo():\n", + " i = 5\n", + " print(i, 'in foo()')\n", + "\n", + "print(i, 'global')\n", + "\n", + "foo()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1 global\n", + "5 in foo()\n" + ] + } + ], + "prompt_number": 1 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, we just defined the variable name `i` twice, once on the `foo` function." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- `foo_namespace = {'i':object_3, ...}` \n", + "- `global_namespace = {'i':object_1, 'name_b':object_2, ...}`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So, how does Python now which namespace it has to search if we want to print the value of the variable `i`? This is where Python's LEGB-rule comes into play, which we will discuss in the next section." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Tip:\n", + "If we want to print out the dictionary mapping of the global and local variables, we can use the\n", + "the functions `global()` and `local()" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#print(globals()) # prints global namespace\n", + "#print(locals()) # prints local namespace\n", + "\n", + "glob = 1\n", + "\n", + "def foo():\n", + " loc = 5\n", + " print('loc in foo():', 'loc' in locals())\n", + "\n", + "foo()\n", + "print('loc in global:', 'loc' in globals()) \n", + "print('glob in global:', 'foo' in globals())" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "loc in foo(): True\n", + "loc in global: False\n", + "glob in global: True\n" + ] + } + ], + "prompt_number": 11 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Scope resolution for variable names via the LEGB rule." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have seen that multiple namespaces can exist independently from each other and that they can contain the same variable names on different hierachy levels. The \"scope\" defines on which hierarchy level Python searches for a particular \"variable name\" for its associated object. Now, the next question is: \"In which order does Python search the different levels of namespaces before it finds the name-to-object' mapping?\" \n", + "To answer is: It uses the LEGB-rule, which stands for\n", + "\n", + "**Local -> Enclosed -> Global -> Built-in**, \n", + "\n", + "where the arrows should denote the direction of the namespace-hierarchy search order. \n", + "\n", + "- *Local* can be inside a function or class method, for example. \n", + "- *Enclosed* can be its `enclosing` function, e.g., if a function is wrapped inside another function. \n", + "- *Global* refers to the uppermost level of the executing script itself, and \n", + "- *Built-in* are special names that Python reserves for itself. \n", + "\n", + "So, if a particular name:object mapping cannot be found in the local namespaces, the namespaces of the enclosed scope are being searched next. If the search in the enclosed scope is unsuccessful, too, Python moves on to the global namespace, and eventually, it will search the global namespaces (side note: if a name cannot found in any of the namespaces, a *NameError* will is raised).\n", + "\n", + "**Note**: \n", + "Namespaces can also be further nested, for example if we import modules, or if we are defining new classes. In those cases we have to use prefixes to access those nested namespaces. Let me illustrate this concept in the following code block:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import numpy\n", + "import math\n", + "import scipy\n", + "\n", + "print(math.pi, 'from the math module')\n", + "print(numpy.pi, 'from the numpy package')\n", + "print(scipy.pi, 'from the scipy package')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "3.141592653589793 from the math module\n", + "3.141592653589793 from the numpy package\n", + "3.141592653589793 from the scipy package\n" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(This is also why we have to be careful if we import modules via \"`from a_module import *`\", since it loads the variable names into the global namespace and could potentially overwrite already existing variable names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. LG - Local and Global scopes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Example 1.1** \n", + "As a warm-up exercise, let us first forget about the enclosed (E) and built-in (B) scopes in the LEGB rule and only take a look at LG - the local and global scopes. \n", + "What does the following code print?" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "a_var = 'global variable'\n", + "\n", + "def a_func():\n", + " print(a_var, '[ a_var inside a_func() ]')\n", + "\n", + "a_func()\n", + "print(a_var, '[ a_var outside a_func() ]')" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**a)**\n", + "
raises an error
\n", + "\n", + "**b)** \n", + "
\n",
+      "global value [ a_var outside a_func() ]
\n", + "\n", + "**c)** \n", + "
global value [ a_var in a_func() ]  \n",
+      "global value [ a_var outside a_func() ]
\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[go to solution](#solutions)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Here is why:\n", + "\n", + "We call `a_func()` first, which is supposed to print the value of `a_var`. According to the LEGB rule, the function will first look in its own local scope (L) if `a_var` is defined there. Since `a_func()` does not define its own `a_var`, it will look one-level above in the global scope (G) in which `a_var` has been defined previously.\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Example 1.2** \n", + "Now, let us define the variable `a_var` in the global and the local scope. \n", + "Can you guess what the following code will produce?" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "a_var = 'global value'\n", + "\n", + "def a_func():\n", + " a_var = 'local value'\n", + " print(a_var, '[ a_var inside a_func() ]')\n", + "\n", + "a_func()\n", + "print(a_var, '[ a_var outside a_func() ]')" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**a)**\n", + "
raises an error
\n", + "\n", + "**b)** \n", + "
local value [ a_var in a_func() ]\n",
+      "global value [ a_var outside a_func() ]
\n", + "\n", + "**c)** \n", + "
global value [ a_var in a_func() ]  \n",
+      "global value [ a_var outside a_func() ]
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[go to solution](#solutions)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Here is why:\n", + "\n", + "When we call `a_func()`, it will first look in its local scope (L) for `a_var`, since `a_var` is defined in the local scope of `a_func`, its assigned value `local variable` is printed. Note that this doesn't affect the global variable, which is in a different scope." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "However, it is also possible to modify the global by, e.g., re-assigning a new value to it if we use the global keyword as the following example will illustrate:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "a_var = 'global value'\n", + "\n", + "def a_func():\n", + " global a_var\n", + " a_var = 'local value'\n", + " print(a_var, '[ a_var inside a_func() ]')\n", + "\n", + "print(a_var, '[ a_var outside a_func() ]')\n", + "a_func()\n", + "print(a_var, '[ a_var outside a_func() ]')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "global value [ a_var outside a_func() ]\n", + "local value [ a_var inside a_func() ]\n", + "local value [ a_var outside a_func() ]\n" + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But we have to be careful about the order: it is easy to raise an `UnboundLocalError` if we don't explicitly tell Python that we want to use the global scope and try to modify a variable's value (remember, the right side of an assignment operation is executed first):" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "a_var = 1\n", + "\n", + "def a_func():\n", + " a_var = a_var + 1\n", + " print(a_var, '[ a_var inside a_func() ]')\n", + "\n", + "print(a_var, '[ a_var outside a_func() ]')\n", + "a_func()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "UnboundLocalError", + "evalue": "local variable 'a_var' referenced before assignment", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mUnboundLocalError\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 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma_var\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'[ a_var outside a_func() ]'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0ma_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36ma_func\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0ma_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0ma_var\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0ma_var\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma_var\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'[ a_var inside a_func() ]'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mUnboundLocalError\u001b[0m: local variable 'a_var' referenced before assignment" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1 [ a_var outside a_func() ]\n" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. LEG - Local, Enclosed, and Global scope\n", + "\n", + "\n", + "\n", + "Now, let us introduce the concept of the enclosed (E) scope. Following the order \"Local -> Enclosed -> Global\", can you guess what the following code will print?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Example 2.1**" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "a_var = 'global value'\n", + "\n", + "def outer():\n", + " a_var = 'enclosed value'\n", + " \n", + " def inner():\n", + " a_var = 'local value'\n", + " print(a_var)\n", + " \n", + " inner()\n", + "\n", + "outer()" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**a)**\n", + "
global value
\n", + "\n", + "**b)** \n", + "
enclosed value
\n", + "\n", + "**c)** \n", + "
local value
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[go to solution](#solutions)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Here is why:\n", + "\n", + "Let us quickly recapitulate what we just did: We called `outer()`, which defined the variable `a_var` locally (next to an existing `a_var` in the global scope). Next, the `outer()` function called `inner()`, which in turn defined a variable with of name `a_var` as well. The `print()` function inside `inner()` searched in the local scope first (L->E) before it went up in the scope hierarchy, and therefore it printed the value that was assigned in the local scope." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similar to the concept of the `global` keyword, which we have seen in the section above, we can use the keyword `nonlocal` inside the inner function to explicitely access a variable from the outer (enclosed) scope in order to modify its value. \n", + "Note that the `nonlocal` keyword was added in Python 3.x and is not implemented in Python 2.x (yet)." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "a_var = 'global value'\n", + "\n", + "def outer():\n", + " a_var = 'local value'\n", + " print('outer before:', a_var)\n", + " def inner():\n", + " nonlocal a_var\n", + " a_var = 'inner value'\n", + " print('in inner():', a_var)\n", + " inner()\n", + " print(\"outer after:\", a_var)\n", + "outer()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "outer before: local value\n", + "in inner(): inner value\n", + "outer after: inner value\n" + ] + } + ], + "prompt_number": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. LEGB - Local, Enclosed, Global, Built-in\n", + "\n", + "To wrap up the LEGB rule, let us come to the built-in scope. Here, we will define our \"own\" length-funcion, which happens to bear the same name as the in-built `len()` function. What outcome do you excpect if we'd execute the following code?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Example 3**" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "a_var = 'global variable'\n", + "\n", + "def len(in_var):\n", + " print('called my len() function')\n", + " l = 0\n", + " for i in in_var:\n", + " l += 1\n", + " return l\n", + "\n", + "def a_func(in_var):\n", + " len_in_var = len(in_var)\n", + " print('Input variable is of length', len_in_var)\n", + "\n", + "a_func('Hello, World!')" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**a)**\n", + "
raises an error (conflict with in-built `len()` function)
\n", + "\n", + "**b)** \n", + "
called my len() function\n",
+      "Input variable is of length 13
\n", + "\n", + "**c)** \n", + "
Input variable is of length 13
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[go to solution](#solutions)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Here is why:\n", + "\n", + "Since the exact same names can be used to map names to different objects - as long as the names are in different name spaces - there is no problem of reusing the name `len` to define our own length function (this is just for demonstration pruposes, it is NOT recommended). As we go up in Python's L -> E -> G -> B hierarchy, the function `a_func()` finds `len()` already in the global scope first before it attempts" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Self-assessment exercise" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, after we went through a couple of exercises, let us quickly check where we are. So, one more time: What would the following code print out?" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "a = 'global'\n", + "\n", + "def outer():\n", + " \n", + " def len(in_var):\n", + " print('called my len() function: ', end=\"\")\n", + " l = 0\n", + " for i in in_var:\n", + " l += 1\n", + " return l\n", + " \n", + " a = 'local'\n", + " \n", + " def inner():\n", + " global len\n", + " nonlocal a\n", + " a += ' variable'\n", + " inner()\n", + " print('a is', a)\n", + " print(len(a))\n", + "\n", + "\n", + "outer()\n", + "\n", + "print(len(a))\n", + "print('a is', a)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 59 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[go to solution](#solutions)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Conclusion" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I hope this short tutorial was helpful to understand the basic concept of Python's scope resolution order using the LEGB rule. I want to encourage you (as a little self-assessment exercise) to look at the code snippets again tomorrow and check if you can correctly predict all their outcomes." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### A rule of thumb" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In practice, **it is usually a bad idea to modify global variables inside the function scope**, since it often be the cause of confusion and weird errors that are hard to debug. \n", + "If you want to modify a global variable via a function, it is recommended to pass it as an argument and reassign the return-value. \n", + "For example:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "a_var = 2\n", + "\n", + "def a_func(some_var):\n", + " return 2**3\n", + "\n", + "a_var = a_func(a_var)\n", + "print(a_var)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "8\n" + ] + } + ], + "prompt_number": 42 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solutions\n", + "\n", + "In order to prevent you from unintentional spoilers, I have written the solutions in binary format. In order to display the character representation, you just need to execute the following lines of code:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Example 1.1:', chr(int('01100011',2)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 6 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Example 1.2:', chr(int('01100001',2)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 7 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Example 2.1:', chr(int('01100011',2)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 8 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Example 3.1:', chr(int('01100010',2)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 9 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Execute to run the self-assessment solution\n", + "\n", + "sol = \"000010100110111101110101011101000110010101110010001010\"\\\n", + "\"0000101001001110100000101000001010011000010010000001101001011100110\"\\\n", + "\"0100000011011000110111101100011011000010110110000100000011101100110\"\\\n", + "\"0001011100100110100101100001011000100110110001100101000010100110001\"\\\n", + "\"1011000010110110001101100011001010110010000100000011011010111100100\"\\\n", + "\"1000000110110001100101011011100010100000101001001000000110011001110\"\\\n", + "\"1010110111001100011011101000110100101101111011011100011101000100000\"\\\n", + "\"0011000100110100000010100000101001100111011011000110111101100010011\"\\\n", + "\"0000101101100001110100000101000001010001101100000101001100001001000\"\\\n", + "\"0001101001011100110010000001100111011011000110111101100010011000010\"\\\n", + "\"1101100\"\n", + "\n", + "sol_str =''.join(chr(int(sol[i:i+8], 2)) for i in range(0, len(sol), 8))\n", + "for line in sol_str.split('\\n'):\n", + " print(line)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 58 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Warning: For-loop variables \"leaking\" into the global namespace" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In contrast to some other programming languages, `for-loops` will use the scope they exist in and leave their defined loop-variable behind.\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for a in range(5):\n", + " if a == 4:\n", + " print(a, '-> a in for-loop')\n", + "print(a, '-> a in global')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "4 -> a in for-loop\n", + "4 -> a in global\n" + ] + } + ], + "prompt_number": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**This also applies if we explicitely defined the `for-loop` variable in the global namespace before!** In this case it will rebind the existing variable:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "b = 1\n", + "for b in range(5):\n", + " if b == 4:\n", + " print(b, '-> b in for-loop')\n", + "print(b, '-> b in global')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "4 -> b in for-loop\n", + "4 -> b in global\n" + ] + } + ], + "prompt_number": 9 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, in **Python 3.x**, we can use closures to prevent the for-loop variable to cut into the global namespace. Here is an example (exectuted in Python 3.4):" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "i = 1\n", + "print([i for i in range(5)])\n", + "print(i, '-> i in global')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[0, 1, 2, 3, 4]\n", + "1 -> i in global\n" + ] + } + ], + "prompt_number": 1 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Why did I mention \"Python 3.x\"? Well, as it happens, the same code executed in Python 2.x would print:\n", + "\n", + "
\n",
+      "4 -> i in global\n",
+      "
"
+     ]
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "This goes back to a change that was made in Python 3.x and is described in [What\u2019s New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html) as follows:\n",
+      "\n",
+      "\"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope.\""
+     ]
+    }
+   ],
+   "metadata": {}
+  }
+ ]
+}
\ No newline at end of file
diff --git a/not_so_obvious_python_stuff.ipynb b/not_so_obvious_python_stuff.ipynb
index 9c32267..a17f6dc 100644
--- a/not_so_obvious_python_stuff.ipynb
+++ b/not_so_obvious_python_stuff.ipynb
@@ -1,7 +1,7 @@
 {
  "metadata": {
   "name": "",
-  "signature": "sha256:70671a8e3f32d21b27867ecdc6d80f3b5c10f00339a2fae3860c4db8930dc7c6"
+  "signature": "sha256:08b042706cb433ce1f2446c6b6ac00be197268042e605da41164e7d02562766d"
  },
  "nbformat": 3,
  "nbformat_minor": 0,
@@ -2577,6 +2577,52 @@
      "metadata": {},
      "outputs": []
     },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "#### In Python 3.x for-loop variables don't leak into the global namespace anymore"
+     ]
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "This goes back to a change that was made in Python 3.x and is described in [What\u2019s New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html) as follows:\n",
+      "\n",
+      "\"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope.\""
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "i = 1\n",
+      "print([i for i in range(5)])\n",
+      "print(i, '-> i in global')"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "[0, 1, 2, 3, 4]\n",
+        "1 -> i in global\n"
+       ]
+      }
+     ],
+     "prompt_number": 1
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "In Python 2.x this would print  \n",
+      "`print(4, '-> i in global')`"
+     ]
+    },
     {
      "cell_type": "markdown",
      "metadata": {},
diff --git a/tutorials/scope_resolution_legb_rule.ipynb b/tutorials/scope_resolution_legb_rule.ipynb
index ce414a8..f1924c9 100644
--- a/tutorials/scope_resolution_legb_rule.ipynb
+++ b/tutorials/scope_resolution_legb_rule.ipynb
@@ -1,6 +1,7 @@
 {
  "metadata": {
-  "name": "scope_resolution_legb_rule"
+  "name": "",
+  "signature": "sha256:1e3a847a38ee33d41e745f74fe6b8a143b9aeb47d0a1e3029ea52899d97687cb"
  },
  "nbformat": 3,
  "nbformat_minor": 0,
@@ -1063,7 +1064,7 @@
       "Why did I mention \"Python 3.x\"? Well, as it happens, the same code executed in Python 2.x would print:\n",
       "\n",
       "
\n",
-      "print(4, '-> i in global')\n",
+      "4 -> i in global\n",
       "
"
      ]
     },

From cb5853e6daa293ef3c69ed4432869e7dd4010680 Mon Sep 17 00:00:00 2001
From: rasbt 
Date: Fri, 2 May 2014 16:14:09 -0400
Subject: [PATCH 005/248] output fix for for-loop leak

---
 ...t_so_obvious_python_stuff-checkpoint.ipynb | 57 ++++++++++++++++++-
 ...cope_resolution_legb_rule-checkpoint.ipynb | 10 +++-
 not_so_obvious_python_stuff.ipynb             | 13 ++++-
 tutorials/scope_resolution_legb_rule.ipynb    | 10 +++-
 4 files changed, 85 insertions(+), 5 deletions(-)

diff --git a/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb b/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb
index 9c32267..be8ba25 100644
--- a/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb
+++ b/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb
@@ -1,7 +1,7 @@
 {
  "metadata": {
   "name": "",
-  "signature": "sha256:70671a8e3f32d21b27867ecdc6d80f3b5c10f00339a2fae3860c4db8930dc7c6"
+  "signature": "sha256:3b7a6d43400c23d25d965b726e6fba3db0b9b0d2d0bbad73c96b8857f8eaa7ee"
  },
  "nbformat": 3,
  "nbformat_minor": 0,
@@ -2577,6 +2577,52 @@
      "metadata": {},
      "outputs": []
     },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "#### In Python 3.x for-loop variables don't leak into the global namespace anymore"
+     ]
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "This goes back to a change that was made in Python 3.x and is described in [What\u2019s New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html) as follows:\n",
+      "\n",
+      "\"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope.\""
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "i = 1\n",
+      "print([i for i in range(5)])\n",
+      "print(i, '-> i in global')"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "[0, 1, 2, 3, 4]\n",
+        "1 -> i in global\n"
+       ]
+      }
+     ],
+     "prompt_number": 1
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "In Python 2.x this would print  \n",
+      "`4 -> i in global`"
+     ]
+    },
     {
      "cell_type": "markdown",
      "metadata": {},
@@ -3345,6 +3391,7 @@
      "metadata": {},
      "source": [
       "#### 05/02/2014\n",
+      "- new section in Python 3.x and Python 2.x key differences: for-loop leak<\n",
       "- new section: Metaclasses - What creates a new instance of a class?  \n",
       "\n",
       "#### 05/01/2014\n",
@@ -3354,6 +3401,14 @@
       "- minor fixes of typos  \n",
       "- new section: \"Only the first clause of generators is evaluated immediately\""
      ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [],
+     "language": "python",
+     "metadata": {},
+     "outputs": []
     }
    ],
    "metadata": {}
diff --git a/.ipynb_checkpoints/scope_resolution_legb_rule-checkpoint.ipynb b/.ipynb_checkpoints/scope_resolution_legb_rule-checkpoint.ipynb
index f1924c9..70cbf9d 100644
--- a/.ipynb_checkpoints/scope_resolution_legb_rule-checkpoint.ipynb
+++ b/.ipynb_checkpoints/scope_resolution_legb_rule-checkpoint.ipynb
@@ -1,7 +1,7 @@
 {
  "metadata": {
   "name": "",
-  "signature": "sha256:1e3a847a38ee33d41e745f74fe6b8a143b9aeb47d0a1e3029ea52899d97687cb"
+  "signature": "sha256:eb9ececefb4c35b16d0496c7f613e4a64bb35b2e9f79b7e049c5b434bd2e6654"
  },
  "nbformat": 3,
  "nbformat_minor": 0,
@@ -1076,6 +1076,14 @@
       "\n",
       "\"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope.\""
      ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [],
+     "language": "python",
+     "metadata": {},
+     "outputs": []
     }
    ],
    "metadata": {}
diff --git a/not_so_obvious_python_stuff.ipynb b/not_so_obvious_python_stuff.ipynb
index a17f6dc..be8ba25 100644
--- a/not_so_obvious_python_stuff.ipynb
+++ b/not_so_obvious_python_stuff.ipynb
@@ -1,7 +1,7 @@
 {
  "metadata": {
   "name": "",
-  "signature": "sha256:08b042706cb433ce1f2446c6b6ac00be197268042e605da41164e7d02562766d"
+  "signature": "sha256:3b7a6d43400c23d25d965b726e6fba3db0b9b0d2d0bbad73c96b8857f8eaa7ee"
  },
  "nbformat": 3,
  "nbformat_minor": 0,
@@ -2620,7 +2620,7 @@
      "metadata": {},
      "source": [
       "In Python 2.x this would print  \n",
-      "`print(4, '-> i in global')`"
+      "`4 -> i in global`"
      ]
     },
     {
@@ -3391,6 +3391,7 @@
      "metadata": {},
      "source": [
       "#### 05/02/2014\n",
+      "- new section in Python 3.x and Python 2.x key differences: for-loop leak<\n",
       "- new section: Metaclasses - What creates a new instance of a class?  \n",
       "\n",
       "#### 05/01/2014\n",
@@ -3400,6 +3401,14 @@
       "- minor fixes of typos  \n",
       "- new section: \"Only the first clause of generators is evaluated immediately\""
      ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [],
+     "language": "python",
+     "metadata": {},
+     "outputs": []
     }
    ],
    "metadata": {}
diff --git a/tutorials/scope_resolution_legb_rule.ipynb b/tutorials/scope_resolution_legb_rule.ipynb
index f1924c9..70cbf9d 100644
--- a/tutorials/scope_resolution_legb_rule.ipynb
+++ b/tutorials/scope_resolution_legb_rule.ipynb
@@ -1,7 +1,7 @@
 {
  "metadata": {
   "name": "",
-  "signature": "sha256:1e3a847a38ee33d41e745f74fe6b8a143b9aeb47d0a1e3029ea52899d97687cb"
+  "signature": "sha256:eb9ececefb4c35b16d0496c7f613e4a64bb35b2e9f79b7e049c5b434bd2e6654"
  },
  "nbformat": 3,
  "nbformat_minor": 0,
@@ -1076,6 +1076,14 @@
       "\n",
       "\"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope.\""
      ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [],
+     "language": "python",
+     "metadata": {},
+     "outputs": []
     }
    ],
    "metadata": {}

From 34175c785a150611fd08e646da5f6f9a875341a7 Mon Sep 17 00:00:00 2001
From: rasbt 
Date: Sat, 3 May 2014 14:51:53 -0400
Subject: [PATCH 006/248] 2 new sections

---
 ...t_so_obvious_python_stuff-checkpoint.ipynb | 560 +++++++++++++++++-
 not_so_obvious_python_stuff.ipynb             | 560 +++++++++++++++++-
 2 files changed, 1112 insertions(+), 8 deletions(-)

diff --git a/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb b/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb
index be8ba25..1e0ef3c 100644
--- a/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb
+++ b/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb
@@ -1,7 +1,7 @@
 {
  "metadata": {
   "name": "",
-  "signature": "sha256:3b7a6d43400c23d25d965b726e6fba3db0b9b0d2d0bbad73c96b8857f8eaa7ee"
+  "signature": "sha256:0e1c6e74b301e23ea4146d660afb3f07765686c6c7fa4752f3a4495da7949787"
  },
  "nbformat": 3,
  "nbformat_minor": 0,
@@ -13,7 +13,7 @@
      "metadata": {},
      "source": [
       "Sebastian Raschka  \n",
-      "last updated: 05/02/2014 ([Changelog](#changelog))\n",
+      "last updated: 05/03/2014 ([Changelog](#changelog))\n",
       "\n",
       "[Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb)\n",
       "\n",
@@ -83,7 +83,9 @@
       "- [Assigning types to variables as values](#variable_types)\n",
       "- [Only the first clause of generators is evaluated immediately](#generator_rhs)\n",
       "- [Keyword argument unpacking syntax - `*args`  and `**kwargs`](#splat_op)\n",
-      "- [Metaclasses - What creates a new instance of a class?](#new_instance)"
+      "- [Metaclasses - What creates a new instance of a class?](#new_instance)\n",
+      "- [Else-clauses: \"conditional else\" and \"completion else\"](#else_clauses)\n",
+      "- [Interning of compile-time constants vs. run-time expressions](#string_interning)"
      ]
     },
     {
@@ -3278,6 +3280,13 @@
       "## Metaclasses - What creates a new instance of a class?"
      ]
     },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "[[back to top](#sections)]"
+     ]
+    },
     {
      "cell_type": "markdown",
      "metadata": {},
@@ -3361,6 +3370,545 @@
      ],
      "prompt_number": 54
     },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "for i in range(5):\n",
+      "    if i == 1:\n",
+      "        print('in for')\n",
+      "else:\n",
+      "    print('in else')\n",
+      "print('after for-loop')"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "in for\n",
+        "in else\n",
+        "after for-loop\n"
+       ]
+      }
+     ],
+     "prompt_number": 5
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "for i in range(5):\n",
+      "    if i == 1:\n",
+      "        break\n",
+      "else:\n",
+      "    print('in else')\n",
+      "print('after for-loop')"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "after for-loop\n"
+       ]
+      }
+     ],
+     "prompt_number": 6
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "\n",
+      "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Else-clauses: \"conditional else\" and \"completion else\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I would claim that the conditional \"else\" is every programmer's daily bread and butter. However, there is a second flavor of \"else\"-clauses in Python, which I will call \"completion else\" (for reason that will become clear later). \n", + "But first, let us take a look at our \"traditional\" conditional else that we all are familiar with. \n", + "### Conditional else:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# conditional else\n", + "\n", + "a_list = [1,2]\n", + "if a_list[0] == 1:\n", + " print('Hello, World!')\n", + "else:\n", + " print('Bye, World!')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Hello, World!\n" + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# conditional else\n", + "\n", + "a_list = [1,2]\n", + "if a_list[0] == 2:\n", + " print('Hello, World!')\n", + "else:\n", + " print('Bye, World!')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Bye, World!\n" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Why am I showing those simple examples? I think they are good to highlight some of the key points: It is **either** the code under the `if` clause that is executed, **or** the code under the `else` block, but not both. \n", + "If the condition of the `if` clause evaluates to `True`, the `if`-block is exectured, and if it evaluated to `False`, it is the `else` block. \n", + "\n", + "### Completion else\n", + "**In contrast** to the **either...or*** situation that we know from the conditional `else`, the completion `else` is executed if a code block finished. \n", + "To show you an example, let us use `else` for error-handling:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Completion else (try-except)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "try:\n", + " print('first element:', a_list[0])\n", + "except IndexError:\n", + " print('raised IndexError')\n", + "else:\n", + " print('no error in try-block')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "first element: 1\n", + "no error in try-block\n" + ] + } + ], + "prompt_number": 5 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "try:\n", + " print('third element:', a_list[2])\n", + "except IndexError:\n", + " print('raised IndexError')\n", + "else:\n", + " print('no error in try-block')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "raised IndexError\n" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "In the code above, we can see that the code under the **`else`-clause is only executed if the `try-block` was executed without encountering an error, i.e., if the `try`-block is \"complete\".** \n", + "The same rule applies to the \"completion\" `else` in while- and for-loops, which you can confirm in the following samples below." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Completion else (while-loop)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "i = 0\n", + "while i < 2:\n", + " print(i)\n", + " i += 1\n", + "else:\n", + " print('in else')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "0\n", + "1\n", + "in else\n" + ] + } + ], + "prompt_number": 7 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "i = 0\n", + "while i < 2:\n", + " print(i)\n", + " i += 1\n", + " break\n", + "else:\n", + " print('completed while-loop')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "0\n" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Completion else (for-loop)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for i in range(2):\n", + " print(i)\n", + "else:\n", + " print('completed for-loop')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "0\n", + "1\n", + "completed for-loop\n" + ] + } + ], + "prompt_number": 9 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for i in range(2):\n", + " print(i)\n", + " break\n", + "else:\n", + " print('completed for-loop')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "0\n" + ] + } + ], + "prompt_number": 10 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Interning of compile-time constants vs. run-time expressions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This might not be particularly useful, but it is nonetheless interesting: Python's interpreter is interning compile-time constants but not run-time expressions (note that this is implementation-specific).\n", + "\n", + "(Original source: [Stackoverflow](http://stackoverflow.com/questions/15541404/python-string-interning))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us have a look at the simple example below. Here we are creating 3 variables and assign the value \"Hello\" to them in different ways before we test them for identity." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "hello1 = 'Hello'\n", + "\n", + "hello2 = 'Hell' + 'o'\n", + "\n", + "hello3 = 'Hell'\n", + "hello3 = hello3 + 'o'\n", + "\n", + "print('hello1 is hello2:', hello1 is hello2)\n", + "print('hello1 is hello3:', hello1 is hello3)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "hello1 is hello2: True\n", + "hello1 is hello3: False\n" + ] + } + ], + "prompt_number": 34 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, how does it come that the first expression evaluates to true, but the second does not? To answer this question, we need to take a closer look at the underlying byte codes:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import dis\n", + "def hello1_func():\n", + " s = 'Hello'\n", + " return s\n", + "dis.dis(hello1_func)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " 3 0 LOAD_CONST 1 ('Hello')\n", + " 3 STORE_FAST 0 (s)\n", + "\n", + " 4 6 LOAD_FAST 0 (s)\n", + " 9 RETURN_VALUE\n" + ] + } + ], + "prompt_number": 38 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def hello2_func():\n", + " s = 'Hell' + 'o'\n", + " return s\n", + "dis.dis(hello2_func)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " 2 0 LOAD_CONST 3 ('Hello')\n", + " 3 STORE_FAST 0 (s)\n", + "\n", + " 3 6 LOAD_FAST 0 (s)\n", + " 9 RETURN_VALUE\n" + ] + } + ], + "prompt_number": 39 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def hello3_func():\n", + " s = 'Hell'\n", + " s = s + 'o'\n", + " return s\n", + "dis.dis(hello3_func)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " 2 0 LOAD_CONST 1 ('Hell')\n", + " 3 STORE_FAST 0 (s)\n", + "\n", + " 3 6 LOAD_FAST 0 (s)\n", + " 9 LOAD_CONST 2 ('o')\n", + " 12 BINARY_ADD\n", + " 13 STORE_FAST 0 (s)\n", + "\n", + " 4 16 LOAD_FAST 0 (s)\n", + " 19 RETURN_VALUE\n" + ] + } + ], + "prompt_number": 40 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "It looks like that `'Hello'` and `'Hell'` + `'o'` are both evaluated and stored as `'Hello'` at compile-time, whereas the third version \n", + "`s = 'Hell'` \n", + "`s = s + 'o'` seems to be not interned. Let us quickly confirm the behavior with the following code:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print(hello1_func() is hello2_func())\n", + "print(hello1_func() is hello3_func())" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "True\n", + "False\n" + ] + } + ], + "prompt_number": 42 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, to show that this hypothesis is the answer to this rather unexpected observation, let us `intern` the value manually:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import sys\n", + "\n", + "print(hello1_func() is sys.intern(hello3_func()))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "True\n" + ] + } + ], + "prompt_number": 45 + }, { "cell_type": "markdown", "metadata": {}, @@ -3390,8 +3938,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "#### 05/03/2014\n", + "- new section: else clauses: conditional vs. completion\n", + "- new section: Interning of compile-time constants vs. run-time expressions\n", + "\n", "#### 05/02/2014\n", - "- new section in Python 3.x and Python 2.x key differences: for-loop leak<\n", + "- new section in Python 3.x and Python 2.x key differences: for-loop leak\n", "- new section: Metaclasses - What creates a new instance of a class? \n", "\n", "#### 05/01/2014\n", diff --git a/not_so_obvious_python_stuff.ipynb b/not_so_obvious_python_stuff.ipynb index be8ba25..1e0ef3c 100644 --- a/not_so_obvious_python_stuff.ipynb +++ b/not_so_obvious_python_stuff.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:3b7a6d43400c23d25d965b726e6fba3db0b9b0d2d0bbad73c96b8857f8eaa7ee" + "signature": "sha256:0e1c6e74b301e23ea4146d660afb3f07765686c6c7fa4752f3a4495da7949787" }, "nbformat": 3, "nbformat_minor": 0, @@ -13,7 +13,7 @@ "metadata": {}, "source": [ "Sebastian Raschka \n", - "last updated: 05/02/2014 ([Changelog](#changelog))\n", + "last updated: 05/03/2014 ([Changelog](#changelog))\n", "\n", "[Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb)\n", "\n", @@ -83,7 +83,9 @@ "- [Assigning types to variables as values](#variable_types)\n", "- [Only the first clause of generators is evaluated immediately](#generator_rhs)\n", "- [Keyword argument unpacking syntax - `*args` and `**kwargs`](#splat_op)\n", - "- [Metaclasses - What creates a new instance of a class?](#new_instance)" + "- [Metaclasses - What creates a new instance of a class?](#new_instance)\n", + "- [Else-clauses: \"conditional else\" and \"completion else\"](#else_clauses)\n", + "- [Interning of compile-time constants vs. run-time expressions](#string_interning)" ] }, { @@ -3278,6 +3280,13 @@ "## Metaclasses - What creates a new instance of a class?" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -3361,6 +3370,545 @@ ], "prompt_number": 54 }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for i in range(5):\n", + " if i == 1:\n", + " print('in for')\n", + "else:\n", + " print('in else')\n", + "print('after for-loop')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "in for\n", + "in else\n", + "after for-loop\n" + ] + } + ], + "prompt_number": 5 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for i in range(5):\n", + " if i == 1:\n", + " break\n", + "else:\n", + " print('in else')\n", + "print('after for-loop')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "after for-loop\n" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Else-clauses: \"conditional else\" and \"completion else\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I would claim that the conditional \"else\" is every programmer's daily bread and butter. However, there is a second flavor of \"else\"-clauses in Python, which I will call \"completion else\" (for reason that will become clear later). \n", + "But first, let us take a look at our \"traditional\" conditional else that we all are familiar with. \n", + "### Conditional else:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# conditional else\n", + "\n", + "a_list = [1,2]\n", + "if a_list[0] == 1:\n", + " print('Hello, World!')\n", + "else:\n", + " print('Bye, World!')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Hello, World!\n" + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# conditional else\n", + "\n", + "a_list = [1,2]\n", + "if a_list[0] == 2:\n", + " print('Hello, World!')\n", + "else:\n", + " print('Bye, World!')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Bye, World!\n" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Why am I showing those simple examples? I think they are good to highlight some of the key points: It is **either** the code under the `if` clause that is executed, **or** the code under the `else` block, but not both. \n", + "If the condition of the `if` clause evaluates to `True`, the `if`-block is exectured, and if it evaluated to `False`, it is the `else` block. \n", + "\n", + "### Completion else\n", + "**In contrast** to the **either...or*** situation that we know from the conditional `else`, the completion `else` is executed if a code block finished. \n", + "To show you an example, let us use `else` for error-handling:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Completion else (try-except)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "try:\n", + " print('first element:', a_list[0])\n", + "except IndexError:\n", + " print('raised IndexError')\n", + "else:\n", + " print('no error in try-block')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "first element: 1\n", + "no error in try-block\n" + ] + } + ], + "prompt_number": 5 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "try:\n", + " print('third element:', a_list[2])\n", + "except IndexError:\n", + " print('raised IndexError')\n", + "else:\n", + " print('no error in try-block')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "raised IndexError\n" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "In the code above, we can see that the code under the **`else`-clause is only executed if the `try-block` was executed without encountering an error, i.e., if the `try`-block is \"complete\".** \n", + "The same rule applies to the \"completion\" `else` in while- and for-loops, which you can confirm in the following samples below." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Completion else (while-loop)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "i = 0\n", + "while i < 2:\n", + " print(i)\n", + " i += 1\n", + "else:\n", + " print('in else')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "0\n", + "1\n", + "in else\n" + ] + } + ], + "prompt_number": 7 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "i = 0\n", + "while i < 2:\n", + " print(i)\n", + " i += 1\n", + " break\n", + "else:\n", + " print('completed while-loop')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "0\n" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Completion else (for-loop)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for i in range(2):\n", + " print(i)\n", + "else:\n", + " print('completed for-loop')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "0\n", + "1\n", + "completed for-loop\n" + ] + } + ], + "prompt_number": 9 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for i in range(2):\n", + " print(i)\n", + " break\n", + "else:\n", + " print('completed for-loop')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "0\n" + ] + } + ], + "prompt_number": 10 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Interning of compile-time constants vs. run-time expressions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This might not be particularly useful, but it is nonetheless interesting: Python's interpreter is interning compile-time constants but not run-time expressions (note that this is implementation-specific).\n", + "\n", + "(Original source: [Stackoverflow](http://stackoverflow.com/questions/15541404/python-string-interning))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us have a look at the simple example below. Here we are creating 3 variables and assign the value \"Hello\" to them in different ways before we test them for identity." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "hello1 = 'Hello'\n", + "\n", + "hello2 = 'Hell' + 'o'\n", + "\n", + "hello3 = 'Hell'\n", + "hello3 = hello3 + 'o'\n", + "\n", + "print('hello1 is hello2:', hello1 is hello2)\n", + "print('hello1 is hello3:', hello1 is hello3)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "hello1 is hello2: True\n", + "hello1 is hello3: False\n" + ] + } + ], + "prompt_number": 34 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, how does it come that the first expression evaluates to true, but the second does not? To answer this question, we need to take a closer look at the underlying byte codes:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import dis\n", + "def hello1_func():\n", + " s = 'Hello'\n", + " return s\n", + "dis.dis(hello1_func)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " 3 0 LOAD_CONST 1 ('Hello')\n", + " 3 STORE_FAST 0 (s)\n", + "\n", + " 4 6 LOAD_FAST 0 (s)\n", + " 9 RETURN_VALUE\n" + ] + } + ], + "prompt_number": 38 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def hello2_func():\n", + " s = 'Hell' + 'o'\n", + " return s\n", + "dis.dis(hello2_func)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " 2 0 LOAD_CONST 3 ('Hello')\n", + " 3 STORE_FAST 0 (s)\n", + "\n", + " 3 6 LOAD_FAST 0 (s)\n", + " 9 RETURN_VALUE\n" + ] + } + ], + "prompt_number": 39 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def hello3_func():\n", + " s = 'Hell'\n", + " s = s + 'o'\n", + " return s\n", + "dis.dis(hello3_func)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " 2 0 LOAD_CONST 1 ('Hell')\n", + " 3 STORE_FAST 0 (s)\n", + "\n", + " 3 6 LOAD_FAST 0 (s)\n", + " 9 LOAD_CONST 2 ('o')\n", + " 12 BINARY_ADD\n", + " 13 STORE_FAST 0 (s)\n", + "\n", + " 4 16 LOAD_FAST 0 (s)\n", + " 19 RETURN_VALUE\n" + ] + } + ], + "prompt_number": 40 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "It looks like that `'Hello'` and `'Hell'` + `'o'` are both evaluated and stored as `'Hello'` at compile-time, whereas the third version \n", + "`s = 'Hell'` \n", + "`s = s + 'o'` seems to be not interned. Let us quickly confirm the behavior with the following code:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print(hello1_func() is hello2_func())\n", + "print(hello1_func() is hello3_func())" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "True\n", + "False\n" + ] + } + ], + "prompt_number": 42 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, to show that this hypothesis is the answer to this rather unexpected observation, let us `intern` the value manually:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import sys\n", + "\n", + "print(hello1_func() is sys.intern(hello3_func()))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "True\n" + ] + } + ], + "prompt_number": 45 + }, { "cell_type": "markdown", "metadata": {}, @@ -3390,8 +3938,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "#### 05/03/2014\n", + "- new section: else clauses: conditional vs. completion\n", + "- new section: Interning of compile-time constants vs. run-time expressions\n", + "\n", "#### 05/02/2014\n", - "- new section in Python 3.x and Python 2.x key differences: for-loop leak<\n", + "- new section in Python 3.x and Python 2.x key differences: for-loop leak\n", "- new section: Metaclasses - What creates a new instance of a class? \n", "\n", "#### 05/01/2014\n", From d294ad30783e42d63d699cb82826e3e5a7ed54ac Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 4 May 2014 17:12:18 -0400 Subject: [PATCH 007/248] images for least squares fit --- Images/least_squares_perpendicular.png | Bin 0 -> 17989 bytes Images/least_squares_vertical.png | Bin 0 -> 13512 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Images/least_squares_perpendicular.png create mode 100644 Images/least_squares_vertical.png diff --git a/Images/least_squares_perpendicular.png b/Images/least_squares_perpendicular.png new file mode 100644 index 0000000000000000000000000000000000000000..a0d425f79ef5403d7df7c07d0d3b4cf9f74aff9e GIT binary patch literal 17989 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 JszeL|{~yUs40Zqj literal 0 HcmV?d00001 diff --git a/Images/least_squares_vertical.png b/Images/least_squares_vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..11629732bef9e432dae3cea704fb471f0dc616ee GIT binary patch literal 13512 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 literal 0 HcmV?d00001 From 8c1e8d4efca90b9af073ea287bf140a567f140e0 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 4 May 2014 18:57:02 -0400 Subject: [PATCH 008/248] first commit --- .../cython_least_squares-checkpoint.ipynb | 1255 ++++++++++ benchmarks/ccy_classic_lstsqr.c | 2203 +++++++++++++++++ benchmarks/ccy_classic_lstsqr.pyx | 10 + benchmarks/cython_least_squares.ipynb | 1255 ++++++++++ benchmarks/setup.py | 9 + 5 files changed, 4732 insertions(+) create mode 100644 benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb create mode 100644 benchmarks/ccy_classic_lstsqr.c create mode 100644 benchmarks/ccy_classic_lstsqr.pyx create mode 100644 benchmarks/cython_least_squares.ipynb create mode 100644 benchmarks/setup.py diff --git a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb new file mode 100644 index 0000000..ac28769 --- /dev/null +++ b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb @@ -0,0 +1,1255 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:e0aeebc5816e30eb2937ee4b331a3885fbaf1583183823ad07fb79e368b90290" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Sebastian Raschka](www.sebastianraschka.com) \n", + "last updated: 05/04/2014\n", + "\n", + "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb) \n", + "- [Link to the GitHub repository](https://github.com/rasbt/python_reference)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### All code was executed in Python 3.4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "I am really looking forward to your comments and suggestions to improve and \n", + "extend this little collection! Just send me a quick note \n", + "via Twitter: [@rasbt](https://twitter.com/rasbt) \n", + "or Email: [bluewoodtree@gmail.com](mailto:bluewoodtree@gmail.com)\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Implementing the least squares fit method for linear regression and speeding it up via Cython" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#Sections" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- [Introduction](#introduction)\n", + "- [Least squares fit implementations](#implementations)\n", + "- [Generating sample data and benchmarking](#sample_data)\n", + "- [Compiling the Python code via Cython in the IPython notebook](#cython_nb)\n", + "- [Bonus: How to use Cython without the IPython magic](#cython_bonus)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Linear regression via the least squares method is the simplest approach to performing a regression analysis of a dependent and a explanatory variable. The objective is to find the best-fitting straight line through a set of points that minimizes the sum of the squared offsets from the line. \n", + "The offsets come in 2 different flavors: perpendicular and vertical - with respect to the line. \n", + "![](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/least_squares_vertical.png) \n", + "![](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/least_squares_perpendicular.png) \n", + "\n", + "Here, we will use the more common approach: minimizing the sum of the perpendicular offsets.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In more mathematical terms, our goal is to compute the best fit to *n* points $(x_i, y_i)$ with $i=1,2,...n,$ via linear equation of the form \n", + "$f(x) = a\\cdot x + b$. \n", + "Here, we assume that the y-component is functionally dependent on the x-component. \n", + "In a cartesian coordinate system, $b$ is the intercept of the straight line with the y-axis, and $a$ is the slope of this line." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to obtain the parameters for the linear regression line for a set of multiple points, we can re-write the problem as matrix equation \n", + "$\\pmb X \\; \\pmb a = \\pmb y$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$\\Rightarrow\\Bigg[ \\begin{array}{cc}\n", + "x_1 & 1 \\\\\n", + "... & 1 \\\\\n", + "x_n & 1 \\end{array} \\Bigg]$\n", + "$\\bigg[ \\begin{array}{c}\n", + "a \\\\\n", + "b \\end{array} \\bigg]$\n", + "$=\\Bigg[ \\begin{array}{c}\n", + "y_1 \\\\\n", + "... \\\\\n", + "y_n \\end{array} \\Bigg]$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With a little bit of calculus, we can rearrange the term in order to obtain the parameter vector $\\pmb a = [a\\;b]^T$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$\\Rightarrow \\pmb a = (\\pmb X^T \\; \\pmb X)^{-1} \\pmb X^T \\; \\pmb y$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "The more classic approach to obtain the slope parameter $a$ and y-axis intercept $b$ would be:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$a = \\frac{S_{x,y}}{\\sigma_{x}^{2}}\\quad$ (slope)\n", + "\n", + "\n", + "$b = \\bar{y} - a\\bar{x}\\quad$ (y-axis intercept)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where \n", + "\n", + "\n", + "$S_{xy} = \\sum_{i=1}^{n} (x_i - \\bar{x})(y_i - \\bar{y})\\quad$ (covariance)\n", + "\n", + "\n", + "$\\sigma{_x}^{2} = \\sum_{i=1}^{n} (x_i - \\bar{x})^2\\quad$ (variance)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Least squares fit implementations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. The matrix approach" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, let us implement the equation:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$\\pmb a = (\\pmb X^T \\; \\pmb X)^{-1} \\pmb X^T \\; \\pmb y$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which I will refer to as the \"matrix approach\"." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import numpy as np\n", + "\n", + "def lin_lstsqr_mat(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " X = np.vstack([x, np.ones(len(x))]).T\n", + " return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. The classic approach" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we will calculate the parameters separately, using only standard library functions in Python, which I will call the \"classic approach\"." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$a = \\frac{S_{x,y}}{\\sigma_{x}^{2}}\\quad$ (slope)\n", + "\n", + "\n", + "$b = \\bar{y} - a\\bar{x}\\quad$ (y-axis intercept)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def classic_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Using the lstsq numpy function" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For our convenience, `numpy` has a function that can also compute the leat squares solution of a linear matrix equation. For more information, please refer to the [documentation](http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html)." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def numpy_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " X = np.vstack([x, np.ones(len(x))]).T\n", + " return np.linalg.lstsq(X,y)[0]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Using the linregress scipy function" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The last approach is using `scipy.stats.linregress()`, which returns a tuple of 5 different attributes, where the 1st value in the tuple is the slope, and the second value is the y-axis intercept, respectively. The documentation for this function can be found [here](http://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.stats.linregress.html)." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import scipy.stats\n", + "\n", + "def scipy_lstsqr(x,y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " return scipy.stats.linregress(x, y)[0:2]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Generating sample data and benchmarking" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to test our different least squares fit implementation, we will generate some sample data:\n", + "- 500 sample points for the x-component within the range [0,500) \n", + "- 500 sample points for the y-component within the range [100,600) \n", + "\n", + "where each sample point is multiplied by a random value within\n", + "the range [0.8, 12)." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import random\n", + "random.seed(12345)\n", + "\n", + "x = [x_i*random.randrange(8,12)/10 for x_i in range(500)]\n", + "y = [y_i*random.randrange(8,12)/10 for y_i in range(100,600)]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "#### Visualization" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To check how our dataset is distributed, and how the straight line, which we obtain via the least square fit method, we will plot it in a scatter plot. \n", + "Note that we are using our \"matrix approach\" here for simplicity, but after plotting the data, we will check whether all of the four different implementations yield the same parameters." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline\n", + "from matplotlib import pyplot as plt\n", + "\n", + "slope, intercept = lin_lstsqr_mat(x, y)\n", + "\n", + "line_x = [round(min(x)) - 1, round(max(x)) + 1]\n", + "line_y = [slope*x_i + intercept for x_i in line_x]\n", + "\n", + "plt.figure(figsize=(8,8))\n", + "plt.scatter(x,y)\n", + "plt.plot(line_x, line_y, color='red', lw='2')\n", + "\n", + "plt.ylabel('y')\n", + "plt.xlabel('x')\n", + "plt.title('Linear regression via least squares fit')\n", + "\n", + "ftext = 'y = ax + b = {:.3f} + {:.3f}x'\\\n", + " .format(slope, intercept)\n", + "plt.figtext(.15,.8, ftext, fontsize=11, ha='left')\n", + "\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" + ] + }, + { + "output_type": "stream", + "stream": "stderr", + "text": [ + "WARNING: pylab import has clobbered these variables: ['random']\n", + "`%matplotlib` prevents importing * from pylab and numpy\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nRUdHU7duXf0+np6erz3CliQZg7W1tfwyWsTl5TDIkmQM+ZLo1Wo1W7duzfLZ39fpiPU8X19frl+/\nnucxSpIkSVJB5ePjw7Vr13K0b75cut+xYwc1atTAxcUF0J3FP+tZGhMTQ4kSJQDw8PDI8BzynTt3\n8PDwyFDW9evX9Y/2vIk/M2bMMHoMsv2y7bL9sv2y/fn7k5sT3HxJ9OvWrdNftgfo0KEDq1atAmDV\nqlV06tRJv3z9+vWo1Wpu3rzJ1atXqV27dn6EKEmSJElFksEv3SclJbFnzx6+//57/bLJkyfTvXt3\nQkJC9I/Xge456O7du+uHwfz2229lRxhJkiRJygWDJ3obG5sMYz2DbljIPXv2ZLn91KlTsxzeVNJp\n0qSJsUMwqje5/W9y20G2X7a/ibFDKLQMOmCOISgUCgpZyJIkSZKUK7nJfXIIXEmSJEkqwmSilyRJ\nkqQiTCZ6SZIkSSrCZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIkwmekmSJEkqwmSilyRJkqQiTCZ6\nSZIkSSrCZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIkwmekmSJEkqwmSilyRJkqQiTCZ6SZIkSSrC\nZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIszM2AFIkiRJWYuNjWXHjh2YmJjQtm1bnJycjB2SVAgp\nhBDC2EFkh0KhoJCFLEmSlG03btygdu1AUlLqAOnY2p7nzJkjuLu750v9f/75JzNnzichIYn+/bvQ\nv3/ffKlXylpucp88o5ckSSqAJk78mEePRqDVfgRAauqHTJv2KStWfGvwuv/880/q1GlCSso0wINj\nxz7m8eMERo9+z+B1S3lP3qOXJEkqgKKi7qHV1tC/Tk+vwe3bdw1e78OHDwkMbEVKyhBgAtADlWo1\n8+d/Y/C6AU6cOMHIkWMZO/Z9/v7773yps6iTiV6SJKkAatWqMUrlF8Bj4CFK5Ve0bh1o8HqnTp1N\nQoInYPrcUpN8uWW6f/9+mjZtz7JlJVm8WEmtWo25ePGiwest6mSilyRJKoA+/ngy77zjg6lpCczM\nPBgwoA7jx482eL2XLt1Aq+0P/AB8A/yCiUkPxo4dZvC6P/poHirVV8BkhJhNUtJ4Pv98scHrLepk\nopckSSqAzM3NWb36O1JTVaSkJPHttwsxMTH8n+yGDWtgbb0bCAMOYGLyPs2a+TNx4liD152cnAIU\n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\nYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "#### Comparing the results from the different implementations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As mentioned above, let us confirm that the different implementation computed the same parameters (i.e., slope and y-axis intercept) as solution for the linear equation." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import prettytable\n", + "\n", + "params = [appr(x,y) for appr in [lin_lstsqr_mat, classic_lstsqr, numpy_lstsqr, scipy_lstsqr]]\n", + "\n", + "print(params)\n", + "\n", + "fit_table = prettytable.PrettyTable([\"\", \"slope\", \"y-intercept\"])\n", + "fit_table.add_row([\"matrix approach\", params[0][0], params[0][1]])\n", + "fit_table.add_row([\"classic approach\", params[1][0], params[1][1]])\n", + "fit_table.add_row([\"numpy function\", params[2][0], params[2][1]])\n", + "fit_table.add_row([\"scipy function\", params[3][0], params[3][1]])\n", + "\n", + "print(fit_table)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[array([ 0.95181895, 107.01399744]), (0.95181895319126741, 107.01399744459181), array([ 0.95181895, 107.01399744]), (0.95181895319126764, 107.01399744459175)]\n", + "+------------------+----------------+---------------+\n", + "| | slope | y-intercept |\n", + "+------------------+----------------+---------------+\n", + "| matrix approach | 0.951818953191 | 107.013997445 |\n", + "| classic approach | 0.951818953191 | 107.013997445 |\n", + "| numpy function | 0.951818953191 | 107.013997445 |\n", + "| scipy function | 0.951818953191 | 107.013997445 |\n", + "+------------------+----------------+---------------+\n" + ] + } + ], + "prompt_number": 9 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "#### Initial performance comparison" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a first impression how the performances of the different least squares implementations compare against each other, let us do a quick benchmark using the `timeit` module via IPython's `%timeit` magic." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "\n", + "for lab,appr in zip([\"matrix approach\",\"classic approach\",\n", + " \"numpy function\",\"scipy function\"],\n", + " [lin_lstsqr_mat, classic_lstsqr, \n", + " numpy_lstsqr, scipy_lstsqr]):\n", + " print(\"\\n{}: \".format(lab), end=\"\")\n", + " %timeit appr(x, y)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "matrix approach: 1000 loops, best of 3: 270 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "classic approach: 100 loops, best of 3: 2.83 ms per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "numpy function: 1000 loops, best of 3: 372 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "scipy function: 1000 loops, best of 3: 594 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 10 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "The timing above indicates, that the \"classic\" approach (Python's standard library functions only) is significantly worse in performance than the other implemenations - roughly by a magnitude of 10." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Compiling the Python code via Cython in the IPython notebook" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Maybe we can speed things up a little bit via [Cython's C-extensions for Python](http://cython.org). Cython is basically a hybrid between C and Python and can be pictured as compiled Python code with type declarations. \n", + "Since we are working in an IPython notebook here, we can make use of the IPython magic: It will automatically convert it to C code, compile it, and load the function. \n", + "Just to be thorough, let us also compile the other functions, which already use numpy objects." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%load_ext cythonmagic" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 15 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "import numpy as np\n", + "import scipy.stats\n", + "cimport numpy as np\n", + "\n", + "def cy_lin_lstsqr_mat(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " X = np.vstack([x, np.ones(len(x))]).T\n", + " return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)\n", + "\n", + "def cy_classic_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)\n", + "\n", + "def cy_numpy_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " X = np.vstack([x, np.ones(len(x))]).T\n", + " return np.linalg.lstsq(X,y)[0]\n", + "\n", + "def cy_scipy_lstsqr(x,y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " return scipy.stats.linregress(x, y)[0:2]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 16 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Comparing the compiled Cython code to the original Python code" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "\n", + "for lab,appr in zip([\"matrix approach\",\"classic approach\",\n", + " \"numpy function\",\"scipy function\"],\n", + " [(lin_lstsqr_mat, cy_lin_lstsqr_mat), \n", + " (classic_lstsqr, cy_classic_lstsqr),\n", + " (numpy_lstsqr, cy_numpy_lstsqr),\n", + " (scipy_lstsqr, cy_scipy_lstsqr)]):\n", + " print(\"\\n\\n{}: \".format(lab))\n", + " %timeit appr[0](x, y)\n", + " %timeit appr[1](x, y)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "matrix approach: \n", + "1000 loops, best of 3: 274 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "1000 loops, best of 3: 260 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "\n", + "classic approach: \n", + "100 loops, best of 3: 2.82 ms per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "1000 loops, best of 3: 212 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "\n", + "numpy function: \n", + "1000 loops, best of 3: 379 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "1000 loops, best of 3: 370 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "\n", + "scipy function: \n", + "1000 loops, best of 3: 608 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "100 loops, best of 3: 613 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 17 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "As we've seen before, our \"classic\" implementation of the least square method is pretty slow compared to using numpy's functions. This is not surprising, since numpy is highly optmized and uses compiled C/C++ and Fortran code already. This explains why there is no significant difference if we used Cython to compile the numpy-objects-containing functions. \n", + "However, we were able to speed up the \"classic approach\" quite significantly, roughly by 1500%.\n", + "\n", + "The following 2 code blocks are just to visualize our results in a bar plot." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "\n", + "funcs = ['classic_lstsqr', 'cy_classic_lstsqr', \n", + " 'lin_lstsqr_mat', 'numpy_lstsqr', 'scipy_lstsqr']\n", + "labels = ['classic approach','classic approach (cython)', \n", + " 'matrix approach', 'numpy function', 'scipy function']\n", + "\n", + "times = [timeit.Timer('%s(x,y)' %f, \n", + " 'from __main__ import %s, x, y' %f).timeit(1000)\n", + " for f in funcs]\n", + "\n", + "times_rel = [times[0]/times[i+1] for i in range(len(times[1:]))]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 18 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline\n", + "import matplotlib.pyplot as plt\n", + "\n", + "x_pos = np.arange(len(funcs))\n", + "plt.bar(x_pos, times, align='center', alpha=0.5)\n", + "plt.xticks(x_pos, labels, rotation=45)\n", + "plt.ylabel('time in ms')\n", + "plt.title('Performance of different least square fit implementations')\n", + "plt.show()\n", + "\n", + "x_pos = np.arange(len(funcs[1:]))\n", + "plt.bar(x_pos, times_rel, align='center', alpha=0.5, color=\"green\")\n", + "plt.xticks(x_pos, labels[1:], rotation=45)\n", + "plt.ylabel('relative performance gain')\n", + "plt.title('Performance gain compared to the classic least square implementation')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nu3r1Kn355ZdERJSQkECHDx8WlldUVBTVrl1beNBs9+7dFB8fr7dY9Y0Tgh4V7VCOHDlC8+bNo7Vr\n11JGRgbJ5XLq378/jRo1ik6cOEGenp7CU5NvgtTUVNq8ebPQffLkSRowYIDQXVZSHDFihE7nUdG0\nIyIiyM/Pj9555x1as2YNXbt2jXbu3EkSiYTGjRtHQUFBwhFodZednU1dunQRmk2OHTtG9vb2tHLl\nSiIqaGo5duwYNW3alAYNGlQjmi2fPHlCfn5+dPbsWXr69ClNmTKFxowZQ0ePHqWsrCwiIlq+fDmJ\nRCKKiooShnuTDriK4wfT9IQK73/+/fffMWHCBJiammLt2rX47rvvUKtWLUyaNAmxsbGYMWMG1q1b\nh3fffRdKpVLfYesEEWHz5s24fPkyAMDNzQ0PHjzA4cOHART8oMqxY8ewcOFCEBFu3ryJmzdv6vSH\nZEQiEc6fP4+lS5dixYoVmDRpElJSUrBjxw706tULK1aswO+//46AgAAEBQVBpVJV618EAwATExMM\nHToU69evh1Qqhb+/Pw4ePIjly5fjhx9+gIGBAWrXro3OnTtj+vTpNeKFbiqVCtnZ2di+fTs++ugj\nfPzxx3B2dsYvv/yCmJgYAED79u3Rr18/jfq81s8avIh+89GbLTExkYYMGSI8Y5Cenk5TpkyhsLAw\nIiKSy+U0YsQIWrBggT7D1KmiZpUVK1bQrl27iKjgesGSJUto2rRptGDBApLL5eTp6UmHDx8Whnvw\n4IFO47x79y6NHj2a2rdvL3x3+vRp6tKlC8XGxhJRwTUFqVRKJ06c0GlsL6P4tRpjY2Py8/OjzMxM\nIir4QflmzZrR2LFjyc7OTnhvUXU/ii6Kb+XKlWRoaCi8JiQvL49mzpxJY8eOpbFjx1Ljxo1r5DMh\n2sBPKusQFZ4VFL2S4uTJkzhx4gTS0tLQvn17SKVSeHt7Y+bMmQgMDMTbb78NS0tLHDt2DB07doRE\nItF3FbSu6Cjt7t27+Pbbb+Hv7w97e3s4ODhAIpHg4MGDuH79OkJCQhAQEAClUgmxWAwTExOtxkXF\nXj9e1E1EiImJQXZ2Nnx9feHk5ISYmBioVCq0bt0aXl5eqF+/Pt5++22NV5FXR0X1srGxgUwmg7W1\nNVasWIGWLVvCy8sLPXr0wNtvv43hw4ejU6dONeJtrEXx3b17F127dsXy5ctRu3ZtdOjQAZ06dYJE\n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\n", + "text": [ + "" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAbwAAAFhCAYAAAALEB8uAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdYFNfXB/Dv0HvvSBFLbKhoVMQCBAt2xdiiGMXYEo2G\nFImxkGjsxhKNURNrLLEiYo0i6M+GGkuQCDZQkSKCUgV2Oe8fvjthAbvMIns+z+MjW+7cM3fKmTsz\nd1YgIgJjjDFWzWmoOgDGGGNMCpzwGGOMqQVOeIwxxtQCJzzGGGNqgRMeY4wxtcAJjzHGmFqQNOGl\npaWhffv2MDExwddffy1l1e+krl27YuPGjaoOo8pydXXF0aNHJatPQ0MDt27dqtQ6hg0bhqlTp1ba\n9I2NjZGYmPhKZaKiouDk5FQ5AVVzjRo1wvHjx9/6dBMTE6GhoYGSkpK3Pm1VGzt2LGbOnFkp09Z6\n0RdcXV2Rnp4OTU1NGBoaokuXLli2bBkMDQ1fubJVq1bBxsYG2dnZrxWsutm/f7+qQ6jSBEGAIAgV\nfjZs2DA4OTlhxowZrzVtHx8fBAYGYsSIEW8S4it73jy9DTk5OZU27TfxpsurqoqNjVV1CJJ61eW4\nbt06/P777zhx4oT43ooVKyorvBf38ARBQEREBHJycvD333/j/Pnzr5x9iQglJSVISkpC/fr1XytQ\nmUz2WuXYu6GqLd/KTDovws+CqJqq2jrKXgO9gKurKx09elR8/dVXX1H37t2JiOj06dPUunVrMjMz\noyZNmlBUVJT4PW9vb/ruu++oTZs2pK+vT0OGDCFtbW3S0dEhIyMjOnr0KBUWFtKECRPIwcGBHBwc\naOLEiVRYWEhERMeOHSNHR0eaO3cu2dnZUWBgIIWGhtKHH35IQ4YMIWNjY3J3d6eEhASaNWsW2djY\nkLOzMx0+fFiMYc2aNVS/fn0yNjYmNzc3WrlypfiZYvoLFy4kGxsbsre3p7Vr14qf5+fnU3BwMLm4\nuJCpqSm1bduWCgoKXjjfZV24cIGaNm1KxsbG1K9fP+rfvz9NmTKFiIgyMzOpW7duZG1tTebm5tS9\ne3e6d++eUhv+9ttvRES0du1aatOmDX311Vdkbm5ONWvWpAMHDjyz3jt37lCfPn3I2tqaLC0tady4\ncUREJJfLacaMGeTi4kI2NjY0dOhQevz4MRER3b59mwRBoLVr15KTkxNZWFjQihUrKCYmhtzd3cnM\n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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 19 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Bonus: How to use Cython without the IPython magic" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "IPython's notebook is really great for explanatory analysis and documentation, but what if we want to compile our Python code via Cython without letting IPython's magic doing all the work? \n", + "These are the steps you would need." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 1. Creating a .pyx file containing the the desired code or function." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%file ccy_classic_lstsqr.pyx\n", + "\n", + "def ccy_classic_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Writing ccy_classic_lstsqr.pyx\n" + ] + } + ], + "prompt_number": 11 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2. Creating a simple setup file" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%file setup.py\n", + "\n", + "from distutils.core import setup\n", + "from distutils.extension import Extension\n", + "from Cython.Distutils import build_ext\n", + "\n", + "setup(\n", + " cmdclass = {'build_ext': build_ext},\n", + " ext_modules = [Extension(\"ccy_classic_lstsqr\", [\"ccy_classic_lstsqr.pyx\"])]\n", + ")" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Writing setup.py\n" + ] + } + ], + "prompt_number": 12 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "####3. Building and Compiling" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "!python3 setup.py build_ext --inplace" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "running build_ext\r\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "cythoning ccy_classic_lstsqr.pyx to ccy_classic_lstsqr.c\r\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "building 'ccy_classic_lstsqr' extension\r\n", + "creating build\r\n", + "creating build/temp.macosx-10.6-intel-3.4\r\n", + "/usr/bin/clang -fno-strict-aliasing -Werror=declaration-after-statement -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -arch i386 -arch x86_64 -g -I/Library/Frameworks/Python.framework/Versions/3.4/include/python3.4m -c ccy_classic_lstsqr.c -o build/temp.macosx-10.6-intel-3.4/ccy_classic_lstsqr.o\r\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\u001b[1mccy_classic_lstsqr.c:2040:28: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyObject_AsString'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2037:32: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function\r\n", + " '__Pyx_PyUnicode_FromString' [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2104:26: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyObject_IsTrue'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2159:33: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyIndex_AsSsize_t'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2188:33: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyInt_FromSize_t'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:1584:32: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyInt_From_long'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:1631:27: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1mfunction '__Pyx_PyInt_As_long' is not\r\n", + " needed and will not be emitted [-Wunneeded-internal-declaration]\u001b[0m\r\n", + "static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:1731:26: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1mfunction '__Pyx_PyInt_As_int' is not\r\n", + " needed and will not be emitted [-Wunneeded-internal-declaration]\u001b[0m\r\n", + "static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "8 warnings generated.\r\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\u001b[1mccy_classic_lstsqr.c:2040:28: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyObject_AsString'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2037:32: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function\r\n", + " '__Pyx_PyUnicode_FromString' [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2104:26: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyObject_IsTrue'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2159:33: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyIndex_AsSsize_t'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2188:33: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyInt_FromSize_t'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:1584:32: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyInt_From_long'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:1631:27: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1mfunction '__Pyx_PyInt_As_long' is not\r\n", + " needed and will not be emitted [-Wunneeded-internal-declaration]\u001b[0m\r\n", + "static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:1731:26: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1mfunction '__Pyx_PyInt_As_int' is not\r\n", + " needed and will not be emitted [-Wunneeded-internal-declaration]\u001b[0m\r\n", + "static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "8" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " warnings generated.\r\n", + "/usr/bin/clang -bundle -undefined dynamic_lookup -arch i386 -arch x86_64 -g build/temp.macosx-10.6-intel-3.4/ccy_classic_lstsqr.o -o /Users/sebastian/Github/python_reference/benchmarks/ccy_classic_lstsqr.so\r\n" + ] + } + ], + "prompt_number": 13 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4. Importing and running the code" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import ccy_classic_lstsqr\n", + "\n", + "%timeit classic_lstsqr(x, y)\n", + "%timeit cy_classic_lstsqr(x, y)\n", + "%timeit ccy_classic_lstsqr.ccy_classic_lstsqr(x, y)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "100 loops, best of 3: 2.9 ms per loop\n", + "1000 loops, best of 3: 212 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "1000 loops, best of 3: 207 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 20 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/benchmarks/ccy_classic_lstsqr.c b/benchmarks/ccy_classic_lstsqr.c new file mode 100644 index 0000000..4813b5a --- /dev/null +++ b/benchmarks/ccy_classic_lstsqr.c @@ -0,0 +1,2203 @@ +/* Generated by Cython 0.20.1 on Sun May 4 18:53:57 2014 */ + +#define PY_SSIZE_T_CLEAN +#ifndef CYTHON_USE_PYLONG_INTERNALS +#ifdef PYLONG_BITS_IN_DIGIT +#define CYTHON_USE_PYLONG_INTERNALS 0 +#else +#include "pyconfig.h" +#ifdef PYLONG_BITS_IN_DIGIT +#define CYTHON_USE_PYLONG_INTERNALS 1 +#else +#define CYTHON_USE_PYLONG_INTERNALS 0 +#endif +#endif +#endif +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02040000 + #error Cython requires Python 2.4+. +#else +#define CYTHON_ABI "0_20_1" +#include /* For offsetof */ +#ifndef offsetof +#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#ifdef PYPY_VERSION +#define CYTHON_COMPILING_IN_PYPY 1 +#define CYTHON_COMPILING_IN_CPYTHON 0 +#else +#define CYTHON_COMPILING_IN_PYPY 0 +#define CYTHON_COMPILING_IN_CPYTHON 1 +#endif +#if CYTHON_COMPILING_IN_PYPY +#define Py_OptimizeFlag 0 +#endif +#if PY_VERSION_HEX < 0x02050000 + typedef int Py_ssize_t; + #define PY_SSIZE_T_MAX INT_MAX + #define PY_SSIZE_T_MIN INT_MIN + #define PY_FORMAT_SIZE_T "" + #define CYTHON_FORMAT_SSIZE_T "" + #define PyInt_FromSsize_t(z) PyInt_FromLong(z) + #define PyInt_AsSsize_t(o) __Pyx_PyInt_As_int(o) + #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ + (PyErr_Format(PyExc_TypeError, \ + "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ + (PyObject*)0)) + #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ + !PyComplex_Check(o)) + #define PyIndex_Check __Pyx_PyIndex_Check + #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) + #define __PYX_BUILD_PY_SSIZE_T "i" +#else + #define __PYX_BUILD_PY_SSIZE_T "n" + #define CYTHON_FORMAT_SSIZE_T "z" + #define __Pyx_PyIndex_Check PyIndex_Check +#endif +#if PY_VERSION_HEX < 0x02060000 + #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) + #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) + #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) + #define PyVarObject_HEAD_INIT(type, size) \ + PyObject_HEAD_INIT(type) size, + #define PyType_Modified(t) + typedef struct { + void *buf; + PyObject *obj; + Py_ssize_t len; + Py_ssize_t itemsize; + int readonly; + int ndim; + char *format; + Py_ssize_t *shape; + Py_ssize_t *strides; + Py_ssize_t *suboffsets; + void *internal; + } Py_buffer; + #define PyBUF_SIMPLE 0 + #define PyBUF_WRITABLE 0x0001 + #define PyBUF_FORMAT 0x0004 + #define PyBUF_ND 0x0008 + #define PyBUF_STRIDES (0x0010 | PyBUF_ND) + #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) + #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) + #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) + #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) + #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) + #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) + typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); + typedef void (*releasebufferproc)(PyObject *, Py_buffer *); +#endif +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyType_Type +#endif +#if PY_VERSION_HEX < 0x02060000 + #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") +#endif +#if PY_MAJOR_VERSION >= 3 + #define Py_TPFLAGS_CHECKTYPES 0 + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#if PY_VERSION_HEX < 0x02060000 + #define Py_TPFLAGS_HAVE_VERSION_TAG 0 +#endif +#if PY_VERSION_HEX < 0x02060000 && !defined(Py_TPFLAGS_IS_ABSTRACT) + #define Py_TPFLAGS_IS_ABSTRACT 0 +#endif +#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE) + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) +#else + #define CYTHON_PEP393_ENABLED 0 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#endif +#if PY_VERSION_HEX < 0x02060000 + #define PyBytesObject PyStringObject + #define PyBytes_Type PyString_Type + #define PyBytes_Check PyString_Check + #define PyBytes_CheckExact PyString_CheckExact + #define PyBytes_FromString PyString_FromString + #define PyBytes_FromStringAndSize PyString_FromStringAndSize + #define PyBytes_FromFormat PyString_FromFormat + #define PyBytes_DecodeEscape PyString_DecodeEscape + #define PyBytes_AsString PyString_AsString + #define PyBytes_AsStringAndSize PyString_AsStringAndSize + #define PyBytes_Size PyString_Size + #define PyBytes_AS_STRING PyString_AS_STRING + #define PyBytes_GET_SIZE PyString_GET_SIZE + #define PyBytes_Repr PyString_Repr + #define PyBytes_Concat PyString_Concat + #define PyBytes_ConcatAndDel PyString_ConcatAndDel +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ + PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#if PY_VERSION_HEX < 0x02060000 + #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) + #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t PyInt_AsLong +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t +#endif +#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) + #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) + #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) + #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) +#else + #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ + (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ + (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ + (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) + #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ + (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ + (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ + (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) + #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ + (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ + (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ + (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) +#endif +#if PY_VERSION_HEX < 0x02050000 + #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) + #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) + #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) +#else + #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) + #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) + #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) +#endif +#if PY_VERSION_HEX < 0x02050000 + #define __Pyx_NAMESTR(n) ((char *)(n)) + #define __Pyx_DOCSTR(n) ((char *)(n)) +#else + #define __Pyx_NAMESTR(n) (n) + #define __Pyx_DOCSTR(n) (n) +#endif +#ifndef CYTHON_INLINE + #if defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and + a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is + a quiet NaN. */ + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif + + +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#if defined(WIN32) || defined(MS_WINDOWS) +#define _USE_MATH_DEFINES +#endif +#include +#define __PYX_HAVE__ccy_classic_lstsqr +#define __PYX_HAVE_API__ccy_classic_lstsqr +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#ifdef PYREX_WITHOUT_ASSERTIONS +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) ( \ + (sizeof(type) < sizeof(Py_ssize_t)) || \ + (sizeof(type) > sizeof(Py_ssize_t) && \ + likely(v < (type)PY_SSIZE_T_MAX || \ + v == (type)PY_SSIZE_T_MAX) && \ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN || \ + v == (type)PY_SSIZE_T_MIN))) || \ + (sizeof(type) == sizeof(Py_ssize_t) && \ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX || \ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyObject_AsSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) +#define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) +#define __Pyx_PyByteArray_FromUString(s) __Pyx_PyByteArray_FromString((char*)s) +#define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) +#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) +#if PY_MAJOR_VERSION < 3 +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) +{ + const Py_UNICODE *u_end = u; + while (*u_end++) ; + return u_end - u - 1; +} +#else +#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen +#endif +#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) +#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) +#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +#if CYTHON_COMPILING_IN_CPYTHON +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys = NULL; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + sys = PyImport_ImportModule("sys"); + if (sys == NULL) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + if (default_encoding == NULL) goto bad; + if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (ascii_chars_u == NULL) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + } + Py_XDECREF(sys); + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return 0; +bad: + Py_XDECREF(sys); + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys = NULL; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (sys == NULL) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + if (default_encoding == NULL) goto bad; + default_encoding_c = PyBytes_AS_STRING(default_encoding); + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(sys); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(sys); + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +#ifdef __GNUC__ + /* Test for GCC > 2.95 */ + #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #else /* __GNUC__ > 2 ... */ + #define likely(x) (x) + #define unlikely(x) (x) + #endif /* __GNUC__ > 2 ... */ +#else /* __GNUC__ */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ + +static PyObject *__pyx_m; +static PyObject *__pyx_d; +static PyObject *__pyx_b; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; + + +static const char *__pyx_f[] = { + "ccy_classic_lstsqr.pyx", +}; + +/*--- Type declarations ---*/ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil) \ + if (acquire_gil) { \ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ + PyGILState_Release(__pyx_gilstate_save); \ + } else { \ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil) \ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) +#endif + #define __Pyx_RefNannyFinishContext() \ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif /* CYTHON_REFNANNY */ +#define __Pyx_XDECREF_SET(r, v) do { \ + PyObject *tmp = (PyObject *) r; \ + r = v; __Pyx_XDECREF(tmp); \ + } while (0) +#define __Pyx_DECREF_SET(r, v) do { \ + PyObject *tmp = (PyObject *) r; \ + r = v; __Pyx_DECREF(tmp); \ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ + +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ + +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ + +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ + const char* function_name); /*proto*/ + +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/ +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len)) { + Py_INCREF(x); + PyList_SET_ITEM(list, len, x); + Py_SIZE(list) = len+1; + return 0; + } + return PyList_Append(list, x); +} +#else +#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) +#endif + +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/ + +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/ + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +static int __Pyx_check_binary_version(void); + +typedef struct { + int code_line; + PyCodeObject* code_object; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); + +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); /*proto*/ + +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ + + +/* Module declarations from 'ccy_classic_lstsqr' */ +#define __Pyx_MODULE_NAME "ccy_classic_lstsqr" +int __pyx_module_is_main_ccy_classic_lstsqr = 0; + +/* Implementation of 'ccy_classic_lstsqr' */ +static PyObject *__pyx_builtin_sum; +static PyObject *__pyx_builtin_zip; +static PyObject *__pyx_pf_18ccy_classic_lstsqr_ccy_classic_lstsqr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y); /* proto */ +static char __pyx_k_x[] = "x"; +static char __pyx_k_y[] = "y"; +static char __pyx_k_sum[] = "sum"; +static char __pyx_k_x_i[] = "x_i"; +static char __pyx_k_y_i[] = "y_i"; +static char __pyx_k_zip[] = "zip"; +static char __pyx_k_main[] = "__main__"; +static char __pyx_k_test[] = "__test__"; +static char __pyx_k_slope[] = "slope"; +static char __pyx_k_var_x[] = "var_x"; +static char __pyx_k_x_avg[] = "x_avg"; +static char __pyx_k_y_avg[] = "y_avg"; +static char __pyx_k_cov_xy[] = "cov_xy"; +static char __pyx_k_y_interc[] = "y_interc"; +static char __pyx_k_ccy_classic_lstsqr[] = "ccy_classic_lstsqr"; +static char __pyx_k_Users_sebastian_Github_python_r[] = "/Users/sebastian/Github/python_reference/benchmarks/ccy_classic_lstsqr.pyx"; +static PyObject *__pyx_kp_s_Users_sebastian_Github_python_r; +static PyObject *__pyx_n_s_ccy_classic_lstsqr; +static PyObject *__pyx_n_s_cov_xy; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_slope; +static PyObject *__pyx_n_s_sum; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_n_s_var_x; +static PyObject *__pyx_n_s_x; +static PyObject *__pyx_n_s_x_avg; +static PyObject *__pyx_n_s_x_i; +static PyObject *__pyx_n_s_y; +static PyObject *__pyx_n_s_y_avg; +static PyObject *__pyx_n_s_y_i; +static PyObject *__pyx_n_s_y_interc; +static PyObject *__pyx_n_s_zip; +static PyObject *__pyx_int_2; +static PyObject *__pyx_tuple_; +static PyObject *__pyx_codeobj__2; + +/* "ccy_classic_lstsqr.pyx":2 + * + * def ccy_classic_lstsqr(x, y): # <<<<<<<<<<<<<< + * """ Computes the least-squares solution to a linear matrix equation. """ + * x_avg = sum(x)/len(x) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_18ccy_classic_lstsqr_1ccy_classic_lstsqr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_18ccy_classic_lstsqr_ccy_classic_lstsqr[] = " Computes the least-squares solution to a linear matrix equation. "; +static PyMethodDef __pyx_mdef_18ccy_classic_lstsqr_1ccy_classic_lstsqr = {__Pyx_NAMESTR("ccy_classic_lstsqr"), (PyCFunction)__pyx_pw_18ccy_classic_lstsqr_1ccy_classic_lstsqr, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_18ccy_classic_lstsqr_ccy_classic_lstsqr)}; +static PyObject *__pyx_pw_18ccy_classic_lstsqr_1ccy_classic_lstsqr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_x = 0; + PyObject *__pyx_v_y = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("ccy_classic_lstsqr (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + case 1: + if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("ccy_classic_lstsqr", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ccy_classic_lstsqr") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_x = values[0]; + __pyx_v_y = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("ccy_classic_lstsqr", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_L3_error:; + __Pyx_AddTraceback("ccy_classic_lstsqr.ccy_classic_lstsqr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_18ccy_classic_lstsqr_ccy_classic_lstsqr(__pyx_self, __pyx_v_x, __pyx_v_y); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_18ccy_classic_lstsqr_ccy_classic_lstsqr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y) { + PyObject *__pyx_v_x_avg = NULL; + PyObject *__pyx_v_y_avg = NULL; + PyObject *__pyx_v_var_x = NULL; + PyObject *__pyx_v_cov_xy = NULL; + PyObject *__pyx_v_slope = NULL; + PyObject *__pyx_v_y_interc = NULL; + PyObject *__pyx_v_x_i = NULL; + PyObject *__pyx_v_y_i = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *(*__pyx_t_5)(PyObject *); + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *(*__pyx_t_9)(PyObject *); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("ccy_classic_lstsqr", 0); + + /* "ccy_classic_lstsqr.pyx":4 + * def ccy_classic_lstsqr(x, y): + * """ Computes the least-squares solution to a linear matrix equation. """ + * x_avg = sum(x)/len(x) # <<<<<<<<<<<<<< + * y_avg = sum(y)/len(y) + * var_x = sum([(x_i - x_avg)**2 for x_i in x]) + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_x); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_x); + __Pyx_GIVEREF(__pyx_v_x); + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = PyObject_Length(__pyx_v_x); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_x_avg = __pyx_t_4; + __pyx_t_4 = 0; + + /* "ccy_classic_lstsqr.pyx":5 + * """ Computes the least-squares solution to a linear matrix equation. """ + * x_avg = sum(x)/len(x) + * y_avg = sum(y)/len(y) # <<<<<<<<<<<<<< + * var_x = sum([(x_i - x_avg)**2 for x_i in x]) + * cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)]) + */ + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(__pyx_v_y); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_y); + __Pyx_GIVEREF(__pyx_v_y); + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_3 = PyObject_Length(__pyx_v_y); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_y_avg = __pyx_t_2; + __pyx_t_2 = 0; + + /* "ccy_classic_lstsqr.pyx":6 + * x_avg = sum(x)/len(x) + * y_avg = sum(y)/len(y) + * var_x = sum([(x_i - x_avg)**2 for x_i in x]) # <<<<<<<<<<<<<< + * cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)]) + * slope = cov_xy / var_x + */ + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + if (PyList_CheckExact(__pyx_v_x) || PyTuple_CheckExact(__pyx_v_x)) { + __pyx_t_4 = __pyx_v_x; __Pyx_INCREF(__pyx_t_4); __pyx_t_3 = 0; + __pyx_t_5 = NULL; + } else { + __pyx_t_3 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_x); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; + } + for (;;) { + if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_4)) { + if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_4)) break; + #if CYTHON_COMPILING_IN_CPYTHON + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #else + __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_4)) { + if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_4)) break; + #if CYTHON_COMPILING_IN_CPYTHON + __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #else + __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + } else { + __pyx_t_1 = __pyx_t_5(__pyx_t_4); + if (unlikely(!__pyx_t_1)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + break; + } + __Pyx_GOTREF(__pyx_t_1); + } + __Pyx_XDECREF_SET(__pyx_v_x_i, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = PyNumber_Subtract(__pyx_v_x_i, __pyx_v_x_avg); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = PyNumber_Power(__pyx_t_1, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_var_x = __pyx_t_2; + __pyx_t_2 = 0; + + /* "ccy_classic_lstsqr.pyx":7 + * y_avg = sum(y)/len(y) + * var_x = sum([(x_i - x_avg)**2 for x_i in x]) + * cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)]) # <<<<<<<<<<<<<< + * slope = cov_xy / var_x + * y_interc = y_avg - slope*x_avg + */ + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(__pyx_v_x); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_x); + __Pyx_GIVEREF(__pyx_v_x); + __Pyx_INCREF(__pyx_v_y); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_y); + __Pyx_GIVEREF(__pyx_v_y); + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyList_CheckExact(__pyx_t_6) || PyTuple_CheckExact(__pyx_t_6)) { + __pyx_t_4 = __pyx_t_6; __Pyx_INCREF(__pyx_t_4); __pyx_t_3 = 0; + __pyx_t_5 = NULL; + } else { + __pyx_t_3 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + for (;;) { + if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_4)) { + if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_4)) break; + #if CYTHON_COMPILING_IN_CPYTHON + __pyx_t_6 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_3); __Pyx_INCREF(__pyx_t_6); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #else + __pyx_t_6 = PySequence_ITEM(__pyx_t_4, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_4)) { + if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_4)) break; + #if CYTHON_COMPILING_IN_CPYTHON + __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_3); __Pyx_INCREF(__pyx_t_6); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #else + __pyx_t_6 = PySequence_ITEM(__pyx_t_4, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + } else { + __pyx_t_6 = __pyx_t_5(__pyx_t_4); + if (unlikely(!__pyx_t_6)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + break; + } + __Pyx_GOTREF(__pyx_t_6); + } + if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { + PyObject* sequence = __pyx_t_6; + #if CYTHON_COMPILING_IN_CPYTHON + Py_ssize_t size = Py_SIZE(sequence); + #else + Py_ssize_t size = PySequence_Size(sequence); + #endif + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + #if CYTHON_COMPILING_IN_CPYTHON + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_1 = PyList_GET_ITEM(sequence, 0); + __pyx_t_7 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_7); + #else + __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + #endif + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_8 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext; + index = 0; __pyx_t_1 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_1)) goto __pyx_L7_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + index = 1; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L7_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_9 = NULL; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L8_unpacking_done; + __pyx_L7_unpacking_failed:; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_9 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_L8_unpacking_done:; + } + __Pyx_XDECREF_SET(__pyx_v_x_i, __pyx_t_1); + __pyx_t_1 = 0; + __Pyx_XDECREF_SET(__pyx_v_y_i, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_t_6 = PyNumber_Subtract(__pyx_v_x_i, __pyx_v_x_avg); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyNumber_Subtract(__pyx_v_y_i, __pyx_v_y_avg); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_1 = PyNumber_Multiply(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_cov_xy = __pyx_t_2; + __pyx_t_2 = 0; + + /* "ccy_classic_lstsqr.pyx":8 + * var_x = sum([(x_i - x_avg)**2 for x_i in x]) + * cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)]) + * slope = cov_xy / var_x # <<<<<<<<<<<<<< + * y_interc = y_avg - slope*x_avg + * return (slope, y_interc) + */ + __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_v_cov_xy, __pyx_v_var_x); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_slope = __pyx_t_2; + __pyx_t_2 = 0; + + /* "ccy_classic_lstsqr.pyx":9 + * cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)]) + * slope = cov_xy / var_x + * y_interc = y_avg - slope*x_avg # <<<<<<<<<<<<<< + * return (slope, y_interc) + */ + __pyx_t_2 = PyNumber_Multiply(__pyx_v_slope, __pyx_v_x_avg); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = PyNumber_Subtract(__pyx_v_y_avg, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_y_interc = __pyx_t_4; + __pyx_t_4 = 0; + + /* "ccy_classic_lstsqr.pyx":10 + * slope = cov_xy / var_x + * y_interc = y_avg - slope*x_avg + * return (slope, y_interc) # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(__pyx_v_slope); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_slope); + __Pyx_GIVEREF(__pyx_v_slope); + __Pyx_INCREF(__pyx_v_y_interc); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_y_interc); + __Pyx_GIVEREF(__pyx_v_y_interc); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "ccy_classic_lstsqr.pyx":2 + * + * def ccy_classic_lstsqr(x, y): # <<<<<<<<<<<<<< + * """ Computes the least-squares solution to a linear matrix equation. """ + * x_avg = sum(x)/len(x) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("ccy_classic_lstsqr.ccy_classic_lstsqr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_x_avg); + __Pyx_XDECREF(__pyx_v_y_avg); + __Pyx_XDECREF(__pyx_v_var_x); + __Pyx_XDECREF(__pyx_v_cov_xy); + __Pyx_XDECREF(__pyx_v_slope); + __Pyx_XDECREF(__pyx_v_y_interc); + __Pyx_XDECREF(__pyx_v_x_i); + __Pyx_XDECREF(__pyx_v_y_i); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; + +#if PY_MAJOR_VERSION >= 3 +static struct PyModuleDef __pyx_moduledef = { + #if PY_VERSION_HEX < 0x03020000 + { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, + #else + PyModuleDef_HEAD_INIT, + #endif + __Pyx_NAMESTR("ccy_classic_lstsqr"), + 0, /* m_doc */ + -1, /* m_size */ + __pyx_methods /* m_methods */, + NULL, /* m_reload */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_s_Users_sebastian_Github_python_r, __pyx_k_Users_sebastian_Github_python_r, sizeof(__pyx_k_Users_sebastian_Github_python_r), 0, 0, 1, 0}, + {&__pyx_n_s_ccy_classic_lstsqr, __pyx_k_ccy_classic_lstsqr, sizeof(__pyx_k_ccy_classic_lstsqr), 0, 0, 1, 1}, + {&__pyx_n_s_cov_xy, __pyx_k_cov_xy, sizeof(__pyx_k_cov_xy), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_slope, __pyx_k_slope, sizeof(__pyx_k_slope), 0, 0, 1, 1}, + {&__pyx_n_s_sum, __pyx_k_sum, sizeof(__pyx_k_sum), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_var_x, __pyx_k_var_x, sizeof(__pyx_k_var_x), 0, 0, 1, 1}, + {&__pyx_n_s_x, __pyx_k_x, sizeof(__pyx_k_x), 0, 0, 1, 1}, + {&__pyx_n_s_x_avg, __pyx_k_x_avg, sizeof(__pyx_k_x_avg), 0, 0, 1, 1}, + {&__pyx_n_s_x_i, __pyx_k_x_i, sizeof(__pyx_k_x_i), 0, 0, 1, 1}, + {&__pyx_n_s_y, __pyx_k_y, sizeof(__pyx_k_y), 0, 0, 1, 1}, + {&__pyx_n_s_y_avg, __pyx_k_y_avg, sizeof(__pyx_k_y_avg), 0, 0, 1, 1}, + {&__pyx_n_s_y_i, __pyx_k_y_i, sizeof(__pyx_k_y_i), 0, 0, 1, 1}, + {&__pyx_n_s_y_interc, __pyx_k_y_interc, sizeof(__pyx_k_y_interc), 0, 0, 1, 1}, + {&__pyx_n_s_zip, __pyx_k_zip, sizeof(__pyx_k_zip), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_sum = __Pyx_GetBuiltinName(__pyx_n_s_sum); if (!__pyx_builtin_sum) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_zip = __Pyx_GetBuiltinName(__pyx_n_s_zip); if (!__pyx_builtin_zip) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + return 0; + __pyx_L1_error:; + return -1; +} + +static int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "ccy_classic_lstsqr.pyx":2 + * + * def ccy_classic_lstsqr(x, y): # <<<<<<<<<<<<<< + * """ Computes the least-squares solution to a linear matrix equation. """ + * x_avg = sum(x)/len(x) + */ + __pyx_tuple_ = PyTuple_Pack(10, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_x_avg, __pyx_n_s_y_avg, __pyx_n_s_var_x, __pyx_n_s_cov_xy, __pyx_n_s_slope, __pyx_n_s_y_interc, __pyx_n_s_x_i, __pyx_n_s_y_i); if (unlikely(!__pyx_tuple_)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + __pyx_codeobj__2 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple_, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_sebastian_Github_python_r, __pyx_n_s_ccy_classic_lstsqr, 2, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_InitGlobals(void) { + if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + return 0; + __pyx_L1_error:; + return -1; +} + +#if PY_MAJOR_VERSION < 3 +PyMODINIT_FUNC initccy_classic_lstsqr(void); /*proto*/ +PyMODINIT_FUNC initccy_classic_lstsqr(void) +#else +PyMODINIT_FUNC PyInit_ccy_classic_lstsqr(void); /*proto*/ +PyMODINIT_FUNC PyInit_ccy_classic_lstsqr(void) +#endif +{ + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_REFNANNY + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); + if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); + } + #endif + __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_ccy_classic_lstsqr(void)", 0); + if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #ifdef __Pyx_CyFunction_USED + if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + #ifdef WITH_THREAD /* Python build with threading support? */ + PyEval_InitThreads(); + #endif + #endif + /*--- Module creation code ---*/ + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4(__Pyx_NAMESTR("ccy_classic_lstsqr"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + #endif + if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + Py_INCREF(__pyx_d); + __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #if CYTHON_COMPILING_IN_PYPY + Py_INCREF(__pyx_b); + #endif + if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + /*--- Initialize various global constants etc. ---*/ + if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + if (__pyx_module_is_main_ccy_classic_lstsqr) { + if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (!PyDict_GetItemString(modules, "ccy_classic_lstsqr")) { + if (unlikely(PyDict_SetItemString(modules, "ccy_classic_lstsqr", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + } + #endif + /*--- Builtin init code ---*/ + if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + /*--- Constants init code ---*/ + if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + /*--- Global init code ---*/ + /*--- Variable export code ---*/ + /*--- Function export code ---*/ + /*--- Type init code ---*/ + /*--- Type import code ---*/ + /*--- Variable import code ---*/ + /*--- Function import code ---*/ + /*--- Execution code ---*/ + + /* "ccy_classic_lstsqr.pyx":2 + * + * def ccy_classic_lstsqr(x, y): # <<<<<<<<<<<<<< + * """ Computes the least-squares solution to a linear matrix equation. """ + * x_avg = sum(x)/len(x) + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_18ccy_classic_lstsqr_1ccy_classic_lstsqr, NULL, __pyx_n_s_ccy_classic_lstsqr); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ccy_classic_lstsqr, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + if (__pyx_m) { + __Pyx_AddTraceback("init ccy_classic_lstsqr", __pyx_clineno, __pyx_lineno, __pyx_filename); + Py_DECREF(__pyx_m); __pyx_m = 0; + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init ccy_classic_lstsqr"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if PY_MAJOR_VERSION < 3 + return; + #else + return __pyx_m; + #endif +} + +/* Runtime support code */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule((char *)modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif /* CYTHON_REFNANNY */ + +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); + if (unlikely(!result)) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + continue; + } + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = (**name == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = func->ob_type->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); +#if PY_VERSION_HEX >= 0x02060000 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; +#endif + result = (*call)(func, arg, kw); +#if PY_VERSION_HEX >= 0x02060000 + Py_LeaveRecursiveCall(); +#endif + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +static CYTHON_INLINE int __Pyx_IterFinish(void) { +#if CYTHON_COMPILING_IN_CPYTHON + PyThreadState *tstate = PyThreadState_GET(); + PyObject* exc_type = tstate->curexc_type; + if (unlikely(exc_type)) { + if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) { + PyObject *exc_value, *exc_tb; + exc_value = tstate->curexc_value; + exc_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + Py_DECREF(exc_type); + Py_XDECREF(exc_value); + Py_XDECREF(exc_tb); + return 0; + } else { + return -1; + } + } + return 0; +#else + if (unlikely(PyErr_Occurred())) { + if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { + PyErr_Clear(); + return 0; + } else { + return -1; + } + } + return 0; +#endif +} + +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { + if (unlikely(retval)) { + Py_DECREF(retval); + __Pyx_RaiseTooManyValuesError(expected); + return -1; + } else { + return __Pyx_IterFinish(); + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { + const long neg_one = (long) -1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(long) <= sizeof(unsigned long long)) { + return PyLong_FromUnsignedLongLong((unsigned long long) value); + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(long long)) { + return PyLong_FromLongLong((long long) value); + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } +} + +#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func) \ + { \ + func_type value = func(x); \ + if (sizeof(target_type) < sizeof(func_type)) { \ + if (unlikely(value != (func_type) (target_type) value)) { \ + func_type zero = 0; \ + PyErr_SetString(PyExc_OverflowError, \ + (is_unsigned && unlikely(value < zero)) ? \ + "can't convert negative value to " #target_type : \ + "value too large to convert to " #target_type); \ + return (target_type) -1; \ + } \ + } \ + return (target_type) value; \ + } + +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 + #if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #endif +#endif +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { + const long neg_one = (long) -1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(long) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; + } + return (long) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 + #if CYTHON_USE_PYLONG_INTERNALS + if (sizeof(digit) <= sizeof(long)) { + switch (Py_SIZE(x)) { + case 0: return 0; + case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; + } + } + #endif +#endif + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; + } + if (sizeof(long) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong) + } else if (sizeof(long) <= sizeof(unsigned long long)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong) + } + } else { +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 + #if CYTHON_USE_PYLONG_INTERNALS + if (sizeof(digit) <= sizeof(long)) { + switch (Py_SIZE(x)) { + case 0: return 0; + case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; + case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; + } + } + #endif +#endif + if (sizeof(long) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong) + } else if (sizeof(long) <= sizeof(long long)) { + __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong) + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + long val; + PyObject *v = __Pyx_PyNumber_Int(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (long) -1; + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } +} + +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 + #if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #endif +#endif +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + const int neg_one = (int) -1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; + } + return (int) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 + #if CYTHON_USE_PYLONG_INTERNALS + if (sizeof(digit) <= sizeof(int)) { + switch (Py_SIZE(x)) { + case 0: return 0; + case 1: return (int) ((PyLongObject*)x)->ob_digit[0]; + } + } + #endif +#endif + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; + } + if (sizeof(int) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong) + } else if (sizeof(int) <= sizeof(unsigned long long)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong) + } + } else { +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 + #if CYTHON_USE_PYLONG_INTERNALS + if (sizeof(digit) <= sizeof(int)) { + switch (Py_SIZE(x)) { + case 0: return 0; + case 1: return +(int) ((PyLongObject*)x)->ob_digit[0]; + case -1: return -(int) ((PyLongObject*)x)->ob_digit[0]; + } + } + #endif +#endif + if (sizeof(int) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong) + } else if (sizeof(int) <= sizeof(long long)) { + __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong) + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + int val; + PyObject *v = __Pyx_PyNumber_Int(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (int) -1; + } + } else { + int val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } +} + +static int __Pyx_check_binary_version(void) { + char ctversion[4], rtversion[4]; + PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); + PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); + if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compiletime version %s of module '%.100s' " + "does not match runtime version %s", + ctversion, __Pyx_MODULE_NAME, rtversion); + #if PY_VERSION_HEX < 0x02050000 + return PyErr_Warn(NULL, message); + #else + return PyErr_WarnEx(NULL, message, 1); + #endif + } + return 0; +} + +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = (start + end) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} + +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(filename); + #else + py_srcfile = PyUnicode_FromString(filename); + #endif + if (!py_srcfile) goto bad; + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_code = __Pyx_PyCode_New( + 0, /*int argcount,*/ + 0, /*int kwonlyargcount,*/ + 0, /*int nlocals,*/ + 0, /*int stacksize,*/ + 0, /*int flags,*/ + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, /*int firstlineno,*/ + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + Py_DECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyObject *py_globals = 0; + PyFrameObject *py_frame = 0; + py_code = __pyx_find_code_object(c_line ? c_line : py_line); + if (!py_code) { + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) goto bad; + __pyx_insert_code_object(c_line ? c_line : py_line, py_code); + } + py_globals = PyModule_GetDict(__pyx_m); + if (!py_globals) goto bad; + py_frame = PyFrame_New( + PyThreadState_GET(), /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + py_globals, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + py_frame->f_lineno = py_line; + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} + +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else /* Python 3+ has unicode identifiers */ + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + ++t; + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); +} +static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { +#if PY_VERSION_HEX < 0x03030000 + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +#else /* PY_VERSION_HEX < 0x03030000 */ + if (PyUnicode_READY(o) == -1) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (PyUnicode_IS_ASCII(o)) { + *length = PyUnicode_GET_DATA_SIZE(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ + return PyUnicode_AsUTF8AndSize(o, length); +#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ +#endif /* PY_VERSION_HEX < 0x03030000 */ + } else +#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ +#if !CYTHON_COMPILING_IN_PYPY +#if PY_VERSION_HEX >= 0x02060000 + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { + PyNumberMethods *m; + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (PyInt_Check(x) || PyLong_Check(x)) +#else + if (PyLong_Check(x)) +#endif + return Py_INCREF(x), x; + m = Py_TYPE(x)->tp_as_number; +#if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = PyNumber_Int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = PyNumber_Long(x); + } +#else + if (m && m->nb_int) { + name = "int"; + res = PyNumber_Long(x); + } +#endif + if (res) { +#if PY_MAJOR_VERSION < 3 + if (!PyInt_Check(res) && !PyLong_Check(res)) { +#else + if (!PyLong_Check(res)) { +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + name, name, Py_TYPE(res)->tp_name); + Py_DECREF(res); + return NULL; + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 + #if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #endif +#endif +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) + return PyInt_AS_LONG(b); +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 + #if CYTHON_USE_PYLONG_INTERNALS + switch (Py_SIZE(b)) { + case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0]; + case 0: return 0; + case 1: return ((PyLongObject*)b)->ob_digit[0]; + } + #endif + #endif + #if PY_VERSION_HEX < 0x02060000 + return PyInt_AsSsize_t(b); + #else + return PyLong_AsSsize_t(b); + #endif + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { +#if PY_VERSION_HEX < 0x02050000 + if (ival <= LONG_MAX) + return PyInt_FromLong((long)ival); + else { + unsigned char *bytes = (unsigned char *) &ival; + int one = 1; int little = (int)*(unsigned char*)&one; + return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); + } +#else + return PyInt_FromSize_t(ival); +#endif +} + + +#endif /* Py_PYTHON_H */ diff --git a/benchmarks/ccy_classic_lstsqr.pyx b/benchmarks/ccy_classic_lstsqr.pyx new file mode 100644 index 0000000..5def68b --- /dev/null +++ b/benchmarks/ccy_classic_lstsqr.pyx @@ -0,0 +1,10 @@ + +def ccy_classic_lstsqr(x, y): + """ Computes the least-squares solution to a linear matrix equation. """ + x_avg = sum(x)/len(x) + y_avg = sum(y)/len(y) + var_x = sum([(x_i - x_avg)**2 for x_i in x]) + cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)]) + slope = cov_xy / var_x + y_interc = y_avg - slope*x_avg + return (slope, y_interc) \ No newline at end of file diff --git a/benchmarks/cython_least_squares.ipynb b/benchmarks/cython_least_squares.ipynb new file mode 100644 index 0000000..ac28769 --- /dev/null +++ b/benchmarks/cython_least_squares.ipynb @@ -0,0 +1,1255 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:e0aeebc5816e30eb2937ee4b331a3885fbaf1583183823ad07fb79e368b90290" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Sebastian Raschka](www.sebastianraschka.com) \n", + "last updated: 05/04/2014\n", + "\n", + "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb) \n", + "- [Link to the GitHub repository](https://github.com/rasbt/python_reference)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### All code was executed in Python 3.4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "I am really looking forward to your comments and suggestions to improve and \n", + "extend this little collection! Just send me a quick note \n", + "via Twitter: [@rasbt](https://twitter.com/rasbt) \n", + "or Email: [bluewoodtree@gmail.com](mailto:bluewoodtree@gmail.com)\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Implementing the least squares fit method for linear regression and speeding it up via Cython" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#Sections" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- [Introduction](#introduction)\n", + "- [Least squares fit implementations](#implementations)\n", + "- [Generating sample data and benchmarking](#sample_data)\n", + "- [Compiling the Python code via Cython in the IPython notebook](#cython_nb)\n", + "- [Bonus: How to use Cython without the IPython magic](#cython_bonus)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Linear regression via the least squares method is the simplest approach to performing a regression analysis of a dependent and a explanatory variable. The objective is to find the best-fitting straight line through a set of points that minimizes the sum of the squared offsets from the line. \n", + "The offsets come in 2 different flavors: perpendicular and vertical - with respect to the line. \n", + "![](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/least_squares_vertical.png) \n", + "![](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/least_squares_perpendicular.png) \n", + "\n", + "Here, we will use the more common approach: minimizing the sum of the perpendicular offsets.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In more mathematical terms, our goal is to compute the best fit to *n* points $(x_i, y_i)$ with $i=1,2,...n,$ via linear equation of the form \n", + "$f(x) = a\\cdot x + b$. \n", + "Here, we assume that the y-component is functionally dependent on the x-component. \n", + "In a cartesian coordinate system, $b$ is the intercept of the straight line with the y-axis, and $a$ is the slope of this line." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to obtain the parameters for the linear regression line for a set of multiple points, we can re-write the problem as matrix equation \n", + "$\\pmb X \\; \\pmb a = \\pmb y$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$\\Rightarrow\\Bigg[ \\begin{array}{cc}\n", + "x_1 & 1 \\\\\n", + "... & 1 \\\\\n", + "x_n & 1 \\end{array} \\Bigg]$\n", + "$\\bigg[ \\begin{array}{c}\n", + "a \\\\\n", + "b \\end{array} \\bigg]$\n", + "$=\\Bigg[ \\begin{array}{c}\n", + "y_1 \\\\\n", + "... \\\\\n", + "y_n \\end{array} \\Bigg]$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With a little bit of calculus, we can rearrange the term in order to obtain the parameter vector $\\pmb a = [a\\;b]^T$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$\\Rightarrow \\pmb a = (\\pmb X^T \\; \\pmb X)^{-1} \\pmb X^T \\; \\pmb y$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "The more classic approach to obtain the slope parameter $a$ and y-axis intercept $b$ would be:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$a = \\frac{S_{x,y}}{\\sigma_{x}^{2}}\\quad$ (slope)\n", + "\n", + "\n", + "$b = \\bar{y} - a\\bar{x}\\quad$ (y-axis intercept)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where \n", + "\n", + "\n", + "$S_{xy} = \\sum_{i=1}^{n} (x_i - \\bar{x})(y_i - \\bar{y})\\quad$ (covariance)\n", + "\n", + "\n", + "$\\sigma{_x}^{2} = \\sum_{i=1}^{n} (x_i - \\bar{x})^2\\quad$ (variance)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Least squares fit implementations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. The matrix approach" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, let us implement the equation:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$\\pmb a = (\\pmb X^T \\; \\pmb X)^{-1} \\pmb X^T \\; \\pmb y$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which I will refer to as the \"matrix approach\"." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import numpy as np\n", + "\n", + "def lin_lstsqr_mat(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " X = np.vstack([x, np.ones(len(x))]).T\n", + " return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. The classic approach" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we will calculate the parameters separately, using only standard library functions in Python, which I will call the \"classic approach\"." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$a = \\frac{S_{x,y}}{\\sigma_{x}^{2}}\\quad$ (slope)\n", + "\n", + "\n", + "$b = \\bar{y} - a\\bar{x}\\quad$ (y-axis intercept)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def classic_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Using the lstsq numpy function" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For our convenience, `numpy` has a function that can also compute the leat squares solution of a linear matrix equation. For more information, please refer to the [documentation](http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html)." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def numpy_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " X = np.vstack([x, np.ones(len(x))]).T\n", + " return np.linalg.lstsq(X,y)[0]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Using the linregress scipy function" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The last approach is using `scipy.stats.linregress()`, which returns a tuple of 5 different attributes, where the 1st value in the tuple is the slope, and the second value is the y-axis intercept, respectively. The documentation for this function can be found [here](http://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.stats.linregress.html)." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import scipy.stats\n", + "\n", + "def scipy_lstsqr(x,y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " return scipy.stats.linregress(x, y)[0:2]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Generating sample data and benchmarking" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to test our different least squares fit implementation, we will generate some sample data:\n", + "- 500 sample points for the x-component within the range [0,500) \n", + "- 500 sample points for the y-component within the range [100,600) \n", + "\n", + "where each sample point is multiplied by a random value within\n", + "the range [0.8, 12)." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import random\n", + "random.seed(12345)\n", + "\n", + "x = [x_i*random.randrange(8,12)/10 for x_i in range(500)]\n", + "y = [y_i*random.randrange(8,12)/10 for y_i in range(100,600)]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "#### Visualization" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To check how our dataset is distributed, and how the straight line, which we obtain via the least square fit method, we will plot it in a scatter plot. \n", + "Note that we are using our \"matrix approach\" here for simplicity, but after plotting the data, we will check whether all of the four different implementations yield the same parameters." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline\n", + "from matplotlib import pyplot as plt\n", + "\n", + "slope, intercept = lin_lstsqr_mat(x, y)\n", + "\n", + "line_x = [round(min(x)) - 1, round(max(x)) + 1]\n", + "line_y = [slope*x_i + intercept for x_i in line_x]\n", + "\n", + "plt.figure(figsize=(8,8))\n", + "plt.scatter(x,y)\n", + "plt.plot(line_x, line_y, color='red', lw='2')\n", + "\n", + "plt.ylabel('y')\n", + "plt.xlabel('x')\n", + "plt.title('Linear regression via least squares fit')\n", + "\n", + "ftext = 'y = ax + b = {:.3f} + {:.3f}x'\\\n", + " .format(slope, intercept)\n", + "plt.figtext(.15,.8, ftext, fontsize=11, ha='left')\n", + "\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" + ] + }, + { + "output_type": "stream", + "stream": "stderr", + "text": [ + "WARNING: pylab import has clobbered these variables: ['random']\n", + "`%matplotlib` prevents importing * from pylab and numpy\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nRUdHU7duXf0+np6erz3CliQZg7W1tfwyWsTl5TDIkmQM+ZLo1Wo1W7duzfLZ39fpiPU8X19frl+/\nnucxSpIkSVJB5ePjw7Vr13K0b75cut+xYwc1atTAxcUF0J3FP+tZGhMTQ4kSJQDw8PDI8BzynTt3\n8PDwyFDW9evX9Y/2vIk/M2bMMHoMsv2y7bL9sv2y/fn7k5sT3HxJ9OvWrdNftgfo0KEDq1atAmDV\nqlV06tRJv3z9+vWo1Wpu3rzJ1atXqV27dn6EKEmSJElFksEv3SclJbFnzx6+//57/bLJkyfTvXt3\nQkJC9I/Xge456O7du+uHwfz2229lRxhJkiRJygWDJ3obG5sMYz2DbljIPXv2ZLn91KlTsxzeVNJp\n0qSJsUMwqje5/W9y20G2X7a/ibFDKLQMOmCOISgUCgpZyJIkSZKUK7nJfXIIXEmSJEkqwmSilyRJ\nkqQiTCZ6SZIkSSrCZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIkwmekmSJEkqwmSilyRJkqQiTCZ6\nSZIkSSrCZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIkwmekmSJEkqwmSilyRJkqQiTCZ6SZIkSSrC\nZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIszM2AFIkiRJWYuNjWXHjh2YmJjQtm1bnJycjB2SVAgp\nhBDC2EFkh0KhoJCFLEmSlG03btygdu1AUlLqAOnY2p7nzJkjuLu750v9f/75JzNnzichIYn+/bvQ\nv3/ffKlXylpucp88o5ckSSqAJk78mEePRqDVfgRAauqHTJv2KStWfGvwuv/880/q1GlCSso0wINj\nxz7m8eMERo9+z+B1S3lP3qOXJEkqgKKi7qHV1tC/Tk+vwe3bdw1e78OHDwkMbEVKyhBgAtADlWo1\n8+d/Y/C6AU6cOMHIkWMZO/Z9/v7773yps6iTiV6SJKkAatWqMUrlF8Bj4CFK5Ve0bh1o8HqnTp1N\nQoInYPrcUpN8uWW6f/9+mjZtz7JlJVm8WEmtWo25ePGiwest6mSilyRJKoA+/ngy77zjg6lpCczM\nPBgwoA7jx482eL2XLt1Aq+0P/AB8A/yCiUkPxo4dZvC6P/poHirVV8BkhJhNUtJ4Pv98scHrLepk\nopckSSqAzM3NWb36O1JTVaSkJPHttwsxMTH8n+yGDWtgbb0bCAMOYGLyPs2a+TNx4liD152cnAIU\n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\nYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "#### Comparing the results from the different implementations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As mentioned above, let us confirm that the different implementation computed the same parameters (i.e., slope and y-axis intercept) as solution for the linear equation." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import prettytable\n", + "\n", + "params = [appr(x,y) for appr in [lin_lstsqr_mat, classic_lstsqr, numpy_lstsqr, scipy_lstsqr]]\n", + "\n", + "print(params)\n", + "\n", + "fit_table = prettytable.PrettyTable([\"\", \"slope\", \"y-intercept\"])\n", + "fit_table.add_row([\"matrix approach\", params[0][0], params[0][1]])\n", + "fit_table.add_row([\"classic approach\", params[1][0], params[1][1]])\n", + "fit_table.add_row([\"numpy function\", params[2][0], params[2][1]])\n", + "fit_table.add_row([\"scipy function\", params[3][0], params[3][1]])\n", + "\n", + "print(fit_table)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[array([ 0.95181895, 107.01399744]), (0.95181895319126741, 107.01399744459181), array([ 0.95181895, 107.01399744]), (0.95181895319126764, 107.01399744459175)]\n", + "+------------------+----------------+---------------+\n", + "| | slope | y-intercept |\n", + "+------------------+----------------+---------------+\n", + "| matrix approach | 0.951818953191 | 107.013997445 |\n", + "| classic approach | 0.951818953191 | 107.013997445 |\n", + "| numpy function | 0.951818953191 | 107.013997445 |\n", + "| scipy function | 0.951818953191 | 107.013997445 |\n", + "+------------------+----------------+---------------+\n" + ] + } + ], + "prompt_number": 9 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "#### Initial performance comparison" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a first impression how the performances of the different least squares implementations compare against each other, let us do a quick benchmark using the `timeit` module via IPython's `%timeit` magic." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "\n", + "for lab,appr in zip([\"matrix approach\",\"classic approach\",\n", + " \"numpy function\",\"scipy function\"],\n", + " [lin_lstsqr_mat, classic_lstsqr, \n", + " numpy_lstsqr, scipy_lstsqr]):\n", + " print(\"\\n{}: \".format(lab), end=\"\")\n", + " %timeit appr(x, y)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "matrix approach: 1000 loops, best of 3: 270 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "classic approach: 100 loops, best of 3: 2.83 ms per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "numpy function: 1000 loops, best of 3: 372 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "scipy function: 1000 loops, best of 3: 594 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 10 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "The timing above indicates, that the \"classic\" approach (Python's standard library functions only) is significantly worse in performance than the other implemenations - roughly by a magnitude of 10." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Compiling the Python code via Cython in the IPython notebook" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Maybe we can speed things up a little bit via [Cython's C-extensions for Python](http://cython.org). Cython is basically a hybrid between C and Python and can be pictured as compiled Python code with type declarations. \n", + "Since we are working in an IPython notebook here, we can make use of the IPython magic: It will automatically convert it to C code, compile it, and load the function. \n", + "Just to be thorough, let us also compile the other functions, which already use numpy objects." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%load_ext cythonmagic" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 15 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "import numpy as np\n", + "import scipy.stats\n", + "cimport numpy as np\n", + "\n", + "def cy_lin_lstsqr_mat(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " X = np.vstack([x, np.ones(len(x))]).T\n", + " return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)\n", + "\n", + "def cy_classic_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)\n", + "\n", + "def cy_numpy_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " X = np.vstack([x, np.ones(len(x))]).T\n", + " return np.linalg.lstsq(X,y)[0]\n", + "\n", + "def cy_scipy_lstsqr(x,y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " return scipy.stats.linregress(x, y)[0:2]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 16 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Comparing the compiled Cython code to the original Python code" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "\n", + "for lab,appr in zip([\"matrix approach\",\"classic approach\",\n", + " \"numpy function\",\"scipy function\"],\n", + " [(lin_lstsqr_mat, cy_lin_lstsqr_mat), \n", + " (classic_lstsqr, cy_classic_lstsqr),\n", + " (numpy_lstsqr, cy_numpy_lstsqr),\n", + " (scipy_lstsqr, cy_scipy_lstsqr)]):\n", + " print(\"\\n\\n{}: \".format(lab))\n", + " %timeit appr[0](x, y)\n", + " %timeit appr[1](x, y)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "matrix approach: \n", + "1000 loops, best of 3: 274 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "1000 loops, best of 3: 260 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "\n", + "classic approach: \n", + "100 loops, best of 3: 2.82 ms per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "1000 loops, best of 3: 212 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "\n", + "numpy function: \n", + "1000 loops, best of 3: 379 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "1000 loops, best of 3: 370 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "\n", + "scipy function: \n", + "1000 loops, best of 3: 608 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "100 loops, best of 3: 613 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 17 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "As we've seen before, our \"classic\" implementation of the least square method is pretty slow compared to using numpy's functions. This is not surprising, since numpy is highly optmized and uses compiled C/C++ and Fortran code already. This explains why there is no significant difference if we used Cython to compile the numpy-objects-containing functions. \n", + "However, we were able to speed up the \"classic approach\" quite significantly, roughly by 1500%.\n", + "\n", + "The following 2 code blocks are just to visualize our results in a bar plot." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "\n", + "funcs = ['classic_lstsqr', 'cy_classic_lstsqr', \n", + " 'lin_lstsqr_mat', 'numpy_lstsqr', 'scipy_lstsqr']\n", + "labels = ['classic approach','classic approach (cython)', \n", + " 'matrix approach', 'numpy function', 'scipy function']\n", + "\n", + "times = [timeit.Timer('%s(x,y)' %f, \n", + " 'from __main__ import %s, x, y' %f).timeit(1000)\n", + " for f in funcs]\n", + "\n", + "times_rel = [times[0]/times[i+1] for i in range(len(times[1:]))]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 18 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline\n", + "import matplotlib.pyplot as plt\n", + "\n", + "x_pos = np.arange(len(funcs))\n", + "plt.bar(x_pos, times, align='center', alpha=0.5)\n", + "plt.xticks(x_pos, labels, rotation=45)\n", + "plt.ylabel('time in ms')\n", + "plt.title('Performance of different least square fit implementations')\n", + "plt.show()\n", + "\n", + "x_pos = np.arange(len(funcs[1:]))\n", + "plt.bar(x_pos, times_rel, align='center', alpha=0.5, color=\"green\")\n", + "plt.xticks(x_pos, labels[1:], rotation=45)\n", + "plt.ylabel('relative performance gain')\n", + "plt.title('Performance gain compared to the classic least square implementation')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAFhCAYAAABwNN3iAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdYFGfXB+DfLoiwVAEBXZpYEkBEbNgiS+yoSDS22Msr\nEjQaEyOmKCb2GhMTY4n62n01FkQwxrIalWI3kSCWgIC6ETtFYHfP9wcwH0sRMO4u6Lmvi4udnWdm\nzjPtzDxTVkREBMYYY288sb4DYIwxVj1wQmCMMQaAEwJjjLFCnBAYY4wB4ITAGGOsECcExhhjAF7z\nhKBQKNCpUydYWFhg2rRp+g5H73JyctCnTx9YWVlh0KBBFZaXy+VwcnISups2bYqTJ08CAIgIo0eP\nhrW1Ndq2bQsAWLVqFezt7WFhYYFHjx5ppxIvqWRdWOVdu3YNzZs3h4WFBb7//nuEhIRgzpw5lR6+\nquWrwtXVFUePHtXKuPVp69at6N69u+4nTNWMi4sLmZiYkJmZGdnb29OoUaMoMzPzpcb19ddfU//+\n/V9xhDXXpk2bqE2bNqRSqSpV/vjx4+To6Fhmv5MnT5KjoyNlZ2cTEVFeXh6ZmJjQH3/88crirQoX\nFxc6evRouf1fVJdXZeTIkfTll19qdRr6MGbMGJo6dWqZ/XQxX1/E1dX1hctdHzZs2EAdO3asdPm/\n//6bRCJRpbdLbap2ZwgikQiRkZF49uwZLly4gHPnzlX56IKIoFarkZKSAnd395eKQ6lUvtRw1VlK\nSgqaNGkCsfjfL/aUlBS4urrCxMQEAHDv3j08f/78pee3Wq3+V/GIRCIQP2NZoZdZr1NSUuDh4aGF\naFhx1WL91XNCKqVkxv/000+pd+/eREQUExND7dq1IysrK/L29ia5XC6U8/Pzoy+++II6dOhAJiYm\nNGzYMKpVqxYZGRmRmZkZHT16lHJzc2ny5MlUv359ql+/Pk2ZMoVyc3OJqOBIRyqV0sKFC8nBwYGG\nDx9O4eHh9P7779OwYcPI3NycvLy8KCkpiebNm0d2dnbk7OxMhw8fFmJYv349ubu7k7m5Obm5udHq\n1auFfkXjX7p0KdnZ2VG9evVow4YNQv/s7GyaOnUqubi4kKWlJXXs2JFycnIqrHdJCQkJ5OfnR1ZW\nVuTp6UkRERFERDRz5kwyMjKiWrVqkZmZGa1fv77UsNnZ2TRy5EiqU6cOeXh40KJFizSO/lxcXOjI\nkSO0bt06MjY2JgMDAzIzM6MhQ4aQqakpiUQiMjMzo86dOxMR0V9//UVdunQha2treuutt+h///uf\nMK6RI0fShAkTqGfPnmRqakpHjx6l9PR06tevH9WtW5caNGhA3333nVB+1qxZNGDAABoxYgSZm5uT\np6cnnTt3joiIhg0bRmKxWDizXLx4cam6lTySfdG04uLiqG3btmRlZUX16tWjiRMnUl5entB/ypQp\nZGdnRxYWFuTl5UV//vknrV69WmN9CwwMLHP5lDUsEVFGRgb16dOHLCwsqE2bNvTll18KR5llHUH6\n+fnRunXriIjoxo0b5O/vTzY2NmRra0tDhw6lx48fayy3hQsXkpeXFxkbG5NKpar0OuXv708GBgZk\nbGxM5ubmlJSUJJwJZWVlkbGxMYnFYjIzMyNzc3O6e/duqXEUP3Mq2g4WLVpEdevWpXr16tHevXvp\n4MGD1LhxY7K2tqb58+drLPf+/fvToEGDyNzcnFq0aEGXL18W+hffX6jVapo/fz41bNiQbGxsaODA\ngfTw4UONebhhwwZycnIia2trWrVqFcXHx5OXlxdZWVnRxIkTNeL++eefyd3dnerUqUPdu3enlJQU\noZ9IJKKffvqJGjduTFZWVhQaGkpEBdtf8W2jTp06REQUGRlJzZs3JwsLC3JycqLw8HBhXE5OTsK2\nY25uTjExMaXOMk6fPk2tWrUiS0tLat26NZ05c0ZjXfjqq6+oQ4cOZG5uTt26daOMjAwiIsrJyaGh\nQ4eSjY0NWVlZUevWrUmhUJS5rImIqmVCOHLkCBER3b59mzw9PWnmzJmUlpZGNjY2FB0dTUREv/32\nG9nY2AgV9/PzIxcXF0pISCCVSkX5+fk0atQo+uqrr4Rxf/XVV9SuXTu6f/8+3b9/n9q3by/0P378\nOBkaGlJYWBjl5eVRTk4OzZo1i4yNjenw4cOkVCppxIgR5OLiQvPmzSOlUklr166lBg0aCOM/ePAg\n3bp1i4iITpw4QRKJhC5cuKAx/lmzZpFSqaSoqCiSSCTChvvhhx+Sv78/3blzR9hgc3Nzy633/fv3\nS827vLw8atiwIc2fP5/y8/Pp2LFjZG5uTteuXSMiovDwcBo+fHi583769OnUqVMnevToEaWmppKn\npyc5OTlpLJuijW/jxo0aK2xycrLGTiszM5McHR1p48aNpFKp6OLFi2Rra0sJCQlEVLCTsLS0FFbs\n7OxsatGiBX3zzTeUn59Pt27dIjc3N/r111+JiIRlER0dTWq1mmbMmEFt27YtM7ayFE8IKpXqhdM6\nf/48xcXFkUqlouTkZHJ3d6dvv/2WiIgOHTpELVu2pCdPnhARUWJiorATLLm+lfSiYQcNGkSDBg2i\n7Oxs+vPPP0kqldI777xDRGUnBJlMRj///DMRFSSEI0eOUF5eHt2/f586depEU6ZMEcq6uLiQj48P\npaWl0fPnz6u0TpWcVsl6yuXyCpuMipcv2g6++eYbYRuysbGhDz74gDIzM+nq1atkYmJCycnJRFSw\n3GvVqkW//PILKZVKWrJkCTVo0ICUSiURaS73b7/9ltq1a0fp6emUl5dHwcHBNGTIEI15GBISQrm5\nuXT48GEyMjKioKAgun//PqWnp5OdnR2dOHGCiIj27dtHjRo1osTERFKpVDRnzhxq3769UCeRSER9\n+vShJ0+e0O3bt6lu3bp06NAhIiq9bRTNp6Lkf+XKFbK3t6d9+/YRUelth0iz2enBgwdkZWVFW7Zs\nIZVKRdu3b6c6deoIyc7Pz48aNWpE169fp5ycHJLJZBQWFkZERD/99BP16dOHcnJySK1W04ULF+jp\n06flLqtqlxBcXFzIzMyMrKysyMXFhUJDQyknJ4cWLFhQamfWvXt3+u9//0tEBSvtrFmzNPqPGjVK\no023YcOGwkZARPTrr7+Sq6srERWsqEZGRsIZA1HBytitWzehOyIigszMzEitVhMR0dOnT0kkEgkb\neElBQUG0YsUKYfwmJiYaC93Ozk7Y8ZiYmNCVK1dKjaOiehd38uRJcnBw0PhuyJAhwtHIrFmzaNiw\nYWXGSkQaO0UiojVr1mhs7MU3vpJHMCV3Wjt27BB2aEXGjx9Ps2fPJqKChDBy5EihX2xsLDk7O2uU\nnzdvHo0ePVqIvWvXrkK/oh1HWbGVpXhCqGhaJS1fvpzee+89IiI6evQoNWnShGJjY0u1+ZZc30o6\nduxYmcMqlUqqVauWkLiJiD7//PMXniGU3EkXt3fvXvLx8RG6XV1dNc5Gq7JOFU2r6GykZD0rcw2h\nZHkTE5NS21B8fLxQvmXLlrR//34iKlju7dq1E/qp1WqqV68enTp1Sqhb0XJ3d3fXWAfu3LlDtWrV\nIpVKJczDO3fuCP1tbGw0zlr79+8vbK89evTQmL8qlYokEgndvn2biAoSwunTp4X+AwcOpAULFhBR\n5a4hTJ48mT7++GMiKnv5Fh/Hpk2byNfXV2P4du3a0caNG4moYPnMnTtX6Pfjjz9Sjx49iKig1aJ9\n+/Zl7lvKYqjvJquSRCIR9u/fj3fffVfj+5SUFOzatQsHDhwQvlMqlRrlKrqL5M6dO3BxcRG6nZ2d\ncefOHaG7bt26MDIy0hjGzs5O+GxiYgJbW1uIRCKhGwAyMzNhYWGB6OhozJ49G9evX4darUZ2djaa\nNWsmDG9jY6PRfi+RSJCZmYmMjAw8f/4cDRs2LBVzZepdvH4l54GLiwvS09NfOF/KG97Z2blSw5Ul\nJSUFcXFxqFOnjvCdUqnEiBEjABQsZ6lUqlH+zp07GuVVKhU6deokdNvb2wufJRIJnj9/DrVaXeVr\nIhVNKykpCVOnTsX58+eRnZ0NpVKJVq1aAQDeffddTJw4EaGhoUhJSUG/fv2wZMkSmJubVzhdf3//\nMofNysqCUql86XmvUCgwefJknDp1Cs+ePYNarYa1tbVGmeLjrso6VaRonX8VbGxsSm1DxZetiYkJ\nMjMzhW5HR0eNOBwdHTW22yLJycl47733NNYHQ0NDKBQKobvkdMqbbkpKCiZPnoxPPvlEYxrp6enC\nvHRwcBC+l0gkyMrKKrfOcXFxCAsLw9WrV5GXl4fc3FwMHDiw3PLF3blzp9T64OLiojEPisdSvB7D\nhw9HamoqBg8ejMePH2PYsGGYO3cuDA3L3vVXu4vK5XF2dsbw4cPx6NEj4e/Zs2f47LPPhDIVrbT1\n69dHcnKy0H379m3Ur1+/3OGrshHk5uaif//++Oyzz/DPP//g0aNHCAgIqNSFIltbWxgbG+PGjRul\n+lWm3sXrl5qaqjHNlJQUjQ3qRerVq4fbt28L3cU/V5WzszP8/PxKxf3DDz8IZYrPX2dnZzRo0ECj\n/NOnTxEZGVmqbFmqsqycnJxeOK2QkBB4eHjgxo0bePLkCebOnatx0XvSpEk4d+4cEhISkJSUhMWL\nF1c6hrKGtbOzg6GhYbnz3tTUFACQnZ0tfHfv3j3h8+effw4DAwP8+eefePLkCTZv3lzqIn3JeV3Z\ndao8ReOr7Hz/NwklNTVV+KxWq5GWlqax3RZxdnbGoUOHNOqVnZ2NevXqVXmazs7OWLNmjca4srKy\nhFusX6Ssun7wwQcICgpCWloaHj9+jAkTJgjLqKJ5I5VKkZKSovFdSkqKxgFVeQwNDTFz5kxcvXoV\nZ86cQWRkJDZt2lRu+RqTEIYNG4YDBw7g8OHDUKlUeP78OeRyucbRb8mdb8nuIUOGYM6cOcjIyEBG\nRga+/vprDB8+vNxpVmZnXiQvLw95eXmwtbWFWCxGdHQ0Dh8+XKlhxWIxxowZg6lTp+Lu3btQqVSI\niYlBXl5epepdpG3btpBIJFi0aBHy8/Mhl8sRGRmJwYMHVyqOgQMHYv78+Xj8+DHS0tLw/fffV7r+\nJfXu3RtJSUnYsmUL8vPzkZ+fj7NnzyIxMRFA6Xnbpk0bmJubY9GiRcjJyYFKpcKff/6Jc+fOlVm+\nJHt7e9y8ebNSsVU0rczMTJibm0MikSAxMRGrVq0SNtpz584hLi4O+fn5kEgkMDY2hoGBgRDDrVu3\nyp1uecOKxWL069cP4eHhyMnJQUJCAjZt2iRMs27dupBKpdi8eTNUKhXWr1+vUdfMzEyYmprCwsIC\n6enpQoIqT1XWqSLF5z8VNDULdX7w4AGePn36wmGrsi2VdP78eezduxdKpRLffvstjI2Ny9wxT5gw\nAZ9//rmQTO/fv4+IiIgqTasozgkTJmDevHlISEgAADx58gS7du164XDF50laWhry8/OF/pmZmahT\npw6MjIwQHx+Pbdu2aSxfsVhc7vrbs2dPJCUlYfv27VAqldi5cycSExPRu3fvUnGXdPz4cfzxxx9Q\nqVQwNzdHrVq1hPW1LDUmITg6OmL//v2YN28e7Ozs4OzsjKVLl2rMiLKO8It/9+WXX6JVq1Zo1qwZ\nmjVrhlatWuHLL7+s9PDllQEAc3NzfPfddxg4cCCsra2xfft29O3b94XDFrdkyRJ4eXmhdevWsLGx\nwYwZM6BWq8utd1m3adaqVQsHDhxAdHQ06tati4kTJ2Lz5s1o0qRJufUpbtasWXBxcUGDBg3Qo0cP\njBgxotzyFc0bMzMzHD58GDt27IBUKkW9evUwY8YM5OXllTm8WCxGZGQkLl26BDc3N9StWxfjx48X\ndjQVTW/GjBmYM2cO6tSpg2XLlpUbMwAYGBi8cFpLlizBtm3bYGFhgfHjx2sk1KdPn2L8+PGwtraG\nq6srbG1thYcex44di4SEBNSpUwf9+vUrNf0XDbty5UpkZmbCwcEBY8aMwejRozXW7bVr12Lx4sWw\ntbVFQkICOnToIPSbNWsWLly4AEtLS/Tp0wf9+/d/4XKuyjpV1rwuvizefvttDBkyBG5ubrC2ttY4\ncymrfMlxldVdsl/fvn2xc+dOWFtbY+vWrdizZ0+ZO7XJkycjMDAQ3bp1g4WFBdq1a4f4+PhKTadk\nmaCgIEyfPh2DBw+GpaUlvLy88Ouvv76wDkXfde7cGZ6ennBwcBCanH/88UfMnDkTFhYW+OabbzQe\nDJVIJPjiiy/QoUMHWFtbIy4uTmN8NjY2iIyMxNKlS2Fra4slS5YgMjJSo1mwvOWjUCgwYMAAWFpa\nwsPDAzKZ7IUHwSL6N6m7ElQqFVq1agVHR0eNNkug4OnRvn37ws3NDQDQv39/jR00Y2+qjRs34uef\nf8bvv/+u71D0avbs2bhx4wY2b96s71DeCFq/qLxixQp4eHjg2bNnZfb38/Or8mkdY+zNoOXjVVaC\nVpuM0tLSEBUVhXHjxpW7YHmBM1ZaRc17bwqeD7ql1SajAQMG4PPPP8fTp0+xZMmSUk1GJ06cQL9+\n/eDo6AipVIolS5bwI/KMMaYnWjtDiIyMhJ2dHXx8fMo9C2jRogVSU1Nx+fJlTJo0CUFBQdoKhzHG\nWEUq9fjaS5gxYwY5OjqSq6srOTg4kEQieeFrE4gKnjp88OBBqe+9vb0JAP/xH//xH/9V4c/b27tK\n+22dvLpCLpcLL6gr7t69e8Ij7HFxceTi4lLm8EC1e8PGK1XylRuvm9e5fq9z3Yi4fjVdVfedOnt1\nRdGFodWrVwMAgoODsXv3bqxatQqGhoaQSCTYsWOHrsJhjDFWgk4Sgp+fH/z8/AAUJIIioaGhCA0N\n1UUIjDHGKlBjnlR+nclkMn2HoFWvc/1e57oBXL83jdafVH4V+NewGGOs6qq67+QzBMYYYwA4ITDG\nGCvECYExxhgATgiMMcYKcUJgjDEGgBMCY4yxQpwQGGOMAeCEwBhjrBAnBMYYYwA4ITDGGCvECYEx\nxhgATgiMMcYKcUJgjDEGgBMCY4yxQlpPCCqVCj4+PujTp0+Z/T/66CM0btwY3t7euHjxorbDYYwx\nVg6tJ4QVK1bAw8ND+AnN4qKionDjxg1cv34da9asQUhIiLbDYYwxVg6tJoS0tDRERUVh3LhxZf5I\nQ0REBEaOHAkA8PX1xePHj6FQKLQZEmOMsXJoNSF8/PHHWLx4McTisieTnp4OJycnodvR0RFpaWna\nDIkxxlg5DLU14sjISNjZ2cHHxwdyubzcciXPHMpqWgKA8PBw4bNMJtP5b6GGhS3EvXs5Op3mv+Xg\nYIIFC6brOwzGmI7I5fIX7m8rorWEcObMGURERCAqKgrPnz/H06dPMWLECGzatEkoI5VKkZqaKnSn\npaVBKpWWOb7iCUEf7t3LgaurfmOoquTkcH2HwBjToZIHy7Nnz67S8FprMpo3bx5SU1Px999/Y8eO\nHXj33Xc1kgEABAYGCt/FxsbCysoK9vb22gqJMcbYC2jtDKGkoqag1atXAwCCg4MREBCAqKgoNGrU\nCKamptiwYYOuwmGMMVaCThKCn58f/Pz8ABQkguJWrlypixAYY4xVgJ9UZowxBoATAmOMsUKcEBhj\njAHghMAYY6wQJwTGGGMAOCEwxhgrxAmBMcYYAE4IjDHGCnFCYIwxBoATAmOMsUKcEBhjjAHghMAY\nY6wQJwTGGGMAOCEwxhgrxAmBMcYYAE4IjDHGCmk1ITx//hy+vr5o3rw5PDw8MGPGjFJl5HI5LC0t\n4ePjAx8fH8yZM0ebITHGGCuHVn8xzdjYGMePH4dEIoFSqUTHjh1x6tQpdOzYUaOcn58fIiIitBkK\nY4yxCmi9yUgikQAA8vLyoFKpYG1tXaoMEWk7DMYYYxXQekJQq9Vo3rw57O3t4e/vDw8PD43+IpEI\nZ86cgbe3NwICApCQkKDtkBhjjJVBq01GACAWi3Hp0iU8efIE3bt3h1wuh0wmE/q3aNECqampkEgk\niI6ORlBQEJKSkkqNJzw8XPgsk8k0xsEYY6zgmqxcLn/p4UWkw/aab775BiYmJvj000/LLdOgQQOc\nP39eo2lJJBLpvVlp1KhwuLqG6zWGqkpODsfGjeH6DoMxpidV3XdqtckoIyMDjx8/BgDk5OTgt99+\ng4+Pj0YZhUIhBBwfHw8iKvM6A2OMMe3SapPR3bt3MXLkSKjVaqjVagwfPhydO3fG6tWrAQDBwcHY\nvXs3Vq1aBUNDQ0gkEuzYsUObITHGGCuHTpuMXhY3Gb0cbjJi7M1WrZqMGGOM1RycEBhjjAHghMAY\nY6wQJwTGGGMAOCEwxhgrxAmBMcYYAE4IjDHGCnFCYIwxBoATAmOMsUKcEBhjjAHghMAYY6wQJwTG\nGGMAOCEwxhgrxAmBMcYYAE4IjDHGCnFCYIwxBkCLCeH58+fw9fVF8+bN4eHhgRkzZpRZ7qOPPkLj\nxo3h7e2NixcvaiscxhhjFdDaT2gaGxvj+PHjkEgkUCqV6NixI06dOoWOHTsKZaKionDjxg1cv34d\ncXFxCAkJQWxsrLZCYowx9gJabTKSSCQAgLy8PKhUKlhbW2v0j4iIwMiRIwEAvr6+ePz4MRQKhTZD\nYowxVg6tJgS1Wo3mzZvD3t4e/v7+8PDw0Oifnp4OJycnodvR0RFpaWnaDIkxxlg5tNZkBABisRiX\nLl3CkydP0L17d8jlcshkMo0yJX8AWiQSlTmu8PBw4bNMJis1HsYYe9PJ5XLI5fKXHl6rCaGIpaUl\nevXqhXPnzmnsyKVSKVJTU4XutLQ0SKXSMsdRPCEwxhgrreTB8uzZs6s0vNaajDIyMvD48WMAQE5O\nDn777Tf4+PholAkMDMSmTZsAALGxsbCysoK9vb22QmKMMfYCWjtDuHv3LkaOHAm1Wg21Wo3hw4ej\nc+fOWL16NQAgODgYAQEBiIqKQqNGjWBqaooNGzZoKxzGGGMV0FpC8PLywoULF0p9HxwcrNG9cuVK\nbYXAGGOsCvhJZcYYYwA4ITDGGCvECYExxhgATgiMMcYKcUJgjDEGgBMCY4yxQpwQGGOMAahEQsjM\nzIRKpQIAXLt2DREREcjPz9d6YIwxxnSrwoTQqVMn5ObmIj09Hd27d8fmzZsxatQoHYTGGGNMlypM\nCEQEiUSCPXv24MMPP8SuXbvw559/6iI2xhhjOlSpawgxMTHYunUrevXqBaDgdw4YY4y9XipMCN9+\n+y3mz5+P9957D56enrh58yb8/f11ERtjjDEdqvDldn5+fvDz8xO6GzZsiO+++06rQTHGGNO9ChPC\n2bNnMW/ePCQnJ0OpVAIo+FWzK1euaD04xhhjulNhQhg6dCiWLFmCpk2bQizmxxYYY+x1VeEevm7d\nuggMDISbmxtcXV2Fv8pITU2Fv78/PD090bRp0zKbmuRyOSwtLeHj4wMfHx/MmTOnypVgjDH271V4\nhjBr1iyMHTsWXbp0gZGREYCCJqN+/fpVOPJatWph+fLlaN68OTIzM9GyZUt07doV7u7uGuX8/PwQ\nERHxklVgjDH2KlSYEP773//i2rVrUCqVGk1GlUkIDg4OcHBwAACYmZnB3d0dd+7cKZUQiKiqcTPG\nGHvFKkwI586dQ2JiIkQi0b+aUHJyMi5evAhfX1+N70UiEc6cOQNvb29IpVIsWbIEHh4e/2pajDHG\nqq7Cawjt27dHQkLCv5pIZmYm3n//faxYsQJmZmYa/Vq0aIHU1FRcvnwZkyZNQlBQ0L+aFmOMsZdT\n4RlCTEwMmjdvjgYNGqB27doAqnbbaX5+Pvr3749hw4aVubM3NzcXPvfs2RMffvghHj58CGtra41y\n4eHhwmeZTAaZTFap6TPG2JtCLpdDLpe/9PAVJoRDhw699MiJCGPHjoWHhwemTJlSZhmFQgE7OzuI\nRCLEx8eDiEolA0AzITDGGCut5MHy7NmzqzR8hQmhsreYluX06dPYsmULmjVrBh8fHwDAvHnzcPv2\nbQBAcHAwdu/ejVWrVsHQ0BASiQQ7dux46ekxxhh7eRUmhH+jY8eOFb4ILzQ0FKGhodoMgzHGWCXw\no8eMMcYAcEJgjDFWqMKE8Msvv6Bx48awsLCAubk5zM3NYWFhoYvYGGOM6VCF1xA+++wzREZGlnq6\nmDHG2OulwjMEBwcHTgaMMfYGqPAMoVWrVhg0aBCCgoKq/HI7xhhjNUeFCeHJkycwMTHB4cOHNb7n\nhMAYY6+XChPCxo0bdRAGY4wxfSs3ISxcuBDTp0/HpEmTSvUTiUT8u8qMMfaaKTchFL2CumXLlhqv\nviaif/0qbMYYY9VPuQmhT58+AIBRo0bpKhbGGGN6xE8qM8YYA8AJgTHGWCFOCIwxxgBUIiFcu3YN\nnTt3hqenJwDgypUrmDNnjtYDY4wxplsVJoT//Oc/mDdvnvCUspeXF7Zv3671wBhjjOlWhQkhOzsb\nvr6+QrdIJEKtWrUqNfLU1FT4+/vD09MTTZs2LffZhY8++giNGzeGt7c3Ll68WMnQGWOMvUoVPqlc\nt25d3LhxQ+jevXs36tWrV6mR16pVC8uXL0fz5s2RmZmJli1bomvXrhovy4uKisKNGzdw/fp1xMXF\nISQkBLGxsS9RFcYYY/9GhQlh5cqVGD9+PBITE1G/fn00aNAAW7durdTIHRwc4ODgAAAwMzODu7s7\n7ty5o5EQIiIiMHLkSACAr68vHj9+DIVCAXt7+5epD2OMsZdUYUJo2LAhjh49iqysLKjVapibm7/U\nhJKTk3Hx4kWN5icASE9Ph5OTk9Dt6OiItLQ0TgiMMaZjFSaER48eYdOmTUhOToZSqQRQ9XcZZWZm\n4v3338eKFStgZmZWqj8RaXTzqzEYY0z3KkwIAQEBaNeuHZo1awaxWFzldxnl5+ejf//+GDZsGIKC\ngkr1l0qlSE1NFbrT0tIglUpLlQsPDxc+y2QyyGSySsfAGGNvArlcDrlc/tLDV5gQcnNzsWzZspca\nORFh7Nix8PDwwJQpU8osExgYiJUrV2Lw4MGIjY2FlZVVmc1FxRMCY4yx0koeLM+ePbtKw1eYED74\n4AOsWbNWHLvXAAAgAElEQVQGffr0Qe3atYXvra2tKxz56dOnsWXLFjRr1gw+Pj4AgHnz5uH27dsA\ngODgYAQEBCAqKgqNGjWCqakpNmzYUKUKMMYYezUqTAjGxsaYNm0a5s6dC7G44LEFkUiEW7duVTjy\njh07Qq1WV1hu5cqVlQiVMcaYNlWYEJYuXYqbN2/C1tZWF/EwxhjTkwqfVG7cuDFMTEx0EQtjjDE9\nqvAMQSKRoHnz5vD39xeuIfBPaDLG2OunwoQQFBRU6nZRfk6AMcZePxUmBP4JTcYYezOUmxAGDBiA\nXbt2wcvLq1Q/kUiEK1euaDUwxhhjulVuQlixYgUAIDIykl8twRhjb4By7zKqX78+AODHH3+Eq6ur\nxt+PP/6oswAZY4zpRoW3nR4+fLjUd1FRUVoJhjHGmP6U22S0atUq/Pjjj7h586bGdYRnz56hQ4cO\nOgmOMcaY7pSbED744AP07NkTYWFhWLhwoXAdwdzcHDY2NjoLkDHGmG6UmxAsLS1haWmJHTt26DIe\nxhhjelLhNQTGGGNvBk4IjDHGAHBCYIwxVogTAmOMMQBaTghjxoyBvb19ma+/AAp+/9PS0hI+Pj7w\n8fHBnDlztBkOY4yxF6jw5Xb/xujRozFp0iSMGDGi3DJ+fn6IiIjQZhiMMcYqQatnCO+88w7q1Knz\nwjIl35PEGGNMP/R6DUEkEuHMmTPw9vZGQEAAEhIS9BkOY4y90bTaZFSRFi1aIDU1FRKJBNHR0QgK\nCkJSUlKZZcPDw4XPMpkMMplMN0EyxlgNIZfLIZfLX3p4EWm5zSY5ORl9+vTBH3/8UWHZBg0a4Pz5\n87C2ttb4XiQS6b1padSocLi6hus1hqpKTg7Hxo3h+g6DMaYnVd136rXJSKFQCMHGx8eDiEolA8YY\nY7qh1SajIUOG4MSJE8jIyICTkxNmz56N/Px8AEBwcDB2796NVatWwdDQEBKJhN+bxBhjeqTVhLB9\n+/YX9g8NDUVoaKg2Q2CMMVZJ/KQyY4wxAJwQGGOMFeKEwBhjDAAnBMYYY4U4ITDGGAPACYExxlgh\nTgiMMcYAcEJgjDFWiBMCY4wxAJwQGGOMFeKEwBhjDAAnBMYYY4U4ITDGGAPACYExxlghTgiMMcYA\ncEJgjDFWSKsJYcyYMbC3t4eXl1e5ZT766CM0btwY3t7euHjxojbDYYwx9gJaTQijR4/GoUOHyu0f\nFRWFGzdu4Pr161izZg1CQkK0GQ5jjLEX0GpCeOedd1CnTp1y+0dERGDkyJEAAF9fXzx+/BgKhUKb\nITHGGCuHXq8hpKenw8nJSeh2dHREWlqaHiNijLE3l6G+AyAijW6RSFRmufDwcOGzTCaDTCbTYlSM\nMVbzyOVyyOXylx5erwlBKpUiNTVV6E5LS4NUKi2zbPGEwBhjrLSSB8uzZ8+u0vB6bTIKDAzEpk2b\nAACxsbGwsrKCvb29PkNijLE3llbPEIYMGYITJ04gIyMDTk5OmD17NvLz8wEAwcHBCAgIQFRUFBo1\nagRTU1Ns2LBBm+Ewxhh7Aa0mhO3bt1dYZuXKldoMgTHGWCXxk8qMMcYAcEJgjDFWiBMCY4wxAJwQ\nGGOMFeKEwBhjDAAnBMYYY4U4ITDGGAPACYExxlghTgiMMcYAcEJgjDFWiBMCY4wxAJwQGGOMFeKE\nwBhjDAAnBMYYY4U4ITDGGANQDX5TmTHGKhIWthD37uXoO4xKc3AwwYIF0/UdRpVpPSEcOnQIU6ZM\ngUqlwrhx4zB9uuZMksvl6Nu3L9zc3AAA/fv3x5dffqntsBhjNci9ezlwdQ3XdxiVlpwcru8QXopW\nE4JKpcLEiRNx5MgRSKVStG7dGoGBgXB3d9co5+fnh4iICG2GwhhjrAJavYYQHx+PRo0awdXVFbVq\n1cLgwYOxf//+UuWISJthMMYYqwStJoT09HQ4OTkJ3Y6OjkhPT9coIxKJcObMGXh7eyMgIAAJCQna\nDIkxxlg5tNpkJBKJKizTokULpKamQiKRIDo6GkFBQUhKSipVLjw8XPgsk8kgk8leYaSMMVbzyeVy\nyOXylx5eqwlBKpUiNTVV6E5NTYWjo6NGGXNzc+Fzz5498eGHH+Lhw4ewtrbWKFc8ITDGGCut5MHy\n7NmzqzS8VpuMWrVqhevXryM5ORl5eXnYuXMnAgMDNcooFArhGkJ8fDyIqFQyYIwxpn1aPUMwNDTE\nypUr0b17d6hUKowdOxbu7u5YvXo1ACA4OBi7d+/GqlWrYGhoCIlEgh07dmgzJMYYY+XQ+nMIPXv2\nRM+ePTW+Cw4OFj6HhoYiNDRU22EwxhirAL+6gjHGGAB+dQVjr4Wa9moHoOa+3uF1xgmBsddATXu1\nA1BzX+/wOuMmI8YYYwA4ITDGGCvECYExxhgATgiMMcYK8UVl9kbgu3AYqxgnBPZG4LtwGKsYNxkx\nxhgDwGcIrBA3qTDGOCEwANykwhjjJiPGGGOFOCEwxhgDwAmBMcZYIa0mhEOHDuHtt99G48aNsXDh\nwjLLfPTRR2jcuDG8vb1x8eJFbYbDGGPsBbSWEFQqFSZOnIhDhw4hISEB27dvx19//aVRJioqCjdu\n3MD169exZs0ahISEaCucai05Wa7vELTqda7f61w3gOv3ptFaQoiPj0ejRo3g6uqKWrVqYfDgwdi/\nf79GmYiICIwcORIA4Ovri8ePH0OhUGgrpGrrdV8pX+f6vc51A7h+bxqtJYT09HQ4OTkJ3Y6OjkhP\nT6+wTFpamrZCYowx9gJaSwgikahS5YjopYZjjDH2ipGWxMTEUPfu3YXuefPm0YIFCzTKBAcH0/bt\n24Xut956i+7du1dqXN7e3gSA//iP//iP/6rw5+3tXaX9ttaeVG7VqhWuX7+O5ORk1K9fHzt37sT2\n7ds1ygQGBmLlypUYPHgwYmNjYWVlBXt7+1LjunTpkrbCZIwxVkhrCcHQ0BArV65E9+7doVKpMHbs\nWLi7u2P16tUAgODgYAQEBCAqKgqNGjWCqakpNmzYoK1wGGOMVUBEVKIRnzHG2BuJn1RmjDEGgBMC\ne4PdvXsX06dPx82bN/HgwQMAgFqt1nNU/6/kyfvrcjJPRK9NXYqUVaeaWEdOCK+5oh2cUqnUcyTV\nT7169QAAW7duRWhoKC5dugSxWFwtNmQiEm7BvnPnDh49evRa3ZItEonw66+/YtmyZdi2bZu+w3kl\nRCIRzp49i+joaPz9998QiUTV6gCjMjghvKYePnyI9PR0iMViHDp0CJ9//jmWL1+u77CqjaINdeHC\nhZgwYQJkMhl69uyJkydP6n1DVigU+OmnnwAAv/32G/r27Yt3330Xe/fuxdOnT/UW16tQlOguX76M\nSZMmQaFQIDo6GsHBwfoO7aUV1eno0aPo27cvfvnlF7Ru3RoXL16EWCyuUUmBfyDnNZSVlYWlS5fC\n1NQUXl5eCAsLw5QpU7Bw4ULcu3cPc+fOhaHhm7noi47+xWIx8vLyYGRkBDs7O0yYMAG1a9fGkCFD\n8Msvv6Bt27YaR+m6jO/8+fM4c+YMFAoF4uLisHnzZly5cgXr169HVlYWAgMDYWFhodO4XhWRSIQT\nJ05gy5YtWLFiBXr27IkbN25g3rx5mDBhgpAIaxKRSISEhATs3r0bO3bsQKdOneDt7Y3OnTvj2LFj\naN68OdRqNcTi6n/8bRAeHh6u7yDYq2VkZIQnT57g2rVruHjxIt5//32MHz8egwYNwrJly3D9+nXI\nZLIasYJqQ1FzxYYNG5CQkABfX18AgI+PD6ysrPDZZ5+hR48esLGx0WlcRQlIKpXCxMQEFy9ehEKh\nwKeffgpPT0+YmJhg69atICK4ubnB2NhYp/G9rJKJ9fLly5g7dy5cXFzg5+cHS0tLNGvWDFFRUYiK\nikLfvn31GG3VqFQqqFQqLFiwAGfOnMFbb70FLy8vtG3bFqampujXrx969+6N+vXr6zvUSuGE8Boh\nIuFIxN3dHZaWljh16hRu3ryJli1bwsnJCb169cLs2bNx48YNdOvW7bVql65I0Y4pJiYGoaGh6NGj\nB5YuXQqFQoF33nkHBgYGaNGiBXJzc5GSkoI2bdpApVLpJHEWnbmIRCLcuXMHPj4+MDQ0xNmzZ6FQ\nKNCuXTu4u7vDwMAAW7ZsQUBAAMzNzbUe179VvF4pKSkgIjRv3hwdO3bEV199BTc3N7i7u8PKygo+\nPj5o2bJlmQ+nVifF65SdnQ0TExPIZDL8888/SElJgbW1NaRSKXx9fWFhYQFTU1M0bNhQz1FXUpWe\na2bVmlqtJiKiAwcO0OjRo4mI6MiRIzR58mRaunQp/f3330REdO/ePTpz5oy+wtSrxMREGjlyJK1e\nvZqIiNLT06lDhw70+eefU15eHhEVzLP//Oc/Oo2raNlFRUWRm5sbXbt2jbKzs2nv3r304Ycf0rJl\ny4SyZb3epbpSqVREVLBOtm/fngIDA2ns2LF09epVOnHiBDVq1Ih2796tMUzRvKiuiuKLjo6mLl26\n0KhRo+ibb74hIqLp06fT1KlT6dSpUxr1qO51KsIJ4TXz66+/kqenJx08eFD47uDBgzR16lSaO3cu\n3bp1S/i+pqyk/0bJOkZFRVHv3r1pyJAhwry4c+cOeXt706effiqUCw0Npbt37+o01qtXr5Knpyed\nOHFC+C47O5v27dtHo0aNokWLFhHR/+9kq/Pyy8nJET6npKSQh4cHnT9/nv744w/atGkTBQQE0L17\n92jPnj3k6OhICoWiWteHiCg/P1/4HB8fTx4eHhQZGUnnzp2j5s2b06RJk0itVtOHH35IH3/8MT16\n9EiP0b6cN/PK4mvs3LlzCA8PR0BAAJ4/fw5jY2MEBARALBYjIiJC45bK1725qHhdb926BYlEgs6d\nO0MqlWLt2rXYt28f+vXrBxcXF+FWwSIrV67UebxKpRIdO3ZEp06doFQqoVarYWJigi5dukAkEsHN\nzQ0AhCas6rr8FAoFtm/fjrFjxwrNWk5OTmjRogWAgtt9z58/j8OHD2P48OFo27Yt7Ozs9Blyhf75\n5x/h9mQjIyNkZ2ejS5cu6NWrFwDgwoULaNOmDU6fPo2vv/4aCoUCVlZWeo666t7Mq4qvCSrjfvm7\nd+/il19+AQDhomNcXBxkMhnmz58v7FTeBCKRCCKRCNHR0ejVqxemTp2KVq1awdLSEoMGDUJycjK2\nbduGlJQU1KtXD+3bt9fZQ1NlTUcikeDQoUOIjIyEoaEhjIyM8Ouvv+K///0vAgMD0bRpU63H9SrU\nrl0bPXv2RGZmJs6dOwdnZ2colUp88cUXAAAbGxtYW1sjKSkJAFC3bl0A1ftBrnv37qFPnz548OAB\nUlNTYWFhgaNHjwoPNIpEIvj7++PJkyewsbGBh4eHniN+OZwQaqjiG09ycrLw86SffPIJ6tSpIzxz\nEB8fj1GjRuHy5cuwtLTUS6z6dPv2bcyaNQtr167Ftm3bMGjQIAQGBqJJkybo168f0tPTNe4TL0oi\nulB0C+bixYtx7NgxNGzYEMuXL8eyZcuwcuVKREVFYfr06ZBKpTqJ59/Kz89HdnY2rKys4OTkhPnz\n52PdunW4evUqli5diuTkZAwcOBAHDhzAtm3b0LlzZwAQboGujmc8+fn5AIBmzZrB2toaq1atwoIF\nC9C0aVMMHToUrVu3hlwuR2RkJKKiomrkWUFx/HK7GooK75iJiIhAeHg4pFIppFIpJk+ejL///hur\nVq1CdnY2MjIyMGfOHPTp00ffIesElbjFMTMzEyEhIZg7dy6cnZ0BAJMmTYKBgQG+/fZbKBQKvd3V\nEh0djalTp2LKlClYsmQJxo0bh169eiEjIwNLly6Fg4MD+vbti969e+vlmYiqyMvLg1wuh62tLZKS\nkpCSkoJhw4ZhyZIlMDIyQr9+/eDm5oY5c+bAysoKbdq0Qa9evap1vXJzc/H777/D0dERmZmZSEpK\ngr29PX777TcQEebPn4+1a9cKd4IFBwfXiGX1Qjq/asFemd9//51atmxJCoWC1q5dS2ZmZvTxxx9T\ncnIyqdVqunXrFqWkpBBRwQXI6n7R7lVQKpVERPTs2TPKz8+n3NxcCgoKou+//14os2PHDpo+fbq+\nQiS1Wk2pqakUFBRESUlJdPToUWrYsCENGTKEZs6cSc+ePStVviYsu927d1O7du2oQYMGtG/fPiIi\nun//Pk2aNImmTZtGV65c0Shf3ev19OlTOnDgAMlkMqpfvz4lJiYSEdHp06dp2rRpFBYWRg8fPiSi\ngov/RNW/ThXh5xBqsKysLHTp0gW3bt3CsmXLsH//fqxZswZHjhxBmzZt0KhRI41mohp71FIJt2/f\nRl5eHszMzLBv3z5MmDABf/zxBwwMDDBq1CiEhYUhMTER586dw6pVqzBmzBg0adJEZ/FRsXvXRSIR\nLCws0KFDB2RlZWHSpEmIi4uDvb09PvnkExgZGcHb2xu1a9fWGKY6osJrISKRCM7Ozjhz5gxq166N\nbt26wczMDLa2tmjbti0OHjyIP//8E+3atROubVXXehUtq9q1ayM7Oxvz58+Hr68v2rdvj/r168PJ\nyQkWFha4fPky5HI5/Pz8YGRkBLFYXG3rVFmcEGqI4juUR48eQaVSQSqVwtHREatXr0aXLl0QEBCA\n3NxcxMTE4P3334e1tbUwfE1eSStjzpw5mDlzJlq3bo1Vq1Zh9OjRcHJywg8//ABnZ2d8/vnnePDg\nAZ4+fYrx48eje/fuOj+1F4lEuHLlCs6dOwcDAwPUr18f9+7dw5EjRzB+/Hjk5OTgjz/+wMSJE+Hk\n5KSzuP4tsViM3377DZs3b8aiRYsgFouxb98+GBsbw93dHUqlEl5eXvDx8akx9RKJRPjtt99gbW2N\nUaNGoW7duti9ezcMDQ3RuHFjGBkZwcjICD179oS9vf1r89Q/33Zag4hEIuzfvx8///wznjx5gg8+\n+ACdO3dGq1atsG7dOuTn52Pnzp1YtmwZGjVqpO9wdaLoyezFixdDrVZj0KBBGDZsGAYPHoycnBzY\n2Nhg0aJFyMjIwLhx44ThSMeXzkQiEfbt24eZM2fCzc0NJiYmaNKkCYKDg+Hg4IAuXbogNTUV3377\nLZo2bVpj2qGL7uL65JNPsHz5cpiammL06NHIyclBZGQkzp49i3Xr1uH48eM15i6pojpNnjwZ33//\nPbp37w4LCws8fPgQe/fuRWxsLC5duoQVK1agQYMG+g731dJfaxWrqsTERPL09KRLly7Rnj176Isv\nvqCvv/6a4uPj6ccff6SAgAA6cOAAEdX8tszKyMzMpD///JOIiOLi4ujp06cUFhZG7u7uwtO8ubm5\nFBUVRTKZjJKTk4WHunSh+DJ49uwZDR48mC5cuEBERCdOnKCwsDDatGkT3b9/n7Zt2yY8PV6Tll1e\nXh5NnjyZoqOjiYjo+fPnQr/o6Ghavnw5HTp0SF/hvZTMzEzq1q0bHT16lIj+/wHAv//+m/73v/9R\n7969hWskrxtOCNVc0cp4584dio6Opp49ewr94uLiqHPnzhQXF0dE//90aE3aofwbt2/fpjFjxlBo\naChJpVLhouWECROoffv2pFAoiKggKdy/f1+nsRWf/6dPn6bo6Ghq164dbdu2jYgKnnpdsmQJTZgw\nodRw1XnZlRXb8OHDS12kv3z5ssbTytW5XkVxFf1//PgxyWQy4SJy0QXjjIwMIipYn4rKV9c6vazX\no+HrNaVWqyESiXDmzBkMHToULi4uMDY2xq5duwAAbdq0gaenJ65evQoAqFWrljBsTWhu+DfUajWc\nnJzQrVs3rF+/Hh988AG8vLwAAKtWrYK3tze6du2Kf/75B0ZGRrC1tQWg+6aia9euYdq0aWjWrBk+\n/fRTHDlyBCdOnIChoSFatmyJhw8f4unTp8KzEDXlomRKSgoSEhIAAGPGjEF+fj72798PADh79iwm\nTJiA69evC+VrQr0UCgUAwNLSEh06dEBYWBgePnwIExMTnDx5Er1798Y///yj8dxEda9TVfFF5WpM\nJBLhyJEjWLduHUJCQtCuXTtkZGTg6tWrOHbsGAwMDLB48WKEhITA0dGx2r/S4FUSiUQ4duwYYmNj\n8cUXX2DPnj3Izc2Fq6srTExM0KtXL9y8eRN2dnbC8wdFw+kqvsuXL2PgwIHo3bs3AgMDUbt2bWRl\nZeHrr79GUlISFi5ciLCwMHh5edWIZUaF1zUiIyMxcuRI7Nq1C7dv30afPn1w9+5d7NixAzt27MDP\nP/+M2bNno1OnTvoOuUJFdYqKisJ//vMf/Prrr6hTpw78/f3xzz//YOrUqcjJycHcuXMRHh6OFi1a\n1Ihl9dL0fIbCSih5Crpx40YSiUS0Zs0aIiJSKBTC2zjHjRuncc3gTXPq1Cnq1q0bERW8odTPz4+2\nbt1K27Zto/fff194e6mu5k1ZTQhDhw6lFi1aCM8W5OXl0YULF2jv3r109uxZncb3Kvz111/Up08f\nSkxMpEePHlG7du3o66+/pszMTHrw4AHFxMQITS01pUklLi6O+vbtSzExMbRgwQIKCQmhrVu3UnZ2\nNu3atYt++eUXOnnyJBHVnDq9LE4I1UzRypaeni60wW7fvp1q165Np0+f1ijzujwMU1kl65iRkUEj\nR46kc+fOEVHBm16HDx9O7777Lu3YsUNv8cXExNDOnTvp6tWrREQ0ZswY6tGjh7C8Sg5T3Zdd8bb1\n4OBgatmyJd28eZOICq5tderUiT766KNyh6tuil8z+OeffyggIID69u0r9P/pp58oODiYNm/erPGQ\nYE1YVv8WJ4RqpGhli4yMpDZt2lC3bt3om2++oYcPH9KuXbvIxsZGOFJ5kxTfCM+fP0/9+/env/76\ni5RKJa1bt478/PyE5Pno0SPh4p8uN96iaZ08eZKaNGlCAwcOpEGDBtG0adOIiGj06NEkk8nKTAo1\nwaVLl+jZs2d0/vx5Gjp0KC1evJiSk5OJqCAp+Pr60l9//aXnKKum6KaDrVu3UpMmTWjdunVCv+++\n+47GjBlD6enp+gpPLzghVDOxsbHUs2dPunDhAkVHR9PChQtpwoQJpFar6aeffiKJREKPHj3S6e2T\n+lT8qCwpKYmysrJo4sSJ9Omnn1KfPn3o+PHjNGjQIOEOI33+KMmZM2eoe/fuwhlLYmIihYSE0A8/\n/EBERIGBgUIzUU1QNP9yc3NpypQp1KtXL3r27BnFxMTQxIkTadmyZcJvShTdeVMTKJVKun//PpmY\nmNDOnTuJiGjPnj3Uu3dvWr9+vVCu6LUvbxJOCNXIw4cPaeDAgdSiRQvhuz/++IOGDBlCR44cISIS\njsreFEU7pYMHD5Kvry9du3aNiAreM7Nx40Z67733yMrKisaNG6e32Ips3bqVRCKRcKSZk5ND27dv\np+Dg4BcOV91kZmZq/BgMUUET5qeffkoDBgygZ8+eUWxsLI0dO5YWLVpE2dnZwjukqmvdiq4nEf3/\nDwzt27ePrK2tae/evUREtHfvXvL396e1a9fqJcbqgBOCHpXVJnnkyBFq1qwZzZ49W/hu4sSJNH/+\nfCL6/19tqq4bnjb89ddf9PbbbwvXUIp7/PgxXb16lWQymfDQly4UX3b3798XmoI2bNhAbm5uQgKP\njo6mjh07UkZGhrDTrM6uXr1KISEhpFAo6OTJk7RixQqh3927d+njjz+mESNGUFZWFp0+fVp4MLA6\nu3r1Kn355ZdERJSQkECHDx8WlldUVBTVrl1beNBs9+7dFB8fr7dY9Y0Tgh4V7VCOHDlC8+bNo7Vr\n11JGRgbJ5XLq378/jRo1ik6cOEGenp7CU5NvgtTUVNq8ebPQffLkSRowYIDQXVZSHDFihE7nUdG0\nIyIiyM/Pj9555x1as2YNXbt2jXbu3EkSiYTGjRtHQUFBwhFodZednU1dunQRmk2OHTtG9vb2tHLl\nSiIqaGo5duwYNW3alAYNGlQjmi2fPHlCfn5+dPbsWXr69ClNmTKFxowZQ0ePHqWsrCwiIlq+fDmJ\nRCKKiooShnuTDriK4wfT9IQK73/+/fffMWHCBJiammLt2rX47rvvUKtWLUyaNAmxsbGYMWMG1q1b\nh3fffRdKpVLfYesEEWHz5s24fPkyAMDNzQ0PHjzA4cOHART8oMqxY8ewcOFCEBFu3ryJmzdv6vSH\nZEQiEc6fP4+lS5dixYoVmDRpElJSUrBjxw706tULK1aswO+//46AgAAEBQVBpVJV618EAwATExMM\nHToU69evh1Qqhb+/Pw4ePIjly5fjhx9+gIGBAWrXro3OnTtj+vTpNeKFbiqVCtnZ2di+fTs++ugj\nfPzxx3B2dsYvv/yCmJgYAED79u3Rr18/jfq81s8avIh+89GbLTExkYYMGSI8Y5Cenk5TpkyhsLAw\nIiKSy+U0YsQIWrBggT7D1KmiZpUVK1bQrl27iKjgesGSJUto2rRptGDBApLL5eTp6UmHDx8Whnvw\n4IFO47x79y6NHj2a2rdvL3x3+vRp6tKlC8XGxhJRwTUFqVRKJ06c0GlsL6P4tRpjY2Py8/OjzMxM\nIir4QflmzZrR2LFjyc7OTnhvUXU/ii6Kb+XKlWRoaCi8JiQvL49mzpxJY8eOpbFjx1Ljxo1r5DMh\n2sBPKusQFZ4VFL2S4uTJkzhx4gTS0tLQvn17SKVSeHt7Y+bMmQgMDMTbb78NS0tLHDt2DB07doRE\nItF3FbSu6Cjt7t27+Pbbb+Hv7w97e3s4ODhAIpHg4MGDuH79OkJCQhAQEAClUgmxWAwTExOtxkXF\nXj9e1E1EiImJQXZ2Nnx9feHk5ISYmBioVCq0bt0aXl5eqF+/Pt5++22NV5FXR0X1srGxgUwmg7W1\nNVasWIGWLVvCy8sLPXr0wNtvv43hw4ejU6dONeJtrEXx3b17F127dsXy5ctRu3ZtdOjQAZ06dYJE\n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\n", + "text": [ + "" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAbwAAAFhCAYAAAALEB8uAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdYFNfXB/Dv0HvvSBFLbKhoVMQCBAt2xdiiGMXYEo2G\nFImxkGjsxhKNURNrLLEiYo0i6M+GGkuQCDZQkSKCUgV2Oe8fvjthAbvMIns+z+MjW+7cM3fKmTsz\nd1YgIgJjjDFWzWmoOgDGGGNMCpzwGGOMqQVOeIwxxtQCJzzGGGNqgRMeY4wxtcAJjzHGmFqQNOGl\npaWhffv2MDExwddffy1l1e+krl27YuPGjaoOo8pydXXF0aNHJatPQ0MDt27dqtQ6hg0bhqlTp1ba\n9I2NjZGYmPhKZaKiouDk5FQ5AVVzjRo1wvHjx9/6dBMTE6GhoYGSkpK3Pm1VGzt2LGbOnFkp09Z6\n0RdcXV2Rnp4OTU1NGBoaokuXLli2bBkMDQ1fubJVq1bBxsYG2dnZrxWsutm/f7+qQ6jSBEGAIAgV\nfjZs2DA4OTlhxowZrzVtHx8fBAYGYsSIEW8S4it73jy9DTk5OZU27TfxpsurqoqNjVV1CJJ61eW4\nbt06/P777zhx4oT43ooVKyorvBf38ARBQEREBHJycvD333/j/Pnzr5x9iQglJSVISkpC/fr1XytQ\nmUz2WuXYu6GqLd/KTDovws+CqJqq2jrKXgO9gKurKx09elR8/dVXX1H37t2JiOj06dPUunVrMjMz\noyZNmlBUVJT4PW9vb/ruu++oTZs2pK+vT0OGDCFtbW3S0dEhIyMjOnr0KBUWFtKECRPIwcGBHBwc\naOLEiVRYWEhERMeOHSNHR0eaO3cu2dnZUWBgIIWGhtKHH35IQ4YMIWNjY3J3d6eEhASaNWsW2djY\nkLOzMx0+fFiMYc2aNVS/fn0yNjYmNzc3WrlypfiZYvoLFy4kGxsbsre3p7Vr14qf5+fnU3BwMLm4\nuJCpqSm1bduWCgoKXjjfZV24cIGaNm1KxsbG1K9fP+rfvz9NmTKFiIgyMzOpW7duZG1tTebm5tS9\ne3e6d++eUhv+9ttvRES0du1aatOmDX311Vdkbm5ONWvWpAMHDjyz3jt37lCfPn3I2tqaLC0tady4\ncUREJJfLacaMGeTi4kI2NjY0dOhQevz4MRER3b59mwRBoLVr15KTkxNZWFjQihUrKCYmhtzd3cnM\n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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 19 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Bonus: How to use Cython without the IPython magic" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "IPython's notebook is really great for explanatory analysis and documentation, but what if we want to compile our Python code via Cython without letting IPython's magic doing all the work? \n", + "These are the steps you would need." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 1. Creating a .pyx file containing the the desired code or function." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%file ccy_classic_lstsqr.pyx\n", + "\n", + "def ccy_classic_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Writing ccy_classic_lstsqr.pyx\n" + ] + } + ], + "prompt_number": 11 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2. Creating a simple setup file" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%file setup.py\n", + "\n", + "from distutils.core import setup\n", + "from distutils.extension import Extension\n", + "from Cython.Distutils import build_ext\n", + "\n", + "setup(\n", + " cmdclass = {'build_ext': build_ext},\n", + " ext_modules = [Extension(\"ccy_classic_lstsqr\", [\"ccy_classic_lstsqr.pyx\"])]\n", + ")" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Writing setup.py\n" + ] + } + ], + "prompt_number": 12 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "####3. Building and Compiling" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "!python3 setup.py build_ext --inplace" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "running build_ext\r\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "cythoning ccy_classic_lstsqr.pyx to ccy_classic_lstsqr.c\r\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "building 'ccy_classic_lstsqr' extension\r\n", + "creating build\r\n", + "creating build/temp.macosx-10.6-intel-3.4\r\n", + "/usr/bin/clang -fno-strict-aliasing -Werror=declaration-after-statement -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -arch i386 -arch x86_64 -g -I/Library/Frameworks/Python.framework/Versions/3.4/include/python3.4m -c ccy_classic_lstsqr.c -o build/temp.macosx-10.6-intel-3.4/ccy_classic_lstsqr.o\r\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\u001b[1mccy_classic_lstsqr.c:2040:28: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyObject_AsString'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2037:32: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function\r\n", + " '__Pyx_PyUnicode_FromString' [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2104:26: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyObject_IsTrue'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2159:33: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyIndex_AsSsize_t'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2188:33: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyInt_FromSize_t'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:1584:32: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyInt_From_long'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:1631:27: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1mfunction '__Pyx_PyInt_As_long' is not\r\n", + " needed and will not be emitted [-Wunneeded-internal-declaration]\u001b[0m\r\n", + "static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:1731:26: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1mfunction '__Pyx_PyInt_As_int' is not\r\n", + " needed and will not be emitted [-Wunneeded-internal-declaration]\u001b[0m\r\n", + "static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "8 warnings generated.\r\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\u001b[1mccy_classic_lstsqr.c:2040:28: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyObject_AsString'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2037:32: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function\r\n", + " '__Pyx_PyUnicode_FromString' [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2104:26: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyObject_IsTrue'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2159:33: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyIndex_AsSsize_t'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2188:33: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyInt_FromSize_t'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:1584:32: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyInt_From_long'\r\n", + " [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:1631:27: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1mfunction '__Pyx_PyInt_As_long' is not\r\n", + " needed and will not be emitted [-Wunneeded-internal-declaration]\u001b[0m\r\n", + "static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mccy_classic_lstsqr.c:1731:26: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1mfunction '__Pyx_PyInt_As_int' is not\r\n", + " needed and will not be emitted [-Wunneeded-internal-declaration]\u001b[0m\r\n", + "static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "8" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " warnings generated.\r\n", + "/usr/bin/clang -bundle -undefined dynamic_lookup -arch i386 -arch x86_64 -g build/temp.macosx-10.6-intel-3.4/ccy_classic_lstsqr.o -o /Users/sebastian/Github/python_reference/benchmarks/ccy_classic_lstsqr.so\r\n" + ] + } + ], + "prompt_number": 13 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4. Importing and running the code" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import ccy_classic_lstsqr\n", + "\n", + "%timeit classic_lstsqr(x, y)\n", + "%timeit cy_classic_lstsqr(x, y)\n", + "%timeit ccy_classic_lstsqr.ccy_classic_lstsqr(x, y)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "100 loops, best of 3: 2.9 ms per loop\n", + "1000 loops, best of 3: 212 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "1000 loops, best of 3: 207 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 20 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/benchmarks/setup.py b/benchmarks/setup.py new file mode 100644 index 0000000..eb0a3bc --- /dev/null +++ b/benchmarks/setup.py @@ -0,0 +1,9 @@ + +from distutils.core import setup +from distutils.extension import Extension +from Cython.Distutils import build_ext + +setup( + cmdclass = {'build_ext': build_ext}, + ext_modules = [Extension("ccy_classic_lstsqr", ["ccy_classic_lstsqr.pyx"])] +) \ No newline at end of file From b612a36ff26ee6a433679e588018eab22ae99b88 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 4 May 2014 19:11:16 -0400 Subject: [PATCH 009/248] fixed links and updated readme --- .../.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb | 4 ++-- benchmarks/cython_least_squares.ipynb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb index ac28769..9174704 100644 --- a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb +++ b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:e0aeebc5816e30eb2937ee4b331a3885fbaf1583183823ad07fb79e368b90290" + "signature": "sha256:14c3265ea9accf7a70bb5032b9e2b881a487f6b81b55999ef8578645edf4e3dd" }, "nbformat": 3, "nbformat_minor": 0, @@ -15,7 +15,7 @@ "[Sebastian Raschka](www.sebastianraschka.com) \n", "last updated: 05/04/2014\n", "\n", - "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb) \n", + "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb) \n", "- [Link to the GitHub repository](https://github.com/rasbt/python_reference)" ] }, diff --git a/benchmarks/cython_least_squares.ipynb b/benchmarks/cython_least_squares.ipynb index ac28769..9174704 100644 --- a/benchmarks/cython_least_squares.ipynb +++ b/benchmarks/cython_least_squares.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:e0aeebc5816e30eb2937ee4b331a3885fbaf1583183823ad07fb79e368b90290" + "signature": "sha256:14c3265ea9accf7a70bb5032b9e2b881a487f6b81b55999ef8578645edf4e3dd" }, "nbformat": 3, "nbformat_minor": 0, @@ -15,7 +15,7 @@ "[Sebastian Raschka](www.sebastianraschka.com) \n", "last updated: 05/04/2014\n", "\n", - "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb) \n", + "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb) \n", "- [Link to the GitHub repository](https://github.com/rasbt/python_reference)" ] }, From cc9e405b4d7514a6f6982922e4557ffbf03b4b5b Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 4 May 2014 19:11:37 -0400 Subject: [PATCH 010/248] fixed links and updated readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 82f14a1..589e610 100755 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ Useful functions, tutorials, and other Python-related things ###Links to view the IPython Notebooks - [Python benchmarks via `timeit`](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/timeit_tests.ipynb?create=1) +- [Implementing the least squares fit method for linear regression and speeding it up via Cython](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb?create=1) - [Benchmarks of different palindrome functions](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/palindrome_timeit.ipynb?create=1) - [A collection of not so obvious Python stuff you should know!](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb?create=1) - [Python's scope resolution for variable names and the LEGB rule](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb?create=1) From b9786dd75ed6dc01c61b5fbfcc3a85c37ca99fca Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 4 May 2014 19:21:25 -0400 Subject: [PATCH 011/248] fixed links and updated readme --- README.md | 4 +- .../cython_least_squares-checkpoint.ipynb | 29 +- benchmarks/cython_least_squares.html | 4928 +++++++++++++++++ benchmarks/cython_least_squares.ipynb | 29 +- 4 files changed, 4981 insertions(+), 9 deletions(-) create mode 100644 benchmarks/cython_least_squares.html diff --git a/README.md b/README.md index 589e610..18dfea1 100755 --- a/README.md +++ b/README.md @@ -7,7 +7,9 @@ Useful functions, tutorials, and other Python-related things ###Links to view the IPython Notebooks - [Python benchmarks via `timeit`](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/timeit_tests.ipynb?create=1) -- [Implementing the least squares fit method for linear regression and speeding it up via Cython](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb?create=1) +- +- Implementing the least squares fit method for linear regression and speeding it up via Cython + [[IPython Notebook](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb?create=1)] [[HTML]()] - [Benchmarks of different palindrome functions](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/palindrome_timeit.ipynb?create=1) - [A collection of not so obvious Python stuff you should know!](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb?create=1) - [Python's scope resolution for variable names and the LEGB rule](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb?create=1) diff --git a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb index 9174704..d9dda4a 100644 --- a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb +++ b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:14c3265ea9accf7a70bb5032b9e2b881a487f6b81b55999ef8578645edf4e3dd" + "signature": "sha256:07d1097e63ed00fca1ea6848104a030744ac87d11e515ae48e01e53b7425d997" }, "nbformat": 3, "nbformat_minor": 0, @@ -442,7 +442,14 @@ "metadata": {}, "source": [ "
\n", - "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", "#### Visualization" ] }, @@ -514,7 +521,14 @@ "metadata": {}, "source": [ "
\n", - "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", "#### Comparing the results from the different implementations" ] }, @@ -569,7 +583,14 @@ "metadata": {}, "source": [ "
\n", - "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", "#### Initial performance comparison" ] }, diff --git a/benchmarks/cython_least_squares.html b/benchmarks/cython_least_squares.html new file mode 100644 index 0000000..1e50e87 --- /dev/null +++ b/benchmarks/cython_least_squares.html @@ -0,0 +1,4928 @@ + + + + + +Notebook + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+
+
+
+
+

All code was executed in Python 3.4

+
+
+
+
+
+
+
+
+
+I am really looking forward to your comments and suggestions to improve and
extend this little collection! Just send me a quick note
via Twitter: @rasbt
or Email: +
+
+
+
+
+
+
+
+
+

Implementing the least squares fit method for linear regression and speeding it up via Cython

+
+
+
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+

Sections

+
+
+
+ +
+
+
+
+
+



+
+
+
+
+
+
+
+
+

Introduction

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+

Linear regression via the least squares method is the simplest approach to performing a regression analysis of a dependent and a explanatory variable. The objective is to find the best-fitting straight line through a set of points that minimizes the sum of the squared offsets from the line.
The offsets come in 2 different flavors: perpendicular and vertical - with respect to the line.

+

Here, we will use the more common approach: minimizing the sum of the perpendicular offsets.

+
+
+
+
+
+
+
+
+

In more mathematical terms, our goal is to compute the best fit to n points \((x_i, y_i)\) with \(i=1,2,...n,\) via linear equation of the form
\(f(x) = a\cdot x + b\).
Here, we assume that the y-component is functionally dependent on the x-component.
In a cartesian coordinate system, \(b\) is the intercept of the straight line with the y-axis, and \(a\) is the slope of this line.

+
+
+
+
+
+
+
+
+

In order to obtain the parameters for the linear regression line for a set of multiple points, we can re-write the problem as matrix equation
\(\pmb X \; \pmb a = \pmb y\)

+
+
+
+
+
+
+
+
+

\(\Rightarrow\Bigg[ \begin{array}{cc} x_1 & 1 \\ ... & 1 \\ x_n & 1 \end{array} \Bigg]\) \(\bigg[ \begin{array}{c} a \\ b \end{array} \bigg]\) \(=\Bigg[ \begin{array}{c} y_1 \\ ... \\ y_n \end{array} \Bigg]\)

+
+
+
+
+
+
+
+
+

With a little bit of calculus, we can rearrange the term in order to obtain the parameter vector \(\pmb a = [a\;b]^T\)

+
+
+
+
+
+
+
+
+

\(\Rightarrow \pmb a = (\pmb X^T \; \pmb X)^{-1} \pmb X^T \; \pmb y\)

+
+
+
+
+
+
+
+
+


The more classic approach to obtain the slope parameter \(a\) and y-axis intercept \(b\) would be:

+
+
+
+
+
+
+
+
+

\(a = \frac{S_{x,y}}{\sigma_{x}^{2}}\quad\) (slope)

+

\(b = \bar{y} - a\bar{x}\quad\) (y-axis intercept)

+
+
+
+
+
+
+
+
+

where

+

\(S_{xy} = \sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})\quad\) (covariance)

+

\(\sigma{_x}^{2} = \sum_{i=1}^{n} (x_i - \bar{x})^2\quad\) (variance)

+
+
+
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+

Least squares fit implementations

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+

1. The matrix approach

+
+
+
+
+
+
+
+
+

First, let us implement the equation:

+
+
+
+
+
+
+
+
+

\(\pmb a = (\pmb X^T \; \pmb X)^{-1} \pmb X^T \; \pmb y\)

+
+
+
+
+
+
+
+
+

which I will refer to as the "matrix approach".

+
+
+
+
+
+
+In [1]: +
+
+
+
import numpy as np
+
+def lin_lstsqr_mat(x, y):
+    """ Computes the least-squares solution to a linear matrix equation. """
+    X = np.vstack([x, np.ones(len(x))]).T
+    return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)
+
+ +
+
+
+ +
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+

2. The classic approach

+
+
+
+
+
+
+
+
+

Next, we will calculate the parameters separately, using only standard library functions in Python, which I will call the "classic approach".

+
+
+
+
+
+
+
+
+

\(a = \frac{S_{x,y}}{\sigma_{x}^{2}}\quad\) (slope)

+

\(b = \bar{y} - a\bar{x}\quad\) (y-axis intercept)

+
+
+
+
+
+
+In [4]: +
+
+
+
def classic_lstsqr(x, y):
+    """ Computes the least-squares solution to a linear matrix equation. """
+    x_avg = sum(x)/len(x)
+    y_avg = sum(y)/len(y)
+    var_x = sum([(x_i - x_avg)**2 for x_i in x])
+    cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])
+    slope = cov_xy / var_x
+    y_interc = y_avg - slope*x_avg
+    return (slope, y_interc)
+
+ +
+
+
+ +
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+

3. Using the lstsq numpy function

+
+
+
+
+
+
+
+
+

For our convenience, numpy has a function that can also compute the leat squares solution of a linear matrix equation. For more information, please refer to the documentation.

+
+
+
+
+
+
+In [5]: +
+
+
+
def numpy_lstsqr(x, y):
+    """ Computes the least-squares solution to a linear matrix equation. """
+    X = np.vstack([x, np.ones(len(x))]).T
+    return np.linalg.lstsq(X,y)[0]
+
+ +
+
+
+ +
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+

4. Using the linregress scipy function

+
+
+
+
+
+
+
+
+

The last approach is using scipy.stats.linregress(), which returns a tuple of 5 different attributes, where the 1st value in the tuple is the slope, and the second value is the y-axis intercept, respectively. The documentation for this function can be found here.

+
+
+
+
+
+
+In [6]: +
+
+
+
import scipy.stats
+
+def scipy_lstsqr(x,y):
+    """ Computes the least-squares solution to a linear matrix equation. """
+    return scipy.stats.linregress(x, y)[0:2]
+
+ +
+
+
+ +
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+

Generating sample data and benchmarking

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+

In order to test our different least squares fit implementation, we will generate some sample data: - 500 sample points for the x-component within the range [0,500)
- 500 sample points for the y-component within the range [100,600)

+

where each sample point is multiplied by a random value within the range [0.8, 12).

+
+
+
+
+
+
+In [7]: +
+
+
+
import random
+random.seed(12345)
+
+x = [x_i*random.randrange(8,12)/10 for x_i in range(500)]
+y = [y_i*random.randrange(8,12)/10 for y_i in range(100,600)]
+
+ +
+
+
+ +
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+

Visualization

+
+
+
+
+
+
+
+
+

To check how our dataset is distributed, and how the straight line, which we obtain via the least square fit method, we will plot it in a scatter plot.
Note that we are using our "matrix approach" here for simplicity, but after plotting the data, we will check whether all of the four different implementations yield the same parameters.

+
+
+
+
+
+
+In [8]: +
+
+
+
%pylab inline
+from matplotlib import pyplot as plt
+
+slope, intercept = lin_lstsqr_mat(x, y)
+
+line_x = [round(min(x)) - 1, round(max(x)) + 1]
+line_y = [slope*x_i + intercept for x_i in line_x]
+
+plt.figure(figsize=(8,8))
+plt.scatter(x,y)
+plt.plot(line_x, line_y, color='red', lw='2')
+
+plt.ylabel('y')
+plt.xlabel('x')
+plt.title('Linear regression via least squares fit')
+
+ftext = 'y = ax + b = {:.3f} + {:.3f}x'\
+        .format(slope, intercept)
+plt.figtext(.15,.8, ftext, fontsize=11, ha='left')
+
+plt.show()
+
+ +
+
+
+ +
+
+ + +
+
+
+Populating the interactive namespace from numpy and matplotlib
+
+
+
+
+ +
+
+
+WARNING: pylab import has clobbered these variables: ['random']
+`%matplotlib` prevents importing * from pylab and numpy
+
+
+
+
+ +
+ + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+

Comparing the results from the different implementations

+
+
+
+
+
+
+
+
+

As mentioned above, let us confirm that the different implementation computed the same parameters (i.e., slope and y-axis intercept) as solution for the linear equation.

+
+
+
+
+
+
+In [9]: +
+
+
+
import prettytable
+
+params = [appr(x,y) for appr in [lin_lstsqr_mat, classic_lstsqr, numpy_lstsqr, scipy_lstsqr]]
+
+print(params)
+
+fit_table = prettytable.PrettyTable(["", "slope", "y-intercept"])
+fit_table.add_row(["matrix approach", params[0][0], params[0][1]])
+fit_table.add_row(["classic approach", params[1][0], params[1][1]])
+fit_table.add_row(["numpy function", params[2][0], params[2][1]])
+fit_table.add_row(["scipy function", params[3][0], params[3][1]])
+
+print(fit_table)
+
+ +
+
+
+ +
+
+ + +
+
+
+[array([   0.95181895,  107.01399744]), (0.95181895319126741, 107.01399744459181), array([   0.95181895,  107.01399744]), (0.95181895319126764, 107.01399744459175)]
++------------------+----------------+---------------+
+|                  |     slope      |  y-intercept  |
++------------------+----------------+---------------+
+| matrix approach  | 0.951818953191 | 107.013997445 |
+| classic approach | 0.951818953191 | 107.013997445 |
+|  numpy function  | 0.951818953191 | 107.013997445 |
+|  scipy function  | 0.951818953191 | 107.013997445 |
++------------------+----------------+---------------+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+

Initial performance comparison

+
+
+
+
+
+
+
+
+

For a first impression how the performances of the different least squares implementations compare against each other, let us do a quick benchmark using the timeit module via IPython's %timeit magic.

+
+
+
+
+
+
+In [10]: +
+
+
+
import timeit
+
+for lab,appr in zip(["matrix approach","classic approach",
+                     "numpy function","scipy function"],
+                    [lin_lstsqr_mat, classic_lstsqr, 
+                     numpy_lstsqr, scipy_lstsqr]):
+    print("\n{}: ".format(lab), end="")
+    %timeit appr(x, y)
+
+ +
+
+
+ +
+
+ + +
+
+
+
+matrix approach: 1000 loops, best of 3: 270 µs per loop
+
+classic approach: 100 loops, best of 3: 2.83 ms per loop
+
+numpy function: 1000 loops, best of 3: 372 µs per loop
+
+scipy function: 1000 loops, best of 3: 594 µs per loop
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+


The timing above indicates, that the "classic" approach (Python's standard library functions only) is significantly worse in performance than the other implemenations - roughly by a magnitude of 10.

+
+
+
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+

Compiling the Python code via Cython in the IPython notebook

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+

Maybe we can speed things up a little bit via Cython's C-extensions for Python. Cython is basically a hybrid between C and Python and can be pictured as compiled Python code with type declarations.
Since we are working in an IPython notebook here, we can make use of the IPython magic: It will automatically convert it to C code, compile it, and load the function.
Just to be thorough, let us also compile the other functions, which already use numpy objects.

+
+
+
+
+
+
+In [15]: +
+
+
+
%load_ext cythonmagic
+
+ +
+
+
+ +
+
+
+
+In [16]: +
+
+
+
%%cython
+import numpy as np
+import scipy.stats
+cimport numpy as np
+
+def cy_lin_lstsqr_mat(x, y):
+    """ Computes the least-squares solution to a linear matrix equation. """
+    X = np.vstack([x, np.ones(len(x))]).T
+    return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)
+
+def cy_classic_lstsqr(x, y):
+    """ Computes the least-squares solution to a linear matrix equation. """
+    x_avg = sum(x)/len(x)
+    y_avg = sum(y)/len(y)
+    var_x = sum([(x_i - x_avg)**2 for x_i in x])
+    cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])
+    slope = cov_xy / var_x
+    y_interc = y_avg - slope*x_avg
+    return (slope, y_interc)
+
+def cy_numpy_lstsqr(x, y):
+    """ Computes the least-squares solution to a linear matrix equation. """
+    X = np.vstack([x, np.ones(len(x))]).T
+    return np.linalg.lstsq(X,y)[0]
+
+def cy_scipy_lstsqr(x,y):
+    """ Computes the least-squares solution to a linear matrix equation. """
+    return scipy.stats.linregress(x, y)[0:2]
+
+ +
+
+
+ +
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+

Comparing the compiled Cython code to the original Python code

+
+
+
+
+
+
+In [17]: +
+
+
+
import timeit
+
+for lab,appr in zip(["matrix approach","classic approach",
+                     "numpy function","scipy function"],
+                    [(lin_lstsqr_mat, cy_lin_lstsqr_mat), 
+                     (classic_lstsqr, cy_classic_lstsqr),
+                     (numpy_lstsqr, cy_numpy_lstsqr),
+                     (scipy_lstsqr, cy_scipy_lstsqr)]):
+    print("\n\n{}: ".format(lab))
+    %timeit appr[0](x, y)
+    %timeit appr[1](x, y)
+
+ +
+
+
+ +
+
+ + +
+
+
+
+
+matrix approach: 
+1000 loops, best of 3: 274 µs per loop
+1000 loops, best of 3: 260 µs per loop
+
+
+classic approach: 
+100 loops, best of 3: 2.82 ms per loop
+1000 loops, best of 3: 212 µs per loop
+
+
+numpy function: 
+1000 loops, best of 3: 379 µs per loop
+1000 loops, best of 3: 370 µs per loop
+
+
+scipy function: 
+1000 loops, best of 3: 608 µs per loop
+100 loops, best of 3: 613 µs per loop
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+



As we've seen before, our "classic" implementation of the least square method is pretty slow compared to using numpy's functions. This is not surprising, since numpy is highly optmized and uses compiled C/C++ and Fortran code already. This explains why there is no significant difference if we used Cython to compile the numpy-objects-containing functions.
However, we were able to speed up the "classic approach" quite significantly, roughly by 1500%.

+

The following 2 code blocks are just to visualize our results in a bar plot.

+
+
+
+
+
+
+In [18]: +
+
+
+
import timeit
+
+funcs =  ['classic_lstsqr', 'cy_classic_lstsqr', 
+          'lin_lstsqr_mat', 'numpy_lstsqr', 'scipy_lstsqr']
+labels = ['classic approach','classic approach (cython)', 
+          'matrix approach', 'numpy function', 'scipy function']
+
+times = [timeit.Timer('%s(x,y)' %f, 
+                      'from __main__ import %s, x, y' %f).timeit(1000)
+         for f in funcs]
+
+times_rel = [times[0]/times[i+1] for i in range(len(times[1:]))]
+
+ +
+
+
+ +
+
+
+
+In [19]: +
+
+
+
%pylab inline
+import matplotlib.pyplot as plt
+
+x_pos = np.arange(len(funcs))
+plt.bar(x_pos, times, align='center', alpha=0.5)
+plt.xticks(x_pos, labels, rotation=45)
+plt.ylabel('time in ms')
+plt.title('Performance of different least square fit implementations')
+plt.show()
+
+x_pos = np.arange(len(funcs[1:]))
+plt.bar(x_pos, times_rel, align='center', alpha=0.5, color="green")
+plt.xticks(x_pos, labels[1:], rotation=45)
+plt.ylabel('relative performance gain')
+plt.title('Performance gain compared to the classic least square implementation')
+plt.show()
+
+ +
+
+
+ +
+
+ + +
+
+
+Populating the interactive namespace from numpy and matplotlib
+
+
+
+
+ +
+ + +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+

Bonus: How to use Cython without the IPython magic

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+

IPython's notebook is really great for explanatory analysis and documentation, but what if we want to compile our Python code via Cython without letting IPython's magic doing all the work?
These are the steps you would need.

+
+
+
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+

1. Creating a .pyx file containing the the desired code or function.

+
+
+
+
+
+
+In [11]: +
+
+
+
%%file ccy_classic_lstsqr.pyx
+
+def ccy_classic_lstsqr(x, y):
+    """ Computes the least-squares solution to a linear matrix equation. """
+    x_avg = sum(x)/len(x)
+    y_avg = sum(y)/len(y)
+    var_x = sum([(x_i - x_avg)**2 for x_i in x])
+    cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])
+    slope = cov_xy / var_x
+    y_interc = y_avg - slope*x_avg
+    return (slope, y_interc)
+
+ +
+
+
+ +
+
+ + +
+
+
+Writing ccy_classic_lstsqr.pyx
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+

2. Creating a simple setup file

+
+
+
+
+
+
+In [12]: +
+
+
+
%%file setup.py
+
+from distutils.core import setup
+from distutils.extension import Extension
+from Cython.Distutils import build_ext
+
+setup(
+    cmdclass = {'build_ext': build_ext},
+    ext_modules = [Extension("ccy_classic_lstsqr", ["ccy_classic_lstsqr.pyx"])]
+)
+
+ +
+
+
+ +
+
+ + +
+
+
+Writing setup.py
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+

3. Building and Compiling

+
+
+
+
+
+
+In [13]: +
+
+
+
!python3 setup.py build_ext --inplace
+
+ +
+
+
+ +
+
+ + +
+
+
+running build_ext
+cythoning ccy_classic_lstsqr.pyx to ccy_classic_lstsqr.c
+building 'ccy_classic_lstsqr' extension
+creating build
+creating build/temp.macosx-10.6-intel-3.4
+/usr/bin/clang -fno-strict-aliasing -Werror=declaration-after-statement -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -arch i386 -arch x86_64 -g -I/Library/Frameworks/Python.framework/Versions/3.4/include/python3.4m -c ccy_classic_lstsqr.c -o build/temp.macosx-10.6-intel-3.4/ccy_classic_lstsqr.o
+ccy_classic_lstsqr.c:2040:28: warning: unused function '__Pyx_PyObject_AsString'
+      [-Wunused-function]
+static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {
+                           ^
+ccy_classic_lstsqr.c:2037:32: warning: unused function
+      '__Pyx_PyUnicode_FromString' [-Wunused-function]
+static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) {
+                               ^
+ccy_classic_lstsqr.c:2104:26: warning: unused function '__Pyx_PyObject_IsTrue'
+      [-Wunused-function]
+static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
+                         ^
+ccy_classic_lstsqr.c:2159:33: warning: unused function '__Pyx_PyIndex_AsSsize_t'
+      [-Wunused-function]
+static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
+                                ^
+ccy_classic_lstsqr.c:2188:33: warning: unused function '__Pyx_PyInt_FromSize_t'
+      [-Wunused-function]
+static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
+                                ^
+ccy_classic_lstsqr.c:1584:32: warning: unused function '__Pyx_PyInt_From_long'
+      [-Wunused-function]
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
+                               ^
+ccy_classic_lstsqr.c:1631:27: warning: function '__Pyx_PyInt_As_long' is not
+      needed and will not be emitted [-Wunneeded-internal-declaration]
+static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
+                          ^
+ccy_classic_lstsqr.c:1731:26: warning: function '__Pyx_PyInt_As_int' is not
+      needed and will not be emitted [-Wunneeded-internal-declaration]
+static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
+                         ^
+8 warnings generated.
+ccy_classic_lstsqr.c:2040:28: warning: unused function '__Pyx_PyObject_AsString'
+      [-Wunused-function]
+static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {
+                           ^
+ccy_classic_lstsqr.c:2037:32: warning: unused function
+      '__Pyx_PyUnicode_FromString' [-Wunused-function]
+static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) {
+                               ^
+ccy_classic_lstsqr.c:2104:26: warning: unused function '__Pyx_PyObject_IsTrue'
+      [-Wunused-function]
+static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
+                         ^
+ccy_classic_lstsqr.c:2159:33: warning: unused function '__Pyx_PyIndex_AsSsize_t'
+      [-Wunused-function]
+static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
+                                ^
+ccy_classic_lstsqr.c:2188:33: warning: unused function '__Pyx_PyInt_FromSize_t'
+      [-Wunused-function]
+static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
+                                ^
+ccy_classic_lstsqr.c:1584:32: warning: unused function '__Pyx_PyInt_From_long'
+      [-Wunused-function]
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
+                               ^
+ccy_classic_lstsqr.c:1631:27: warning: function '__Pyx_PyInt_As_long' is not
+      needed and will not be emitted [-Wunneeded-internal-declaration]
+static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
+                          ^
+ccy_classic_lstsqr.c:1731:26: warning: function '__Pyx_PyInt_As_int' is not
+      needed and will not be emitted [-Wunneeded-internal-declaration]
+static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
+                         ^
+8 warnings generated.
+/usr/bin/clang -bundle -undefined dynamic_lookup -arch i386 -arch x86_64 -g build/temp.macosx-10.6-intel-3.4/ccy_classic_lstsqr.o -o /Users/sebastian/Github/python_reference/benchmarks/ccy_classic_lstsqr.so
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+

4. Importing and running the code

+
+
+
+
+
+
+In [20]: +
+
+
+
import ccy_classic_lstsqr
+
+%timeit classic_lstsqr(x, y)
+%timeit cy_classic_lstsqr(x, y)
+%timeit ccy_classic_lstsqr.ccy_classic_lstsqr(x, y)
+
+ +
+
+
+ +
+
+ + +
+
+
+100 loops, best of 3: 2.9 ms per loop
+1000 loops, best of 3: 212 µs per loop
+1000 loops, best of 3: 207 µs per loop
+
+
+
+
+ +
+
+ +
+
+
+ + diff --git a/benchmarks/cython_least_squares.ipynb b/benchmarks/cython_least_squares.ipynb index 9174704..d9dda4a 100644 --- a/benchmarks/cython_least_squares.ipynb +++ b/benchmarks/cython_least_squares.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:14c3265ea9accf7a70bb5032b9e2b881a487f6b81b55999ef8578645edf4e3dd" + "signature": "sha256:07d1097e63ed00fca1ea6848104a030744ac87d11e515ae48e01e53b7425d997" }, "nbformat": 3, "nbformat_minor": 0, @@ -442,7 +442,14 @@ "metadata": {}, "source": [ "
\n", - "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", "#### Visualization" ] }, @@ -514,7 +521,14 @@ "metadata": {}, "source": [ "
\n", - "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", "#### Comparing the results from the different implementations" ] }, @@ -569,7 +583,14 @@ "metadata": {}, "source": [ "
\n", - "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", "#### Initial performance comparison" ] }, From f6a1db2dfd98c5caa5836fc25d03ba7991164a2e Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 4 May 2014 19:23:08 -0400 Subject: [PATCH 012/248] fixed links and updated readme --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 18dfea1..1305f53 100755 --- a/README.md +++ b/README.md @@ -7,11 +7,9 @@ Useful functions, tutorials, and other Python-related things ###Links to view the IPython Notebooks - [Python benchmarks via `timeit`](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/timeit_tests.ipynb?create=1) -- -- Implementing the least squares fit method for linear regression and speeding it up via Cython - [[IPython Notebook](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb?create=1)] [[HTML]()] -- [Benchmarks of different palindrome functions](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/palindrome_timeit.ipynb?create=1) -- [A collection of not so obvious Python stuff you should know!](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb?create=1) +- [Implementing the least squares fit method for linear regression and speeding it up via Cythonook](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb?create=1) +- [Benchmarks of different palindrome functions](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/palindrome_timeit.ipynb?create=1) +- [A collection of not so obvious Python stuff you should know!](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb?create=1) - [Python's scope resolution for variable names and the LEGB rule](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb?create=1) ### Links to Markdown files From fc9dcf61eff548bc014ad6779f4291ed7d731b86 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 4 May 2014 20:16:02 -0400 Subject: [PATCH 013/248] fixed links and updated readme --- .../cython_least_squares-checkpoint.ipynb | 6 +++--- benchmarks/cython_least_squares.ipynb | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb index d9dda4a..7c78e61 100644 --- a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb +++ b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:07d1097e63ed00fca1ea6848104a030744ac87d11e515ae48e01e53b7425d997" + "signature": "sha256:6fec0ff80302cd983b1b3ab4e6653aa12c291ed854c5efd69f28608d4f6af614" }, "nbformat": 3, "nbformat_minor": 0, @@ -12,7 +12,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "[Sebastian Raschka](www.sebastianraschka.com) \n", + "[Sebastian Raschka](http://www.sebastianraschka.com) \n", "last updated: 05/04/2014\n", "\n", "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb) \n", @@ -414,7 +414,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In order to test our different least squares fit implementation, we will generate some sample data:\n", + "In order to test our different least squares fit implementation, we will generate some sample data: \n", "- 500 sample points for the x-component within the range [0,500) \n", "- 500 sample points for the y-component within the range [100,600) \n", "\n", diff --git a/benchmarks/cython_least_squares.ipynb b/benchmarks/cython_least_squares.ipynb index d9dda4a..7c78e61 100644 --- a/benchmarks/cython_least_squares.ipynb +++ b/benchmarks/cython_least_squares.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:07d1097e63ed00fca1ea6848104a030744ac87d11e515ae48e01e53b7425d997" + "signature": "sha256:6fec0ff80302cd983b1b3ab4e6653aa12c291ed854c5efd69f28608d4f6af614" }, "nbformat": 3, "nbformat_minor": 0, @@ -12,7 +12,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "[Sebastian Raschka](www.sebastianraschka.com) \n", + "[Sebastian Raschka](http://www.sebastianraschka.com) \n", "last updated: 05/04/2014\n", "\n", "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb) \n", @@ -414,7 +414,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In order to test our different least squares fit implementation, we will generate some sample data:\n", + "In order to test our different least squares fit implementation, we will generate some sample data: \n", "- 500 sample points for the x-component within the range [0,500) \n", "- 500 sample points for the y-component within the range [100,600) \n", "\n", From 7d6d3d35400869bed488e2e9f3c4dc33590cad23 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 4 May 2014 22:17:27 -0400 Subject: [PATCH 014/248] research reference added --- .../cython_least_squares-checkpoint.ipynb | 6 ++++-- benchmarks/cython_least_squares.ipynb | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb index 7c78e61..e28d5c5 100644 --- a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb +++ b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:6fec0ff80302cd983b1b3ab4e6653aa12c291ed854c5efd69f28608d4f6af614" + "signature": "sha256:ed0de0773556cdc26dc372038810ad0e5322ec915298a90f2badf09740d856db" }, "nbformat": 3, "nbformat_minor": 0, @@ -104,7 +104,9 @@ "![](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/least_squares_vertical.png) \n", "![](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/least_squares_perpendicular.png) \n", "\n", - "Here, we will use the more common approach: minimizing the sum of the perpendicular offsets.\n" + "As Michael Burger summarizes it nicely in his article \"[Problems of Linear Least Square Regression - And Approaches to Handle Them](http://www.arsa-conf.com/archive/?vid=1&aid=2&kid=60101-220)\": \"the perpendicular offset method delivers a more precise result but is are more complicated to handle. Therefore normally the vertical offsets are used.\" \n", + "Here, we will also use the method of computing the vertical offsets.\n", + "\n" ] }, { diff --git a/benchmarks/cython_least_squares.ipynb b/benchmarks/cython_least_squares.ipynb index 7c78e61..e28d5c5 100644 --- a/benchmarks/cython_least_squares.ipynb +++ b/benchmarks/cython_least_squares.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:6fec0ff80302cd983b1b3ab4e6653aa12c291ed854c5efd69f28608d4f6af614" + "signature": "sha256:ed0de0773556cdc26dc372038810ad0e5322ec915298a90f2badf09740d856db" }, "nbformat": 3, "nbformat_minor": 0, @@ -104,7 +104,9 @@ "![](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/least_squares_vertical.png) \n", "![](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/least_squares_perpendicular.png) \n", "\n", - "Here, we will use the more common approach: minimizing the sum of the perpendicular offsets.\n" + "As Michael Burger summarizes it nicely in his article \"[Problems of Linear Least Square Regression - And Approaches to Handle Them](http://www.arsa-conf.com/archive/?vid=1&aid=2&kid=60101-220)\": \"the perpendicular offset method delivers a more precise result but is are more complicated to handle. Therefore normally the vertical offsets are used.\" \n", + "Here, we will also use the method of computing the vertical offsets.\n", + "\n" ] }, { From f5e08cde14ed95fd6174dcad848305821751c2c7 Mon Sep 17 00:00:00 2001 From: rasbt Date: Mon, 5 May 2014 01:44:10 -0400 Subject: [PATCH 015/248] section on growth rates for different sample sizes --- .../cython_least_squares-checkpoint.ipynb | 86 ++++++++++++++++++- benchmarks/cython_least_squares.ipynb | 86 ++++++++++++++++++- 2 files changed, 170 insertions(+), 2 deletions(-) diff --git a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb index e28d5c5..3032c66 100644 --- a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb +++ b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:ed0de0773556cdc26dc372038810ad0e5322ec915298a90f2badf09740d856db" + "signature": "sha256:a091baac3cb82ac71775c03f73be1925fefe2d659bb7359de4bb88887fbe7d24" }, "nbformat": 3, "nbformat_minor": 0, @@ -69,6 +69,7 @@ "- [Least squares fit implementations](#implementations)\n", "- [Generating sample data and benchmarking](#sample_data)\n", "- [Compiling the Python code via Cython in the IPython notebook](#cython_nb)\n", + "- [Performance growth rates for different sample sizes](#sample_sizes)\n", "- [Bonus: How to use Cython without the IPython magic](#cython_bonus)" ] }, @@ -956,6 +957,89 @@ ], "prompt_number": 19 }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Performance growth rates for different sample sizes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the plot above, we've seen how the different implemantations perform for a fixed sample size n=500. Now, let us take a look at the effect of the sample size on the relative performances for each approach. We will consider the sample sizes 10, 100, 1000, 10000, 100000, and 1000000." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "\n", + "funcs = ['cy_classic_lstsqr', \n", + " 'lin_lstsqr_mat', 'numpy_lstsqr', 'scipy_lstsqr']\n", + "labels = ['classic approach (cython)', 'matrix approach', \n", + " 'numpy function', 'scipy function']\n", + "orders_n = [10**n for n in range(1, 7)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", + " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", + " for f in funcs:\n", + " times_n[f].append(timeit.Timer('%s(x,y)' %f, \n", + " 'from __main__ import %s, x, y' %f).timeit(1000))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 23 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#%pylab inline\n", + "#import matplotlib.pyplot as plt\n", + "\n", + "plt.figure(figsize=(10,8))\n", + "\n", + "for f in times_n.keys():\n", + " plt.plot(orders_n, times_n[f], alpha=0.5, label=f, marker='o', lw=2)\n", + "\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time in ms')\n", + "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", + "plt.legend(loc=2)\n", + "\n", + "\n", + "plt.title('Performance of least square fit implementations for different sample sizes')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nPUQAAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 41 + }, { "cell_type": "markdown", "metadata": {}, diff --git a/benchmarks/cython_least_squares.ipynb b/benchmarks/cython_least_squares.ipynb index e28d5c5..3032c66 100644 --- a/benchmarks/cython_least_squares.ipynb +++ b/benchmarks/cython_least_squares.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:ed0de0773556cdc26dc372038810ad0e5322ec915298a90f2badf09740d856db" + "signature": "sha256:a091baac3cb82ac71775c03f73be1925fefe2d659bb7359de4bb88887fbe7d24" }, "nbformat": 3, "nbformat_minor": 0, @@ -69,6 +69,7 @@ "- [Least squares fit implementations](#implementations)\n", "- [Generating sample data and benchmarking](#sample_data)\n", "- [Compiling the Python code via Cython in the IPython notebook](#cython_nb)\n", + "- [Performance growth rates for different sample sizes](#sample_sizes)\n", "- [Bonus: How to use Cython without the IPython magic](#cython_bonus)" ] }, @@ -956,6 +957,89 @@ ], "prompt_number": 19 }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Performance growth rates for different sample sizes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the plot above, we've seen how the different implemantations perform for a fixed sample size n=500. Now, let us take a look at the effect of the sample size on the relative performances for each approach. We will consider the sample sizes 10, 100, 1000, 10000, 100000, and 1000000." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "\n", + "funcs = ['cy_classic_lstsqr', \n", + " 'lin_lstsqr_mat', 'numpy_lstsqr', 'scipy_lstsqr']\n", + "labels = ['classic approach (cython)', 'matrix approach', \n", + " 'numpy function', 'scipy function']\n", + "orders_n = [10**n for n in range(1, 7)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", + " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", + " for f in funcs:\n", + " times_n[f].append(timeit.Timer('%s(x,y)' %f, \n", + " 'from __main__ import %s, x, y' %f).timeit(1000))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 23 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#%pylab inline\n", + "#import matplotlib.pyplot as plt\n", + "\n", + "plt.figure(figsize=(10,8))\n", + "\n", + "for f in times_n.keys():\n", + " plt.plot(orders_n, times_n[f], alpha=0.5, label=f, marker='o', lw=2)\n", + "\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time in ms')\n", + "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", + "plt.legend(loc=2)\n", + "\n", + "\n", + "plt.title('Performance of least square fit implementations for different sample sizes')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nPUQAAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 41 + }, { "cell_type": "markdown", "metadata": {}, From ad32c82ee9db5179ce910bb169e495a5dfb9ab91 Mon Sep 17 00:00:00 2001 From: rasbt Date: Mon, 5 May 2014 11:40:43 -0400 Subject: [PATCH 016/248] removed temp cython files --- .../cython_least_squares-checkpoint.ipynb | 59 +- benchmarks/ccy_classic_lstsqr.c | 2203 -------- benchmarks/ccy_classic_lstsqr.pyx | 10 - benchmarks/cython_least_squares.html | 4928 ----------------- benchmarks/cython_least_squares.ipynb | 2 +- benchmarks/setup.py | 9 - 6 files changed, 57 insertions(+), 7154 deletions(-) delete mode 100644 benchmarks/ccy_classic_lstsqr.c delete mode 100644 benchmarks/ccy_classic_lstsqr.pyx delete mode 100644 benchmarks/cython_least_squares.html delete mode 100644 benchmarks/setup.py diff --git a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb index 3032c66..5e855ad 100644 --- a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb +++ b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:a091baac3cb82ac71775c03f73be1925fefe2d659bb7359de4bb88887fbe7d24" + "signature": "sha256:379319350ffd7e7539cf8f11b3a7c15b6f1d1013bcb445b55714c76bf0855fa2" }, "nbformat": 3, "nbformat_minor": 0, @@ -714,7 +714,30 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 15 + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "import numpy as np\n", + "import scipy.stats\n", + "cimport numpy as np\n", + "\n", + "def cy_lin_lstsqr_mat2(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " cdef double x_avg = sum(x)/len(x)\n", + " cdef double y_avg = sum(y)/len(y)\n", + " cdef double var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cdef double cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " cdef double slope = cov_xy / var_x\n", + " cdef double y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [] }, { "cell_type": "code", @@ -740,6 +763,16 @@ " y_interc = y_avg - slope*x_avg\n", " return (slope, y_interc)\n", "\n", + "def cy_lin_lstsqr_mat2(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " cdef double x_avg = sum(x)/len(x)\n", + " cdef double y_avg = sum(y)/len(y)\n", + " cdef double var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cdef double cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " cdef double slope = cov_xy / var_x\n", + " cdef double y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)\n", + "\n", "def cy_numpy_lstsqr(x, y):\n", " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", " X = np.vstack([x, np.ones(len(x))]).T\n", @@ -752,7 +785,27 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 16 + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "\n", + "for lab,appr in zip([\"matrix approach\",\"classic approach\",\n", + " \"numpy function\",\"scipy function\"],\n", + " [(lin_lstsqr_mat, cy_lin_lstsqr_mat), \n", + " (classic_lstsqr, cy_classic_lstsqr),\n", + " (cy_lin_lstsqr_mat2, cy_lin_lstsqr_mat2),\n", + " (scipy_lstsqr, cy_scipy_lstsqr)]):\n", + " print(\"\\n\\n{}: \".format(lab))\n", + " %timeit appr[0](x, y)\n", + " %timeit appr[1](x, y)" + ], + "language": "python", + "metadata": {}, + "outputs": [] }, { "cell_type": "markdown", diff --git a/benchmarks/ccy_classic_lstsqr.c b/benchmarks/ccy_classic_lstsqr.c deleted file mode 100644 index 4813b5a..0000000 --- a/benchmarks/ccy_classic_lstsqr.c +++ /dev/null @@ -1,2203 +0,0 @@ -/* Generated by Cython 0.20.1 on Sun May 4 18:53:57 2014 */ - -#define PY_SSIZE_T_CLEAN -#ifndef CYTHON_USE_PYLONG_INTERNALS -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 0 -#else -#include "pyconfig.h" -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 1 -#else -#define CYTHON_USE_PYLONG_INTERNALS 0 -#endif -#endif -#endif -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02040000 - #error Cython requires Python 2.4+. -#else -#define CYTHON_ABI "0_20_1" -#include /* For offsetof */ -#ifndef offsetof -#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION -#define CYTHON_COMPILING_IN_PYPY 1 -#define CYTHON_COMPILING_IN_CPYTHON 0 -#else -#define CYTHON_COMPILING_IN_PYPY 0 -#define CYTHON_COMPILING_IN_CPYTHON 1 -#endif -#if CYTHON_COMPILING_IN_PYPY -#define Py_OptimizeFlag 0 -#endif -#if PY_VERSION_HEX < 0x02050000 - typedef int Py_ssize_t; - #define PY_SSIZE_T_MAX INT_MAX - #define PY_SSIZE_T_MIN INT_MIN - #define PY_FORMAT_SIZE_T "" - #define CYTHON_FORMAT_SSIZE_T "" - #define PyInt_FromSsize_t(z) PyInt_FromLong(z) - #define PyInt_AsSsize_t(o) __Pyx_PyInt_As_int(o) - #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ - (PyErr_Format(PyExc_TypeError, \ - "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ - (PyObject*)0)) - #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ - !PyComplex_Check(o)) - #define PyIndex_Check __Pyx_PyIndex_Check - #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) - #define __PYX_BUILD_PY_SSIZE_T "i" -#else - #define __PYX_BUILD_PY_SSIZE_T "n" - #define CYTHON_FORMAT_SSIZE_T "z" - #define __Pyx_PyIndex_Check PyIndex_Check -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) - #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) - #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) - #define PyVarObject_HEAD_INIT(type, size) \ - PyObject_HEAD_INIT(type) size, - #define PyType_Modified(t) - typedef struct { - void *buf; - PyObject *obj; - Py_ssize_t len; - Py_ssize_t itemsize; - int readonly; - int ndim; - char *format; - Py_ssize_t *shape; - Py_ssize_t *strides; - Py_ssize_t *suboffsets; - void *internal; - } Py_buffer; - #define PyBUF_SIMPLE 0 - #define PyBUF_WRITABLE 0x0001 - #define PyBUF_FORMAT 0x0004 - #define PyBUF_ND 0x0008 - #define PyBUF_STRIDES (0x0010 | PyBUF_ND) - #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) - #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) - #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) - #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) - #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) - #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) - typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); - typedef void (*releasebufferproc)(PyObject *, Py_buffer *); -#endif -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyType_Type -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") -#endif -#if PY_MAJOR_VERSION >= 3 - #define Py_TPFLAGS_CHECKTYPES 0 - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_TPFLAGS_HAVE_VERSION_TAG 0 -#endif -#if PY_VERSION_HEX < 0x02060000 && !defined(Py_TPFLAGS_IS_ABSTRACT) - #define Py_TPFLAGS_IS_ABSTRACT 0 -#endif -#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE) - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) -#else - #define CYTHON_PEP393_ENABLED 0 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyBytesObject PyStringObject - #define PyBytes_Type PyString_Type - #define PyBytes_Check PyString_Check - #define PyBytes_CheckExact PyString_CheckExact - #define PyBytes_FromString PyString_FromString - #define PyBytes_FromStringAndSize PyString_FromStringAndSize - #define PyBytes_FromFormat PyString_FromFormat - #define PyBytes_DecodeEscape PyString_DecodeEscape - #define PyBytes_AsString PyString_AsString - #define PyBytes_AsStringAndSize PyString_AsStringAndSize - #define PyBytes_Size PyString_Size - #define PyBytes_AS_STRING PyString_AS_STRING - #define PyBytes_GET_SIZE PyString_GET_SIZE - #define PyBytes_Repr PyString_Repr - #define PyBytes_Concat PyString_Concat - #define PyBytes_ConcatAndDel PyString_ConcatAndDel -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ - PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) - #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) - #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) - #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) -#else - #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) - #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) -#else - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_NAMESTR(n) ((char *)(n)) - #define __Pyx_DOCSTR(n) ((char *)(n)) -#else - #define __Pyx_NAMESTR(n) (n) - #define __Pyx_DOCSTR(n) (n) -#endif -#ifndef CYTHON_INLINE - #if defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and - a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is - a quiet NaN. */ - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif - - -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) -#define _USE_MATH_DEFINES -#endif -#include -#define __PYX_HAVE__ccy_classic_lstsqr -#define __PYX_HAVE_API__ccy_classic_lstsqr -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#ifdef PYREX_WITHOUT_ASSERTIONS -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) ( \ - (sizeof(type) < sizeof(Py_ssize_t)) || \ - (sizeof(type) > sizeof(Py_ssize_t) && \ - likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX) && \ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN || \ - v == (type)PY_SSIZE_T_MIN))) || \ - (sizeof(type) == sizeof(Py_ssize_t) && \ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyObject_AsSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) -#define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) -#define __Pyx_PyByteArray_FromUString(s) __Pyx_PyByteArray_FromString((char*)s) -#define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) -#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) -#if PY_MAJOR_VERSION < 3 -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) -{ - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return u_end - u - 1; -} -#else -#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen -#endif -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) -#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_COMPILING_IN_CPYTHON -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (ascii_chars_u == NULL) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - } - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - default_encoding_c = PyBytes_AS_STRING(default_encoding); - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(sys); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -#ifdef __GNUC__ - /* Test for GCC > 2.95 */ - #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #else /* __GNUC__ > 2 ... */ - #define likely(x) (x) - #define unlikely(x) (x) - #endif /* __GNUC__ > 2 ... */ -#else /* __GNUC__ */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ - -static PyObject *__pyx_m; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "ccy_classic_lstsqr.pyx", -}; - -/*--- Type declarations ---*/ -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - if (acquire_gil) { \ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - PyGILState_Release(__pyx_gilstate_save); \ - } else { \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext() \ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif /* CYTHON_REFNANNY */ -#define __Pyx_XDECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_XDECREF(tmp); \ - } while (0) -#define __Pyx_DECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_DECREF(tmp); \ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ - -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ - -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ - -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ - const char* function_name); /*proto*/ - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/ -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { - PyListObject* L = (PyListObject*) list; - Py_ssize_t len = Py_SIZE(list); - if (likely(L->allocated > len)) { - Py_INCREF(x); - PyList_SET_ITEM(list, len, x); - Py_SIZE(list) = len+1; - return 0; - } - return PyList_Append(list, x); -} -#else -#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) -#endif - -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); - -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); - -static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/ - -static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/ - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -static int __Pyx_check_binary_version(void); - -typedef struct { - int code_line; - PyCodeObject* code_object; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); /*proto*/ - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ - - -/* Module declarations from 'ccy_classic_lstsqr' */ -#define __Pyx_MODULE_NAME "ccy_classic_lstsqr" -int __pyx_module_is_main_ccy_classic_lstsqr = 0; - -/* Implementation of 'ccy_classic_lstsqr' */ -static PyObject *__pyx_builtin_sum; -static PyObject *__pyx_builtin_zip; -static PyObject *__pyx_pf_18ccy_classic_lstsqr_ccy_classic_lstsqr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y); /* proto */ -static char __pyx_k_x[] = "x"; -static char __pyx_k_y[] = "y"; -static char __pyx_k_sum[] = "sum"; -static char __pyx_k_x_i[] = "x_i"; -static char __pyx_k_y_i[] = "y_i"; -static char __pyx_k_zip[] = "zip"; -static char __pyx_k_main[] = "__main__"; -static char __pyx_k_test[] = "__test__"; -static char __pyx_k_slope[] = "slope"; -static char __pyx_k_var_x[] = "var_x"; -static char __pyx_k_x_avg[] = "x_avg"; -static char __pyx_k_y_avg[] = "y_avg"; -static char __pyx_k_cov_xy[] = "cov_xy"; -static char __pyx_k_y_interc[] = "y_interc"; -static char __pyx_k_ccy_classic_lstsqr[] = "ccy_classic_lstsqr"; -static char __pyx_k_Users_sebastian_Github_python_r[] = "/Users/sebastian/Github/python_reference/benchmarks/ccy_classic_lstsqr.pyx"; -static PyObject *__pyx_kp_s_Users_sebastian_Github_python_r; -static PyObject *__pyx_n_s_ccy_classic_lstsqr; -static PyObject *__pyx_n_s_cov_xy; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_slope; -static PyObject *__pyx_n_s_sum; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_var_x; -static PyObject *__pyx_n_s_x; -static PyObject *__pyx_n_s_x_avg; -static PyObject *__pyx_n_s_x_i; -static PyObject *__pyx_n_s_y; -static PyObject *__pyx_n_s_y_avg; -static PyObject *__pyx_n_s_y_i; -static PyObject *__pyx_n_s_y_interc; -static PyObject *__pyx_n_s_zip; -static PyObject *__pyx_int_2; -static PyObject *__pyx_tuple_; -static PyObject *__pyx_codeobj__2; - -/* "ccy_classic_lstsqr.pyx":2 - * - * def ccy_classic_lstsqr(x, y): # <<<<<<<<<<<<<< - * """ Computes the least-squares solution to a linear matrix equation. """ - * x_avg = sum(x)/len(x) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_18ccy_classic_lstsqr_1ccy_classic_lstsqr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_18ccy_classic_lstsqr_ccy_classic_lstsqr[] = " Computes the least-squares solution to a linear matrix equation. "; -static PyMethodDef __pyx_mdef_18ccy_classic_lstsqr_1ccy_classic_lstsqr = {__Pyx_NAMESTR("ccy_classic_lstsqr"), (PyCFunction)__pyx_pw_18ccy_classic_lstsqr_1ccy_classic_lstsqr, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_18ccy_classic_lstsqr_ccy_classic_lstsqr)}; -static PyObject *__pyx_pw_18ccy_classic_lstsqr_1ccy_classic_lstsqr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_x = 0; - PyObject *__pyx_v_y = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("ccy_classic_lstsqr (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("ccy_classic_lstsqr", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ccy_classic_lstsqr") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_x = values[0]; - __pyx_v_y = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("ccy_classic_lstsqr", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("ccy_classic_lstsqr.ccy_classic_lstsqr", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_18ccy_classic_lstsqr_ccy_classic_lstsqr(__pyx_self, __pyx_v_x, __pyx_v_y); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_18ccy_classic_lstsqr_ccy_classic_lstsqr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y) { - PyObject *__pyx_v_x_avg = NULL; - PyObject *__pyx_v_y_avg = NULL; - PyObject *__pyx_v_var_x = NULL; - PyObject *__pyx_v_cov_xy = NULL; - PyObject *__pyx_v_slope = NULL; - PyObject *__pyx_v_y_interc = NULL; - PyObject *__pyx_v_x_i = NULL; - PyObject *__pyx_v_y_i = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - PyObject *(*__pyx_t_5)(PyObject *); - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *(*__pyx_t_9)(PyObject *); - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("ccy_classic_lstsqr", 0); - - /* "ccy_classic_lstsqr.pyx":4 - * def ccy_classic_lstsqr(x, y): - * """ Computes the least-squares solution to a linear matrix equation. """ - * x_avg = sum(x)/len(x) # <<<<<<<<<<<<<< - * y_avg = sum(y)/len(y) - * var_x = sum([(x_i - x_avg)**2 for x_i in x]) - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_x); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_x); - __Pyx_GIVEREF(__pyx_v_x); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = PyObject_Length(__pyx_v_x); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_x_avg = __pyx_t_4; - __pyx_t_4 = 0; - - /* "ccy_classic_lstsqr.pyx":5 - * """ Computes the least-squares solution to a linear matrix equation. """ - * x_avg = sum(x)/len(x) - * y_avg = sum(y)/len(y) # <<<<<<<<<<<<<< - * var_x = sum([(x_i - x_avg)**2 for x_i in x]) - * cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)]) - */ - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_y); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_y); - __Pyx_GIVEREF(__pyx_v_y); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_3 = PyObject_Length(__pyx_v_y); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_y_avg = __pyx_t_2; - __pyx_t_2 = 0; - - /* "ccy_classic_lstsqr.pyx":6 - * x_avg = sum(x)/len(x) - * y_avg = sum(y)/len(y) - * var_x = sum([(x_i - x_avg)**2 for x_i in x]) # <<<<<<<<<<<<<< - * cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)]) - * slope = cov_xy / var_x - */ - __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyList_CheckExact(__pyx_v_x) || PyTuple_CheckExact(__pyx_v_x)) { - __pyx_t_4 = __pyx_v_x; __Pyx_INCREF(__pyx_t_4); __pyx_t_3 = 0; - __pyx_t_5 = NULL; - } else { - __pyx_t_3 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_x); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; - } - for (;;) { - if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_4)) { - if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_4)) { - if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_1 = __pyx_t_5(__pyx_t_4); - if (unlikely(!__pyx_t_1)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_1); - } - __Pyx_XDECREF_SET(__pyx_v_x_i, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Subtract(__pyx_v_x_i, __pyx_v_x_avg); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = PyNumber_Power(__pyx_t_1, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_var_x = __pyx_t_2; - __pyx_t_2 = 0; - - /* "ccy_classic_lstsqr.pyx":7 - * y_avg = sum(y)/len(y) - * var_x = sum([(x_i - x_avg)**2 for x_i in x]) - * cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)]) # <<<<<<<<<<<<<< - * slope = cov_xy / var_x - * y_interc = y_avg - slope*x_avg - */ - __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_x); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_x); - __Pyx_GIVEREF(__pyx_v_x); - __Pyx_INCREF(__pyx_v_y); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_y); - __Pyx_GIVEREF(__pyx_v_y); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyList_CheckExact(__pyx_t_6) || PyTuple_CheckExact(__pyx_t_6)) { - __pyx_t_4 = __pyx_t_6; __Pyx_INCREF(__pyx_t_4); __pyx_t_3 = 0; - __pyx_t_5 = NULL; - } else { - __pyx_t_3 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - for (;;) { - if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_4)) { - if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_6 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_3); __Pyx_INCREF(__pyx_t_6); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_4, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_4)) { - if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_3); __Pyx_INCREF(__pyx_t_6); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_4, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_6 = __pyx_t_5(__pyx_t_4); - if (unlikely(!__pyx_t_6)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_6); - } - if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { - PyObject* sequence = __pyx_t_6; - #if CYTHON_COMPILING_IN_CPYTHON - Py_ssize_t size = Py_SIZE(sequence); - #else - Py_ssize_t size = PySequence_Size(sequence); - #endif - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - #if CYTHON_COMPILING_IN_CPYTHON - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); - } else { - __pyx_t_1 = PyList_GET_ITEM(sequence, 0); - __pyx_t_7 = PyList_GET_ITEM(sequence, 1); - } - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(__pyx_t_7); - #else - __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - #endif - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_8 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext; - index = 0; __pyx_t_1 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_1)) goto __pyx_L7_unpacking_failed; - __Pyx_GOTREF(__pyx_t_1); - index = 1; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L7_unpacking_failed; - __Pyx_GOTREF(__pyx_t_7); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_9 = NULL; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L8_unpacking_done; - __pyx_L7_unpacking_failed:; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_9 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_L8_unpacking_done:; - } - __Pyx_XDECREF_SET(__pyx_v_x_i, __pyx_t_1); - __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_y_i, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_6 = PyNumber_Subtract(__pyx_v_x_i, __pyx_v_x_avg); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyNumber_Subtract(__pyx_v_y_i, __pyx_v_y_avg); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_1 = PyNumber_Multiply(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_cov_xy = __pyx_t_2; - __pyx_t_2 = 0; - - /* "ccy_classic_lstsqr.pyx":8 - * var_x = sum([(x_i - x_avg)**2 for x_i in x]) - * cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)]) - * slope = cov_xy / var_x # <<<<<<<<<<<<<< - * y_interc = y_avg - slope*x_avg - * return (slope, y_interc) - */ - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_v_cov_xy, __pyx_v_var_x); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_slope = __pyx_t_2; - __pyx_t_2 = 0; - - /* "ccy_classic_lstsqr.pyx":9 - * cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)]) - * slope = cov_xy / var_x - * y_interc = y_avg - slope*x_avg # <<<<<<<<<<<<<< - * return (slope, y_interc) - */ - __pyx_t_2 = PyNumber_Multiply(__pyx_v_slope, __pyx_v_x_avg); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = PyNumber_Subtract(__pyx_v_y_avg, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_y_interc = __pyx_t_4; - __pyx_t_4 = 0; - - /* "ccy_classic_lstsqr.pyx":10 - * slope = cov_xy / var_x - * y_interc = y_avg - slope*x_avg - * return (slope, y_interc) # <<<<<<<<<<<<<< - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_slope); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_slope); - __Pyx_GIVEREF(__pyx_v_slope); - __Pyx_INCREF(__pyx_v_y_interc); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_y_interc); - __Pyx_GIVEREF(__pyx_v_y_interc); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - - /* "ccy_classic_lstsqr.pyx":2 - * - * def ccy_classic_lstsqr(x, y): # <<<<<<<<<<<<<< - * """ Computes the least-squares solution to a linear matrix equation. """ - * x_avg = sum(x)/len(x) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("ccy_classic_lstsqr.ccy_classic_lstsqr", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_x_avg); - __Pyx_XDECREF(__pyx_v_y_avg); - __Pyx_XDECREF(__pyx_v_var_x); - __Pyx_XDECREF(__pyx_v_cov_xy); - __Pyx_XDECREF(__pyx_v_slope); - __Pyx_XDECREF(__pyx_v_y_interc); - __Pyx_XDECREF(__pyx_v_x_i); - __Pyx_XDECREF(__pyx_v_y_i); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -static struct PyModuleDef __pyx_moduledef = { - #if PY_VERSION_HEX < 0x03020000 - { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, - #else - PyModuleDef_HEAD_INIT, - #endif - __Pyx_NAMESTR("ccy_classic_lstsqr"), - 0, /* m_doc */ - -1, /* m_size */ - __pyx_methods /* m_methods */, - NULL, /* m_reload */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_s_Users_sebastian_Github_python_r, __pyx_k_Users_sebastian_Github_python_r, sizeof(__pyx_k_Users_sebastian_Github_python_r), 0, 0, 1, 0}, - {&__pyx_n_s_ccy_classic_lstsqr, __pyx_k_ccy_classic_lstsqr, sizeof(__pyx_k_ccy_classic_lstsqr), 0, 0, 1, 1}, - {&__pyx_n_s_cov_xy, __pyx_k_cov_xy, sizeof(__pyx_k_cov_xy), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_slope, __pyx_k_slope, sizeof(__pyx_k_slope), 0, 0, 1, 1}, - {&__pyx_n_s_sum, __pyx_k_sum, sizeof(__pyx_k_sum), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_var_x, __pyx_k_var_x, sizeof(__pyx_k_var_x), 0, 0, 1, 1}, - {&__pyx_n_s_x, __pyx_k_x, sizeof(__pyx_k_x), 0, 0, 1, 1}, - {&__pyx_n_s_x_avg, __pyx_k_x_avg, sizeof(__pyx_k_x_avg), 0, 0, 1, 1}, - {&__pyx_n_s_x_i, __pyx_k_x_i, sizeof(__pyx_k_x_i), 0, 0, 1, 1}, - {&__pyx_n_s_y, __pyx_k_y, sizeof(__pyx_k_y), 0, 0, 1, 1}, - {&__pyx_n_s_y_avg, __pyx_k_y_avg, sizeof(__pyx_k_y_avg), 0, 0, 1, 1}, - {&__pyx_n_s_y_i, __pyx_k_y_i, sizeof(__pyx_k_y_i), 0, 0, 1, 1}, - {&__pyx_n_s_y_interc, __pyx_k_y_interc, sizeof(__pyx_k_y_interc), 0, 0, 1, 1}, - {&__pyx_n_s_zip, __pyx_k_zip, sizeof(__pyx_k_zip), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_sum = __Pyx_GetBuiltinName(__pyx_n_s_sum); if (!__pyx_builtin_sum) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_zip = __Pyx_GetBuiltinName(__pyx_n_s_zip); if (!__pyx_builtin_zip) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -static int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "ccy_classic_lstsqr.pyx":2 - * - * def ccy_classic_lstsqr(x, y): # <<<<<<<<<<<<<< - * """ Computes the least-squares solution to a linear matrix equation. """ - * x_avg = sum(x)/len(x) - */ - __pyx_tuple_ = PyTuple_Pack(10, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_x_avg, __pyx_n_s_y_avg, __pyx_n_s_var_x, __pyx_n_s_cov_xy, __pyx_n_s_slope, __pyx_n_s_y_interc, __pyx_n_s_x_i, __pyx_n_s_y_i); if (unlikely(!__pyx_tuple_)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple_); - __Pyx_GIVEREF(__pyx_tuple_); - __pyx_codeobj__2 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple_, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_sebastian_Github_python_r, __pyx_n_s_ccy_classic_lstsqr, 2, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -#if PY_MAJOR_VERSION < 3 -PyMODINIT_FUNC initccy_classic_lstsqr(void); /*proto*/ -PyMODINIT_FUNC initccy_classic_lstsqr(void) -#else -PyMODINIT_FUNC PyInit_ccy_classic_lstsqr(void); /*proto*/ -PyMODINIT_FUNC PyInit_ccy_classic_lstsqr(void) -#endif -{ - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_REFNANNY - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); - if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); - } - #endif - __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_ccy_classic_lstsqr(void)", 0); - if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #ifdef __Pyx_CyFunction_USED - if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4(__Pyx_NAMESTR("ccy_classic_lstsqr"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if CYTHON_COMPILING_IN_PYPY - Py_INCREF(__pyx_b); - #endif - if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - /*--- Initialize various global constants etc. ---*/ - if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - if (__pyx_module_is_main_ccy_classic_lstsqr) { - if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!PyDict_GetItemString(modules, "ccy_classic_lstsqr")) { - if (unlikely(PyDict_SetItemString(modules, "ccy_classic_lstsqr", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - } - #endif - /*--- Builtin init code ---*/ - if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Constants init code ---*/ - if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Global init code ---*/ - /*--- Variable export code ---*/ - /*--- Function export code ---*/ - /*--- Type init code ---*/ - /*--- Type import code ---*/ - /*--- Variable import code ---*/ - /*--- Function import code ---*/ - /*--- Execution code ---*/ - - /* "ccy_classic_lstsqr.pyx":2 - * - * def ccy_classic_lstsqr(x, y): # <<<<<<<<<<<<<< - * """ Computes the least-squares solution to a linear matrix equation. """ - * x_avg = sum(x)/len(x) - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_18ccy_classic_lstsqr_1ccy_classic_lstsqr, NULL, __pyx_n_s_ccy_classic_lstsqr); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_ccy_classic_lstsqr, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - if (__pyx_m) { - __Pyx_AddTraceback("init ccy_classic_lstsqr", __pyx_clineno, __pyx_lineno, __pyx_filename); - Py_DECREF(__pyx_m); __pyx_m = 0; - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init ccy_classic_lstsqr"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if PY_MAJOR_VERSION < 3 - return; - #else - return __pyx_m; - #endif -} - -/* Runtime support code */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule((char *)modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif /* CYTHON_REFNANNY */ - -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; -#endif - result = (*call)(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - Py_LeaveRecursiveCall(); -#endif - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { - PyErr_Format(PyExc_ValueError, - "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); -} - -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { - PyErr_Format(PyExc_ValueError, - "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", - index, (index == 1) ? "" : "s"); -} - -static CYTHON_INLINE int __Pyx_IterFinish(void) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - PyObject* exc_type = tstate->curexc_type; - if (unlikely(exc_type)) { - if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) { - PyObject *exc_value, *exc_tb; - exc_value = tstate->curexc_value; - exc_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; - Py_DECREF(exc_type); - Py_XDECREF(exc_value); - Py_XDECREF(exc_tb); - return 0; - } else { - return -1; - } - } - return 0; -#else - if (unlikely(PyErr_Occurred())) { - if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { - PyErr_Clear(); - return 0; - } else { - return -1; - } - } - return 0; -#endif -} - -static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { - if (unlikely(retval)) { - Py_DECREF(retval); - __Pyx_RaiseTooManyValuesError(expected); - return -1; - } else { - return __Pyx_IterFinish(); - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(long) <= sizeof(unsigned long long)) { - return PyLong_FromUnsignedLongLong((unsigned long long) value); - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(long long)) { - return PyLong_FromLongLong((long long) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func) \ - { \ - func_type value = func(x); \ - if (sizeof(target_type) < sizeof(func_type)) { \ - if (unlikely(value != (func_type) (target_type) value)) { \ - func_type zero = 0; \ - PyErr_SetString(PyExc_OverflowError, \ - (is_unsigned && unlikely(value < zero)) ? \ - "can't convert negative value to " #target_type : \ - "value too large to convert to " #target_type); \ - return (target_type) -1; \ - } \ - } \ - return (target_type) value; \ - } - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(long) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong) - } else if (sizeof(long) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -} - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(int) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(int) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong) - } else if (sizeof(int) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -} - -static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { - char message[200]; - PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); - #if PY_VERSION_HEX < 0x02050000 - return PyErr_Warn(NULL, message); - #else - return PyErr_WarnEx(NULL, message, 1); - #endif - } - return 0; -} - -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = (start + end) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, /*int argcount,*/ - 0, /*int kwonlyargcount,*/ - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, /*int firstlineno,*/ - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_globals = 0; - PyFrameObject *py_frame = 0; - py_code = __pyx_find_code_object(c_line ? c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? c_line : py_line, py_code); - } - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - py_frame = PyFrame_New( - PyThreadState_GET(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = py_line; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else /* Python 3+ has unicode identifiers */ - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { -#if PY_VERSION_HEX < 0x03030000 - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -#else /* PY_VERSION_HEX < 0x03030000 */ - if (PyUnicode_READY(o) == -1) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (PyUnicode_IS_ASCII(o)) { - *length = PyUnicode_GET_DATA_SIZE(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ - return PyUnicode_AsUTF8AndSize(o, length); -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ -#endif /* PY_VERSION_HEX < 0x03030000 */ - } else -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ -#if !CYTHON_COMPILING_IN_PYPY -#if PY_VERSION_HEX >= 0x02060000 - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { - PyNumberMethods *m; - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (PyInt_Check(x) || PyLong_Check(x)) -#else - if (PyLong_Check(x)) -#endif - return Py_INCREF(x), x; - m = Py_TYPE(x)->tp_as_number; -#if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = PyNumber_Long(x); - } -#else - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Long(x); - } -#endif - if (res) { -#if PY_MAJOR_VERSION < 3 - if (!PyInt_Check(res) && !PyLong_Check(res)) { -#else - if (!PyLong_Check(res)) { -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - name, name, Py_TYPE(res)->tp_name); - Py_DECREF(res); - return NULL; - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) - return PyInt_AS_LONG(b); -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - switch (Py_SIZE(b)) { - case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0]; - case 0: return 0; - case 1: return ((PyLongObject*)b)->ob_digit[0]; - } - #endif - #endif - #if PY_VERSION_HEX < 0x02060000 - return PyInt_AsSsize_t(b); - #else - return PyLong_AsSsize_t(b); - #endif - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { -#if PY_VERSION_HEX < 0x02050000 - if (ival <= LONG_MAX) - return PyInt_FromLong((long)ival); - else { - unsigned char *bytes = (unsigned char *) &ival; - int one = 1; int little = (int)*(unsigned char*)&one; - return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); - } -#else - return PyInt_FromSize_t(ival); -#endif -} - - -#endif /* Py_PYTHON_H */ diff --git a/benchmarks/ccy_classic_lstsqr.pyx b/benchmarks/ccy_classic_lstsqr.pyx deleted file mode 100644 index 5def68b..0000000 --- a/benchmarks/ccy_classic_lstsqr.pyx +++ /dev/null @@ -1,10 +0,0 @@ - -def ccy_classic_lstsqr(x, y): - """ Computes the least-squares solution to a linear matrix equation. """ - x_avg = sum(x)/len(x) - y_avg = sum(y)/len(y) - var_x = sum([(x_i - x_avg)**2 for x_i in x]) - cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)]) - slope = cov_xy / var_x - y_interc = y_avg - slope*x_avg - return (slope, y_interc) \ No newline at end of file diff --git a/benchmarks/cython_least_squares.html b/benchmarks/cython_least_squares.html deleted file mode 100644 index 1e50e87..0000000 --- a/benchmarks/cython_least_squares.html +++ /dev/null @@ -1,4928 +0,0 @@ - - - - - -Notebook - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
-
-
-
-
-

All code was executed in Python 3.4

-
-
-
-
-
-
-
-
-
-I am really looking forward to your comments and suggestions to improve and
extend this little collection! Just send me a quick note
via Twitter: @rasbt
or Email: -
-
-
-
-
-
-
-
-
-

Implementing the least squares fit method for linear regression and speeding it up via Cython

-
-
-
-
-
-
-
-
-



-
-
-
-
-
-
-
-
-

Sections

-
-
-
- -
-
-
-
-
-



-
-
-
-
-
-
-
-
-

Introduction

-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-

Linear regression via the least squares method is the simplest approach to performing a regression analysis of a dependent and a explanatory variable. The objective is to find the best-fitting straight line through a set of points that minimizes the sum of the squared offsets from the line.
The offsets come in 2 different flavors: perpendicular and vertical - with respect to the line.

-

Here, we will use the more common approach: minimizing the sum of the perpendicular offsets.

-
-
-
-
-
-
-
-
-

In more mathematical terms, our goal is to compute the best fit to n points \((x_i, y_i)\) with \(i=1,2,...n,\) via linear equation of the form
\(f(x) = a\cdot x + b\).
Here, we assume that the y-component is functionally dependent on the x-component.
In a cartesian coordinate system, \(b\) is the intercept of the straight line with the y-axis, and \(a\) is the slope of this line.

-
-
-
-
-
-
-
-
-

In order to obtain the parameters for the linear regression line for a set of multiple points, we can re-write the problem as matrix equation
\(\pmb X \; \pmb a = \pmb y\)

-
-
-
-
-
-
-
-
-

\(\Rightarrow\Bigg[ \begin{array}{cc} x_1 & 1 \\ ... & 1 \\ x_n & 1 \end{array} \Bigg]\) \(\bigg[ \begin{array}{c} a \\ b \end{array} \bigg]\) \(=\Bigg[ \begin{array}{c} y_1 \\ ... \\ y_n \end{array} \Bigg]\)

-
-
-
-
-
-
-
-
-

With a little bit of calculus, we can rearrange the term in order to obtain the parameter vector \(\pmb a = [a\;b]^T\)

-
-
-
-
-
-
-
-
-

\(\Rightarrow \pmb a = (\pmb X^T \; \pmb X)^{-1} \pmb X^T \; \pmb y\)

-
-
-
-
-
-
-
-
-


The more classic approach to obtain the slope parameter \(a\) and y-axis intercept \(b\) would be:

-
-
-
-
-
-
-
-
-

\(a = \frac{S_{x,y}}{\sigma_{x}^{2}}\quad\) (slope)

-

\(b = \bar{y} - a\bar{x}\quad\) (y-axis intercept)

-
-
-
-
-
-
-
-
-

where

-

\(S_{xy} = \sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})\quad\) (covariance)

-

\(\sigma{_x}^{2} = \sum_{i=1}^{n} (x_i - \bar{x})^2\quad\) (variance)

-
-
-
-
-
-
-
-
-



-
-
-
-
-
-
-
-
-

Least squares fit implementations

-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-



-
-
-
-
-
-
-
-
-

1. The matrix approach

-
-
-
-
-
-
-
-
-

First, let us implement the equation:

-
-
-
-
-
-
-
-
-

\(\pmb a = (\pmb X^T \; \pmb X)^{-1} \pmb X^T \; \pmb y\)

-
-
-
-
-
-
-
-
-

which I will refer to as the "matrix approach".

-
-
-
-
-
-
-In [1]: -
-
-
-
import numpy as np
-
-def lin_lstsqr_mat(x, y):
-    """ Computes the least-squares solution to a linear matrix equation. """
-    X = np.vstack([x, np.ones(len(x))]).T
-    return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)
-
- -
-
-
- -
-
-
-
-
-
-



-
-
-
-
-
-
-
-
-

2. The classic approach

-
-
-
-
-
-
-
-
-

Next, we will calculate the parameters separately, using only standard library functions in Python, which I will call the "classic approach".

-
-
-
-
-
-
-
-
-

\(a = \frac{S_{x,y}}{\sigma_{x}^{2}}\quad\) (slope)

-

\(b = \bar{y} - a\bar{x}\quad\) (y-axis intercept)

-
-
-
-
-
-
-In [4]: -
-
-
-
def classic_lstsqr(x, y):
-    """ Computes the least-squares solution to a linear matrix equation. """
-    x_avg = sum(x)/len(x)
-    y_avg = sum(y)/len(y)
-    var_x = sum([(x_i - x_avg)**2 for x_i in x])
-    cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])
-    slope = cov_xy / var_x
-    y_interc = y_avg - slope*x_avg
-    return (slope, y_interc)
-
- -
-
-
- -
-
-
-
-
-
-



-
-
-
-
-
-
-
-
-

3. Using the lstsq numpy function

-
-
-
-
-
-
-
-
-

For our convenience, numpy has a function that can also compute the leat squares solution of a linear matrix equation. For more information, please refer to the documentation.

-
-
-
-
-
-
-In [5]: -
-
-
-
def numpy_lstsqr(x, y):
-    """ Computes the least-squares solution to a linear matrix equation. """
-    X = np.vstack([x, np.ones(len(x))]).T
-    return np.linalg.lstsq(X,y)[0]
-
- -
-
-
- -
-
-
-
-
-
-



-
-
-
-
-
-
-
-
-

4. Using the linregress scipy function

-
-
-
-
-
-
-
-
-

The last approach is using scipy.stats.linregress(), which returns a tuple of 5 different attributes, where the 1st value in the tuple is the slope, and the second value is the y-axis intercept, respectively. The documentation for this function can be found here.

-
-
-
-
-
-
-In [6]: -
-
-
-
import scipy.stats
-
-def scipy_lstsqr(x,y):
-    """ Computes the least-squares solution to a linear matrix equation. """
-    return scipy.stats.linregress(x, y)[0:2]
-
- -
-
-
- -
-
-
-
-
-
-



-
-
-
-
-
-
-
-
-

Generating sample data and benchmarking

-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-

In order to test our different least squares fit implementation, we will generate some sample data: - 500 sample points for the x-component within the range [0,500)
- 500 sample points for the y-component within the range [100,600)

-

where each sample point is multiplied by a random value within the range [0.8, 12).

-
-
-
-
-
-
-In [7]: -
-
-
-
import random
-random.seed(12345)
-
-x = [x_i*random.randrange(8,12)/10 for x_i in range(500)]
-y = [y_i*random.randrange(8,12)/10 for y_i in range(100,600)]
-
- -
-
-
- -
-
-
-
-
-
-



-
-
-
-
-
-
-
-
-

Visualization

-
-
-
-
-
-
-
-
-

To check how our dataset is distributed, and how the straight line, which we obtain via the least square fit method, we will plot it in a scatter plot.
Note that we are using our "matrix approach" here for simplicity, but after plotting the data, we will check whether all of the four different implementations yield the same parameters.

-
-
-
-
-
-
-In [8]: -
-
-
-
%pylab inline
-from matplotlib import pyplot as plt
-
-slope, intercept = lin_lstsqr_mat(x, y)
-
-line_x = [round(min(x)) - 1, round(max(x)) + 1]
-line_y = [slope*x_i + intercept for x_i in line_x]
-
-plt.figure(figsize=(8,8))
-plt.scatter(x,y)
-plt.plot(line_x, line_y, color='red', lw='2')
-
-plt.ylabel('y')
-plt.xlabel('x')
-plt.title('Linear regression via least squares fit')
-
-ftext = 'y = ax + b = {:.3f} + {:.3f}x'\
-        .format(slope, intercept)
-plt.figtext(.15,.8, ftext, fontsize=11, ha='left')
-
-plt.show()
-
- -
-
-
- -
-
- - -
-
-
-Populating the interactive namespace from numpy and matplotlib
-
-
-
-
- -
-
-
-WARNING: pylab import has clobbered these variables: ['random']
-`%matplotlib` prevents importing * from pylab and numpy
-
-
-
-
- -
- - -
- -
- -
- -
-
- -
-
-
-
-
-
-



-
-
-
-
-
-
-
-
-

Comparing the results from the different implementations

-
-
-
-
-
-
-
-
-

As mentioned above, let us confirm that the different implementation computed the same parameters (i.e., slope and y-axis intercept) as solution for the linear equation.

-
-
-
-
-
-
-In [9]: -
-
-
-
import prettytable
-
-params = [appr(x,y) for appr in [lin_lstsqr_mat, classic_lstsqr, numpy_lstsqr, scipy_lstsqr]]
-
-print(params)
-
-fit_table = prettytable.PrettyTable(["", "slope", "y-intercept"])
-fit_table.add_row(["matrix approach", params[0][0], params[0][1]])
-fit_table.add_row(["classic approach", params[1][0], params[1][1]])
-fit_table.add_row(["numpy function", params[2][0], params[2][1]])
-fit_table.add_row(["scipy function", params[3][0], params[3][1]])
-
-print(fit_table)
-
- -
-
-
- -
-
- - -
-
-
-[array([   0.95181895,  107.01399744]), (0.95181895319126741, 107.01399744459181), array([   0.95181895,  107.01399744]), (0.95181895319126764, 107.01399744459175)]
-+------------------+----------------+---------------+
-|                  |     slope      |  y-intercept  |
-+------------------+----------------+---------------+
-| matrix approach  | 0.951818953191 | 107.013997445 |
-| classic approach | 0.951818953191 | 107.013997445 |
-|  numpy function  | 0.951818953191 | 107.013997445 |
-|  scipy function  | 0.951818953191 | 107.013997445 |
-+------------------+----------------+---------------+
-
-
-
-
- -
-
- -
-
-
-
-
-
-



-
-
-
-
-
-
-
-
-

Initial performance comparison

-
-
-
-
-
-
-
-
-

For a first impression how the performances of the different least squares implementations compare against each other, let us do a quick benchmark using the timeit module via IPython's %timeit magic.

-
-
-
-
-
-
-In [10]: -
-
-
-
import timeit
-
-for lab,appr in zip(["matrix approach","classic approach",
-                     "numpy function","scipy function"],
-                    [lin_lstsqr_mat, classic_lstsqr, 
-                     numpy_lstsqr, scipy_lstsqr]):
-    print("\n{}: ".format(lab), end="")
-    %timeit appr(x, y)
-
- -
-
-
- -
-
- - -
-
-
-
-matrix approach: 1000 loops, best of 3: 270 µs per loop
-
-classic approach: 100 loops, best of 3: 2.83 ms per loop
-
-numpy function: 1000 loops, best of 3: 372 µs per loop
-
-scipy function: 1000 loops, best of 3: 594 µs per loop
-
-
-
-
- -
-
- -
-
-
-
-
-
-


The timing above indicates, that the "classic" approach (Python's standard library functions only) is significantly worse in performance than the other implemenations - roughly by a magnitude of 10.

-
-
-
-
-
-
-
-
-



-
-
-
-
-
-
-
-
-

Compiling the Python code via Cython in the IPython notebook

-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-

Maybe we can speed things up a little bit via Cython's C-extensions for Python. Cython is basically a hybrid between C and Python and can be pictured as compiled Python code with type declarations.
Since we are working in an IPython notebook here, we can make use of the IPython magic: It will automatically convert it to C code, compile it, and load the function.
Just to be thorough, let us also compile the other functions, which already use numpy objects.

-
-
-
-
-
-
-In [15]: -
-
-
-
%load_ext cythonmagic
-
- -
-
-
- -
-
-
-
-In [16]: -
-
-
-
%%cython
-import numpy as np
-import scipy.stats
-cimport numpy as np
-
-def cy_lin_lstsqr_mat(x, y):
-    """ Computes the least-squares solution to a linear matrix equation. """
-    X = np.vstack([x, np.ones(len(x))]).T
-    return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)
-
-def cy_classic_lstsqr(x, y):
-    """ Computes the least-squares solution to a linear matrix equation. """
-    x_avg = sum(x)/len(x)
-    y_avg = sum(y)/len(y)
-    var_x = sum([(x_i - x_avg)**2 for x_i in x])
-    cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])
-    slope = cov_xy / var_x
-    y_interc = y_avg - slope*x_avg
-    return (slope, y_interc)
-
-def cy_numpy_lstsqr(x, y):
-    """ Computes the least-squares solution to a linear matrix equation. """
-    X = np.vstack([x, np.ones(len(x))]).T
-    return np.linalg.lstsq(X,y)[0]
-
-def cy_scipy_lstsqr(x,y):
-    """ Computes the least-squares solution to a linear matrix equation. """
-    return scipy.stats.linregress(x, y)[0:2]
-
- -
-
-
- -
-
-
-
-
-
-



-
-
-
-
-
-
-
-
-

Comparing the compiled Cython code to the original Python code

-
-
-
-
-
-
-In [17]: -
-
-
-
import timeit
-
-for lab,appr in zip(["matrix approach","classic approach",
-                     "numpy function","scipy function"],
-                    [(lin_lstsqr_mat, cy_lin_lstsqr_mat), 
-                     (classic_lstsqr, cy_classic_lstsqr),
-                     (numpy_lstsqr, cy_numpy_lstsqr),
-                     (scipy_lstsqr, cy_scipy_lstsqr)]):
-    print("\n\n{}: ".format(lab))
-    %timeit appr[0](x, y)
-    %timeit appr[1](x, y)
-
- -
-
-
- -
-
- - -
-
-
-
-
-matrix approach: 
-1000 loops, best of 3: 274 µs per loop
-1000 loops, best of 3: 260 µs per loop
-
-
-classic approach: 
-100 loops, best of 3: 2.82 ms per loop
-1000 loops, best of 3: 212 µs per loop
-
-
-numpy function: 
-1000 loops, best of 3: 379 µs per loop
-1000 loops, best of 3: 370 µs per loop
-
-
-scipy function: 
-1000 loops, best of 3: 608 µs per loop
-100 loops, best of 3: 613 µs per loop
-
-
-
-
- -
-
- -
-
-
-
-
-
-



As we've seen before, our "classic" implementation of the least square method is pretty slow compared to using numpy's functions. This is not surprising, since numpy is highly optmized and uses compiled C/C++ and Fortran code already. This explains why there is no significant difference if we used Cython to compile the numpy-objects-containing functions.
However, we were able to speed up the "classic approach" quite significantly, roughly by 1500%.

-

The following 2 code blocks are just to visualize our results in a bar plot.

-
-
-
-
-
-
-In [18]: -
-
-
-
import timeit
-
-funcs =  ['classic_lstsqr', 'cy_classic_lstsqr', 
-          'lin_lstsqr_mat', 'numpy_lstsqr', 'scipy_lstsqr']
-labels = ['classic approach','classic approach (cython)', 
-          'matrix approach', 'numpy function', 'scipy function']
-
-times = [timeit.Timer('%s(x,y)' %f, 
-                      'from __main__ import %s, x, y' %f).timeit(1000)
-         for f in funcs]
-
-times_rel = [times[0]/times[i+1] for i in range(len(times[1:]))]
-
- -
-
-
- -
-
-
-
-In [19]: -
-
-
-
%pylab inline
-import matplotlib.pyplot as plt
-
-x_pos = np.arange(len(funcs))
-plt.bar(x_pos, times, align='center', alpha=0.5)
-plt.xticks(x_pos, labels, rotation=45)
-plt.ylabel('time in ms')
-plt.title('Performance of different least square fit implementations')
-plt.show()
-
-x_pos = np.arange(len(funcs[1:]))
-plt.bar(x_pos, times_rel, align='center', alpha=0.5, color="green")
-plt.xticks(x_pos, labels[1:], rotation=45)
-plt.ylabel('relative performance gain')
-plt.title('Performance gain compared to the classic least square implementation')
-plt.show()
-
- -
-
-
- -
-
- - -
-
-
-Populating the interactive namespace from numpy and matplotlib
-
-
-
-
- -
- - -
- -
- -
- -
- - -
- -
- -
- -
-
- -
-
-
-
-
-
-



-
-
-
-
-
-
-
-
-

Bonus: How to use Cython without the IPython magic

-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-

IPython's notebook is really great for explanatory analysis and documentation, but what if we want to compile our Python code via Cython without letting IPython's magic doing all the work?
These are the steps you would need.

-
-
-
-
-
-
-
-
-



-
-
-
-
-
-
-
-
-

1. Creating a .pyx file containing the the desired code or function.

-
-
-
-
-
-
-In [11]: -
-
-
-
%%file ccy_classic_lstsqr.pyx
-
-def ccy_classic_lstsqr(x, y):
-    """ Computes the least-squares solution to a linear matrix equation. """
-    x_avg = sum(x)/len(x)
-    y_avg = sum(y)/len(y)
-    var_x = sum([(x_i - x_avg)**2 for x_i in x])
-    cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])
-    slope = cov_xy / var_x
-    y_interc = y_avg - slope*x_avg
-    return (slope, y_interc)
-
- -
-
-
- -
-
- - -
-
-
-Writing ccy_classic_lstsqr.pyx
-
-
-
-
- -
-
- -
-
-
-
-
-
-



-
-
-
-
-
-
-
-
-

2. Creating a simple setup file

-
-
-
-
-
-
-In [12]: -
-
-
-
%%file setup.py
-
-from distutils.core import setup
-from distutils.extension import Extension
-from Cython.Distutils import build_ext
-
-setup(
-    cmdclass = {'build_ext': build_ext},
-    ext_modules = [Extension("ccy_classic_lstsqr", ["ccy_classic_lstsqr.pyx"])]
-)
-
- -
-
-
- -
-
- - -
-
-
-Writing setup.py
-
-
-
-
- -
-
- -
-
-
-
-
-
-



-
-
-
-
-
-
-
-
-

3. Building and Compiling

-
-
-
-
-
-
-In [13]: -
-
-
-
!python3 setup.py build_ext --inplace
-
- -
-
-
- -
-
- - -
-
-
-running build_ext
-cythoning ccy_classic_lstsqr.pyx to ccy_classic_lstsqr.c
-building 'ccy_classic_lstsqr' extension
-creating build
-creating build/temp.macosx-10.6-intel-3.4
-/usr/bin/clang -fno-strict-aliasing -Werror=declaration-after-statement -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -arch i386 -arch x86_64 -g -I/Library/Frameworks/Python.framework/Versions/3.4/include/python3.4m -c ccy_classic_lstsqr.c -o build/temp.macosx-10.6-intel-3.4/ccy_classic_lstsqr.o
-ccy_classic_lstsqr.c:2040:28: warning: unused function '__Pyx_PyObject_AsString'
-      [-Wunused-function]
-static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {
-                           ^
-ccy_classic_lstsqr.c:2037:32: warning: unused function
-      '__Pyx_PyUnicode_FromString' [-Wunused-function]
-static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) {
-                               ^
-ccy_classic_lstsqr.c:2104:26: warning: unused function '__Pyx_PyObject_IsTrue'
-      [-Wunused-function]
-static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
-                         ^
-ccy_classic_lstsqr.c:2159:33: warning: unused function '__Pyx_PyIndex_AsSsize_t'
-      [-Wunused-function]
-static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
-                                ^
-ccy_classic_lstsqr.c:2188:33: warning: unused function '__Pyx_PyInt_FromSize_t'
-      [-Wunused-function]
-static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
-                                ^
-ccy_classic_lstsqr.c:1584:32: warning: unused function '__Pyx_PyInt_From_long'
-      [-Wunused-function]
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
-                               ^
-ccy_classic_lstsqr.c:1631:27: warning: function '__Pyx_PyInt_As_long' is not
-      needed and will not be emitted [-Wunneeded-internal-declaration]
-static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
-                          ^
-ccy_classic_lstsqr.c:1731:26: warning: function '__Pyx_PyInt_As_int' is not
-      needed and will not be emitted [-Wunneeded-internal-declaration]
-static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
-                         ^
-8 warnings generated.
-ccy_classic_lstsqr.c:2040:28: warning: unused function '__Pyx_PyObject_AsString'
-      [-Wunused-function]
-static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {
-                           ^
-ccy_classic_lstsqr.c:2037:32: warning: unused function
-      '__Pyx_PyUnicode_FromString' [-Wunused-function]
-static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) {
-                               ^
-ccy_classic_lstsqr.c:2104:26: warning: unused function '__Pyx_PyObject_IsTrue'
-      [-Wunused-function]
-static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
-                         ^
-ccy_classic_lstsqr.c:2159:33: warning: unused function '__Pyx_PyIndex_AsSsize_t'
-      [-Wunused-function]
-static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
-                                ^
-ccy_classic_lstsqr.c:2188:33: warning: unused function '__Pyx_PyInt_FromSize_t'
-      [-Wunused-function]
-static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
-                                ^
-ccy_classic_lstsqr.c:1584:32: warning: unused function '__Pyx_PyInt_From_long'
-      [-Wunused-function]
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
-                               ^
-ccy_classic_lstsqr.c:1631:27: warning: function '__Pyx_PyInt_As_long' is not
-      needed and will not be emitted [-Wunneeded-internal-declaration]
-static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
-                          ^
-ccy_classic_lstsqr.c:1731:26: warning: function '__Pyx_PyInt_As_int' is not
-      needed and will not be emitted [-Wunneeded-internal-declaration]
-static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
-                         ^
-8 warnings generated.
-/usr/bin/clang -bundle -undefined dynamic_lookup -arch i386 -arch x86_64 -g build/temp.macosx-10.6-intel-3.4/ccy_classic_lstsqr.o -o /Users/sebastian/Github/python_reference/benchmarks/ccy_classic_lstsqr.so
-
-
-
-
- -
-
- -
-
-
-
-
-
-

4. Importing and running the code

-
-
-
-
-
-
-In [20]: -
-
-
-
import ccy_classic_lstsqr
-
-%timeit classic_lstsqr(x, y)
-%timeit cy_classic_lstsqr(x, y)
-%timeit ccy_classic_lstsqr.ccy_classic_lstsqr(x, y)
-
- -
-
-
- -
-
- - -
-
-
-100 loops, best of 3: 2.9 ms per loop
-1000 loops, best of 3: 212 µs per loop
-1000 loops, best of 3: 207 µs per loop
-
-
-
-
- -
-
- -
-
-
- - diff --git a/benchmarks/cython_least_squares.ipynb b/benchmarks/cython_least_squares.ipynb index 3032c66..ba478c5 100644 --- a/benchmarks/cython_least_squares.ipynb +++ b/benchmarks/cython_least_squares.ipynb @@ -1359,4 +1359,4 @@ "metadata": {} } ] -} \ No newline at end of file +} diff --git a/benchmarks/setup.py b/benchmarks/setup.py deleted file mode 100644 index eb0a3bc..0000000 --- a/benchmarks/setup.py +++ /dev/null @@ -1,9 +0,0 @@ - -from distutils.core import setup -from distutils.extension import Extension -from Cython.Distutils import build_ext - -setup( - cmdclass = {'build_ext': build_ext}, - ext_modules = [Extension("ccy_classic_lstsqr", ["ccy_classic_lstsqr.pyx"])] -) \ No newline at end of file From 067f823eeef96e70d54d9a8ac04f97907c48248d Mon Sep 17 00:00:00 2001 From: rasbt Date: Mon, 5 May 2014 14:28:07 -0400 Subject: [PATCH 017/248] chart --- Images/cython_vs_chart.png | Bin 0 -> 40417 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Images/cython_vs_chart.png diff --git a/Images/cython_vs_chart.png b/Images/cython_vs_chart.png new file mode 100644 index 0000000000000000000000000000000000000000..a536ef2919a2e277f6c0aa77349aad119290c529 GIT binary patch literal 40417 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 ae@cyEDERzqmiYq}c$perLpA8T#QhhaQz8}s literal 0 HcmV?d00001 From e1c258f5532c7048024bbd7fb91d261991465d2c Mon Sep 17 00:00:00 2001 From: rasbt Date: Mon, 5 May 2014 15:34:22 -0400 Subject: [PATCH 018/248] section update --- .../cython_least_squares-checkpoint.ipynb | 562 ++++++++++++++---- benchmarks/cython_least_squares.ipynb | 513 ++++++++++++++-- 2 files changed, 894 insertions(+), 181 deletions(-) diff --git a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb index 5e855ad..8c47d64 100644 --- a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb +++ b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:379319350ffd7e7539cf8f11b3a7c15b6f1d1013bcb445b55714c76bf0855fa2" + "signature": "sha256:3b47add80317bb8ad369eacd5528c941bb1a2cbd92ae5b33aae66d56ae35c741" }, "nbformat": 3, "nbformat_minor": 0, @@ -23,7 +23,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### All code was executed in Python 3.4" + "#### The code in this notebook was executed in Python 3.4.0" ] }, { @@ -70,7 +70,9 @@ "- [Generating sample data and benchmarking](#sample_data)\n", "- [Compiling the Python code via Cython in the IPython notebook](#cython_nb)\n", "- [Performance growth rates for different sample sizes](#sample_sizes)\n", - "- [Bonus: How to use Cython without the IPython magic](#cython_bonus)" + "- [Bonus: How to use Cython without the IPython magic](#cython_bonus)\n", + "- [Appendix I: Cython vs. Numba](#numba)\n", + "- [Appendix II: Cython with and without type declarations](#type_declarations)" ] }, { @@ -82,6 +84,18 @@ "
" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/cython_vs_chart.png) \n", + "(Note that this chart just reflects my rather objective thoughts after experimenting with Cython, and it is not based on real numbers or benchmarks.)\n", + "
\n", + "
\n", + "
\n", + "
" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -264,7 +278,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 1 + "prompt_number": 36 }, { "cell_type": "markdown", @@ -315,7 +329,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 4 + "prompt_number": 37 }, { "cell_type": "markdown", @@ -351,7 +365,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 5 + "prompt_number": 38 }, { "cell_type": "markdown", @@ -388,7 +402,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 6 + "prompt_number": 39 }, { "cell_type": "markdown", @@ -438,7 +452,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 7 + "prompt_number": 40 }, { "cell_type": "markdown", @@ -493,31 +507,16 @@ "language": "python", "metadata": {}, "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Populating the interactive namespace from numpy and matplotlib\n" - ] - }, - { - "output_type": "stream", - "stream": "stderr", - "text": [ - "WARNING: pylab import has clobbered these variables: ['random']\n", - "`%matplotlib` prevents importing * from pylab and numpy\n" - ] - }, { "metadata": {}, "output_type": "display_data", "png": "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\nRUdHU7duXf0+np6erz3CliQZg7W1tfwyWsTl5TDIkmQM+ZLo1Wo1W7duzfLZ39fpiPU8X19frl+/\nnucxSpIkSVJB5ePjw7Vr13K0b75cut+xYwc1atTAxcUF0J3FP+tZGhMTQ4kSJQDw8PDI8BzynTt3\n8PDwyFDW9evX9Y/2vIk/M2bMMHoMsv2y7bL9sv2y/fn7k5sT3HxJ9OvWrdNftgfo0KEDq1atAmDV\nqlV06tRJv3z9+vWo1Wpu3rzJ1atXqV27dn6EKEmSJElFksEv3SclJbFnzx6+//57/bLJkyfTvXt3\nQkJC9I/Xge456O7du+uHwfz2229lRxhJkiRJygWDJ3obG5sMYz2DbljIPXv2ZLn91KlTsxzeVNJp\n0qSJsUMwqje5/W9y20G2X7a/ibFDKLQMOmCOISgUCgpZyJIkSZKUK7nJfXIIXEmSJEkqwmSilyRJ\nkqQiTCZ6SZIkSSrCZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIkwmekmSJEkqwmSilyRJkqQiTCZ6\nSZIkSSrCZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIkwmekmSJEkqwmSilyRJkqQiTCZ6SZIkSSrC\nZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIszM2AFIkiRJWYuNjWXHjh2YmJjQtm1bnJycjB2SVAgp\nhBDC2EFkh0KhoJCFLEmSlG03btygdu1AUlLqAOnY2p7nzJkjuLu750v9f/75JzNnzichIYn+/bvQ\nv3/ffKlXylpucp88o5ckSSqAJk78mEePRqDVfgRAauqHTJv2KStWfGvwuv/880/q1GlCSso0wINj\nxz7m8eMERo9+z+B1S3lP3qOXJEkqgKKi7qHV1tC/Tk+vwe3bdw1e78OHDwkMbEVKyhBgAtADlWo1\n8+d/Y/C6AU6cOMHIkWMZO/Z9/v7773yps6iTiV6SJKkAatWqMUrlF8Bj4CFK5Ve0bh1o8HqnTp1N\nQoInYPrcUpN8uWW6f/9+mjZtz7JlJVm8WEmtWo25ePGiwest6mSilyRJKoA+/ngy77zjg6lpCczM\nPBgwoA7jx482eL2XLt1Aq+0P/AB8A/yCiUkPxo4dZvC6P/poHirVV8BkhJhNUtJ4Pv98scHrLepk\nopckSSqAzM3NWb36O1JTVaSkJPHttwsxMTH8n+yGDWtgbb0bCAMOYGLyPs2a+TNx4liD152cnAIU\n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\nYII=\n", "text": [ - "" + "" ] } ], - "prompt_number": 8 + "prompt_number": 42 }, { "cell_type": "markdown", @@ -579,7 +578,7 @@ ] } ], - "prompt_number": 9 + "prompt_number": 43 }, { "cell_type": "markdown", @@ -625,7 +624,7 @@ "stream": "stdout", "text": [ "\n", - "matrix approach: 1000 loops, best of 3: 270 \u00b5s per loop" + "matrix approach: 10000 loops, best of 3: 163 \u00b5s per loop" ] }, { @@ -634,7 +633,7 @@ "text": [ "\n", "\n", - "classic approach: 100 loops, best of 3: 2.83 ms per loop" + "classic approach: 1000 loops, best of 3: 1.55 ms per loop" ] }, { @@ -643,7 +642,7 @@ "text": [ "\n", "\n", - "numpy function: 1000 loops, best of 3: 372 \u00b5s per loop" + "numpy function: 1000 loops, best of 3: 221 \u00b5s per loop" ] }, { @@ -652,7 +651,7 @@ "text": [ "\n", "\n", - "scipy function: 1000 loops, best of 3: 594 \u00b5s per loop" + "scipy function: 1000 loops, best of 3: 362 \u00b5s per loop" ] }, { @@ -663,7 +662,7 @@ ] } ], - "prompt_number": 10 + "prompt_number": 44 }, { "cell_type": "markdown", @@ -702,7 +701,11 @@ "source": [ "Maybe we can speed things up a little bit via [Cython's C-extensions for Python](http://cython.org). Cython is basically a hybrid between C and Python and can be pictured as compiled Python code with type declarations. \n", "Since we are working in an IPython notebook here, we can make use of the IPython magic: It will automatically convert it to C code, compile it, and load the function. \n", - "Just to be thorough, let us also compile the other functions, which already use numpy objects." + "Just to be thorough, let us also compile the other functions, which already use numpy objects.\n", + "\n", + "**Note** \n", + "Of course Cython has much more horsepower under its hood - more than I am showing in this article (for example, I am not using Cython's type definitions via `cdef` here). Here, I want to focus on how to speed up existing Python code by making only minimal changes to it. \n", + "[In a later section - Appendix II](#type_declarations) We will see how static type declarations can further improve the performance via Cython." ] }, { @@ -713,31 +716,17 @@ ], "language": "python", "metadata": {}, - "outputs": [], - "prompt_number": 2 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%cython\n", - "import numpy as np\n", - "import scipy.stats\n", - "cimport numpy as np\n", - "\n", - "def cy_lin_lstsqr_mat2(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " cdef double x_avg = sum(x)/len(x)\n", - " cdef double y_avg = sum(y)/len(y)\n", - " cdef double var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cdef double cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", - " cdef double slope = cov_xy / var_x\n", - " cdef double y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "The cythonmagic extension is already loaded. To reload it, use:\n", + " %reload_ext cythonmagic\n" + ] + } ], - "language": "python", - "metadata": {}, - "outputs": [] + "prompt_number": 45 }, { "cell_type": "code", @@ -763,16 +752,6 @@ " y_interc = y_avg - slope*x_avg\n", " return (slope, y_interc)\n", "\n", - "def cy_lin_lstsqr_mat2(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " cdef double x_avg = sum(x)/len(x)\n", - " cdef double y_avg = sum(y)/len(y)\n", - " cdef double var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cdef double cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", - " cdef double slope = cov_xy / var_x\n", - " cdef double y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)\n", - "\n", "def cy_numpy_lstsqr(x, y):\n", " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", " X = np.vstack([x, np.ones(len(x))]).T\n", @@ -785,27 +764,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 3 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "for lab,appr in zip([\"matrix approach\",\"classic approach\",\n", - " \"numpy function\",\"scipy function\"],\n", - " [(lin_lstsqr_mat, cy_lin_lstsqr_mat), \n", - " (classic_lstsqr, cy_classic_lstsqr),\n", - " (cy_lin_lstsqr_mat2, cy_lin_lstsqr_mat2),\n", - " (scipy_lstsqr, cy_scipy_lstsqr)]):\n", - " print(\"\\n\\n{}: \".format(lab))\n", - " %timeit appr[0](x, y)\n", - " %timeit appr[1](x, y)" - ], - "language": "python", - "metadata": {}, - "outputs": [] + "prompt_number": 46 }, { "cell_type": "markdown", @@ -848,7 +807,7 @@ "\n", "\n", "matrix approach: \n", - "1000 loops, best of 3: 274 \u00b5s per loop" + "10000 loops, best of 3: 165 \u00b5s per loop" ] }, { @@ -856,7 +815,7 @@ "stream": "stdout", "text": [ "\n", - "1000 loops, best of 3: 260 \u00b5s per loop" + "10000 loops, best of 3: 166 \u00b5s per loop" ] }, { @@ -867,7 +826,7 @@ "\n", "\n", "classic approach: \n", - "100 loops, best of 3: 2.82 ms per loop" + "1000 loops, best of 3: 1.59 ms per loop" ] }, { @@ -875,7 +834,7 @@ "stream": "stdout", "text": [ "\n", - "1000 loops, best of 3: 212 \u00b5s per loop" + "10000 loops, best of 3: 127 \u00b5s per loop" ] }, { @@ -886,7 +845,7 @@ "\n", "\n", "numpy function: \n", - "1000 loops, best of 3: 379 \u00b5s per loop" + "1000 loops, best of 3: 220 \u00b5s per loop" ] }, { @@ -894,7 +853,7 @@ "stream": "stdout", "text": [ "\n", - "1000 loops, best of 3: 370 \u00b5s per loop" + "1000 loops, best of 3: 221 \u00b5s per loop" ] }, { @@ -905,7 +864,7 @@ "\n", "\n", "scipy function: \n", - "1000 loops, best of 3: 608 \u00b5s per loop" + "1000 loops, best of 3: 361 \u00b5s per loop" ] }, { @@ -913,7 +872,7 @@ "stream": "stdout", "text": [ "\n", - "100 loops, best of 3: 613 \u00b5s per loop" + "1000 loops, best of 3: 367 \u00b5s per loop" ] }, { @@ -924,7 +883,7 @@ ] } ], - "prompt_number": 17 + "prompt_number": 47 }, { "cell_type": "markdown", @@ -958,20 +917,21 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 18 + "prompt_number": 50 }, { "cell_type": "code", "collapsed": false, "input": [ - "%pylab inline\n", - "import matplotlib.pyplot as plt\n", + "#%pylab inline\n", + "#import matplotlib.pyplot as plt\n", "\n", "x_pos = np.arange(len(funcs))\n", "plt.bar(x_pos, times, align='center', alpha=0.5)\n", "plt.xticks(x_pos, labels, rotation=45)\n", "plt.ylabel('time in ms')\n", "plt.title('Performance of different least square fit implementations')\n", + "plt.grid()\n", "plt.show()\n", "\n", "x_pos = np.arange(len(funcs[1:]))\n", @@ -979,36 +939,30 @@ "plt.xticks(x_pos, labels[1:], rotation=45)\n", "plt.ylabel('relative performance gain')\n", "plt.title('Performance gain compared to the classic least square implementation')\n", + "plt.grid()\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Populating the interactive namespace from numpy and matplotlib\n" - ] - }, { "metadata": {}, "output_type": "display_data", - "png": "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\nu3r1Kn355ZdERJSQkECHDx8WlldUVBTVrl1beNBs9+7dFB8fr7dY9Y0Tgh4V7VCOHDlC8+bNo7Vr\n11JGRgbJ5XLq378/jRo1ik6cOEGenp7CU5NvgtTUVNq8ebPQffLkSRowYIDQXVZSHDFihE7nUdG0\nIyIiyM/Pj9555x1as2YNXbt2jXbu3EkSiYTGjRtHQUFBwhFodZednU1dunQRmk2OHTtG9vb2tHLl\nSiIqaGo5duwYNW3alAYNGlQjmi2fPHlCfn5+dPbsWXr69ClNmTKFxowZQ0ePHqWsrCwiIlq+fDmJ\nRCKKiooShnuTDriK4wfT9IQK73/+/fffMWHCBJiammLt2rX47rvvUKtWLUyaNAmxsbGYMWMG1q1b\nh3fffRdKpVLfYesEEWHz5s24fPkyAMDNzQ0PHjzA4cOHART8oMqxY8ewcOFCEBFu3ryJmzdv6vSH\nZEQiEc6fP4+lS5dixYoVmDRpElJSUrBjxw706tULK1aswO+//46AgAAEBQVBpVJV618EAwATExMM\nHToU69evh1Qqhb+/Pw4ePIjly5fjhx9+gIGBAWrXro3OnTtj+vTpNeKFbiqVCtnZ2di+fTs++ugj\nfPzxx3B2dsYvv/yCmJgYAED79u3Rr18/jfq81s8avIh+89GbLTExkYYMGSI8Y5Cenk5TpkyhsLAw\nIiKSy+U0YsQIWrBggT7D1KmiZpUVK1bQrl27iKjgesGSJUto2rRptGDBApLL5eTp6UmHDx8Whnvw\n4IFO47x79y6NHj2a2rdvL3x3+vRp6tKlC8XGxhJRwTUFqVRKJ06c0GlsL6P4tRpjY2Py8/OjzMxM\nIir4QflmzZrR2LFjyc7OTnhvUXU/ii6Kb+XKlWRoaCi8JiQvL49mzpxJY8eOpbFjx1Ljxo1r5DMh\n2sBPKusQFZ4VFL2S4uTJkzhx4gTS0tLQvn17SKVSeHt7Y+bMmQgMDMTbb78NS0tLHDt2DB07doRE\nItF3FbSu6Cjt7t27+Pbbb+Hv7w97e3s4ODhAIpHg4MGDuH79OkJCQhAQEAClUgmxWAwTExOtxkXF\nXj9e1E1EiImJQXZ2Nnx9feHk5ISYmBioVCq0bt0aXl5eqF+/Pt5++22NV5FXR0X1srGxgUwmg7W1\nNVasWIGWLVvCy8sLPXr0wNtvv43hw4ejU6dONeJtrEXx3b17F127dsXy5ctRu3ZtdOjQAZ06dYJE\n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\n", + "png": "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\ntbWllJQUIio+SFhaWgo7dl5eHrVt25a++OILKiwspBs3bpCLiwsdOHCAiEjYFnFxcVRUVESffvop\nderUqdzYylOyICgUihcu68yZM5SUlEQKhYJkMhm5u7vT6tWriYgoPj6e2rVrR48fPyYiotTUVOEg\nWHp/K+1F7x06dCgNHTqU8vLy6K+//iJ7e3vq2rUrEZVfEPz9/emHH34gouKCcOjQISooKKB79+5R\nt27daPr06cK0Tk5O1KZNG7p9+zY9e/asWvtU6WWVzlMqlVbaZFRyeuXn4IsvvhA+QzY2NvTOO+9Q\nbm4uXbp0iUxNTUkmkxFR8XY3MjKiX3/9leRyOS1fvpyaNm1KcrmciFS3++rVq8nX15cyMjKooKCA\nwsLCKCQkRGUdTpo0iZ4/f04HDx4kY2NjGjBgAN27d48yMjKoQYMGlJCQQEREu3fvJldXV0pNTSWF\nQkELFy6kzp07CzlJJBIKCgqix48f082bN6l+/foUHx9PRGU/G8r1pCz+Fy5coIYNG9Lu3buJqOxn\nh0i12en+/ftkZWVFP/30EykUCoqOjqZ69eoJxc7Pz49cXV3p6tWrlJ+fT/7+/jRr1iwiIvruu+8o\nKCiI8vPzqaioiM6ePUs5OTkVbiutKwhOTk5Ut25dsrKyIicnJ5o8eTLl5+fT0qVLyxzMevfuTf/7\n3/+IqHinnTdvnsr40NBQlTbdZs2aCR8CIqIDBw6Qs7MzERXvqMbGxsIZA1HxztirVy9heO/evVS3\nbl0qKioiIqKcnBySSCTCB7y0AQMG0Jo1a4T5m5qaqmz0Bg0aCAceU1NTunDhQpl5VJZ3SUePHqVG\njRqpvBYSEiJ8G5k3bx6NGDGi3FiJSOWgSET0/fffq3zYS374Sn+DKX3Q2rZtm3BAU5owYQLNnz+f\niIoLwujRo4VxiYmJ1KRJE5XpFy9eTGPGjBFif/PNN4VxygNHebGVp2RBqGxZpa1atYreeustIiI6\nfPgwNW/enBITE8u0+Zbe30o7cuRIue+Vy+VkZGQkFG4iotmzZ7/wDKH0QbqkXbt2UZs2bYRhZ2dn\nlbPR6uxTymUpz0ZK51mVPoTS05uampb5DCUnJwvTt2vXjvbs2UNExdvd19dXGFdUVESNGzemY8eO\nCbkpt7u7u7vKPnDnzh0yMjIihUIhrMM7d+4I421sbFTOWgcNGiR8Xvv06aOyfhUKBZmZmdHNmzeJ\n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\n", "text": [ - "" + "" ] }, { "metadata": {}, "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAbwAAAFhCAYAAAALEB8uAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdYFNfXB/Dv0HvvSBFLbKhoVMQCBAt2xdiiGMXYEo2G\nFImxkGjsxhKNURNrLLEiYo0i6M+GGkuQCDZQkSKCUgV2Oe8fvjthAbvMIns+z+MjW+7cM3fKmTsz\nd1YgIgJjjDFWzWmoOgDGGGNMCpzwGGOMqQVOeIwxxtQCJzzGGGNqgRMeY4wxtcAJjzHGmFqQNOGl\npaWhffv2MDExwddffy1l1e+krl27YuPGjaoOo8pydXXF0aNHJatPQ0MDt27dqtQ6hg0bhqlTp1ba\n9I2NjZGYmPhKZaKiouDk5FQ5AVVzjRo1wvHjx9/6dBMTE6GhoYGSkpK3Pm1VGzt2LGbOnFkp09Z6\n0RdcXV2Rnp4OTU1NGBoaokuXLli2bBkMDQ1fubJVq1bBxsYG2dnZrxWsutm/f7+qQ6jSBEGAIAgV\nfjZs2DA4OTlhxowZrzVtHx8fBAYGYsSIEW8S4it73jy9DTk5OZU27TfxpsurqoqNjVV1CJJ61eW4\nbt06/P777zhx4oT43ooVKyorvBf38ARBQEREBHJycvD333/j/Pnzr5x9iQglJSVISkpC/fr1XytQ\nmUz2WuXYu6GqLd/KTDovws+CqJqq2jrKXgO9gKurKx09elR8/dVXX1H37t2JiOj06dPUunVrMjMz\noyZNmlBUVJT4PW9vb/ruu++oTZs2pK+vT0OGDCFtbW3S0dEhIyMjOnr0KBUWFtKECRPIwcGBHBwc\naOLEiVRYWEhERMeOHSNHR0eaO3cu2dnZUWBgIIWGhtKHH35IQ4YMIWNjY3J3d6eEhASaNWsW2djY\nkLOzMx0+fFiMYc2aNVS/fn0yNjYmNzc3WrlypfiZYvoLFy4kGxsbsre3p7Vr14qf5+fnU3BwMLm4\nuJCpqSm1bduWCgoKXjjfZV24cIGaNm1KxsbG1K9fP+rfvz9NmTKFiIgyMzOpW7duZG1tTebm5tS9\ne3e6d++eUhv+9ttvRES0du1aatOmDX311Vdkbm5ONWvWpAMHDjyz3jt37lCfPn3I2tqaLC0tady4\ncUREJJfLacaMGeTi4kI2NjY0dOhQevz4MRER3b59mwRBoLVr15KTkxNZWFjQihUrKCYmhtzd3cnM\n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\n", + "png": "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\n7do1yszMpIiICOrXrx8R/bsTDRs2jHJzc2n79u1kZmZG3bp1o3v37tGtW7fI1dWV9u7dK7bJxMSE\n5syZQ2q1mn7//Xeys7MTd8qXyf/Z13fOnDnUpEkTunXrFuXl5dGQIUMoMjKSiIguXLhA1tbWtH//\nfsrNzaXRo0eTiYlJsQWPiIq81/Ly8qhatWo0ZcoUys/Pp927d5ONjQ0lJiYWO/+z2WsJgkCdO3em\nx48f0/Xr18nFxYW2bt1KRETr16+n6tWr08WLF0mj0dC3335LoaGhxS5bpVKRjY0NrV69mtRqNT14\n8IBOnz4ttlu7s5f0/sjMzCRbW1tKSkoiIqKUlBS6cOECERH17t2bJk+eTERP34Pa1167DdqC97z3\neGHPFjyNRkP16tWjiRMnUn5+Pl29epX8/Pxo27ZtRPT0A96RI0dIo9GQSqUif39/mjNnDhERbd26\nlerXry9+wLp48SLduXOn2NersJLm7dWrF/Xq1Yuys7Pp/Pnz5OnpSc2bNyei4gves6/t5cuXaefO\nnZSXl0f37t2jFi1a0KhRo8Tn+vj4UHBwMN28eZOePHnySvs/ke4Jw6sev1q2bEmenp504cIFysrK\nou7du1Pfvn2L3a5u3brR0KFDKTs7m+7evUuNGjUSP2Bq99PY2FgqKCigcePGkaenp/hhZPv27WRj\nY0NZWVlE9PSDRdeuXenhw4eUkZFBnTt3pv/85z/ie6Gk42Zxr+OaNWvE1+r3338nKysrSklJISKi\n2NhY8cOJ1rPL2LVrFzk7O9OpU6coNzeXRowYQS1atBCfW9I+WZwXFjwfHx+ytrYme3t78vHxoY8/\n/phycnJo6tSp4oFS6+233xY/KYSFhdGECROKbMizlbtatWo6Zynbtm0jX19fInoarJmZmc4OOGHC\nBGrbtq04vXHjRrK2tqaCggIiIkpPTydBEMSdorBu3brR3LlzxeVbWFjo7Aiurq7izmphYUFnz54t\nsowXbfez9u7dS56enjqPNWvW7Lk79qlTp8RPOURFC1716tXFv2VlZZEgCJSamlpkOQcPHiQXFxed\nbdN66623aOHCheJ0YmIimZqakkajEXeiZz9BOTk50R9//CFOd+/eXTyALVmypEjRbdSoES1btqzY\n7Sucf+HX19/fX6eA3b59m0xNTUmtVtN///tfsfhpt9/MzKzEgvfse23fvn3k7u6u85zIyEiKiYkp\n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\n", "text": [ - "" + "" ] } ], - "prompt_number": 19 + "prompt_number": 51 }, { "cell_type": "markdown", @@ -1026,6 +980,13 @@ "## Performance growth rates for different sample sizes" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1038,6 +999,8 @@ "collapsed": false, "input": [ "import timeit\n", + "import random\n", + "random.seed(12345)\n", "\n", "funcs = ['cy_classic_lstsqr', \n", " 'lin_lstsqr_mat', 'numpy_lstsqr', 'scipy_lstsqr']\n", @@ -1056,7 +1019,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 23 + "prompt_number": 22 }, { "cell_type": "code", @@ -1074,7 +1037,7 @@ "plt.ylabel('time in ms')\n", "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", "plt.legend(loc=2)\n", - "\n", + "plt.grid()\n", "\n", "plt.title('Performance of least square fit implementations for different sample sizes')\n", "plt.show()" @@ -1085,13 +1048,13 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\nPUQAAAAASUVORK5CYII=\n", + "png": "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\nJBJRUVFRrdsyatQo+r//+z9V+ZaWlmonLVdXVzpz5gzJ5XKytLRU+9VaqaHtruqnn34id3d3tdcm\nTpyo+pVcvaWruqrvN2a91bd16dKlNHLkSLp+/XqN+RpKwupa9scffyQPDw+116om0Q0lYdXNnTuX\n5s+fT0R/fdndvHlT9f7QoUMpLi5ONS2Xy8nKyoqys7NrLa++JKyh/V7b/I057sLCwlQndyJl64yZ\nmRkpFAq1L/I7d+6Qubm56tc4EdH27dtVX2ibN2+mdu3aqd67ePEiiUQiys/PV73m5OREFy5cIIVC\nQdbW1mrb/PPPP6uSw/qOd6Kan83adO/enQ4cOKCqW31J2NSpU+ntt99WvVdcXEympqaq1kuRSKSW\nXEVGRtKaNWuIiGjy5Mk0Y8YMun37dr31qSyncpsb+rxFR0dTdHR0nWVlZWVRq1atqLS0VPXayy+/\nXGcCXX2fVd8nM2fOrJHYtm/fnn766SciUh5jVVvfNTmnrlixQvXe+vXraejQobXWrTb9+/enZcuW\n1fqDsaoHDx6QSCSiR48eqbZzxowZqvc/++wzCgwMVE1fvHiR7O3tVdN+fn5qLfGHDx8mf39/IlJP\nmH799Vfy8fFRW/fKlStpypQptdbLx8eHNmzYUOP8XlsSJpfL6YUXXqBZs2YRETX4+ajvHGlsuE+Y\nwIhEIhw4cAAPHjxAZmYm/v3vf8PCwgJZWVnYs2cPHBwcVP9Onz6NO3fuqJZt6C6Y3Nxc+Pr6qqZ9\nfHyQm5urmnZxcYGZmZnaMq6urqq/LS0t4ezsrOo8a2lpCQAoLi4GABw5cgQhISFwcnKCg4MDDh8+\njPv376uWd3JyUuuPZWVlheLiYty7dw9PnjyBv79/jTprst1Vt6/6PvD19UVOTk69+6U2Da23vm39\nxz/+gYCAAAwePBj+/v5Ys2aNxuuta9nc3Fx4enrW2DZNnTlzBgMHDoSrqyvs7e2xYcMGtdgA6sdP\nVlYW5s6dq9p2JycnAHiqffk0GnPcAep19/HxgUwmw71799TKzMrKgkwmQ+vWrVXbNXPmTBQUFKjm\ncXNzU1svoPxcVH2tuLgYBQUFKC0tRY8ePVRlDRs2TG2ddR3vddmyZQuCgoJU5V2+fLlGjOqSl5en\ndjxYW1vDyclJLV7u7u5qdans9P7RRx+BiBAcHIzOnTtj8+bNGq2zrs9b5TlFJBLVe07Kzc2Fg4OD\n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\n", "text": [ - "" + "" ] } ], - "prompt_number": 41 + "prompt_number": 34 }, { "cell_type": "markdown", @@ -1407,6 +1370,373 @@ } ], "prompt_number": 20 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Appendix I: Cython vs. Numba" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Like we did with Cython before, we will use the minimalist approach to Numba and see how they compare against each other. \n", + "\n", + "Numba is using the [LLVM compiler infrastructure](http://llvm.org) for compiling Python code to machine code. Its strength is to work with NumPy arrays to speed-up code. If you want to read more about Numba, see the original [website and documentation](http://numba.pydata.org/numba-doc/0.13/index.html)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%load_ext cythonmagic" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "\n", + "def cy_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from numba import jit\n", + "\n", + "@jit\n", + "def nmb_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "ImportError", + "evalue": "No module named 'llvm'", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mjit\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mjit\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mnmb_lstsqr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numba/__init__.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \"\"\"\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0m__future__\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mprint_function\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdivision\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mabsolute_import\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtesting\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdecorators\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0m_version\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mget_versions\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;31m# Re-export typeof\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numba/decorators.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mwarnings\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0msigutils\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtargets\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mregistry\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 8\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;31m# -----------------------------------------------------------------------------\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numba/targets/registry.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0m__future__\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mprint_function\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdivision\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mabsolute_import\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mutils\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtyping\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtargets\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mcpu\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtargets\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdescriptors\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mTargetDescriptor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mdispatcher\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numba/targets/cpu.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0msys\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mllvm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcore\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mlc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mllvm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpasses\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mlp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mllvm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mee\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mle\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mImportError\u001b[0m: No module named 'llvm'" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ... this section is still in progress" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Appendix II: Cython with and without type declarations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the sections above, we have been using the simplest approach to Cython without using static type declarations and thereby neglecting one of its major strengths. \n", + "Let us now see how we can further improve the Cython implementation of our \"classic least squares approach\" by adding those type declarations." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, our \"simple\" approach using Cython from the previous section:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "def cy_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 54 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And now, the same code with static type declarations:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "def static_type_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " cdef double x_avg, y_avg, var_x, cov_xy, slope, y_interc, x_i, y_i\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 55 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "Now, let us see how the two functions (with and without static type declarations) compare against each other for different sample sizes." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "import random\n", + "random.seed(12345)\n", + "\n", + "funcs = ['cy_lstsqr', 'static_type_lstsqr'] \n", + "labels = ['simple Cython', 'Cython w. type declarations']\n", + "orders_n = [10**n for n in range(1, 7)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", + " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", + " for f in funcs:\n", + " times_n[f].append(timeit.Timer('%s(x,y)' %f, \n", + " 'from __main__ import %s, x, y' %f).timeit(1000))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 58 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#%pylab inline\n", + "#import matplotlib.pyplot as plt\n", + "\n", + "plt.figure(figsize=(10,8))\n", + "\n", + "for f in times_n.keys():\n", + " plt.plot(orders_n, times_n[f], alpha=0.5, label=f, marker='o', lw=2)\n", + "\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time in ms')\n", + "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "\n", + "plt.title('Performance of a simple least square fit implementation')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 59 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "The improvement is pretty significant when static type declarations are used. One more experiment to see by how much we could improve our \"classic least squares\" code via Cython compared to the initial Python implementation.\n", + "
\n", + "
" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import random\n", + "random.seed(12345)\n", + "\n", + "x = [x_i*random.randrange(8,12)/10 for x_i in range(500)]\n", + "y = [y_i*random.randrange(8,12)/10 for y_i in range(100,600)]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 60 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "\n", + "funcs = ['classic_lstsqr', 'cy_lstsqr', 'static_type_lstsqr', \n", + " 'lin_lstsqr_mat', 'numpy_lstsqr', 'scipy_lstsqr']\n", + "labels = ['classic approach','classic approach (cython)', \n", + " 'classic approach (cython + type decl.)',\n", + " 'matrix approach', 'numpy function', 'scipy function']\n", + "\n", + "times = [timeit.Timer('%s(x,y)' %f, \n", + " 'from __main__ import %s, x, y' %f).timeit(1000)\n", + " for f in funcs]\n", + "\n", + "times_rel = [times[0]/times[i+1] for i in range(len(times[1:]))]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 61 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#%pylab inline\n", + "#import matplotlib.pyplot as plt\n", + "\n", + "x_pos = np.arange(len(funcs[1:]))\n", + "plt.bar(x_pos, times_rel, align='center', alpha=0.5, color=\"green\")\n", + "plt.xticks(x_pos, labels[1:], rotation=90)\n", + "plt.ylabel('relative performance gain')\n", + "plt.title('Performance gain compared to the classic least square implementation')\n", + "plt.grid()\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 63 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is a pretty significant performance gain. The \"Cython + type declarations\" approach sped up our initial Python code 25 times." + ] } ], "metadata": {} diff --git a/benchmarks/cython_least_squares.ipynb b/benchmarks/cython_least_squares.ipynb index ba478c5..8c47d64 100644 --- a/benchmarks/cython_least_squares.ipynb +++ b/benchmarks/cython_least_squares.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:a091baac3cb82ac71775c03f73be1925fefe2d659bb7359de4bb88887fbe7d24" + "signature": "sha256:3b47add80317bb8ad369eacd5528c941bb1a2cbd92ae5b33aae66d56ae35c741" }, "nbformat": 3, "nbformat_minor": 0, @@ -23,7 +23,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### All code was executed in Python 3.4" + "#### The code in this notebook was executed in Python 3.4.0" ] }, { @@ -70,7 +70,9 @@ "- [Generating sample data and benchmarking](#sample_data)\n", "- [Compiling the Python code via Cython in the IPython notebook](#cython_nb)\n", "- [Performance growth rates for different sample sizes](#sample_sizes)\n", - "- [Bonus: How to use Cython without the IPython magic](#cython_bonus)" + "- [Bonus: How to use Cython without the IPython magic](#cython_bonus)\n", + "- [Appendix I: Cython vs. Numba](#numba)\n", + "- [Appendix II: Cython with and without type declarations](#type_declarations)" ] }, { @@ -82,6 +84,18 @@ "
" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/cython_vs_chart.png) \n", + "(Note that this chart just reflects my rather objective thoughts after experimenting with Cython, and it is not based on real numbers or benchmarks.)\n", + "
\n", + "
\n", + "
\n", + "
" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -264,7 +278,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 1 + "prompt_number": 36 }, { "cell_type": "markdown", @@ -315,7 +329,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 4 + "prompt_number": 37 }, { "cell_type": "markdown", @@ -351,7 +365,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 5 + "prompt_number": 38 }, { "cell_type": "markdown", @@ -388,7 +402,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 6 + "prompt_number": 39 }, { "cell_type": "markdown", @@ -438,7 +452,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 7 + "prompt_number": 40 }, { "cell_type": "markdown", @@ -493,31 +507,16 @@ "language": "python", "metadata": {}, "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Populating the interactive namespace from numpy and matplotlib\n" - ] - }, - { - "output_type": "stream", - "stream": "stderr", - "text": [ - "WARNING: pylab import has clobbered these variables: ['random']\n", - "`%matplotlib` prevents importing * from pylab and numpy\n" - ] - }, { "metadata": {}, "output_type": "display_data", "png": "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\nRUdHU7duXf0+np6erz3CliQZg7W1tfwyWsTl5TDIkmQM+ZLo1Wo1W7duzfLZ39fpiPU8X19frl+/\nnucxSpIkSVJB5ePjw7Vr13K0b75cut+xYwc1atTAxcUF0J3FP+tZGhMTQ4kSJQDw8PDI8BzynTt3\n8PDwyFDW9evX9Y/2vIk/M2bMMHoMsv2y7bL9sv2y/fn7k5sT3HxJ9OvWrdNftgfo0KEDq1atAmDV\nqlV06tRJv3z9+vWo1Wpu3rzJ1atXqV27dn6EKEmSJElFksEv3SclJbFnzx6+//57/bLJkyfTvXt3\nQkJC9I/Xge456O7du+uHwfz2229lRxhJkiRJygWDJ3obG5sMYz2DbljIPXv2ZLn91KlTsxzeVNJp\n0qSJsUMwqje5/W9y20G2X7a/ibFDKLQMOmCOISgUCgpZyJIkSZKUK7nJfXIIXEmSJEkqwmSilyRJ\nkqQiTCZ6SZIkSSrCZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIkwmekmSJEkqwmSilyRJkqQiTCZ6\nSZIkSSrCZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIkwmekmSJEkqwmSilyRJkqQiTCZ6SZIkSSrC\nZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIszM2AFIkiRJWYuNjWXHjh2YmJjQtm1bnJycjB2SVAgp\nhBDC2EFkh0KhoJCFLEmSlG03btygdu1AUlLqAOnY2p7nzJkjuLu750v9f/75JzNnzichIYn+/bvQ\nv3/ffKlXylpucp88o5ckSSqAJk78mEePRqDVfgRAauqHTJv2KStWfGvwuv/880/q1GlCSso0wINj\nxz7m8eMERo9+z+B1S3lP3qOXJEkqgKKi7qHV1tC/Tk+vwe3bdw1e78OHDwkMbEVKyhBgAtADlWo1\n8+d/Y/C6AU6cOMHIkWMZO/Z9/v7773yps6iTiV6SJKkAatWqMUrlF8Bj4CFK5Ve0bh1o8HqnTp1N\nQoInYPrcUpN8uWW6f/9+mjZtz7JlJVm8WEmtWo25ePGiwest6mSilyRJKoA+/ngy77zjg6lpCczM\nPBgwoA7jx482eL2XLt1Aq+0P/AB8A/yCiUkPxo4dZvC6P/poHirVV8BkhJhNUtJ4Pv98scHrLepk\nopckSSqAzM3NWb36O1JTVaSkJPHttwsxMTH8n+yGDWtgbb0bCAMOYGLyPs2a+TNx4liD152cnAIU\n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\nYII=\n", "text": [ - "" + "" ] } ], - "prompt_number": 8 + "prompt_number": 42 }, { "cell_type": "markdown", @@ -579,7 +578,7 @@ ] } ], - "prompt_number": 9 + "prompt_number": 43 }, { "cell_type": "markdown", @@ -625,7 +624,7 @@ "stream": "stdout", "text": [ "\n", - "matrix approach: 1000 loops, best of 3: 270 \u00b5s per loop" + "matrix approach: 10000 loops, best of 3: 163 \u00b5s per loop" ] }, { @@ -634,7 +633,7 @@ "text": [ "\n", "\n", - "classic approach: 100 loops, best of 3: 2.83 ms per loop" + "classic approach: 1000 loops, best of 3: 1.55 ms per loop" ] }, { @@ -643,7 +642,7 @@ "text": [ "\n", "\n", - "numpy function: 1000 loops, best of 3: 372 \u00b5s per loop" + "numpy function: 1000 loops, best of 3: 221 \u00b5s per loop" ] }, { @@ -652,7 +651,7 @@ "text": [ "\n", "\n", - "scipy function: 1000 loops, best of 3: 594 \u00b5s per loop" + "scipy function: 1000 loops, best of 3: 362 \u00b5s per loop" ] }, { @@ -663,7 +662,7 @@ ] } ], - "prompt_number": 10 + "prompt_number": 44 }, { "cell_type": "markdown", @@ -702,7 +701,11 @@ "source": [ "Maybe we can speed things up a little bit via [Cython's C-extensions for Python](http://cython.org). Cython is basically a hybrid between C and Python and can be pictured as compiled Python code with type declarations. \n", "Since we are working in an IPython notebook here, we can make use of the IPython magic: It will automatically convert it to C code, compile it, and load the function. \n", - "Just to be thorough, let us also compile the other functions, which already use numpy objects." + "Just to be thorough, let us also compile the other functions, which already use numpy objects.\n", + "\n", + "**Note** \n", + "Of course Cython has much more horsepower under its hood - more than I am showing in this article (for example, I am not using Cython's type definitions via `cdef` here). Here, I want to focus on how to speed up existing Python code by making only minimal changes to it. \n", + "[In a later section - Appendix II](#type_declarations) We will see how static type declarations can further improve the performance via Cython." ] }, { @@ -713,8 +716,17 @@ ], "language": "python", "metadata": {}, - "outputs": [], - "prompt_number": 15 + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "The cythonmagic extension is already loaded. To reload it, use:\n", + " %reload_ext cythonmagic\n" + ] + } + ], + "prompt_number": 45 }, { "cell_type": "code", @@ -752,7 +764,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 16 + "prompt_number": 46 }, { "cell_type": "markdown", @@ -795,7 +807,7 @@ "\n", "\n", "matrix approach: \n", - "1000 loops, best of 3: 274 \u00b5s per loop" + "10000 loops, best of 3: 165 \u00b5s per loop" ] }, { @@ -803,7 +815,7 @@ "stream": "stdout", "text": [ "\n", - "1000 loops, best of 3: 260 \u00b5s per loop" + "10000 loops, best of 3: 166 \u00b5s per loop" ] }, { @@ -814,7 +826,7 @@ "\n", "\n", "classic approach: \n", - "100 loops, best of 3: 2.82 ms per loop" + "1000 loops, best of 3: 1.59 ms per loop" ] }, { @@ -822,7 +834,7 @@ "stream": "stdout", "text": [ "\n", - "1000 loops, best of 3: 212 \u00b5s per loop" + "10000 loops, best of 3: 127 \u00b5s per loop" ] }, { @@ -833,7 +845,7 @@ "\n", "\n", "numpy function: \n", - "1000 loops, best of 3: 379 \u00b5s per loop" + "1000 loops, best of 3: 220 \u00b5s per loop" ] }, { @@ -841,7 +853,7 @@ "stream": "stdout", "text": [ "\n", - "1000 loops, best of 3: 370 \u00b5s per loop" + "1000 loops, best of 3: 221 \u00b5s per loop" ] }, { @@ -852,7 +864,7 @@ "\n", "\n", "scipy function: \n", - "1000 loops, best of 3: 608 \u00b5s per loop" + "1000 loops, best of 3: 361 \u00b5s per loop" ] }, { @@ -860,7 +872,7 @@ "stream": "stdout", "text": [ "\n", - "100 loops, best of 3: 613 \u00b5s per loop" + "1000 loops, best of 3: 367 \u00b5s per loop" ] }, { @@ -871,7 +883,7 @@ ] } ], - "prompt_number": 17 + "prompt_number": 47 }, { "cell_type": "markdown", @@ -905,20 +917,21 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 18 + "prompt_number": 50 }, { "cell_type": "code", "collapsed": false, "input": [ - "%pylab inline\n", - "import matplotlib.pyplot as plt\n", + "#%pylab inline\n", + "#import matplotlib.pyplot as plt\n", "\n", "x_pos = np.arange(len(funcs))\n", "plt.bar(x_pos, times, align='center', alpha=0.5)\n", "plt.xticks(x_pos, labels, rotation=45)\n", "plt.ylabel('time in ms')\n", "plt.title('Performance of different least square fit implementations')\n", + "plt.grid()\n", "plt.show()\n", "\n", "x_pos = np.arange(len(funcs[1:]))\n", @@ -926,36 +939,30 @@ "plt.xticks(x_pos, labels[1:], rotation=45)\n", "plt.ylabel('relative performance gain')\n", "plt.title('Performance gain compared to the classic least square implementation')\n", + "plt.grid()\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Populating the interactive namespace from numpy and matplotlib\n" - ] - }, { "metadata": {}, "output_type": "display_data", - "png": "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\nu3r1Kn355ZdERJSQkECHDx8WlldUVBTVrl1beNBs9+7dFB8fr7dY9Y0Tgh4V7VCOHDlC8+bNo7Vr\n11JGRgbJ5XLq378/jRo1ik6cOEGenp7CU5NvgtTUVNq8ebPQffLkSRowYIDQXVZSHDFihE7nUdG0\nIyIiyM/Pj9555x1as2YNXbt2jXbu3EkSiYTGjRtHQUFBwhFodZednU1dunQRmk2OHTtG9vb2tHLl\nSiIqaGo5duwYNW3alAYNGlQjmi2fPHlCfn5+dPbsWXr69ClNmTKFxowZQ0ePHqWsrCwiIlq+fDmJ\nRCKKiooShnuTDriK4wfT9IQK73/+/fffMWHCBJiammLt2rX47rvvUKtWLUyaNAmxsbGYMWMG1q1b\nh3fffRdKpVLfYesEEWHz5s24fPkyAMDNzQ0PHjzA4cOHART8oMqxY8ewcOFCEBFu3ryJmzdv6vSH\nZEQiEc6fP4+lS5dixYoVmDRpElJSUrBjxw706tULK1aswO+//46AgAAEBQVBpVJV618EAwATExMM\nHToU69evh1Qqhb+/Pw4ePIjly5fjhx9+gIGBAWrXro3OnTtj+vTpNeKFbiqVCtnZ2di+fTs++ugj\nfPzxx3B2dsYvv/yCmJgYAED79u3Rr18/jfq81s8avIh+89GbLTExkYYMGSI8Y5Cenk5TpkyhsLAw\nIiKSy+U0YsQIWrBggT7D1KmiZpUVK1bQrl27iKjgesGSJUto2rRptGDBApLL5eTp6UmHDx8Whnvw\n4IFO47x79y6NHj2a2rdvL3x3+vRp6tKlC8XGxhJRwTUFqVRKJ06c0GlsL6P4tRpjY2Py8/OjzMxM\nIir4QflmzZrR2LFjyc7OTnhvUXU/ii6Kb+XKlWRoaCi8JiQvL49mzpxJY8eOpbFjx1Ljxo1r5DMh\n2sBPKusQFZ4VFL2S4uTJkzhx4gTS0tLQvn17SKVSeHt7Y+bMmQgMDMTbb78NS0tLHDt2DB07doRE\nItF3FbSu6Cjt7t27+Pbbb+Hv7w97e3s4ODhAIpHg4MGDuH79OkJCQhAQEAClUgmxWAwTExOtxkXF\nXj9e1E1EiImJQXZ2Nnx9feHk5ISYmBioVCq0bt0aXl5eqF+/Pt5++22NV5FXR0X1srGxgUwmg7W1\nNVasWIGWLVvCy8sLPXr0wNtvv43hw4ejU6dONeJtrEXx3b17F127dsXy5ctRu3ZtdOjQAZ06dYJE\n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\n", + "png": "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\ntbWllJQUIio+SFhaWgo7dl5eHrVt25a++OILKiwspBs3bpCLiwsdOHCAiEjYFnFxcVRUVESffvop\nderUqdzYylOyICgUihcu68yZM5SUlEQKhYJkMhm5u7vT6tWriYgoPj6e2rVrR48fPyYiotTUVOEg\nWHp/K+1F7x06dCgNHTqU8vLy6K+//iJ7e3vq2rUrEZVfEPz9/emHH34gouKCcOjQISooKKB79+5R\nt27daPr06cK0Tk5O1KZNG7p9+zY9e/asWvtU6WWVzlMqlVbaZFRyeuXn4IsvvhA+QzY2NvTOO+9Q\nbm4uXbp0iUxNTUkmkxFR8XY3MjKiX3/9leRyOS1fvpyaNm1KcrmciFS3++rVq8nX15cyMjKooKCA\nwsLCKCQkRGUdTpo0iZ4/f04HDx4kY2NjGjBgAN27d48yMjKoQYMGlJCQQEREu3fvJldXV0pNTSWF\nQkELFy6kzp07CzlJJBIKCgqix48f082bN6l+/foUHx9PRGU/G8r1pCz+Fy5coIYNG9Lu3buJqOxn\nh0i12en+/ftkZWVFP/30EykUCoqOjqZ69eoJxc7Pz49cXV3p6tWrlJ+fT/7+/jRr1iwiIvruu+8o\nKCiI8vPzqaioiM6ePUs5OTkVbiutKwhOTk5Ut25dsrKyIicnJ5o8eTLl5+fT0qVLyxzMevfuTf/7\n3/+IqHinnTdvnsr40NBQlTbdZs2aCR8CIqIDBw6Qs7MzERXvqMbGxsIZA1HxztirVy9heO/evVS3\nbl0qKioiIqKcnBySSCTCB7y0AQMG0Jo1a4T5m5qaqmz0Bg0aCAceU1NTunDhQpl5VJZ3SUePHqVG\njRqpvBYSEiJ8G5k3bx6NGDGi3FiJSOWgSET0/fffq3zYS374Sn+DKX3Q2rZtm3BAU5owYQLNnz+f\niIoLwujRo4VxiYmJ1KRJE5XpFy9eTGPGjBFif/PNN4VxygNHebGVp2RBqGxZpa1atYreeustIiI6\nfPgwNW/enBITE8u0+Zbe30o7cuRIue+Vy+VkZGQkFG4iotmzZ7/wDKH0QbqkXbt2UZs2bYRhZ2dn\nlbPR6uxTymUpz0ZK51mVPoTS05uampb5DCUnJwvTt2vXjvbs2UNExdvd19dXGFdUVESNGzemY8eO\nCbkpt7u7u7vKPnDnzh0yMjIihUIhrMM7d+4I421sbFTOWgcNGiR8Xvv06aOyfhUKBZmZmdHNmzeJ\n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\n", "text": [ - "" + "" ] }, { "metadata": {}, "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAbwAAAFhCAYAAAALEB8uAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdYFNfXB/Dv0HvvSBFLbKhoVMQCBAt2xdiiGMXYEo2G\nFImxkGjsxhKNURNrLLEiYo0i6M+GGkuQCDZQkSKCUgV2Oe8fvjthAbvMIns+z+MjW+7cM3fKmTsz\nd1YgIgJjjDFWzWmoOgDGGGNMCpzwGGOMqQVOeIwxxtQCJzzGGGNqgRMeY4wxtcAJjzHGmFqQNOGl\npaWhffv2MDExwddffy1l1e+krl27YuPGjaoOo8pydXXF0aNHJatPQ0MDt27dqtQ6hg0bhqlTp1ba\n9I2NjZGYmPhKZaKiouDk5FQ5AVVzjRo1wvHjx9/6dBMTE6GhoYGSkpK3Pm1VGzt2LGbOnFkp09Z6\n0RdcXV2Rnp4OTU1NGBoaokuXLli2bBkMDQ1fubJVq1bBxsYG2dnZrxWsutm/f7+qQ6jSBEGAIAgV\nfjZs2DA4OTlhxowZrzVtHx8fBAYGYsSIEW8S4it73jy9DTk5OZU27TfxpsurqoqNjVV1CJJ61eW4\nbt06/P777zhx4oT43ooVKyorvBf38ARBQEREBHJycvD333/j/Pnzr5x9iQglJSVISkpC/fr1XytQ\nmUz2WuXYu6GqLd/KTDovws+CqJqq2jrKXgO9gKurKx09elR8/dVXX1H37t2JiOj06dPUunVrMjMz\noyZNmlBUVJT4PW9vb/ruu++oTZs2pK+vT0OGDCFtbW3S0dEhIyMjOnr0KBUWFtKECRPIwcGBHBwc\naOLEiVRYWEhERMeOHSNHR0eaO3cu2dnZUWBgIIWGhtKHH35IQ4YMIWNjY3J3d6eEhASaNWsW2djY\nkLOzMx0+fFiMYc2aNVS/fn0yNjYmNzc3WrlypfiZYvoLFy4kGxsbsre3p7Vr14qf5+fnU3BwMLm4\nuJCpqSm1bduWCgoKXjjfZV24cIGaNm1KxsbG1K9fP+rfvz9NmTKFiIgyMzOpW7duZG1tTebm5tS9\ne3e6d++eUhv+9ttvRES0du1aatOmDX311Vdkbm5ONWvWpAMHDjyz3jt37lCfPn3I2tqaLC0tady4\ncUREJJfLacaMGeTi4kI2NjY0dOhQevz4MRER3b59mwRBoLVr15KTkxNZWFjQihUrKCYmhtzd3cnM\n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\n", + "png": "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\n7do1yszMpIiICOrXrx8R/bsTDRs2jHJzc2n79u1kZmZG3bp1o3v37tGtW7fI1dWV9u7dK7bJxMSE\n5syZQ2q1mn7//Xeys7MTd8qXyf/Z13fOnDnUpEkTunXrFuXl5dGQIUMoMjKSiIguXLhA1tbWtH//\nfsrNzaXRo0eTiYlJsQWPiIq81/Ly8qhatWo0ZcoUys/Pp927d5ONjQ0lJiYWO/+z2WsJgkCdO3em\nx48f0/Xr18nFxYW2bt1KRETr16+n6tWr08WLF0mj0dC3335LoaGhxS5bpVKRjY0NrV69mtRqNT14\n8IBOnz4ttlu7s5f0/sjMzCRbW1tKSkoiIqKUlBS6cOECERH17t2bJk+eTERP34Pa1167DdqC97z3\neGHPFjyNRkP16tWjiRMnUn5+Pl29epX8/Pxo27ZtRPT0A96RI0dIo9GQSqUif39/mjNnDhERbd26\nlerXry9+wLp48SLduXOn2NersJLm7dWrF/Xq1Yuys7Pp/Pnz5OnpSc2bNyei4gves6/t5cuXaefO\nnZSXl0f37t2jFi1a0KhRo8Tn+vj4UHBwMN28eZOePHnySvs/ke4Jw6sev1q2bEmenp504cIFysrK\nou7du1Pfvn2L3a5u3brR0KFDKTs7m+7evUuNGjUSP2Bq99PY2FgqKCigcePGkaenp/hhZPv27WRj\nY0NZWVlE9PSDRdeuXenhw4eUkZFBnTt3pv/85z/ie6Gk42Zxr+OaNWvE1+r3338nKysrSklJISKi\n2NhY8cOJ1rPL2LVrFzk7O9OpU6coNzeXRowYQS1atBCfW9I+WZwXFjwfHx+ytrYme3t78vHxoY8/\n/phycnJo6tSp4oFS6+233xY/KYSFhdGECROKbMizlbtatWo6Zynbtm0jX19fInoarJmZmc4OOGHC\nBGrbtq04vXHjRrK2tqaCggIiIkpPTydBEMSdorBu3brR3LlzxeVbWFjo7Aiurq7izmphYUFnz54t\nsowXbfez9u7dS56enjqPNWvW7Lk79qlTp8RPOURFC1716tXFv2VlZZEgCJSamlpkOQcPHiQXFxed\nbdN66623aOHCheJ0YmIimZqakkajEXeiZz9BOTk50R9//CFOd+/eXTyALVmypEjRbdSoES1btqzY\n7Sucf+HX19/fX6eA3b59m0xNTUmtVtN///tfsfhpt9/MzKzEgvfse23fvn3k7u6u85zIyEiKiYkp\n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\n", "text": [ - "" + "" ] } ], - "prompt_number": 19 + "prompt_number": 51 }, { "cell_type": "markdown", @@ -973,6 +980,13 @@ "## Performance growth rates for different sample sizes" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -985,6 +999,8 @@ "collapsed": false, "input": [ "import timeit\n", + "import random\n", + "random.seed(12345)\n", "\n", "funcs = ['cy_classic_lstsqr', \n", " 'lin_lstsqr_mat', 'numpy_lstsqr', 'scipy_lstsqr']\n", @@ -1003,7 +1019,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 23 + "prompt_number": 22 }, { "cell_type": "code", @@ -1021,7 +1037,7 @@ "plt.ylabel('time in ms')\n", "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", "plt.legend(loc=2)\n", - "\n", + "plt.grid()\n", "\n", "plt.title('Performance of least square fit implementations for different sample sizes')\n", "plt.show()" @@ -1032,13 +1048,13 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\nPUQAAAAASUVORK5CYII=\n", + "png": "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\nJBJRUVFRrdsyatQo+r//+z9V+ZaWlmonLVdXVzpz5gzJ5XKytLRU+9VaqaHtruqnn34id3d3tdcm\nTpyo+pVcvaWruqrvN2a91bd16dKlNHLkSLp+/XqN+RpKwupa9scffyQPDw+116om0Q0lYdXNnTuX\n5s+fT0R/fdndvHlT9f7QoUMpLi5ONS2Xy8nKyoqys7NrLa++JKyh/V7b/I057sLCwlQndyJl64yZ\nmRkpFAq1L/I7d+6Qubm56tc4EdH27dtVX2ibN2+mdu3aqd67ePEiiUQiys/PV73m5OREFy5cIIVC\nQdbW1mrb/PPPP6uSw/qOd6Kan83adO/enQ4cOKCqW31J2NSpU+ntt99WvVdcXEympqaq1kuRSKSW\nXEVGRtKaNWuIiGjy5Mk0Y8YMun37dr31qSyncpsb+rxFR0dTdHR0nWVlZWVRq1atqLS0VPXayy+/\nXGcCXX2fVd8nM2fOrJHYtm/fnn766SciUh5jVVvfNTmnrlixQvXe+vXraejQobXWrTb9+/enZcuW\n1fqDsaoHDx6QSCSiR48eqbZzxowZqvc/++wzCgwMVE1fvHiR7O3tVdN+fn5qLfGHDx8mf39/IlJP\nmH799Vfy8fFRW/fKlStpypQptdbLx8eHNmzYUOP8XlsSJpfL6YUXXqBZs2YRETX4+ajvHGlsuE+Y\nwIhEIhw4cAAPHjxAZmYm/v3vf8PCwgJZWVnYs2cPHBwcVP9Onz6NO3fuqJZt6C6Y3Nxc+Pr6qqZ9\nfHyQm5urmnZxcYGZmZnaMq6urqq/LS0t4ezsrOo8a2lpCQAoLi4GABw5cgQhISFwcnKCg4MDDh8+\njPv376uWd3JyUuuPZWVlheLiYty7dw9PnjyBv79/jTprst1Vt6/6PvD19UVOTk69+6U2Da23vm39\nxz/+gYCAAAwePBj+/v5Ys2aNxuuta9nc3Fx4enrW2DZNnTlzBgMHDoSrqyvs7e2xYcMGtdgA6sdP\nVlYW5s6dq9p2JycnAHiqffk0GnPcAep19/HxgUwmw71799TKzMrKgkwmQ+vWrVXbNXPmTBQUFKjm\ncXNzU1svoPxcVH2tuLgYBQUFKC0tRY8ePVRlDRs2TG2ddR3vddmyZQuCgoJU5V2+fLlGjOqSl5en\ndjxYW1vDyclJLV7u7u5qdans9P7RRx+BiBAcHIzOnTtj8+bNGq2zrs9b5TlFJBLVe07Kzc2Fg4OD\n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\n", "text": [ - "" + "" ] } ], - "prompt_number": 41 + "prompt_number": 34 }, { "cell_type": "markdown", @@ -1354,9 +1370,376 @@ } ], "prompt_number": 20 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Appendix I: Cython vs. Numba" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Like we did with Cython before, we will use the minimalist approach to Numba and see how they compare against each other. \n", + "\n", + "Numba is using the [LLVM compiler infrastructure](http://llvm.org) for compiling Python code to machine code. Its strength is to work with NumPy arrays to speed-up code. If you want to read more about Numba, see the original [website and documentation](http://numba.pydata.org/numba-doc/0.13/index.html)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%load_ext cythonmagic" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "\n", + "def cy_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from numba import jit\n", + "\n", + "@jit\n", + "def nmb_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "ImportError", + "evalue": "No module named 'llvm'", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mjit\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mjit\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mnmb_lstsqr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numba/__init__.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \"\"\"\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0m__future__\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mprint_function\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdivision\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mabsolute_import\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtesting\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdecorators\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0m_version\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mget_versions\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;31m# Re-export typeof\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numba/decorators.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mwarnings\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0msigutils\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtargets\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mregistry\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 8\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;31m# -----------------------------------------------------------------------------\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numba/targets/registry.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0m__future__\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mprint_function\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdivision\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mabsolute_import\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mutils\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtyping\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtargets\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mcpu\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtargets\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdescriptors\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mTargetDescriptor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mdispatcher\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numba/targets/cpu.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0msys\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mllvm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcore\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mlc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mllvm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpasses\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mlp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mllvm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mee\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mle\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mImportError\u001b[0m: No module named 'llvm'" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ... this section is still in progress" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Appendix II: Cython with and without type declarations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the sections above, we have been using the simplest approach to Cython without using static type declarations and thereby neglecting one of its major strengths. \n", + "Let us now see how we can further improve the Cython implementation of our \"classic least squares approach\" by adding those type declarations." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, our \"simple\" approach using Cython from the previous section:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "def cy_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 54 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And now, the same code with static type declarations:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "def static_type_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " cdef double x_avg, y_avg, var_x, cov_xy, slope, y_interc, x_i, y_i\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 55 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "Now, let us see how the two functions (with and without static type declarations) compare against each other for different sample sizes." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "import random\n", + "random.seed(12345)\n", + "\n", + "funcs = ['cy_lstsqr', 'static_type_lstsqr'] \n", + "labels = ['simple Cython', 'Cython w. type declarations']\n", + "orders_n = [10**n for n in range(1, 7)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", + " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", + " for f in funcs:\n", + " times_n[f].append(timeit.Timer('%s(x,y)' %f, \n", + " 'from __main__ import %s, x, y' %f).timeit(1000))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 58 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#%pylab inline\n", + "#import matplotlib.pyplot as plt\n", + "\n", + "plt.figure(figsize=(10,8))\n", + "\n", + "for f in times_n.keys():\n", + " plt.plot(orders_n, times_n[f], alpha=0.5, label=f, marker='o', lw=2)\n", + "\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time in ms')\n", + "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "\n", + "plt.title('Performance of a simple least square fit implementation')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 59 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "The improvement is pretty significant when static type declarations are used. One more experiment to see by how much we could improve our \"classic least squares\" code via Cython compared to the initial Python implementation.\n", + "
\n", + "
" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import random\n", + "random.seed(12345)\n", + "\n", + "x = [x_i*random.randrange(8,12)/10 for x_i in range(500)]\n", + "y = [y_i*random.randrange(8,12)/10 for y_i in range(100,600)]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 60 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "\n", + "funcs = ['classic_lstsqr', 'cy_lstsqr', 'static_type_lstsqr', \n", + " 'lin_lstsqr_mat', 'numpy_lstsqr', 'scipy_lstsqr']\n", + "labels = ['classic approach','classic approach (cython)', \n", + " 'classic approach (cython + type decl.)',\n", + " 'matrix approach', 'numpy function', 'scipy function']\n", + "\n", + "times = [timeit.Timer('%s(x,y)' %f, \n", + " 'from __main__ import %s, x, y' %f).timeit(1000)\n", + " for f in funcs]\n", + "\n", + "times_rel = [times[0]/times[i+1] for i in range(len(times[1:]))]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 61 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#%pylab inline\n", + "#import matplotlib.pyplot as plt\n", + "\n", + "x_pos = np.arange(len(funcs[1:]))\n", + "plt.bar(x_pos, times_rel, align='center', alpha=0.5, color=\"green\")\n", + "plt.xticks(x_pos, labels[1:], rotation=90)\n", + "plt.ylabel('relative performance gain')\n", + "plt.title('Performance gain compared to the classic least square implementation')\n", + "plt.grid()\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 63 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is a pretty significant performance gain. The \"Cython + type declarations\" approach sped up our initial Python code 25 times." + ] } ], "metadata": {} } ] -} +} \ No newline at end of file From 0bb5fd3e6b678586806982cfd9faf5c4b752d1b1 Mon Sep 17 00:00:00 2001 From: rasbt Date: Mon, 5 May 2014 19:31:23 -0400 Subject: [PATCH 019/248] appendices added --- .../cython_least_squares-checkpoint.ipynb | 512 +++++++++++++++++- benchmarks/cython_least_squares.ipynb | 512 +++++++++++++++++- 2 files changed, 968 insertions(+), 56 deletions(-) diff --git a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb index 8c47d64..fafb461 100644 --- a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb +++ b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:3b47add80317bb8ad369eacd5528c941bb1a2cbd92ae5b33aae66d56ae35c741" + "signature": "sha256:caecd42da39e4b55b4dc50c985b30a04ee3eac4a88d143732c4441ecc28fc1e0" }, "nbformat": 3, "nbformat_minor": 0, @@ -72,7 +72,8 @@ "- [Performance growth rates for different sample sizes](#sample_sizes)\n", "- [Bonus: How to use Cython without the IPython magic](#cython_bonus)\n", "- [Appendix I: Cython vs. Numba](#numba)\n", - "- [Appendix II: Cython with and without type declarations](#type_declarations)" + "- [Appendix II: Cython with and without type declarations](#type_declarations)\n", + "- [Appendix III: Cython performance after replacing list comprehensions by explicit for loops](#explicit_loops)" ] }, { @@ -1400,7 +1401,14 @@ "source": [ "Like we did with Cython before, we will use the minimalist approach to Numba and see how they compare against each other. \n", "\n", - "Numba is using the [LLVM compiler infrastructure](http://llvm.org) for compiling Python code to machine code. Its strength is to work with NumPy arrays to speed-up code. If you want to read more about Numba, see the original [website and documentation](http://numba.pydata.org/numba-doc/0.13/index.html)" + "Numba is using the [LLVM compiler infrastructure](http://llvm.org) for compiling Python code to machine code. Its strength is to work with NumPy arrays to speed-up code. If you want to read more about Numba, see the original [website and documentation](http://numba.pydata.org/numba-doc/0.13/index.html)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is our \"classic\" approach in Python, where I removed the list comprehensions, since they caused errors in the Numba compilation." ] }, { @@ -1411,8 +1419,12 @@ " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", " x_avg = sum(x)/len(x)\n", " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " var_x = 0\n", + " for x_i in x:\n", + " var_x += (x_i - x_avg)**2\n", + " cov_xy = 0\n", + " for x_i, y_i in zip(x,y):\n", + " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", " slope = cov_xy / var_x\n", " y_interc = y_avg - slope*x_avg\n", " return (slope, y_interc)" @@ -1420,7 +1432,14 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 1 + "prompt_number": 22 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Cython-compiled version of it:" + ] }, { "cell_type": "code", @@ -1430,8 +1449,7 @@ ], "language": "python", "metadata": {}, - "outputs": [], - "prompt_number": 2 + "outputs": [] }, { "cell_type": "code", @@ -1443,8 +1461,12 @@ " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", " x_avg = sum(x)/len(x)\n", " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " var_x = 0\n", + " for x_i in x:\n", + " var_x += (x_i - x_avg)**2\n", + " cov_xy = 0\n", + " for x_i, y_i in zip(x,y):\n", + " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", " slope = cov_xy / var_x\n", " y_interc = y_avg - slope*x_avg\n", " return (slope, y_interc)" @@ -1452,7 +1474,14 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 3 + "prompt_number": 26 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And now the Numba-compiled version:" + ] }, { "cell_type": "code", @@ -1465,37 +1494,95 @@ " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", " x_avg = sum(x)/len(x)\n", " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " var_x = 0\n", + " for x_i in x:\n", + " var_x += (x_i - x_avg)**2\n", + " cov_xy = 0\n", + " for x_i, y_i in zip(x,y):\n", + " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", + " \n", " slope = cov_xy / var_x\n", " y_interc = y_avg - slope*x_avg\n", " return (slope, y_interc)" ], "language": "python", "metadata": {}, + "outputs": [], + "prompt_number": 27 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "Now, let us see how the different approaches compare against each other for different sample sizes." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "import random\n", + "random.seed(12345)\n", + "\n", + "funcs = ['lstsqr', 'cy_lstsqr', 'nmb_lstsqr'] \n", + "orders_n = [10**n for n in range(1, 7)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", + " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", + " for f in funcs:\n", + " times_n[f].append(timeit.Timer('%s(x,y)' %f, \n", + " 'from __main__ import %s, x, y' %f).timeit(1000))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 28 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#%pylab inline\n", + "#import matplotlib.pyplot as plt\n", + "\n", + "plt.figure(figsize=(10,8))\n", + "\n", + "for f in times_n.keys():\n", + " plt.plot(orders_n, times_n[f], alpha=0.5, label=f, marker='o', lw=2)\n", + "\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time in ms')\n", + "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "\n", + "plt.title('Performance of a simple least square fit implementation')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, "outputs": [ { - "ename": "ImportError", - "evalue": "No module named 'llvm'", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mjit\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mjit\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mnmb_lstsqr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numba/__init__.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \"\"\"\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0m__future__\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mprint_function\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdivision\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mabsolute_import\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtesting\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdecorators\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0m_version\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mget_versions\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;31m# Re-export typeof\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numba/decorators.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mwarnings\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0msigutils\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtargets\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mregistry\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 8\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;31m# -----------------------------------------------------------------------------\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numba/targets/registry.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0m__future__\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mprint_function\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdivision\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mabsolute_import\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mutils\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtyping\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtargets\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mcpu\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtargets\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdescriptors\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mTargetDescriptor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mdispatcher\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numba/targets/cpu.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0msys\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mllvm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcore\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mlc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mllvm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpasses\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mlp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mllvm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mee\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mle\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mImportError\u001b[0m: No module named 'llvm'" + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAH4CAYAAAACdDpdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl4k2XW+PFv0n1vKV2A0gUKhULZBRSQQhFwYRlBliKL\nivO6jCvzc3RUFp0RxhnfcfB1m2GpClhABWRHliqiUtmkUKC00AJtKS2lQOmSNrl/fzxDpFCgSNts\n53Ndva4+SZ7kJCdPcnLfd050SimFEEIIIYRoVHpLByCEEEII4YikCBNCCCGEsAApwoQQQgghLECK\nMCGEEEIIC5AiTAghhBDCAqQIE0IIIYSwACnChM0pKCjg7rvvxtfXl//3//6fpcOxuPLycoYNG4a/\nvz9jx45tsNu57777+OyzzxrkuvV6PceOHbvl/ZKSkujXr18DRGT/duzYQZs2bfD19WXVqlXcd999\nfPrpp3Xe3xqfD9Zu9uzZPP7445YOQ1gRZ0sHIBxDZGQkZ86cwcnJCS8vL+69917+7//+Dy8vr1u+\nrn//+98EBwdz4cKFBojU9nzxxRecOXOG4uJi9PqG+1y1bt26BrtuaxYfH8/EiRN57LHHLB1KvZo+\nfTrPPvsszzzzDAAjRowwn5eUlMT8+fPZvn37dfd3tOfDzJkzycrKqnPhmZKSwsSJEzl58qT5tFde\neaWhwhM2SkbCRKPQ6XSsWbOGixcvsmfPHnbt2sVf/vKXW7oOpRQmk4mcnBzat2//m+Korq7+TftZ\ns5ycHNq2bdugBZgj0+l0lg7hpn7L8/rEiRPExsY2QDRCiDpTQjSCyMhItWXLFvP2H//4R/XAAw8o\npZT68ccf1Z133qn8/f1V586dVUpKivly/fv3V6+++qrq06eP8vDwUA8//LBycXFRrq6uytvbW23Z\nskVVVlaq5557TjVv3lw1b95cPf/886qyslIppdS2bdtUixYt1N/+9jcVGhqqJk6cqGbOnKlGjx6t\nHn74YeXj46Pi4uJURkaGeuutt1RwcLAKDw9XmzZtMsewYMEC1b59e+Xj46NatWqlPv74Y/N5l6//\nnXfeUcHBwapZs2Zq4cKF5vPLysrUiy++qCIiIpSfn5/q27evKi8vv+n9vlp6errq37+/8vf3Vx06\ndFBff/21Ukqp6dOnK1dXV+Xi4qK8vb3VggULrtl3586dqnfv3srf3181a9ZM/eEPf1AGg6HW2ykv\nL1cTJkxQgYGByt/fX91xxx3qzJkz5lzMmzdPKaXUwoUL1V133aVeeOEF5e/vr1q3bq127NihFixY\noFq2bKmCg4PVJ598Yr7eyZMnq//5n/9R99xzj/Lx8VH9+/dXOTk55vN1Op3KyspSSilVUVGhpk2b\npsLDw1VISIh64oknzI/Z1RYuXKj69u1r3j506JAaNGiQatKkiYqJiVHLli0zn7dmzRrVpUsX5evr\nq1q2bKlmzpx5w/tdUFCg/vznPysnJyfl7u6uvL291TPPPFOnx6ygoEAppdSxY8fU3XffrXx8fNQ9\n99yjnn76afXwww8rpbTnTlhYWI3rioiIMB8nN8ubTqdT77//voqOjlatWrVSSim1evVq1blzZ+Xv\n76/uuusutX///loft1atWim9Xq88PDyUj4+PqqysNOf30KFDys3NTTk5OSlvb28VEBBQ63VYw/Ph\n8vH39ttvq6CgINWsWTO1YsUKtXbtWtWmTRvVpEkTNXv2bPP1mkwmNXv2bNW6dWsVGBioxowZo4qL\ni5VSSh0/flzpdDr1ySefqPDwcNW0aVP117/+VSml1Pr162scZ126dFFKXf+1obS0VLm7uyu9Xq+8\nvb2Vj4+PysvLUzNmzDDnXymlVq1apWJjY5W/v7+Kj49Xhw4dqvFc+Mc//qE6deqk/Pz81NixY1VF\nRUWtuRC2S4ow0SgiIyPV5s2blVJKnThxQnXo0EFNnz5dnTp1SgUGBqr169crpZT65ptvVGBgoCoq\nKlJKaS/0ERERKj09XRmNRlVVVaWmTJmiXn/9dfN1v/766+rOO+9UhYWFqrCwUN11113m87dt26ac\nnZ3Vyy+/rAwGgyovL1czZsxQ7u7uatOmTaq6ulpNmjRJRUREqLfeektVV1er//znPyoqKsp8/WvX\nrlXHjh1TSin17bffKk9PT7Vnz54a1z9jxgxVXV2t1q1bpzw9PVVJSYlSSqmnnnpKDRgwQOXl5Smj\n0ah+/PFHVVlZed37XVhYeM1jZzAYVOvWrdXs2bNVVVWV2rp1q/Lx8VFHjhxRSik1c+ZMNXHixOs+\n9rt371Y7d+5URqNRZWdnq/bt26t333231st+9NFHatiwYaq8vFyZTCa1Z88edeHCBaWUUvHx8Wr+\n/PlKKe1N19nZWSUlJSmTyaRee+011aJFC3OhsGnTJuXj46MuXbqklNLedH18fNT27dvNRfOVxdOV\nb7rPP/+8GjFihDp37py6ePGiGjZsmHrllVdqjffKIqy0tFSFhYWppKQkZTQa1d69e1XTpk1Venq6\nUkqplJQUdeDAAaWUUvv371chISFq5cqVt3S/b/Ux6927t5o2bZoyGAzqu+++Uz4+PuZc1VaEXflh\n5WZ50+l0avDgwercuXOqoqJC7dmzRwUHB6vU1FRlMpnUJ598oiIjI80fSK529QejK+9nUlJSjfzU\nxhqeD5ePvzfffNN87AYGBqrExERVWlqqDh48qDw8PFR2drZSSql3331X3XnnnSo3N1cZDAb1P//z\nP2r8+PFKqV+LsN///veqoqJC/fLLL8rNzU0dPnxYKVX7cXaj14aUlJRr8jtz5kxzEXbkyBHl5eWl\nNm/erKqrq9Xbb7+toqOjVVVVlTk/vXr1Uvn5+aq4uFi1b99effTRRzfMibA9UoSJRhEREaG8vb2V\nv7+/ioiIUE8//bQqLy9Xc+bMueaFbciQIeZPzfHx8WrGjBk1zp8yZYp67bXXzNutW7c2FzNKKbVx\n40YVGRmplNJepF1dXWu8Ec2YMUMNHjzYvP31118rb29vZTKZlFJKXbhwQel0OnX+/Pla78vIkSPV\nv/71L/P1e3h4KKPRaD4/ODjY/Obp4eFR62jEze73lb777jsVGhpa47Tx48ebR3Ku/nR9M//85z/V\n7373u1rPW7BgwXVHUK5+023Tpo35vP379yudTmceNVNKqcDAQPXLL78opbQ33ctvdkppBZOTk5M6\ndeqUUurXN12TyaS8vLzMb8BKKfXDDz/UKIqvdGURlpycrPr161fj/N///vdq1qxZte773HPPqRde\neKFO9/vyiE9trrdvTk6OcnZ2VmVlZebTEhMT61yEXe3qvOl0OrVt2zbz9hNPPFHjw4lSSsXExKhv\nv/221uu7URF29Qhjbazh+XD5+Lv62E1NTTVfvnv37mrVqlVKKaXatWtX4z7n5eUpFxcXZTQazUVY\nbm6u+fyePXuqpUuXKqXqdpxd/dpwdX6vvI433nhDjR071nyeyWRSLVq0MOcrMjJSLV682Hz+Sy+9\npJ544okb3r6wPbIwXzQKnU7HqlWrGDhwYI3Tc3JyWL58OatXrzafVl1dXeNyLVu2vOF15+XlERER\nYd4ODw8nLy/PvB0UFISrq2uNfYKDg83/e3h40LRpU/PaHw8PDwBKS0vx9fVl/fr1zJo1i6NHj2Iy\nmSgrK6NTp07m/QMDA2usx/L09KS0tJSioiIqKipo3br1NTHX5X5fef+ufgwiIiLIzc294eNyWUZG\nBi+++CK7d++mrKyM6upqevToUetlLy8kHjduHCUlJTz88MP89a9/xdn52peKkJAQ8/+XH7OgoKAa\np5WWlgJa/sPCwszneXl50aRJE/Ly8mjRooX59MLCQsrKyujevbv5NPXftYA3k5OTw86dOwkICDCf\nVl1dzaRJkwDYuXMnL7/8MgcPHsRgMFBZWcmYMWPqdL9vtC7sevvm5eUREBBgfmxAy9uVC7VvpC55\nu/J5kZOTw6effsp7771nPq2qqor8/Pw63d7tstTzITAw8Jpj9+pYLt9uTk4Ov/vd72ocr87OzhQU\nFJi3Q0NDzf9fPpav52avDTeSl5dHeHi4eVun09GyZcsax/WVsXh4eNR4XRP2QVbyCosKDw9n4sSJ\nnDt3zvx38eJFXnrpJfNlbrYwunnz5mRnZ5u3T5w4QfPmza+7/60stK6srGTUqFG89NJLnDlzhnPn\nznHfffehlLrpvk2bNsXd3Z3MzMxrzqvL/b7y/p08ebLGbebk5NR4E7uRJ598ktjYWDIzMzl//jx/\n/etfr1vUODs7M336dA4ePMgPP/zAmjVrbqltwfUopWoUH6WlpRQXF9fIE2iPmYeHB+np6ebHpaSk\npE7fhA0PD6d///7XPKbvv/8+AImJiYwcOZJTp05RUlLCE088YX4cbnS/b/Z8ud6+zZs359y5c5SV\nlZkvm5OTY74+Ly+vGucZjUYKCwvN23XJ25WxhYeH8+qrr9a4/6Wlpb+pbUlDfxmhMZ4PtQkPD2fD\nhg01HqOysjKaNWt2032vfkxu9tpws8ewRYsW5OTkmLcvPyZXFqE3un1hH6QIExb18MMPs3r1ajZt\n2oTRaKSiooKUlJQanwavLniu3h4/fjx/+ctfKCoqoqioiDfeeIOJEyde9zbrUkBdZjAYMBgMNG3a\nFL1ez/r169m0aVOd9tXr9Tz66KO8+OKL5OfnYzQa+fHHHzEYDHW635f17t0bT09P3n77baqqqkhJ\nSWHNmjWMGzeuTnGUlpbi4+ODp6cnhw8f5sMPP7zuZVNSUkhLS8NoNOLj44OLiwtOTk51up2bWbdu\nHTt27MBgMPD6669z5513XvOGo9frefzxx3n++efNBUlubm6dHvP777+fjIwMFi1aRFVVFVVVVfz8\n888cPnwY0B6HgIAAXF1dSU1NZcmSJeY3thvd75CQELKysq57u9fbNzw8nB49ejBjxgyqqqr4/vvv\nWbNmjXm/tm3bUlFRwbp166iqquIvf/kLlZWV5vNvJW8Ajz/+OB999BGpqakopbh06RJr16694UjO\n9YSEhHDq1Cmqqqpued+6aujnQ22eeOIJ/vznP3PixAlAG2n7+uuv67RvaGgo2dnZ5tePm702hISE\ncPbs2esWjA899BBr165l69atVFVV8c477+Du7s5dd91V6+Vv5XVL2A4pwoRFhYWFsWrVKt566y2C\ng4MJDw/nnXfeqfGCU9tI1pWnvfbaa/To0YNOnTrRqVMnevTowWuvvVbn/a93GQAfHx/mzp3LmDFj\naNKkCZ9//nmNfkq17Xulf/zjH8TFxXHHHXcQGBjIK6+8gslkuu79rm2EysXFhdWrV7N+/XqCgoL4\nwx/+wGeffUbbtm2ve3+ujmHJkiX4+vry+9//nnHjxl338qdPn+ahhx7Cz8+P2NhYc4+sq9XlMbz6\nvMTERGbNmkVgYCB79+5l0aJFte77t7/9jejoaHr37o2fnx/33HMPGRkZ173eK3O1adMmkpOTadGi\nBc2aNeOVV17BYDAA8MEHHzB9+nR8fX158803a4wQ3eh+P/fcc3zxxRc0adKE559//pYesyVLlrBz\n506aNGnCG2+8waRJk8zPbT8/Pz744AOmTp1KWFgY3t7eNaYXb5a3qx/v7t2785///Ic//OEPNGnS\nhDZt2vzmUcyEhAQ6dOhAaGhojan767Hk8+FWbve5555j+PDhDB48GF9fX+68805SU1PrtO9DDz0E\naNOfPXr0uOlrQ7t27Rg/fjytWrWiSZMm5Ofn13icYmJiWLRoEc888wxBQUGsXbuW1atX1zr1fzk2\nGQ2zPzrVwOW10WikR48ehIWFsXr1aoqLixk7diw5OTlERkaybNky/P39Aa2b8IIFC3BycmLu3LkM\nHjy4IUMTQjSSRx55hLCwMN58801Lh2JRs2bNIjMzs8E6zdsKeT4IoWnwkbB//etfxMbGmiv4OXPm\nmD/JJCQkMGfOHADS09NZunQp6enpbNiwgaeeeqpOi3GFENZPplI08jho5HEQQtOgRdipU6dYt24d\nU6dONR90X3/9NZMnTwZg8uTJrFy5EoBVq1Yxfvx4XFxciIyMJDo6usYwsRDCdslUikYeB408DkJo\n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\nSUVORK5CYII=\n", + "text": [ + "" ] } ], - "prompt_number": 4 + "prompt_number": 32 }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# ... this section is still in progress" + "Without making any modifications to the original code in order to account for the strengths of Numba (Numpy) and Cython (static type declarations), we see that Cython performs significantly better than Numba." ] }, { @@ -1533,9 +1620,45 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "First, our \"simple\" approach using Cython from the previous section:" + "Here is our \"classic\" approach in Python:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 44 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Cython-compiled version of it:" ] }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%load_ext cythonmagic" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, { "cell_type": "code", "collapsed": false, @@ -1554,7 +1677,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 54 + "prompt_number": 45 }, { "cell_type": "markdown", @@ -1737,6 +1860,339 @@ "source": [ "This is a pretty significant performance gain. The \"Cython + type declarations\" approach sped up our initial Python code 25 times." ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Appendix III: Cython performance after replacing list comprehensions by explicit for loops" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "List, set and dictionary comprehensions in Python do not only look prettier and are easier to read (at least most of the time) than nested loop structures, but they also come with some small performance benefits. \n", + "Does this also apply in Cython? Let's check it out." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "This is the code for our \"classic\" least squares approach that we have been using in the previous sections:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def lstsqr_comprehensions(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 46 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "And here is a version where I replaced the list comprehensions by for-loops:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def lstsqr_loops(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = 0\n", + " for x_i in x:\n", + " var_x += (x_i - x_avg)**2\n", + " cov_xy = 0\n", + " for x_i, y_i in zip(x,y):\n", + " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 48 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "Finally, the Cython versions of the two functions (with and without using list comprehensions) that we have defined above:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%load_ext cythonmagic" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "\n", + "def cy_lstsqr_comprehensions(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " cdef double x_avg, y_avg, var_x, cov_xy, slope, y_interc, x_i, y_i\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 49 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "\n", + "def cy_lstsqr_loops(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " cdef double x_avg, y_avg, var_x, cov_xy, slope, y_interc, x_i, y_i\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = 0\n", + " for x_i in x:\n", + " var_x += (x_i - x_avg)**2\n", + " cov_xy = 0\n", + " for x_i, y_i in zip(x,y):\n", + " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 50 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "We will generate some sample data for different sample sizes and take a look at the results for the regular Python functions, and the Cython code separately." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "import random\n", + "random.seed(12345)\n", + "\n", + "funcs = ['lstsqr_comprehensions', 'lstsqr_loops',\n", + " 'cy_lstsqr_comprehensions', 'cy_lstsqr_loops'] \n", + "\n", + "orders_n = [10**n for n in range(1, 6)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", + " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", + " for f in funcs:\n", + " times_n[f].append(timeit.Timer('%s(x,y)' %f, \n", + " 'from __main__ import %s, x, y' %f).timeit(1000))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 52 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plt.figure(figsize=(8,6))\n", + "plt.plot(orders_n, times_n['lstsqr_comprehensions'], alpha=0.5, \n", + " label='list comprehensions', marker='o', lw=2)\n", + "plt.plot(orders_n, times_n['lstsqr_loops'], alpha=0.5, \n", + " label='for-loops', marker='o', lw=2)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time in ms')\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", + "plt.title('Performance comparison list comprehensions and for-loops')\n", + "plt.show()\n", + "\n", + "plt.figure(figsize=(8,6))\n", + "plt.plot(orders_n, times_n['cy_lstsqr_comprehensions'], alpha=0.5, \n", + " label='list comprehensions (Cython', marker='o', lw=2)\n", + "plt.plot(orders_n, times_n['cy_lstsqr_loops'], alpha=0.5, \n", + " label='for-loops (Cython)', marker='o', lw=2)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time in ms')\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", + "plt.title('Performance comparison list comprehensions and for-loops in Cython')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nURKDPTGQxwAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAGJCAYAAABFDXDOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8TXf++PFXQoJE9kgiO0ntgtZSFLG2lNYoKtagqr/B\nTKtT7bSKKqodVBedfnVUSmyli30pGqNUaRGqxJpYEksESSSyfn5/nMltQja5N7n3JO/n4+Eh5957\nznmf9z03n5zz/tzPx0oppRBCCCGERbI2dwBCCCGEKJo01EIIIYQFk4ZaCCGEsGDSUAshhBAWTBpq\nIYQQwoJJQy2EEEJYMGmoi3Ht2jU6d+6Mo6Mjr732mrnDEUXYu3cvjRo1qtB9hoaGsmTJEgBWrFjB\nk08+WaH7tyT5c1FR+vTpw/Llyyt0n6YUGBjIrl27Cn0uPT2dfv364ezszPPPP2/0vmbMmMGIESOM\n3o6pWNJ7Fx4ezttvv23uMEpU6RrqwMBA7OzscHBwwMvLi9GjR3P37t0ybWvx4sV4eHiQnJzMv/71\nLxNHKkylU6dOnDp1qkL3aWVlhZWVFQDDhg1j+/btJa6jl18KDyt/LirKli1bLKrxeVjF5WzdunVc\nv36dpKQk1qxZY5J9WRJj37uVK1fSunVrHBwc8Pb2pk+fPuzbt6/E9SIiIujUqVOBx8xx7pZFpWuo\nrays2LRpEykpKRw+fJhff/2VWbNmPdQ2lFLk5uYSFxdH48aNyxRHdnZ2mdYTD0fyXL4kvxUvLi6O\nBg0aYG398L+eC3u/KtOYVgsWLOCVV15h6tSpXL9+nUuXLjFhwgQ2bNhg7tDKVaVrqPPz9vbmqaee\n4vfffwfgwIEDdOjQARcXF1q2bMmePXsMrw0NDWXq1Kk88cQT2NvbM2rUKJYtW8YHH3yAg4MDu3fv\nJjMzk5dffhkfHx98fHx45ZVXyMzMBCAqKgpfX18++OAD6taty5gxY3jnnXcYNGgQI0aMwNHRkZCQ\nEM6cOcN7772Hp6cnAQEB/PDDD4YYli5dSpMmTXB0dCQoKIjFixcbnsvb/oIFC/D09MTb25uIiAjD\n8+np6bz66qsEBgbi7OxMp06duHfvXonHfb9Lly4xYMAAPDw8cHd3Z9KkSQDk5uYya9YsAgMD8fT0\nZNSoUSQnJwMQGxuLtbU1ERER+Pv74+bmxueff86hQ4cICQnBxcXFsB3Q/rLt2LEjkyZNwtnZmcaN\nG7N79+6HykNenseOHUtUVBR+fn6G17z//vv4+vri6OhIo0aNDNvOyMgo8f0rKr/Fyf+XulKKV155\nBU9PT5ycnAgJCeHEiRMsXryYlStXGs6nZ599ttBtnThxgp49e+Lm5oaXlxfvvfdeqWP/17/+hYeH\nB97e3nz//fds2bKFBg0a4Obmxty5cw37mDFjBgMHDmTIkCE4Ojry2GOPcezYMcPzgYGBfPDBB4SE\nhODg4EBubm6J51BsbCxPPPEEjo6OPPnkk9y8edPwXEmfu2nTphW67r179xg+fDju7u64uLjQtm1b\nbty4YVgv73a7UqrEc3PZsmUEBARQp04d5syZY9j/wYMHad26NU5OTnh5efHqq68W+r7cvn2bvn37\n4uHhgaurK/369ePKlSulOg6A5cuXExAQgLu7e4H932/69Om8++67rFmzBgcHB5YuXVqq4/vyyy8J\nCAigR48eRW47z4YNG2jatCkuLi507dq1wN2okydPEhoaiouLC82aNWPjxo2G58LDw3nppZfo1asX\njo6OhIaGcvHiRcPzhZ33hcn/3kVERPDEE0/w2muv4erqSv369dm2bVuh6925c4fp06fz2Wef0b9/\nf2rVqkW1atV4+umnef/997l69Sr29vYkJSUZ1jl8+DAeHh78/vvvvPTSS/z88884ODjg6upqeE1S\nUhJ9+/bF0dGRxx9/nPPnzxue279/P23atMHZ2Zm2bdvy888/FziO4t5zk1KVTGBgoNq5c6dSSqmL\nFy+qpk2bqmnTpqnLly8rNzc3tXXrVqWUUj/88INyc3NTiYmJSimlunTpogICAtQff/yhcnJyVFZW\nlgoPD1dvv/22Ydtvv/22at++vbpx44a6ceOG6tChg+H5H3/8UVWvXl298cYbKjMzU6Wnp6vp06er\nmjVrqh07dqjs7Gw1cuRIFRAQoObMmaOys7PVF198oerVq2fY/ubNm9X58+eVUkrt2bNH2dnZqcOH\nDxfY/vTp01V2drbasmWLsrOzU7dv31ZKKfXXv/5Vde3aVcXHx6ucnBz1888/q4yMjCKP+8aNGw/k\nLjs7W4WEhKjJkyertLQ0de/ePbVv3z6llFJLlixRwcHB6sKFCyo1NVUNGDBAjRgxQiml1IULF5SV\nlZX6f//v/6mMjAy1Y8cOZWtrq/r3769u3Lihrly5ojw8PNSePXuUUkotXbpUVa9eXS1cuFBlZ2er\nNWvWKCcnJ5WUlFTqPOTP848//qh8fX2VUkqdOnVK+fn5qYSEBKWUUnFxcercuXOlfv+Kyu/9QkND\n1ZIlSwzH88QTTyillNq2bZt67LHH1J07dwzx5MVy//l0v+TkZOXl5aUWLFigMjIyVEpKivrll19K\nHfu7775rOK/c3NzU0KFDVWpqqjpx4oSqVauWio2NVUopNX36dGVjY6O++eYblZ2drebNm6fq1aun\nsrOzlVJKBQQEqFatWqnLly+re/fuleqzExQUpM6cOaPS09NVaGioeuONN5RSqlTrBgcHF7ru559/\nrvr166fS09NVbm6uOnz4sEpOTn4g/6U5N1988UV17949FR0drWrUqKFOnTqllFLq8ccfV5GRkUop\npe7evasOHDhQ6Htz8+ZN9e2336r09HSVkpKiBg0apPr37294vrjjOHHihKpdu7bau3evysjIUJMn\nT1bVq1dXu3btKnRfM2bMMMRf2uMbNWqU4TN7v+nTp6vhw4crpZSKiYlR9vb2aufOnSo7O1t98MEH\nKjg4WGVlZanMzEwVFBSk3nvvPZWVlaV2796tHBwcVExMjFJKqVGjRikHBwfDcfz9738v1Xl/v/s/\nOzY2Nuo///mPys3NVf/+97+Vt7d3oett3bpVVa9eXeXk5BT6vFJK9enTR/373/82LL/88svqb3/7\nm1JKqYiICEO8eUaNGqXc3NzUoUOHVHZ2tho2bJgaMmSIUkp7z52dnVVkZKTKyclRq1atUi4uLobf\nU8W956ZW6RrqgIAAVbt2beXs7KwCAgLUhAkTVHp6upo7d26Bk18ppZ588kn11VdfKaW0k2f69OkF\nng8PD1dTp041LAcFBRl+4Sil1Pbt21VgYKBSSvtlaWtrqzIyMgzPT58+XfXq1cuwvGHDBlW7dm2V\nm5urlNJ+MVtZWRlO7vv1799fffTRR4bt16pVq8BJ6uHhoX755ReVk5OjatWqpY4dO/bANko67vz2\n79+v6tSpU+gHoVu3bgU+ADExMcrGxkbl5OQYflnEx8cbnndzc1Nff/21Yfm5555TCxcuVEppH877\nP4xt27ZVy5cvL1Ue7s9z/ob6zJkzysPDQ+3cuVNlZmYW2E5J719R+S1MUQ31rl27VIMGDdSBAwce\nyOP959P9Vq5cqR599NFCnytN7PefVwcPHjS8/rHHHlPr169XSmnnZfv27Q3P5ebmqrp166qffvpJ\n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\nL1HPoRhem1SIm6wStV6vh91u58d2uz3qL5pUFAqFsHbtWtx///1Ys2YNAPEvyP7+fgBAX18fiouL\nAVwav+7ubhgMBuj1enR3d1/y+IXXdHV1ARB/IY+MjECr1cbls8XDkSNHsHv3blRWVmLTpk04ePAg\n7r//forhBBgMBhgMBixaJN4RcN26dThx4gRKS0sphuP00UcfYdmyZdDpdFCpVLjnnnvw/vvvUwyv\n0VT//9XpdLLKR7JK1AsXLkR7eztsNhuCwSBeeOEFrF69WuppSYYxhq985SuYPXs2tm3bxh9fvXo1\n/vSnPwEQuxIvJPDVq1dj586dCAaDsFqtaG9vx+LFi1FaWor8/HwcO3YMjDH8+c9/xl133XXJ93rp\npZfQ1NQU5085tR5//HHY7XZYrVbs3LkTt9xyC/785z9TDCegtLQU5eXlOHv2LABg//79mDNnDlat\nWkUxHKeZM2fi6NGj8Pl8YIxh//79mD17NsXwGsXj/++tt96Kffv2weVyYXh4GG+//TZWrlwpwaeF\nvLq+GWPszTffZDU1NcxkMrHHH39c6ulI6t1332UKhYLNnz+f1dfXs/r6evbWW28xh8PBmpqamNls\nZitWrIjqRHzssceYyWRitbW1bO/evfzxjz76iNXV1TGTycQeffRR/rjf72fr169n1dXVbMmSJcxq\ntcbzI8ZVS0sL7/qmGE5MW1sbW7hwIZs3bx67++67mcvlohhO0BNPPMFmz57N6urq2AMPPMCCwSDF\ncBw2btzIysrKmFqtZgaDgT3zzDNxi9szzzzDqqurWXV1NWtubo7L570cuuEJIYQQImOyOvVNCCGE\nkGiUqAkhhBAZo0RNCCGEyBglakIIIUTGKFETQgghMkaJmhBCCJExStSEpKjGxkYcP348pu+xZ8+e\nlN+OlpCpppJ6AoQQaUzGPZJXrVrF9/gmhEwNWlETIhNerxd33HEH6uvrMXfuXLz44osAgJ/97GdY\nvHgx5s6di4cffpg/v7GxEd/5znewaNEizJo1Cx9++CHuvvtu1NTU4Cc/+QkAcde1mTNn4r777sPs\n2bOxfv16+Hy+S9573759WLZsGRYsWIB7770XXq/3kuc89dRTmDNnDubPn4/NmzcDAJqbm/Hoo48C\nAOrr69HQ0ICGhgZkZ2fj3XffhdfrxdatW7FkyRJcd9112L179yXft6WlBY2NjVi/fj1mzZqF++67\nL/ZgEpJMJLsnGiEkyksvvcQeeughfjwyMsIYY8zpdPLH7r//frZnzx7GGGONjY3shz/8IWOMsSef\nfJKVlZWx/v5+FggEmMFgYE6nk1mtVqZQKNiRI0cYY4xt3bqV/eIXv+CvP378OBsaGmI33XQTGxsb\nY4wxtmPHDvazn/3skvlNnz6dBYPBqLk1Nzezb3zjG1HP2717N7vppptYKBRi//mf/8n+8pe/MMYY\nGx4eZjU1Nczr9UY9/9ChQ6ygoID19PQwQRDY9ddfz1pbW68lhIQkJVpREyIT8+bNw9tvv40f/vCH\naG1tRX5+PgDg4MGDWLp0KebNm4eDBw/i9OnT/DUXNq2pq6tDXV0dSkpKkJ6ejqqqKr7zT3l5Oa6/\n/noAwH333YfW1lb+esYYjh49itOnT2PZsmVoaGjAs88+y3cT+uz8Nm/ejL/+9a9IS0u77Gdob2/H\n97//fezatQsqlQr79u3Djh070NDQgOXLlyMQCETtSHTB4sWLMX36dCgUCtTX18Nms11bEAlJQlSj\nJkQmzGYzTp48iTfeeAM//vGP0dTUhO9///v4+te/juPHj0Ov1+O//uu/4Pf7+WsyMjIAAEqlkn99\n4TgcDgOI3uedMXbZuvSKFSvw3HPPXXV+b7zxBg4fPow9e/bgsccew6lTp6L2+PZ4PNiwYQP+8Ic/\noKSkhD/+yiuvwGw2X/V7f3ruaWlpfO6EEKpREyIbfX19yMzMxJe+9CX8x3/8B06ePMmTsk6ng8fj\n4XXriejq6sLRo0cBAM899xxuvPFGPqZQKLB06VK89957sFgsAMRaeXt7e9T3YIyhq6sLjY2N2LFj\nB0ZGRuDxeKKes3XrVjz44IO44YYb+GMrV67EU089xY9Pnjw54fkTkupoRU2ITJw6dQrf+973oFQq\noVar8bvf/Q4FBQV46KGHUFdXh9LSUixZsuSyr71aB3dtbS2efvppbN26FXPmzMEjjzwSNV5UVITm\n5mZs2rQJgUAAAPDYY49FrYIjkQjuv/9+jIyMgDGGb33rWygoKODv29XVhZdffhnt7e145plnAAB/\n/OMf8ZOf/ATbtm3DvHnzIAgCqqqqLmkou9zcY+1GJySZ0DaXhCQxm82GVatW4dSpU1JPhRByjejU\nNyFJjlanhCQ2WlETQgghMkYrakIIIUTGKFETQgghMkaJmhBCCJExStSEEEKIjFGiJoQQQmSMEjUh\nhBAiY/8fzj2UNX7XML4AAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 71 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "As we can see in the first plot, the list comprehensions lead to a slightly increased performance in regular Python code. \n", + "But the second plot is quite interesting: List comprehensions in Cython are significantly slower than the regular for-loop structures.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "Let us do a quick comparison by how much we were able to improve the performance of the simple least square implementation using Cython so far:\n", + "
" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import random\n", + "random.seed(12345)\n", + "\n", + "x = [x_i*random.randrange(8,12)/10 for x_i in range(500)]\n", + "y = [y_i*random.randrange(8,12)/10 for y_i in range(100,600)]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 72 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "\n", + "funcs = ['lstsqr_comprehensions', 'cy_lstsqr_comprehensions', \n", + " 'cy_lstsqr_loops'] \n", + "labels = ['list comprehensions', 'list comprehensions (Cython)', \n", + " 'for-loops (Cython)']\n", + "\n", + "times = [timeit.Timer('%s(x,y)' %f, \n", + " 'from __main__ import %s, x, y' %f).timeit(1000)\n", + " for f in funcs]\n", + "\n", + "times_rel = [times[0]/times[i+1] for i in range(len(times[1:]))]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 73 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#%pylab inline\n", + "#import matplotlib.pyplot as plt\n", + "\n", + "plt.figure(figsize=(8,6))\n", + "x_pos = np.arange(len(funcs[1:]))\n", + "plt.bar(x_pos, times_rel, align='center', alpha=0.5, color=\"green\")\n", + "plt.xticks(x_pos, labels[1:], rotation=90)\n", + "plt.ylabel('relative performance gain')\n", + "plt.title('Performance gain compared to the classic least square implementation')\n", + "ftext = 'For-loops in Cython are {:.2f}x faster then list comprehensions'\\\n", + " .format(times[1]/times[2],1)\n", + "plt.figtext(.15,.8, ftext, fontsize=11, ha='left')\n", + "plt.xlim([-1,len(funcs[1:])])\n", + "plt.ylim([0,max(times_rel)*1.2])\n", + "plt.grid()\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nxoyR1NRUSUtLk3379olIVkKpXr26nD9/XpKTk6V79+4yYMAAEfnfCeDtt9+Whw8fytatW8XR0VG6\ndesmN27ckCtXroi3t7fs3r1bialEiRIyd+5cMRgMsmrVKnF1dVVOKEXZ/jn379y5c+X555+XK1eu\nSHp6ugwbNkz69u0rIiInT54UZ2dn2bt3rzx8+FDGjBkjJUqUyDdZi0ietpaeni7VqlWT6dOnS0ZG\nhuzYsUNcXFwkNjY23+lzbvtsOp1OXnrpJbl7965cvHhRvLy8ZMuWLSIisn79eqlevbrExMSI0WiU\nTz/9VJo3b57vvOPj48XFxUVWrlwpBoNBbt26Jf/8848Sd/aJqrD2kZycLGXLlpW4uDgREUlISJCT\nJ0+KiEifPn1k2rRpIpLVBrP3ffY6ZCfrgtp4bjmTtdFolIYNG8rUqVMlIyNDzp07J1WrVpXffvtN\nRLK+nB48eFCMRqPEx8dL7dq1Ze7cuSIismXLFmnUqJHy5TAmJkauXbuW7/7KrbBpe/fuLb1795bU\n1FQ5ceKEVKxYUVq2bCki+SfrnPv2zJkzsm3bNklPT5cbN25Iq1atZPTo0cpn/f39JSgoSC5fvixp\naWmPdPyLmHZ2HvX8FRwcLBUrVpSTJ09KSkqK9OjRQ/r375/venXr1k3eeustSU1NlevXr0uTJk2U\nL8fZx2lkZKRkZmbKpEmTpGLFisoXqa1bt4qLi4ukpKSISNaXopdfflnu3Lkj9+/fl5deekk+/PBD\npS0Udt7Mbz+uWbNG2VerVq0SJycnSUhIEBGRyMhI5YtVtpzz2L59u3h6esrRo0fl4cOH8u6770qr\nVq2UzxZ2TD6OpzpZ+/v7i7Ozs7i5uYm/v7+888478uDBA5kxY4Zyks/WoUMH5RtaSEiITJkyxWR8\nzhORiEi1atVMeoe//fab6PV6EclqFI6OjiYnjylTpkj79u2V4aioKHF2dpbMzEwREbl3757odDrl\ngM6tW7du8tVXXynzL126tMlB7O3trZxoSpcuLcePH88zD3PrndPu3bulYsWKJn9r0aJFgSelo0eP\nKt8uRfIm6+rVqyvjUlJSRKfTSWJiYp75/Pnnn+Ll5WWybtlat24t3377rTIcGxsrDg4OYjQalRNA\nzm+uHh4esnr1amW4R48eysl38eLFeb4wNGnSRJYtW5bv+uXe/rn3b+3atU2S79WrV8XBwUEMBoN8\n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\nZ2dnh+nTp+fZH6mpqejZsyfq1q2LBg0aoHfv3gCyzmM5v9gsXboU9erVQ/369dG9e3fcuHEDQOHn\nj/z2BVkJsVJPEpq/v7/UqlVLGjRoIA0aNJCtW7dKYmKieHl5yalTp0REZNGiRdK0aVMREdm5c6fY\n29vLgQMH8p3f4sWL5dVXXxURkc2bN0tAQIDcv39fREQGDhwo48ePFxGRDz74QMLCwkRE5N69e1K3\nbl359ddfRUQkODhYOnToIEajUZKTkyUwMFA2bdokt27dEjc3N0lLSxMRkeTkZDEYDHliCA8Pl7Fj\nxyrxuLu7y+XLl0VE5M0335SPPvoozzQHDx4UNze3ArfTli1bJDQ0VBlu3bq1REVFiYhISEiI/PLL\nLybboKBlfvPNN9K2bVvJyMiQ9PR0adOmjXz77bciIjJo0CBp2bKlPHz4UNLT06Vu3bry+++/5xvP\nrVu3REQkMzNTBg4cKN99952ybGdnZzl37pyIiNy5c0eCgoLk2rVrIiJy9epVqVSpkiQlJRW4riIi\n48ePl0aNGuU7zmg0SnBwsBw7dkzOnz8vnp6eyrgdO3ZIzZo15ebNm5KRkSG9e/eWsmXLKuNff/11\nef/99+WTTz6R3r17F7h8nU4nKSkpIiKSlpYmycnJIiKSnp4urVu3li1btoiISP369ZW2mJmZKffu\n3RORvPtk2bJlMnToUMnMzBSRrP3Qr18/ERGZMmWK+Pn5Kds0t8jISKVN54xv/vz5IiKyb98+qVix\noogUvL3v3r0r58+fF51Op8S1YsUKeeGFF/JdZlhYmDL/8PBwGTdunIiIdO3aVX766Sflc9n7Mefn\n8xMSEiKzZ89Whm/evCkiIr169ZKPP/5YRESuXbsmvr6+cvLkSRER0ev18sEHH4iIyF9//SWlS5eW\nb775RkREVq9eLS1atBARUdZr2bJlIiKya9cuqVSpkqSnpyvjpkyZoiy7bdu2smfPHhERefjwobRo\n0UJp53q9XlnX+Ph4cXZ2lpSUFMnIyJCGDRtKTEyMiGSdM2rWrCmxsbGF7o+ff/5ZOnTokGd77dy5\nUxo3biwiIv/++6/4+vpKQkKCiIhMnjxZaZuFHcsvv/xyvvuCtFFY3rOZy+AbN25E/fr1UatWLQBZ\nPb7hw4crveIaNWqgadOmZue9bds29O3bF87OzgCAoUOHYtSoUQCA7du3IyIiAgDg4uKCvn37Ytu2\nbejYsSN0Oh0GDRoEOzs7ODk5oU+fPtixYwc6deqE6tWrY8CAAWjfvj26dOkCJycns3G88MILqFix\nIgCgWbMyheJmAAAgAElEQVRm+P333x9hC2Vp3749Ro8ejZiYGIgIzp07hy5duijjJdcVhYKWuX37\ndgwePBglSmQ1p8GDB2PdunV46623oNPp0K1bNzg6OgIAGjZsiLNnz6Jt27Ym887MzMSsWbOwZcsW\nGI1G3Llzx2Q7tGjRAlWqVAGQ9e3//Pnz6NSpkzLezs4OZ8+eRcOGDfNd1927d+Onn37Ctm3b8h0/\ne/ZsBAcHo169eoiPjzcZFxoainfeeUfppbdp08Zke8+bNw8NGzaEwWDAkSNH8p1/bgaDAWPHjsX+\n/fshIkhISMCxY8fQoUMHtG7dGqNHj0aPHj3QqVMn1K1bV5ku5z6JiorC33//rayzwWCAm5ubMv7F\nF19EuXLl8l1+7n2brU+fPgCyygdXr15Fenp6gdv7zJkzKFeuHJydndG5c2dluqLeI5IdQ+vWrfHp\np5/i7NmzaNeuHZo0aWI2zuTkZOzfv1+56gNAKS9s374dc+bMAQD4+Pigc+fO2LFjh3I+yO6JBgUF\nIS0tTRlu2LAhzpw5o8zP0dFRqQEHBwejdOnSiI2NhbOzM0qVKoXw8HAAQEpKCnbt2oWbN2+axBcT\nE6O08+zt6u/vD3d3d1y+fBkGgwExMTHKOADIyMjAqVOnULNmTZPpcu6PBg0a4NSpUxgxYgRCQkLw\n4osv5tk+O3fuxIsvvojy5csDyCo71K9fXxlf0LEcGhpa4L6g4vVMJuv8mKu5ZidfAOjevTvOnz8P\nnU6HPXv25JlPzhNI7pNJ7nE5l5vfODs7Oxw4cAD79u3Djh070KhRI2zZsgWBgYGFxpt9aRfIOnEa\nDIY8n6lTpw7S0tJw+vTpfOucOp0OI0aMwPz586HT6ZTkmnN8UZdZ2HrnrA/b29vnG+uKFSuwb98+\n/PHHH3BycsL06dMRFxenjM+5fwCgXr162L17d5755Gf//v0YMGAAoqKiCqz37t27F8ePH8fSpUth\nMBhw584dVK1aFcePH4ezszNGjhyJkSNHAsi6pJkzgV67dg0pKSmws7PD3bt388Sany+//BJJSUk4\ndOgQHB0dMWzYMDx48EAZd/LkSWzfvh09e/bEmDFj8MYbbwDIu08mT56MsLCwPPPX6XRF+tKXW/Y+\nzq7BGgwGiEiB2zs+Pr5I+7cwo0aNQteuXfH777/j3XffRfv27TF16lRlPQpTUDIvrD3mXsecw7lj\nzz1ttpzbNvuegMOHDxdYu8557GQvR0Tg6emJo0ePFrh++e2PKlWqIDo6Gtu2bcOvv/6KiRMn4t9/\n/zWZztx5qqBjubB9QcXrma1Z59a0aVMcO3YMsbGxAIAlS5agYcOG+Z7Qfv75Zxw9ehRHjhzJc+Jt\n27YtVq1aheTkZIgIfvjhB7Rv314Zt2jRIgDA/fv3sWrVKrRr1w5A1sGyfPlyGI1GpKSkYM2aNWjd\nujWSk5Nx/fp1tGrVCuHh4QgICMDJkyfzxFTQSakwzs7OeO+99zB06FClXiUiWL9+Pc6fPw8AGDRo\nENavX4/Vq1crCQEAypYti6SkpCItp23btliyZAkMBgMyMjKwZMkSZb2L6u7du/D09ISTkxPu3r2L\nFStWFHiibt68OU6fPm3ynGtBdw3/9ddf6N27N9auXVvo+mzcuBEXLlzA+fPn8ccff8Dd3R3nzp1T\n9n9CQgIA4M6dO5g5cybGjh0LAEhPT0fv3r0xa9YsTJkyBX369IHRaCzS+laoUAGOjo64cuUKNmzY\noKxvbGws6tati5EjR6J///44fPgwgLz7pGvXrpg/f77yt4cPHyo3xplrL66urmafCMj2KNvbnOy4\ncsYXFxeHKlWqYOjQoRg5cqQy78LaoLOzM5o3b670oAEo9yK0bdsW33//PYCs/fbrr7+idevWjxxr\neno6/vOf/wDI+jKXlpamXJkD/vectYuLC1q2bGlSp7506VK+95HkVKtWLZQpU8akHh8TE4P79+8X\nOt2VK1eg0+nw8ssv48svv8SNGzdw584dk8+EhIRg8+bNSgzff/+9cp4qTEH7goqfzfSsvby8sGzZ\nMrz22mswGAzw9vZWDpKcd6nmJ+f4jh074vjx43j++ecBAM899xwmTZoEIKuXM2LECKVXPHDgQOUA\n0el0qFWrFpo3b47bt2+jd+/e6Ny5My5fvoxXX30VDx48QGZmJho1aoTu3bsXGkPueAuLf9q0aZgz\nZ47ymImIoFWrVggNDQWQddLr1KkT0tLSTO5SHjp0KN5//33MmjULs2fPLnSZQ4cOxZkzZxAUFKRs\nozfffNPks7nXJbeBAwdiw4YNqF27Nry9vREcHKz0NHMv283NDVFRURg3bhxGjx6N9PR0VKtWDVFR\nUXnm/c477+Dhw4cYOnQokpOT4ezsjOXLl6Nu3bpYsGABrl69ik8++cRkmvx6U+3bt0dmZiYyMjLw\n7rvvomvXrgCA8ePHo2HDhujVqxcAYMeOHZg8eTKmTZuWZx1zznPkyJHo2bMnAgMDUalSJZOywIcf\nfojTp0+jRIkScHd3V74A5twnX3zxBfr374+bN28qj4JlZmbinXfeQb169cy26TZt2mD27Nlo0KAB\nQkJCMHfu3AL3k7u7e77be+PGjXnWK7/h/MbljO/rr7/Gzp074ejoiFKlSuHrr78GAAwYMABhYWFY\ns2YN3n///TyPJS1fvhzvvPMOlixZAnt7e/Tr1w/jxo1DRESEctlXRDBz5kzUrl270HjyG/bw8MA/\n//yDzz//HADw008/KaWe3NOtWLEC7733HurVqwcgK4EvXrxYuQydH3t7e2zcuBGjR4/GrFmzYDQa\n4ePjg9WrVxca2/Hjx/Hhhx8CyLoxc+LEifDx8UFMTIzymYCAAMyYMQPt2rWDTqdDtWrVsGDBgjzb\nPvdwQfuCih/fDa6R0NBQjBs3TqntWQuDwYD69etj6dKlaNSoUXGHQ2QV4uPj8dxzzylXpIi0wHeD\nU76ioqJQvXp1dOjQgYmaKBdrercAEXvWZDN27dpV5LdOEZnD9kRqY8+aiIjoKWbRnvX06dOxfPly\n2NnZITAwEIsXL0ZKSgp69+6NCxcuQK/XY/Xq1SbPhiqBsWdNREQ2pFh61vHx8fj+++9x5MgR/Pvv\nvzAajVi5cqVyh2JcXBzatGmjvCKQiIiI8mexZF22bFk4ODggNTUVBoMBqamp8PX1RVRUlPJ+6Oxn\nfIm0wN8fJjWxPZGWLJasy5Urh/fffx9+fn7w9fWFm5sb2rVrh8TEROXZw/Lly5t9cQAREZGts9hL\nUc6ePYu5c+ciPj4erq6u6NmzZ55fzjH34oawsDDo9XoAWS/CyH6BA/C/b7Uc5vCjDGezlng4/HQP\nZ7OWeDj8dA1n/z/37xHkx2I3mK1atQq///47fvjhBwDAsmXLcODAAezYsQM7d+6Ej48Prl27htDQ\nUMTExOQNjDeYERGRDSmWG8xq1aqFAwcO4MGDBxARbNu2DXXq1MFLL72EJUuWAMh6P3e3bt0sFQKR\nidy9IaInwfZEWrLYZfD69etj4MCBaNy4Mezs7NCwYUMMHToU9+/fR69evbBo0SLl0S0iIiIqGN9g\nRkSqmRA+AQlJCcUdBlmAj5sPZoTzUVtLKizv2cyvbhGR5SUkJUDfTV/cYZAFxK+PL+4QbBpfN0o2\ngzVGUlP8P/HFHQLZECZrIiIiK8dkTTYj+xlHIjXoG+iLOwSyIUzWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUsl\nzH0gNjYWs2fPRnx8PAwGAwBAp9Nhx44dFg+OiIiIipCse/bsibfffhtvvPEG7O3tAWQla6Knza5d\nu9i7JtXE/xPP3jVpxmyydnBwwNtvv61FLERERJQPszXrl156CfPnz8e1a9dw+/Zt5R/R04a9alIT\ne9WkJbM968jISOh0OsyePdvk7+fPn7dYUERERPQ/ZpN1fHy8BmEQWR5r1qQm1qxJSwUm6+3bt6NN\nmzZYu3ZtvjeUde/e3aKBERERUZYCk/WePXvQpk0bbNy4kcmangnsVZOa2KsmLRWYrD/55BMAWTVr\nIiIiKj5ma9YAsGnTJkRHRyMtLU3528cff2yxoIgsgTVrUhNr1qQls49uDRs2DKtXr0ZERAREBKtX\nr8aFCxe0iI2IiIhQhGT9559/YunSpShXrhymTJmCAwcOIDY2VovYiFTFXjWpib1q0pLZZF26dGkA\nQJkyZXDlyhWUKFECCQkJFg+MiIiIsphN1l26dMGdO3cwbtw4NGrUCHq9Hn379i3yApKSkvDqq6+i\n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\nYiLKly8PAChfvjwSExO1CoOIiOipU0KLhSQnJ6NHjx746quv4OLiYjJOp9NBp9PlO11YWBj0ej0A\nwM6JhrcAABkuSURBVM3NDQ0aNEBISAgAYNeuXQDA4ScYTricAD30AP7XS8iuwz2rw9msJR5LDSdc\nTsCuXbs0b1/Zinv92Z7UH064nKCsrzWcv56F4ez/x8fHwxydiIjZTz2BjIwMdOnSBZ06dcLo0aMB\nALVq1cKuXbvg4+ODa9euITQ0FDExMaaB6XSwcGg2L2x0GPTd9MUdBllA/Pp4RM6N1Hy5bFPPruJq\nU7aksLxn0cvgIoLXX38dderUURI1AHTt2hVLliwBACxZsgTdunWzZBhEAFhjJHWxPZGWLHoZfN++\nfVi+fDnq1auHoKAgAMD06dMxYcIE9OrVC4sWLYJer8fq1astGQYREdFTzaLJukWLFsjMzMx33LZt\n2yy5aKI8+FwsqYntibTEN5gRERFZOSZrshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRER\nkZVjsiabwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWRERE\nVo7JmmwGa4ykJrYn0hKTNRERkZVjsiabwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZ\nOSZrshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRERkZVjsiabwRojqYntibTEZE1ERGTl\nmKzJZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRERkZVj\nsiabwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWREREVo7J\nmmwGa4ykJrYn0hKTNRERkZVjsiabwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZOSZr\nshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRERkZVjsiabwRojqYntibTEZE1ERGTlmKzJ\nZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRERkZVjsiab\nwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWREREVo7JmmwG\na4ykJrYn0hKTNRERkZVjsiabwRojqYntibRUbMl6y5YtqFWrFmrUqIGZM2cWVxhkQxLOJBR3CPQM\nYXsiLRVLsjYajRgxYgS2bNmC6Oho/PTTTzh16lRxhEI2JC05rbhDoGcI2xNpqViS9aFDh1C9enXo\n9Xo4ODigT58+2LBhQ3GEQkREZPWKJVlfuXIFlStXVoYrVaqEK1euFEcoZEOSEpKKOwR6hrA9kZZK\nFMdCdTqd2c/Ur1+/SJ+jJ/RVcQegrWO/HSvuEDSz5KslxbNgG2pTttSegGJsUzaifv36BY4rlmRd\nsWJFXLp0SRm+dOkSKlWqZPKZf/75R+uwiIiIrFKxXAZv3LgxTp8+jfj4eKSnp2PVqlXo2rVrcYRC\nRERk9YqlZ12iRAnMmzcPHTp0gNFoxOuvv47atWsXRyhERERWTyciUtxBEBERUcGKpWdNpIWkpCTs\n378f8fHx0Ol00Ov1eP755+Hq6lrcoRERPRL2rOmZs3fvXsyaNQvx8fEICgqCr68vRATXrl3D0aNH\nodfr8cEHH6BFixbFHSo9RU6ePIk9e/aYfPlr2bIl6tatW9yhkQ1gz5qeOevWrcMXX3yBGjVq5Ds+\nLi4O3333HZM1FcmyZcvw9ddfw8PDA02aNEHVqlWVL39jx47FzZs3MWrUKPTv37+4Q6VnGHvWRESF\niIiIwODBg+Hi4pLv+Hv37iEyMhIjR47UODKyJUzW9MxKS0vD2rVrEf//2rvT4Bqvxw/g3yeJJCUJ\nWWiYlsgdRUK2G0sUjaVqplmaCFGSEAxVzVQtpdUhaf20xthipowlU0KsY6tSSyUlipCShdFK4toS\nQSJyJUqW+3uRcf/Nn5bEzz15zv1+Xsm5XnxfZPK95zznnEenQ3V1NYC6C3nmzp0rOBkRUcNwGZyk\nFRoailatWkGr1cLW1lZ0HFK527dvY82aNU99+UtKShKcjMwBy5qkdfPmTRw8eFB0DJJEaGgo+vfv\nj3fffRcWFnX3SfFKZDIVljVJq0+fPsjOzoaXl5foKCSBhw8fYuHChaJjkJniM2uSVteuXZGXl4eO\nHTvCxsYGQN1MKDs7W3AyUqOvvvoKAQEBeP/990VHITPEsiZp6XQ6AP+3VPnkV93NzU1QIlIzOzs7\nVFZWwtraGs2aNQNQ97tVXl4uOBmZA5Y1Se38+fM4fvw4FEVBv379/vUVdERETZWQt24RmcLy5csR\nFRWFO3fuoLi4GFFRUUhMTBQdi1Rsz549mD59OmbMmIEff/xRdBwyI5xZk7S6d++OU6dOoUWLFgCA\niooK9O7dGzk5OYKTkRrNnj0bZ86cwejRo2EwGLBlyxb4+/vj22+/FR2NzAB3g5PUnhyx+f//Jmqo\nn376CefPn4elpSUAYOzYsfDx8WFZk0mwrElasbGx6NWrF8LDw2EwGLB7926MGzdOdCxSKUVRUFZW\nBmdnZwB1b3XjOWsyFS6Dk9QyMzORnp5u3GDm6+srOhKp1ObNmzF79mwEBgYCAH799Vd89913GDly\npNhgZBZY1iS1mpoa3Lp1C9XV1cZZUPv27QWnIrUqLCzEmTNnoCgKevbsCVdXV9GRyEywrElaK1as\nQEJCAtq0aWN8zgiAG8yo0W7evGm8G/zJl7/+/fsLTkXmgGVN0tJoNMjIyDA+YyR6GbNmzcLWrVvh\n4eFR78sfj3CRKXCDGUmrffv2cHBwEB2DJLFr1y788ccfxqtriUyJZU3SWbx4MQDA3d0dgYGBCAoK\ngrW1NYC6Hb3Tpk0TGY9USqPR4PHjxyxrEoJlTdLR6/VQFAXt27fHm2++icePH+Px48eiY5FKxcXF\nAQCaN28OHx8fDBo0qN6LYXgrHpkCy5qkEx8fDwDYtm0bRowYUe+zbdu2CUhEaqbVao2byYKDg+u9\nGIbnrMlUuMGMpOXr64tz5849d4zoRSxbtgxTp0597hjRq8CyJukcOHAA+/fvx9atWzFy5EjjqzH1\nej0uXryIjIwMwQlJjZ71Rc/Hxwfnz58XlIjMCZfBSTrt2rWDVqvF3r17odVqjcuV9vb2WLp0qeh4\npDKbN29GSkoKrly5guDgYOO4Xq/nsUAyGZY1Scfb2xve3t5wcnJCUFAQX+BBL6VPnz5o27Yt7t69\nixkzZhhXahwcHODl5SU4HZkLLoOTtEaPHo2TJ08iIiIC48aNQ5cuXURHIhVLTExEdHQ0HB0dRUch\nM8QpB0lr06ZNOHfuHNzd3TF27FgEBARg9erV0Ov1oqORChUXF6NHjx4YMWIEfv75Z3CeQ6ZkGf/k\nnAuRhGxtbeHm5oaamhocPnwYJSUlWLBgAQCgV69egtORmgwaNAiffPIJHBwc8MMPP+CLL77ArVu3\n4ObmBicnJ9HxSHKcWZO09uzZg7CwMAQGBqKqqgpnzpzBgQMHkJ2djSVLloiORypkYWEBV1dXvP76\n67C0tMS9e/cQERGBmTNnio5GkuMza5LWmDFjMH78+Ge+FenIkSMYPHiwgFSkVsuXL8eGDRvg7OyM\nCRMmICwsDM2aNUNtbS06deqE/Px80RFJYtwNTtK5fPkyiouLsX79+nrj6enpaNu2LTQaDYuaGqy0\ntBQ7d+5Ehw4d6o1bWFjwzVv0ynEZnKQzderUZ75ty8HBgbdNUYNlZGRg//79SEhIqFfU+/fvR2Zm\nJgDAw8NDVDwyEyxrkk5xcfEzz796eXnhypUrAhKRms2aNeuZZezh4YEZM2YISETmiGVN0ikrK/vH\nz/766y8TJiEZ6PV6uLm5PTXu5uaGu3fvmj4QmSWWNUnH398fq1evfmp8zZo10Gq1AhKRmv3bl7+H\nDx+aMAmZM+4GJ+ncunULYWFhsLa2NpZzZmYmHj16hF27dqFt27aCE5KaTJo0CS4uLpg/f77xlZi1\ntbWYN28eiouLn/nFkOh/jWVNUjIYDEhNTUVubi4URYGnpycGDhwoOhap0IMHDzBhwgRkZGTAx8cH\nAJCVlQV/f3+sXbsW9vb2ghOSOWBZk3T0ev1z/4C+yP8h+rv8/HxcuHABiqLAw8MDGo1GdCQyIyxr\nks7gwYPRuXNnhIaGwt/f33gVZElJCc6ePYvdu3fj8uXLOHLkiOCkpAb5+fnPLeYX+T9EL4NlTVI6\nevQoUlJScOLECRQWFgKoe8913759MXr0aAQGBooNSKoRGRmJiooKhISEwN/fH23btoXBYEBRURHO\nnj2LvXv3wt7eHlu2bBEdlSTGsiYieo68vDxs2bIFJ06cwNWrVwEAHTp0QN++ffHhhx/C3d1dcEKS\nHcuaiIioieM5ayIioiaOZU1ERNTEsaxJWnl5ecbrRVNTU5GYmPivt1ERETVVLGuS1rBhw2BlZYW8\nvDxMmjQJ169fx6hRo0THIpVKT0/HgwcPAADJycmYNm2acbMZ0avGsiZpWVhYwMrKCjt37kRcXBwW\nLVqEoqIi0bFIpSZPnowWLVogKysLS5YsgUajQUxMjOhYZCZY1iQta2trpKSkYMOGDQgKCgIAVFVV\nCU5FamVlZQVFUbB7925MmTIFU6ZMgV6vFx2LzATLmqSVlJSEkydPYs6cOejYsSMKCgoQFRUlOhap\nlL29PRYsWICNGzciKCgINTU1/PJHJsNz1kREL6CoqAgpKSno2bMn+vXrh2vXriEtLY1L4WQSLGuS\nVnp6OhISEqDT6VBdXQ0AUBQFBQUFgpORWhUVFSEjIwMWFhbo0aMHXF1dRUciM8GyJml17twZy5Yt\ng5+fHywtLY3jLi4uAlORWq1duxZff/01BgwYAABIS0vD3LlzMX78eMHJyBywrElavXr1wunTp0XH\nIEm89dZbOHnyJJydnQHUvcUtICAAf/75p+BkZA6sRAcgelUGDBiAmTNnIjw8HDY2NsZxPz8/galI\nrVxcXGBnZ2f82c7Ojqs0ZDKcWZO0AgMDoSjKU+OpqakC0pDaRUdHIzc3F6GhoQCAPXv2wMvLC15e\nXlAUBdOmTROckGTGmTVJKy0tTXQEkohGo4FGozF+AQwNDYWiKMZbzYheJc6sSVplZWVISEjAsWPH\nANTNtOfOnYuWLVsKTkZq9uQiFHt7e8FJyJzwUhSS1rhx4+Dg4IDt27dj27ZtsLe3R2xsrOhYpFI5\nOTnw9fWFp6cnPD09odVqkZubKzoWmQnOrEla3t7eyMrKeu4Y0YsICAjAggUL6h3d+vLLL/Hbb78J\nTkbmgDNrktZrr72G48ePG39OT09H8+bNBSYiNausrDQWNVD3WKWiokJgIjIn3GBG0lq1ahViYmJw\n//59AICjoyPWr18vOBWpVceOHfHNN98gOjoaBoMBmzZtgru7u+hYZCa4DE7SKy8vBwA4ODgITkJq\nVlpainnz5uHEiRMAgH79+iE+Ph6Ojo6Ck5E5YFmTdJKTkxEdHY3FixfXO2dtMBh4HpZeGneDkwhc\nBifpVFZWAqj7o/qssiZqjJycHMTExKCkpAQA0Lp1a6xfvx7dunUTnIzMAWfWREQvgLvBSSTuBidp\nff755ygvL0dVVRUGDRoEFxcXJCcni45FKsXd4CQSy5qkdfDgQTg4OGDfvn1wc3NDfn4+Fi1aJDoW\nqdST3eA6nQ5XrlzB/PnzuRucTIZlTdKqrq4GAOzbtw8RERFo2bIln1lToyUlJeH27dsIDw/HsGHD\ncOfOHSQlJYmORWaCG8xIWsHBwejSpQtsbW2xcuVK3L59G7a2tqJjkUo5OTlhxYoVomOQmeIGM5Ja\nSUkJWrVqBUtLS1RUVECv18PV1VV0LFKR4ODgf/xMURTs3bvXhGnIXHFmTVK7dOkSrl69iqqqKgB1\nf1xjYmIEpyI1mT59+j9+xscqZCqcWZO0oqKiUFBQAB8fH1haWhrHuZRJLyszMxNarVZ0DDIjLGuS\nVteuXXHx4kXOfuh/ztfXF+fOnRMdg8wId4OTtLp164aioiLRMYiIXhqfWZO07ty5Aw8PD/Ts2RM2\nNjYAuCGIGqe6uhpjxozBpk2bAABz584VnIjMDcuapBUfHw+grqCfPO3hkjg1hpWVFa5evYpHjx7B\nxsYGYWFhoiORmeEza5KaTqdDXl4eBg8ejMrKSlRXV/NVmdQo0dHRuHTpEkJCQtC8eXMA4FvcyGQ4\nsyZprV69GmvWrEFpaSny8/Nx48YNTJ48Gb/88ovoaKRCGo0GGo0GtbW1ePDgAd/iRibFmTVJy9vb\nGxkZGejdu7dx52737t2Rk5MjOBmpGd9nTSJwNzhJy8bGxrixDKjbJMSZEDVWTk4OfH194enpCU9P\nT2i1WuTm5oqORWaCZU3Seuedd/Cf//wHlZWVOHz4MIYPH/6vV0cS/ZuJEydiyZIluHbtGq5du4bF\nixdj4sSJomORmeAyOEmrpqYG69atw6FDhwAA7733HiZMmMDZNTWKt7c3srKynjtG9CqwrImIXsAH\nH3wArVaL6OhoGAwGbNq0CZmZmdi1a5foaGQGWNYkrfT0dCQkJECn0xnfba0oCgoKCgQnIzUqLS3F\nvHnzcOLECQBAv379EB8fD0dHR8HJyBywrElanTt3xrJly+Dn51fvRR4uLi4CU5HaREdHIzk5GcuW\nLcPUqVNFxyEzxbImafXq1QunT58WHYNUzsPDA0eOHMHQoUORlpb21OdOTk6mD0Vmh2VN0snMzAQA\nbN++HTU1NQgPD693hMvPz09UNFKhxMRErFy5EgUFBWjXrl29z/hYhUyFZU3SCQwMNO74ftYtU6mp\nqSJikcp99NFHWLVqlegYZKZY1kRERE0cL0Uhad26dQvjx4/H0KFDAQAXL17EunXrBKciImo4ljVJ\na+zYsRgyZAgKCwsBAJ06dcLSpUsFpyIiajiWNUnr7t27iIyMNB7batasGays+KI5IlIfljVJy87O\nDiUlJcafT506hZYtWwpMRETUOJxmkLQWL16M4OBgFBQUoE+fPrhz5w527NghOhYRUYOxrElKNTU1\nOHbsGI4dO4ZLly7BYDCgc+fOsLa2Fh2NiKjBeHSLpNWjRw+cOXNGdAwiopfGsiZpffbZZ6iqqkJk\nZCRatGhhvCCFN5gRkdqwrElaf7/J7O94gxkRqQ3LmoiIqInj0S2S1t27dxEXFwdfX1/4+fnh008/\nrXeUi4hILVjWJK2RI0eiTZs22LlzJ3bs2IHWrVsjMjJSdCwiogbjMjhJq1u3bsjNza031r17d+Tk\n5AhKRETUOJxZk7SGDBmCzZs3o7a2FrW1tdi6dSuGDBkiOhYRUYNxZk3SsrOzQ2VlJSws6r6T1tbW\nokWLFgAARVFQXl4uMh4R0QtjWRMRETVxvG6UpJadnQ2dTofq6mrjWHh4uMBEREQNx7ImacXGxiIn\nJweenp7GpXCAZU1E6sNlcJKWh4cHLly48MxbzIiI1IS7wUlaPXr0wMWLF0XHICJ6aZxZk7TS0tIQ\nEhICV1dX2NjYAKjbBZ6dnS04GRFRw7CsSVoajQZLly5Ft27d6j2zdnNzExeKiKgRuMGMpNWmTRuE\nhISIjkFE9NI4syZpffzxxygrK0NwcDCsra0B1C2Dczc4EakNZ9YkrcrKSlhbW+PQoUP1xlnWRKQ2\nnFkTERE1cTy6RdK6fv06wsLC0Lp1a7Ru3RrDhg3DjRs3RMciImowljVJKzY2FiEhISgsLERhYSGC\ng4MRGxsrOhYRUYNxGZyk5e3tjaysrOeOERE1dZxZk7ScnZ2RnJyMmpoaVFdXY+PGjXBxcREdi4io\nwTizJmnpdDrExcXh1KlTAIA+ffpgxYoVaN++veBkREQNw7ImIiJq4rgMTtKKiYlBWVmZ8ed79+5h\n3LhxAhMRETUOy5qklZ2djVatWhl/dnR0xO+//y4wERFR47CsSVoGgwGlpaXGn0tLS1FTUyMwERFR\n4/C6UZLW9OnTERAQgBEjRsBgMGD79u2YM2eO6FhERA3GDWYktQsXLuDo0aNQFAUDBw6Eh4eH6EhE\nRA3GsiYiImri+MyaiIioiWNZExERNXEsa5LWrFmzXmiMiKipY1mTtA4dOvTU2P79+wUkISJ6OTy6\nRdJZuXIlvv/+e+Tn56N79+7Gcb1ej7fffltgMiKixuFucJLO/fv3ce/ePcyePRsLFy7Ek19xBwcH\nODk5CU5HRNRwLGuSVl5eHt544w3Y2toiNTUVOTk5iImJqXcFKRGRGvCZNUkrIiICVlZWyMvLw6RJ\nk3D9+nWMGjVKdCwiogZjWZO0FEWBlZUVdu7cibi4OCxatAhFRUWiYxERNRjLmqRlbW2NlJQUbNiw\nAUFBQQCAqqoqwamIiBqOZU3SSkpKwsmTJzFnzhx07NgRBQUFiIqKEh2LiKjBuMGMiIioieM5a5LO\n8OHDsX379npnrJ9QFAXZ2dkCUhERNR5n1iSdwsJCtGvXDjqd7pmfu7m5mTQPEdHLYlkTERE1cVwG\nJ+nY2dlBUZRnfqYoCsrLy02ciIjo5XBmTURE1MTx6BYREVETx7ImIiJq4ljWRERETRzLmoiIqIlj\nWRMRETVxLGsiIqIm7r+eoHMw3W5vGAAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 88 } ], "metadata": {} diff --git a/benchmarks/cython_least_squares.ipynb b/benchmarks/cython_least_squares.ipynb index 8c47d64..fafb461 100644 --- a/benchmarks/cython_least_squares.ipynb +++ b/benchmarks/cython_least_squares.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:3b47add80317bb8ad369eacd5528c941bb1a2cbd92ae5b33aae66d56ae35c741" + "signature": "sha256:caecd42da39e4b55b4dc50c985b30a04ee3eac4a88d143732c4441ecc28fc1e0" }, "nbformat": 3, "nbformat_minor": 0, @@ -72,7 +72,8 @@ "- [Performance growth rates for different sample sizes](#sample_sizes)\n", "- [Bonus: How to use Cython without the IPython magic](#cython_bonus)\n", "- [Appendix I: Cython vs. Numba](#numba)\n", - "- [Appendix II: Cython with and without type declarations](#type_declarations)" + "- [Appendix II: Cython with and without type declarations](#type_declarations)\n", + "- [Appendix III: Cython performance after replacing list comprehensions by explicit for loops](#explicit_loops)" ] }, { @@ -1400,7 +1401,14 @@ "source": [ "Like we did with Cython before, we will use the minimalist approach to Numba and see how they compare against each other. \n", "\n", - "Numba is using the [LLVM compiler infrastructure](http://llvm.org) for compiling Python code to machine code. Its strength is to work with NumPy arrays to speed-up code. If you want to read more about Numba, see the original [website and documentation](http://numba.pydata.org/numba-doc/0.13/index.html)" + "Numba is using the [LLVM compiler infrastructure](http://llvm.org) for compiling Python code to machine code. Its strength is to work with NumPy arrays to speed-up code. If you want to read more about Numba, see the original [website and documentation](http://numba.pydata.org/numba-doc/0.13/index.html)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is our \"classic\" approach in Python, where I removed the list comprehensions, since they caused errors in the Numba compilation." ] }, { @@ -1411,8 +1419,12 @@ " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", " x_avg = sum(x)/len(x)\n", " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " var_x = 0\n", + " for x_i in x:\n", + " var_x += (x_i - x_avg)**2\n", + " cov_xy = 0\n", + " for x_i, y_i in zip(x,y):\n", + " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", " slope = cov_xy / var_x\n", " y_interc = y_avg - slope*x_avg\n", " return (slope, y_interc)" @@ -1420,7 +1432,14 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 1 + "prompt_number": 22 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Cython-compiled version of it:" + ] }, { "cell_type": "code", @@ -1430,8 +1449,7 @@ ], "language": "python", "metadata": {}, - "outputs": [], - "prompt_number": 2 + "outputs": [] }, { "cell_type": "code", @@ -1443,8 +1461,12 @@ " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", " x_avg = sum(x)/len(x)\n", " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " var_x = 0\n", + " for x_i in x:\n", + " var_x += (x_i - x_avg)**2\n", + " cov_xy = 0\n", + " for x_i, y_i in zip(x,y):\n", + " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", " slope = cov_xy / var_x\n", " y_interc = y_avg - slope*x_avg\n", " return (slope, y_interc)" @@ -1452,7 +1474,14 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 3 + "prompt_number": 26 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And now the Numba-compiled version:" + ] }, { "cell_type": "code", @@ -1465,37 +1494,95 @@ " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", " x_avg = sum(x)/len(x)\n", " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " var_x = 0\n", + " for x_i in x:\n", + " var_x += (x_i - x_avg)**2\n", + " cov_xy = 0\n", + " for x_i, y_i in zip(x,y):\n", + " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", + " \n", " slope = cov_xy / var_x\n", " y_interc = y_avg - slope*x_avg\n", " return (slope, y_interc)" ], "language": "python", "metadata": {}, + "outputs": [], + "prompt_number": 27 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "Now, let us see how the different approaches compare against each other for different sample sizes." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "import random\n", + "random.seed(12345)\n", + "\n", + "funcs = ['lstsqr', 'cy_lstsqr', 'nmb_lstsqr'] \n", + "orders_n = [10**n for n in range(1, 7)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", + " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", + " for f in funcs:\n", + " times_n[f].append(timeit.Timer('%s(x,y)' %f, \n", + " 'from __main__ import %s, x, y' %f).timeit(1000))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 28 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#%pylab inline\n", + "#import matplotlib.pyplot as plt\n", + "\n", + "plt.figure(figsize=(10,8))\n", + "\n", + "for f in times_n.keys():\n", + " plt.plot(orders_n, times_n[f], alpha=0.5, label=f, marker='o', lw=2)\n", + "\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time in ms')\n", + "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "\n", + "plt.title('Performance of a simple least square fit implementation')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, "outputs": [ { - "ename": "ImportError", - "evalue": "No module named 'llvm'", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mjit\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mjit\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mnmb_lstsqr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numba/__init__.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \"\"\"\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0m__future__\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mprint_function\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdivision\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mabsolute_import\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtesting\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdecorators\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0m_version\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mget_versions\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;31m# Re-export typeof\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numba/decorators.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mwarnings\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0msigutils\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtargets\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mregistry\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 8\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;31m# -----------------------------------------------------------------------------\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numba/targets/registry.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0m__future__\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mprint_function\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdivision\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mabsolute_import\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mutils\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtyping\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtargets\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mcpu\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtargets\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdescriptors\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mTargetDescriptor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mdispatcher\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numba/targets/cpu.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0msys\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mllvm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcore\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mlc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mllvm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpasses\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mlp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mllvm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mee\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mle\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mImportError\u001b[0m: No module named 'llvm'" + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAH4CAYAAAACdDpdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl4k2XW+PFv0n1vKV2A0gUKhULZBRSQQhFwYRlBliKL\nivO6jCvzc3RUFp0RxhnfcfB1m2GpClhABWRHliqiUtmkUKC00AJtKS2lQOmSNrl/fzxDpFCgSNts\n53Ndva4+SZ7kJCdPcnLfd050SimFEEIIIYRoVHpLByCEEEII4YikCBNCCCGEsAApwoQQQgghLECK\nMCGEEEIIC5AiTAghhBDCAqQIE0IIIYSwACnChM0pKCjg7rvvxtfXl//3//6fpcOxuPLycoYNG4a/\nvz9jx45tsNu57777+OyzzxrkuvV6PceOHbvl/ZKSkujXr18DRGT/duzYQZs2bfD19WXVqlXcd999\nfPrpp3Xe3xqfD9Zu9uzZPP7445YOQ1gRZ0sHIBxDZGQkZ86cwcnJCS8vL+69917+7//+Dy8vr1u+\nrn//+98EBwdz4cKFBojU9nzxxRecOXOG4uJi9PqG+1y1bt26BrtuaxYfH8/EiRN57LHHLB1KvZo+\nfTrPPvsszzzzDAAjRowwn5eUlMT8+fPZvn37dfd3tOfDzJkzycrKqnPhmZKSwsSJEzl58qT5tFde\neaWhwhM2SkbCRKPQ6XSsWbOGixcvsmfPHnbt2sVf/vKXW7oOpRQmk4mcnBzat2//m+Korq7+TftZ\ns5ycHNq2bdugBZgj0+l0lg7hpn7L8/rEiRPExsY2QDRCiDpTQjSCyMhItWXLFvP2H//4R/XAAw8o\npZT68ccf1Z133qn8/f1V586dVUpKivly/fv3V6+++qrq06eP8vDwUA8//LBycXFRrq6uytvbW23Z\nskVVVlaq5557TjVv3lw1b95cPf/886qyslIppdS2bdtUixYt1N/+9jcVGhqqJk6cqGbOnKlGjx6t\nHn74YeXj46Pi4uJURkaGeuutt1RwcLAKDw9XmzZtMsewYMEC1b59e+Xj46NatWqlPv74Y/N5l6//\nnXfeUcHBwapZs2Zq4cKF5vPLysrUiy++qCIiIpSfn5/q27evKi8vv+n9vlp6errq37+/8vf3Vx06\ndFBff/21Ukqp6dOnK1dXV+Xi4qK8vb3VggULrtl3586dqnfv3srf3181a9ZM/eEPf1AGg6HW2ykv\nL1cTJkxQgYGByt/fX91xxx3qzJkz5lzMmzdPKaXUwoUL1V133aVeeOEF5e/vr1q3bq127NihFixY\noFq2bKmCg4PVJ598Yr7eyZMnq//5n/9R99xzj/Lx8VH9+/dXOTk55vN1Op3KyspSSilVUVGhpk2b\npsLDw1VISIh64oknzI/Z1RYuXKj69u1r3j506JAaNGiQatKkiYqJiVHLli0zn7dmzRrVpUsX5evr\nq1q2bKlmzpx5w/tdUFCg/vznPysnJyfl7u6uvL291TPPPFOnx6ygoEAppdSxY8fU3XffrXx8fNQ9\n99yjnn76afXwww8rpbTnTlhYWI3rioiIMB8nN8ubTqdT77//voqOjlatWrVSSim1evVq1blzZ+Xv\n76/uuusutX///loft1atWim9Xq88PDyUj4+PqqysNOf30KFDys3NTTk5OSlvb28VEBBQ63VYw/Ph\n8vH39ttvq6CgINWsWTO1YsUKtXbtWtWmTRvVpEkTNXv2bPP1mkwmNXv2bNW6dWsVGBioxowZo4qL\ni5VSSh0/flzpdDr1ySefqPDwcNW0aVP117/+VSml1Pr162scZ126dFFKXf+1obS0VLm7uyu9Xq+8\nvb2Vj4+PysvLUzNmzDDnXymlVq1apWJjY5W/v7+Kj49Xhw4dqvFc+Mc//qE6deqk/Pz81NixY1VF\nRUWtuRC2S4ow0SgiIyPV5s2blVJKnThxQnXo0EFNnz5dnTp1SgUGBqr169crpZT65ptvVGBgoCoq\nKlJKaS/0ERERKj09XRmNRlVVVaWmTJmiXn/9dfN1v/766+rOO+9UhYWFqrCwUN11113m87dt26ac\nnZ3Vyy+/rAwGgyovL1czZsxQ7u7uatOmTaq6ulpNmjRJRUREqLfeektVV1er//znPyoqKsp8/WvX\nrlXHjh1TSin17bffKk9PT7Vnz54a1z9jxgxVXV2t1q1bpzw9PVVJSYlSSqmnnnpKDRgwQOXl5Smj\n0ah+/PFHVVlZed37XVhYeM1jZzAYVOvWrdXs2bNVVVWV2rp1q/Lx8VFHjhxRSik1c+ZMNXHixOs+\n9rt371Y7d+5URqNRZWdnq/bt26t333231st+9NFHatiwYaq8vFyZTCa1Z88edeHCBaWUUvHx8Wr+\n/PlKKe1N19nZWSUlJSmTyaRee+011aJFC3OhsGnTJuXj46MuXbqklNLedH18fNT27dvNRfOVxdOV\n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\n888cPnwY0B6HgIAAXF1dSU1NZcmSJeY3thvd75CQELKysq57u9fbNzw8nB49ejBjxgyqqqr4/vvv\nWbNmjXm/tm3bUlFRwbp166iqquIvf/kLlZWV5vNvJW8Ajz/+OB999BGpqakopbh06RJr16694UjO\n9YSEhHDq1Cmqqqpued+6aujnQ22eeOIJ/vznP3PixAlAG2n7+uuv67RvaGgo2dnZ5tePm702hISE\ncPbs2esWjA899BBr165l69atVFVV8c477+Du7s5dd91V6+Vv5XVL2A4pwoRFhYWFsWrVKt566y2C\ng4MJDw/nnXfeqfGCU9tI1pWnvfbaa/To0YNOnTrRqVMnevTowWuvvVbn/a93GQAfHx/mzp3LmDFj\naNKkCZ9//nmNfkq17Xulf/zjH8TFxXHHHXcQGBjIK6+8gslkuu79rm2EysXFhdWrV7N+/XqCgoL4\nwx/+wGeffUbbtm2ve3+ujmHJkiX4+vry+9//nnHjxl338qdPn+ahhx7Cz8+P2NhYc4+sq9XlMbz6\nvMTERGbNmkVgYCB79+5l0aJFte77t7/9jejoaHr37o2fnx/33HMPGRkZ173eK3O1adMmkpOTadGi\nBc2aNeOVV17BYDAA8MEHHzB9+nR8fX158803a4wQ3eh+P/fcc3zxxRc0adKE559//pYesyVLlrBz\n506aNGnCG2+8waRJk8zPbT8/Pz744AOmTp1KWFgY3t7eNaYXb5a3qx/v7t2785///Ic//OEPNGnS\nhDZt2vzmUcyEhAQ6dOhAaGhojan767Hk8+FWbve5555j+PDhDB48GF9fX+68805SU1PrtO9DDz0E\naNOfPXr0uOlrQ7t27Rg/fjytWrWiSZMm5Ofn13icYmJiWLRoEc888wxBQUGsXbuW1atX1zr1fzk2\nGQ2zPzrVwOW10WikR48ehIWFsXr1aoqLixk7diw5OTlERkaybNky/P39Aa2b8IIFC3BycmLu3LkM\nHjy4IUMTQjSSRx55hLCwMN58801Lh2JRs2bNIjMzs8E6zdsKeT4IoWnwkbB//etfxMbGmiv4OXPm\nmD/JJCQkMGfOHADS09NZunQp6enpbNiwgaeeeqpOi3GFENZPplI08jho5HEQQtOgRdipU6dYt24d\nU6dONR90X3/9NZMnTwZg8uTJrFy5EoBVq1Yxfvx4XFxciIyMJDo6usYwsRDCdslUikYeB408DkJo\n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\nSUVORK5CYII=\n", + "text": [ + "" ] } ], - "prompt_number": 4 + "prompt_number": 32 }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# ... this section is still in progress" + "Without making any modifications to the original code in order to account for the strengths of Numba (Numpy) and Cython (static type declarations), we see that Cython performs significantly better than Numba." ] }, { @@ -1533,9 +1620,45 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "First, our \"simple\" approach using Cython from the previous section:" + "Here is our \"classic\" approach in Python:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 44 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Cython-compiled version of it:" ] }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%load_ext cythonmagic" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, { "cell_type": "code", "collapsed": false, @@ -1554,7 +1677,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 54 + "prompt_number": 45 }, { "cell_type": "markdown", @@ -1737,6 +1860,339 @@ "source": [ "This is a pretty significant performance gain. The \"Cython + type declarations\" approach sped up our initial Python code 25 times." ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Appendix III: Cython performance after replacing list comprehensions by explicit for loops" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "List, set and dictionary comprehensions in Python do not only look prettier and are easier to read (at least most of the time) than nested loop structures, but they also come with some small performance benefits. \n", + "Does this also apply in Cython? Let's check it out." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "This is the code for our \"classic\" least squares approach that we have been using in the previous sections:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def lstsqr_comprehensions(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 46 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "And here is a version where I replaced the list comprehensions by for-loops:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def lstsqr_loops(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = 0\n", + " for x_i in x:\n", + " var_x += (x_i - x_avg)**2\n", + " cov_xy = 0\n", + " for x_i, y_i in zip(x,y):\n", + " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 48 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "Finally, the Cython versions of the two functions (with and without using list comprehensions) that we have defined above:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%load_ext cythonmagic" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "\n", + "def cy_lstsqr_comprehensions(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " cdef double x_avg, y_avg, var_x, cov_xy, slope, y_interc, x_i, y_i\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", + " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 49 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "\n", + "def cy_lstsqr_loops(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " cdef double x_avg, y_avg, var_x, cov_xy, slope, y_interc, x_i, y_i\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = 0\n", + " for x_i in x:\n", + " var_x += (x_i - x_avg)**2\n", + " cov_xy = 0\n", + " for x_i, y_i in zip(x,y):\n", + " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 50 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "We will generate some sample data for different sample sizes and take a look at the results for the regular Python functions, and the Cython code separately." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "import random\n", + "random.seed(12345)\n", + "\n", + "funcs = ['lstsqr_comprehensions', 'lstsqr_loops',\n", + " 'cy_lstsqr_comprehensions', 'cy_lstsqr_loops'] \n", + "\n", + "orders_n = [10**n for n in range(1, 6)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", + " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", + " for f in funcs:\n", + " times_n[f].append(timeit.Timer('%s(x,y)' %f, \n", + " 'from __main__ import %s, x, y' %f).timeit(1000))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 52 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plt.figure(figsize=(8,6))\n", + "plt.plot(orders_n, times_n['lstsqr_comprehensions'], alpha=0.5, \n", + " label='list comprehensions', marker='o', lw=2)\n", + "plt.plot(orders_n, times_n['lstsqr_loops'], alpha=0.5, \n", + " label='for-loops', marker='o', lw=2)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time in ms')\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", + "plt.title('Performance comparison list comprehensions and for-loops')\n", + "plt.show()\n", + "\n", + "plt.figure(figsize=(8,6))\n", + "plt.plot(orders_n, times_n['cy_lstsqr_comprehensions'], alpha=0.5, \n", + " label='list comprehensions (Cython', marker='o', lw=2)\n", + "plt.plot(orders_n, times_n['cy_lstsqr_loops'], alpha=0.5, \n", + " label='for-loops (Cython)', marker='o', lw=2)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time in ms')\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", + "plt.title('Performance comparison list comprehensions and for-loops in Cython')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nURKDPTGQxwAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAGJCAYAAABFDXDOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8TXf++PFXQoJE9kgiO0ntgtZSFLG2lNYoKtagqr/B\nTKtT7bSKKqodVBedfnVUSmyli30pGqNUaRGqxJpYEksESSSyfn5/nMltQja5N7n3JO/n4+Eh5957\nznmf9z03n5zz/tzPx0oppRBCCCGERbI2dwBCCCGEKJo01EIIIYQFk4ZaCCGEsGDSUAshhBAWTBpq\nIYQQwoJJQy2EEEJYMGmoi3Ht2jU6d+6Mo6Mjr732mrnDEUXYu3cvjRo1qtB9hoaGsmTJEgBWrFjB\nk08+WaH7tyT5c1FR+vTpw/Llyyt0n6YUGBjIrl27Cn0uPT2dfv364ezszPPPP2/0vmbMmMGIESOM\n3o6pWNJ7Fx4ezttvv23uMEpU6RrqwMBA7OzscHBwwMvLi9GjR3P37t0ybWvx4sV4eHiQnJzMv/71\nLxNHKkylU6dOnDp1qkL3aWVlhZWVFQDDhg1j+/btJa6jl18KDyt/LirKli1bLKrxeVjF5WzdunVc\nv36dpKQk1qxZY5J9WRJj37uVK1fSunVrHBwc8Pb2pk+fPuzbt6/E9SIiIujUqVOBx8xx7pZFpWuo\nrays2LRpEykpKRw+fJhff/2VWbNmPdQ2lFLk5uYSFxdH48aNyxRHdnZ2mdYTD0fyXL4kvxUvLi6O\nBg0aYG398L+eC3u/KtOYVgsWLOCVV15h6tSpXL9+nUuXLjFhwgQ2bNhg7tDKVaVrqPPz9vbmqaee\n4vfffwfgwIEDdOjQARcXF1q2bMmePXsMrw0NDWXq1Kk88cQT2NvbM2rUKJYtW8YHH3yAg4MDu3fv\nJjMzk5dffhkfHx98fHx45ZVXyMzMBCAqKgpfX18++OAD6taty5gxY3jnnXcYNGgQI0aMwNHRkZCQ\nEM6cOcN7772Hp6cnAQEB/PDDD4YYli5dSpMmTXB0dCQoKIjFixcbnsvb/oIFC/D09MTb25uIiAjD\n8+np6bz66qsEBgbi7OxMp06duHfvXonHfb9Lly4xYMAAPDw8cHd3Z9KkSQDk5uYya9YsAgMD8fT0\nZNSoUSQnJwMQGxuLtbU1ERER+Pv74+bmxueff86hQ4cICQnBxcXFsB3Q/rLt2LEjkyZNwtnZmcaN\nG7N79+6HykNenseOHUtUVBR+fn6G17z//vv4+vri6OhIo0aNDNvOyMgo8f0rKr/Fyf+XulKKV155\nBU9PT5ycnAgJCeHEiRMsXryYlStXGs6nZ599ttBtnThxgp49e+Lm5oaXlxfvvfdeqWP/17/+hYeH\nB97e3nz//fds2bKFBg0a4Obmxty5cw37mDFjBgMHDmTIkCE4Ojry2GOPcezYMcPzgYGBfPDBB4SE\nhODg4EBubm6J51BsbCxPPPEEjo6OPPnkk9y8edPwXEmfu2nTphW67r179xg+fDju7u64uLjQtm1b\nbty4YVgv73a7UqrEc3PZsmUEBARQp04d5syZY9j/wYMHad26NU5OTnh5efHqq68W+r7cvn2bvn37\n4uHhgaurK/369ePKlSulOg6A5cuXExAQgLu7e4H932/69Om8++67rFmzBgcHB5YuXVqq4/vyyy8J\nCAigR48eRW47z4YNG2jatCkuLi507dq1wN2okydPEhoaiouLC82aNWPjxo2G58LDw3nppZfo1asX\njo6OhIaGcvHiRcPzhZ33hcn/3kVERPDEE0/w2muv4erqSv369dm2bVuh6925c4fp06fz2Wef0b9/\nf2rVqkW1atV4+umnef/997l69Sr29vYkJSUZ1jl8+DAeHh78/vvvvPTSS/z88884ODjg6upqeE1S\nUhJ9+/bF0dGRxx9/nPPnzxue279/P23atMHZ2Zm2bdvy888/FziO4t5zk1KVTGBgoNq5c6dSSqmL\nFy+qpk2bqmnTpqnLly8rNzc3tXXrVqWUUj/88INyc3NTiYmJSimlunTpogICAtQff/yhcnJyVFZW\nlgoPD1dvv/22Ydtvv/22at++vbpx44a6ceOG6tChg+H5H3/8UVWvXl298cYbKjMzU6Wnp6vp06er\nmjVrqh07dqjs7Gw1cuRIFRAQoObMmaOys7PVF198oerVq2fY/ubNm9X58+eVUkrt2bNH2dnZqcOH\nDxfY/vTp01V2drbasmWLsrOzU7dv31ZKKfXXv/5Vde3aVcXHx6ucnBz1888/q4yMjCKP+8aNGw/k\nLjs7W4WEhKjJkyertLQ0de/ePbVv3z6llFJLlixRwcHB6sKFCyo1NVUNGDBAjRgxQiml1IULF5SV\nlZX6f//v/6mMjAy1Y8cOZWtrq/r3769u3Lihrly5ojw8PNSePXuUUkotXbpUVa9eXS1cuFBlZ2er\nNWvWKCcnJ5WUlFTqPOTP848//qh8fX2VUkqdOnVK+fn5qYSEBKWUUnFxcercuXOlfv+Kyu/9QkND\n1ZIlSwzH88QTTyillNq2bZt67LHH1J07dwzx5MVy//l0v+TkZOXl5aUWLFigMjIyVEpKivrll19K\nHfu7775rOK/c3NzU0KFDVWpqqjpx4oSqVauWio2NVUopNX36dGVjY6O++eYblZ2drebNm6fq1aun\nsrOzlVJKBQQEqFatWqnLly+re/fuleqzExQUpM6cOaPS09NVaGioeuONN5RSqlTrBgcHF7ru559/\nrvr166fS09NVbm6uOnz4sEpOTn4g/6U5N1988UV17949FR0drWrUqKFOnTqllFLq8ccfV5GRkUop\npe7evasOHDhQ6Htz8+ZN9e2336r09HSVkpKiBg0apPr37294vrjjOHHihKpdu7bau3evysjIUJMn\nT1bVq1dXu3btKnRfM2bMMMRf2uMbNWqU4TN7v+nTp6vhw4crpZSKiYlR9vb2aufOnSo7O1t98MEH\nKjg4WGVlZanMzEwVFBSk3nvvPZWVlaV2796tHBwcVExMjFJKqVGjRikHBwfDcfz9738v1Xl/v/s/\nOzY2Nuo///mPys3NVf/+97+Vt7d3oett3bpVVa9eXeXk5BT6vFJK9enTR/373/82LL/88svqb3/7\nm1JKqYiICEO8eUaNGqXc3NzUoUOHVHZ2tho2bJgaMmSIUkp7z52dnVVkZKTKyclRq1atUi4uLobf\nU8W956ZW6RrqgIAAVbt2beXs7KwCAgLUhAkTVHp6upo7d26Bk18ppZ588kn11VdfKaW0k2f69OkF\nng8PD1dTp041LAcFBRl+4Sil1Pbt21VgYKBSSvtlaWtrqzIyMgzPT58+XfXq1cuwvGHDBlW7dm2V\nm5urlNJ+MVtZWRlO7vv1799fffTRR4bt16pVq8BJ6uHhoX755ReVk5OjatWqpY4dO/bANko67vz2\n79+v6tSpU+gHoVu3bgU+ADExMcrGxkbl5OQYflnEx8cbnndzc1Nff/21Yfm5555TCxcuVEppH877\nP4xt27ZVy5cvL1Ue7s9z/ob6zJkzysPDQ+3cuVNlZmYW2E5J719R+S1MUQ31rl27VIMGDdSBAwce\nyOP959P9Vq5cqR599NFCnytN7PefVwcPHjS8/rHHHlPr169XSmnnZfv27Q3P5ebmqrp166qffvpJ\n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\nL1HPoRhem1SIm6wStV6vh91u58d2uz3qL5pUFAqFsHbtWtx///1Ys2YNAPEvyP7+fgBAX18fiouL\nAVwav+7ubhgMBuj1enR3d1/y+IXXdHV1ARB/IY+MjECr1cbls8XDkSNHsHv3blRWVmLTpk04ePAg\n7r//forhBBgMBhgMBixaJN4RcN26dThx4gRKS0sphuP00UcfYdmyZdDpdFCpVLjnnnvw/vvvUwyv\n0VT//9XpdLLKR7JK1AsXLkR7eztsNhuCwSBeeOEFrF69WuppSYYxhq985SuYPXs2tm3bxh9fvXo1\n/vSnPwEQuxIvJPDVq1dj586dCAaDsFqtaG9vx+LFi1FaWor8/HwcO3YMjDH8+c9/xl133XXJ93rp\npZfQ1NQU5085tR5//HHY7XZYrVbs3LkTt9xyC/785z9TDCegtLQU5eXlOHv2LABg//79mDNnDlat\nWkUxHKeZM2fi6NGj8Pl8YIxh//79mD17NsXwGsXj/++tt96Kffv2weVyYXh4GG+//TZWrlwpwaeF\nvLq+GWPszTffZDU1NcxkMrHHH39c6ulI6t1332UKhYLNnz+f1dfXs/r6evbWW28xh8PBmpqamNls\nZitWrIjqRHzssceYyWRitbW1bO/evfzxjz76iNXV1TGTycQeffRR/rjf72fr169n1dXVbMmSJcxq\ntcbzI8ZVS0sL7/qmGE5MW1sbW7hwIZs3bx67++67mcvlohhO0BNPPMFmz57N6urq2AMPPMCCwSDF\ncBw2btzIysrKmFqtZgaDgT3zzDNxi9szzzzDqqurWXV1NWtubo7L570cuuEJIYQQImOyOvVNCCGE\nkGiUqAkhhBAZo0RNCCGEyBglakIIIUTGKFETQgghMkaJmhBCCJExStSEpKjGxkYcP348pu+xZ8+e\nlN+OlpCpppJ6AoQQaUzGPZJXrVrF9/gmhEwNWlETIhNerxd33HEH6uvrMXfuXLz44osAgJ/97GdY\nvHgx5s6di4cffpg/v7GxEd/5znewaNEizJo1Cx9++CHuvvtu1NTU4Cc/+QkAcde1mTNn4r777sPs\n2bOxfv16+Hy+S9573759WLZsGRYsWIB7770XXq/3kuc89dRTmDNnDubPn4/NmzcDAJqbm/Hoo48C\nAOrr69HQ0ICGhgZkZ2fj3XffhdfrxdatW7FkyRJcd9112L179yXft6WlBY2NjVi/fj1mzZqF++67\nL/ZgEpJMJLsnGiEkyksvvcQeeughfjwyMsIYY8zpdPLH7r//frZnzx7GGGONjY3shz/8IWOMsSef\nfJKVlZWx/v5+FggEmMFgYE6nk1mtVqZQKNiRI0cYY4xt3bqV/eIXv+CvP378OBsaGmI33XQTGxsb\nY4wxtmPHDvazn/3skvlNnz6dBYPBqLk1Nzezb3zjG1HP2717N7vppptYKBRi//mf/8n+8pe/MMYY\nGx4eZjU1Nczr9UY9/9ChQ6ygoID19PQwQRDY9ddfz1pbW68lhIQkJVpREyIT8+bNw9tvv40f/vCH\naG1tRX5+PgDg4MGDWLp0KebNm4eDBw/i9OnT/DUXNq2pq6tDXV0dSkpKkJ6ejqqqKr7zT3l5Oa6/\n/noAwH333YfW1lb+esYYjh49itOnT2PZsmVoaGjAs88+y3cT+uz8Nm/ejL/+9a9IS0u77Gdob2/H\n97//fezatQsqlQr79u3Djh070NDQgOXLlyMQCETtSHTB4sWLMX36dCgUCtTX18Nms11bEAlJQlSj\nJkQmzGYzTp48iTfeeAM//vGP0dTUhO9///v4+te/juPHj0Ov1+O//uu/4Pf7+WsyMjIAAEqlkn99\n4TgcDgOI3uedMXbZuvSKFSvw3HPPXXV+b7zxBg4fPow9e/bgsccew6lTp6L2+PZ4PNiwYQP+8Ic/\noKSkhD/+yiuvwGw2X/V7f3ruaWlpfO6EEKpREyIbfX19yMzMxJe+9CX8x3/8B06ePMmTsk6ng8fj\n4XXriejq6sLRo0cBAM899xxuvPFGPqZQKLB06VK89957sFgsAMRaeXt7e9T3YIyhq6sLjY2N2LFj\nB0ZGRuDxeKKes3XrVjz44IO44YYb+GMrV67EU089xY9Pnjw54fkTkupoRU2ITJw6dQrf+973oFQq\noVar8bvf/Q4FBQV46KGHUFdXh9LSUixZsuSyr71aB3dtbS2efvppbN26FXPmzMEjjzwSNV5UVITm\n5mZs2rQJgUAAAPDYY49FrYIjkQjuv/9+jIyMgDGGb33rWygoKODv29XVhZdffhnt7e145plnAAB/\n/OMf8ZOf/ATbtm3DvHnzIAgCqqqqLmkou9zcY+1GJySZ0DaXhCQxm82GVatW4dSpU1JPhRByjejU\nNyFJjlanhCQ2WlETQgghMkYrakIIIUTGKFETQgghMkaJmhBCCJExStSEEEKIjFGiJoQQQmSMEjUh\nhBAiY/8fzj2UNX7XML4AAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 71 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "As we can see in the first plot, the list comprehensions lead to a slightly increased performance in regular Python code. \n", + "But the second plot is quite interesting: List comprehensions in Cython are significantly slower than the regular for-loop structures.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "Let us do a quick comparison by how much we were able to improve the performance of the simple least square implementation using Cython so far:\n", + "
" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import random\n", + "random.seed(12345)\n", + "\n", + "x = [x_i*random.randrange(8,12)/10 for x_i in range(500)]\n", + "y = [y_i*random.randrange(8,12)/10 for y_i in range(100,600)]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 72 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "\n", + "funcs = ['lstsqr_comprehensions', 'cy_lstsqr_comprehensions', \n", + " 'cy_lstsqr_loops'] \n", + "labels = ['list comprehensions', 'list comprehensions (Cython)', \n", + " 'for-loops (Cython)']\n", + "\n", + "times = [timeit.Timer('%s(x,y)' %f, \n", + " 'from __main__ import %s, x, y' %f).timeit(1000)\n", + " for f in funcs]\n", + "\n", + "times_rel = [times[0]/times[i+1] for i in range(len(times[1:]))]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 73 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#%pylab inline\n", + "#import matplotlib.pyplot as plt\n", + "\n", + "plt.figure(figsize=(8,6))\n", + "x_pos = np.arange(len(funcs[1:]))\n", + "plt.bar(x_pos, times_rel, align='center', alpha=0.5, color=\"green\")\n", + "plt.xticks(x_pos, labels[1:], rotation=90)\n", + "plt.ylabel('relative performance gain')\n", + "plt.title('Performance gain compared to the classic least square implementation')\n", + "ftext = 'For-loops in Cython are {:.2f}x faster then list comprehensions'\\\n", + " .format(times[1]/times[2],1)\n", + "plt.figtext(.15,.8, ftext, fontsize=11, ha='left')\n", + "plt.xlim([-1,len(funcs[1:])])\n", + "plt.ylim([0,max(times_rel)*1.2])\n", + "plt.grid()\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nxoyR1NRUSUtLk3379olIVkKpXr26nD9/XpKTk6V79+4yYMAAEfnfCeDtt9+Whw8fytatW8XR0VG6\ndesmN27ckCtXroi3t7fs3r1bialEiRIyd+5cMRgMsmrVKnF1dVVOKEXZ/jn379y5c+X555+XK1eu\nSHp6ugwbNkz69u0rIiInT54UZ2dn2bt3rzx8+FDGjBkjJUqUyDdZi0ietpaeni7VqlWT6dOnS0ZG\nhuzYsUNcXFwkNjY23+lzbvtsOp1OXnrpJbl7965cvHhRvLy8ZMuWLSIisn79eqlevbrExMSI0WiU\nTz/9VJo3b57vvOPj48XFxUVWrlwpBoNBbt26Jf/8848Sd/aJqrD2kZycLGXLlpW4uDgREUlISJCT\nJ0+KiEifPn1k2rRpIpLVBrP3ffY6ZCfrgtp4bjmTtdFolIYNG8rUqVMlIyNDzp07J1WrVpXffvtN\nRLK+nB48eFCMRqPEx8dL7dq1Ze7cuSIismXLFmnUqJHy5TAmJkauXbuW7/7KrbBpe/fuLb1795bU\n1FQ5ceKEVKxYUVq2bCki+SfrnPv2zJkzsm3bNklPT5cbN25Iq1atZPTo0cpn/f39JSgoSC5fvixp\naWmPdPyLmHZ2HvX8FRwcLBUrVpSTJ09KSkqK9OjRQ/r375/venXr1k3eeustSU1NlevXr0uTJk2U\nL8fZx2lkZKRkZmbKpEmTpGLFisoXqa1bt4qLi4ukpKSISNaXopdfflnu3Lkj9+/fl5deekk+/PBD\npS0Udt7Mbz+uWbNG2VerVq0SJycnSUhIEBGRyMhI5YtVtpzz2L59u3h6esrRo0fl4cOH8u6770qr\nVq2UzxZ2TD6OpzpZ+/v7i7Ozs7i5uYm/v7+888478uDBA5kxY4Zyks/WoUMH5RtaSEiITJkyxWR8\nzhORiEi1atVMeoe//fab6PV6EclqFI6OjiYnjylTpkj79u2V4aioKHF2dpbMzEwREbl3757odDrl\ngM6tW7du8tVXXynzL126tMlB7O3trZxoSpcuLcePH88zD3PrndPu3bulYsWKJn9r0aJFgSelo0eP\nKt8uRfIm6+rVqyvjUlJSRKfTSWJiYp75/Pnnn+Ll5WWybtlat24t3377rTIcGxsrDg4OYjQalRNA\nzm+uHh4esnr1amW4R48eysl38eLFeb4wNGnSRJYtW5bv+uXe/rn3b+3atU2S79WrV8XBwUEMBoN8\n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\nZ2dnh+nTp+fZH6mpqejZsyfq1q2LBg0aoHfv3gCyzmM5v9gsXboU9erVQ/369dG9e3fcuHEDQOHn\nj/z2BVkJsVJPEpq/v7/UqlVLGjRoIA0aNJCtW7dKYmKieHl5yalTp0REZNGiRdK0aVMREdm5c6fY\n29vLgQMH8p3f4sWL5dVXXxURkc2bN0tAQIDcv39fREQGDhwo48ePFxGRDz74QMLCwkRE5N69e1K3\nbl359ddfRUQkODhYOnToIEajUZKTkyUwMFA2bdokt27dEjc3N0lLSxMRkeTkZDEYDHliCA8Pl7Fj\nxyrxuLu7y+XLl0VE5M0335SPPvoozzQHDx4UNze3ArfTli1bJDQ0VBlu3bq1REVFiYhISEiI/PLL\nLybboKBlfvPNN9K2bVvJyMiQ9PR0adOmjXz77bciIjJo0CBp2bKlPHz4UNLT06Vu3bry+++/5xvP\nrVu3REQkMzNTBg4cKN99952ybGdnZzl37pyIiNy5c0eCgoLk2rVrIiJy9epVqVSpkiQlJRW4riIi\n48ePl0aNGuU7zmg0SnBwsBw7dkzOnz8vnp6eyrgdO3ZIzZo15ebNm5KRkSG9e/eWsmXLKuNff/11\nef/99+WTTz6R3r17F7h8nU4nKSkpIiKSlpYmycnJIiKSnp4urVu3li1btoiISP369ZW2mJmZKffu\n3RORvPtk2bJlMnToUMnMzBSRrP3Qr18/ERGZMmWK+Pn5Kds0t8jISKVN54xv/vz5IiKyb98+qVix\noogUvL3v3r0r58+fF51Op8S1YsUKeeGFF/JdZlhYmDL/8PBwGTdunIiIdO3aVX766Sflc9n7Mefn\n8xMSEiKzZ89Whm/evCkiIr169ZKPP/5YRESuXbsmvr6+cvLkSRER0ev18sEHH4iIyF9//SWlS5eW\nb775RkREVq9eLS1atBARUdZr2bJlIiKya9cuqVSpkqSnpyvjpkyZoiy7bdu2smfPHhERefjwobRo\n0UJp53q9XlnX+Ph4cXZ2lpSUFMnIyJCGDRtKTEyMiGSdM2rWrCmxsbGF7o+ff/5ZOnTokGd77dy5\nUxo3biwiIv/++6/4+vpKQkKCiIhMnjxZaZuFHcsvv/xyvvuCtFFY3rOZy+AbN25E/fr1UatWLQBZ\nPb7hw4crveIaNWqgadOmZue9bds29O3bF87OzgCAoUOHYtSoUQCA7du3IyIiAgDg4uKCvn37Ytu2\n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\nRkSqmRA+AQlJCcUdBlmAj5sPZoTzUVtLKizv2cyvbhGR5SUkJUDfTV/cYZAFxK+PL+4QbBpfN0o2\ngzVGUlP8P/HFHQLZECZrIiIiK8dkTTYj+xlHIjXoG+iLOwSyIUzWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUsl\nzH0gNjYWs2fPRnx8PAwGAwBAp9Nhx44dFg+OiIiIipCse/bsibfffhtvvPEG7O3tAWQla6Knza5d\nu9i7JtXE/xPP3jVpxmyydnBwwNtvv61FLERERJQPszXrl156CfPnz8e1a9dw+/Zt5R/R04a9alIT\ne9WkJbM968jISOh0OsyePdvk7+fPn7dYUERERPQ/ZpN1fHy8BmEQWR5r1qQm1qxJSwUm6+3bt6NN\nmzZYu3ZtvjeUde/e3aKBERERUZYCk/WePXvQpk0bbNy4kcmangnsVZOa2KsmLRWYrD/55BMAWTVr\nIiIiKj5ma9YAsGnTJkRHRyMtLU3528cff2yxoIgsgTVrUhNr1qQls49uDRs2DKtXr0ZERAREBKtX\nr8aFCxe0iI2IiIhQhGT9559/YunSpShXrhymTJmCAwcOIDY2VovYiFTFXjWpib1q0pLZZF26dGkA\nQJkyZXDlyhWUKFECCQkJFg+MiIiIsphN1l26dMGdO3cwbtw4NGrUCHq9Hn379i3yApKSkvDqq6+i\n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\nYiLKly8PAChfvjwSExO1CoOIiOipU0KLhSQnJ6NHjx746quv4OLiYjJOp9NBp9PlO11YWBj0ej0A\nwM6JhrcAABkuSURBVM3NDQ0aNEBISAgAYNeuXQDA4ScYTricAD30AP7XS8iuwz2rw9msJR5LDSdc\nTsCuXbs0b1/Zinv92Z7UH064nKCsrzWcv56F4ez/x8fHwxydiIjZTz2BjIwMdOnSBZ06dcLo0aMB\nALVq1cKuXbvg4+ODa9euITQ0FDExMaaB6XSwcGg2L2x0GPTd9MUdBllA/Pp4RM6N1Hy5bFPPruJq\nU7aksLxn0cvgIoLXX38dderUURI1AHTt2hVLliwBACxZsgTdunWzZBhEAFhjJHWxPZGWLHoZfN++\nfVi+fDnq1auHoKAgAMD06dMxYcIE9OrVC4sWLYJer8fq1astGQYREdFTzaLJukWLFsjMzMx33LZt\n2yy5aKI8+FwsqYntibTEN5gRERFZOSZrshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRER\nkZVjsiabwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWRERE\nVo7JmmwGa4ykJrYn0hKTNRERkZVjsiabwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZ\nOSZrshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRERkZVjsiabwRojqYntibTEZE1ERGTl\nmKzJZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRERkZVj\nsiabwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWREREVo7J\nmmwGa4ykJrYn0hKTNRERkZVjsiabwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZOSZr\nshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRERkZVjsiabwRojqYntibTEZE1ERGTlmKzJ\nZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRERkZVjsiab\nwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWREREVo7JmmwG\n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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 88 } ], "metadata": {} From 58658aa7c148864d2caae7cec4bf5b0fdea8a959 Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 6 May 2014 01:08:11 -0400 Subject: [PATCH 020/248] conclusion section --- .../cython_least_squares-checkpoint.ipynb | 208 +++++++++++++++++- benchmarks/cython_least_squares.ipynb | 208 +++++++++++++++++- 2 files changed, 406 insertions(+), 10 deletions(-) diff --git a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb index fafb461..2e97429 100644 --- a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb +++ b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:caecd42da39e4b55b4dc50c985b30a04ee3eac4a88d143732c4441ecc28fc1e0" + "signature": "sha256:b8a2adab4cfa8ac1064656d4b3e3121a2acc1060e034c98ce29986312939c9ac" }, "nbformat": 3, "nbformat_minor": 0, @@ -13,7 +13,7 @@ "metadata": {}, "source": [ "[Sebastian Raschka](http://www.sebastianraschka.com) \n", - "last updated: 05/04/2014\n", + "last updated: 05/06/2014\n", "\n", "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb) \n", "- [Link to the GitHub repository](https://github.com/rasbt/python_reference)" @@ -73,7 +73,8 @@ "- [Bonus: How to use Cython without the IPython magic](#cython_bonus)\n", "- [Appendix I: Cython vs. Numba](#numba)\n", "- [Appendix II: Cython with and without type declarations](#type_declarations)\n", - "- [Appendix III: Cython performance after replacing list comprehensions by explicit for loops](#explicit_loops)" + "- [Appendix III: Cython performance after replacing list comprehensions by explicit for loops](#explicit_loops)\n", + "- [Final Comparison: Cython vs. NumPy vs. SciPy for least squares fitting](#showdown)" ] }, { @@ -1005,8 +1006,7 @@ "\n", "funcs = ['cy_classic_lstsqr', \n", " 'lin_lstsqr_mat', 'numpy_lstsqr', 'scipy_lstsqr']\n", - "labels = ['classic approach (cython)', 'matrix approach', \n", - " 'numpy function', 'scipy function']\n", + "\n", "orders_n = [10**n for n in range(1, 7)]\n", "times_n = {f:[] for f in funcs}\n", "\n", @@ -1057,6 +1057,15 @@ ], "prompt_number": 34 }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "In this performance comparison for different sample sizes, we see that our Cython approach is actually not so fast anymore. However, this is just the simplest approach to using Cython. There are a lot of tweaks that can be made. In a [later section](#showdown) we will come back to this comparison and see how the Cython version of our simple least squares implementation holds up against the other approaches\n", + "
" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -2193,6 +2202,195 @@ } ], "prompt_number": 88 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Final Comparison: Cython vs. NumPy vs. SciPy for least squares fitting" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To wrap it up, let us compare the Cython code of our simple least squares fit implementation to the Numpy and Scipy functions - after we made some improvements by adding static type declarations and explicit for loops." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%load_ext cythonmagic" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "\n", + "def cy_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " cdef double x_avg, y_avg, temp, var_x, cov_xy, slope, y_interc, x_i, y_i\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = 0\n", + " for x_i, y_i in zip(x,y):\n", + " temp = (x_i - x_avg)\n", + " var_x += temp**2\n", + " cov_xy += temp*(y_i - y_avg)\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import numpy as np\n", + "import scipy.stats" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def lin_lstsqr_mat(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " X = np.vstack([x, np.ones(len(x))]).T\n", + " return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 4 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def numpy_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " X = np.vstack([x, np.ones(len(x))]).T\n", + " return np.linalg.lstsq(X,y)[0]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 5 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def scipy_lstsqr(x,y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " return scipy.stats.linregress(x, y)[0:2]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 6 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "import random\n", + "random.seed(12345)\n", + "\n", + "funcs = ['cy_lstsqr', 'lin_lstsqr_mat',\n", + " 'numpy_lstsqr', 'scipy_lstsqr'] \n", + "\n", + "orders_n = [10**n for n in range(1, 6)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", + " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", + " for f in funcs:\n", + " times_n[f].append(min(timeit.Timer('%s(x,y)' %f, \n", + " 'from __main__ import %s, x, y' %f)\n", + " .repeat(repeat=3, number=1000)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 26 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#%pylab inline\n", + "#import matplotlib.pyplot as plt\n", + "\n", + "labels = [('cy_lstsqr', 'Cython implementation'), \n", + " ('lin_lstsqr_mat', 'numpy matrix equation'),\n", + " ('numpy_lstsqr', 'numpy.linalg.lstsq()'), \n", + " ('scipy_lstsqr', 'scipy.stats.linregress()')] \n", + "\n", + "matplotlib.rcParams.update({'font.size': 12})\n", + "\n", + "fig = plt.figure(figsize=(10,8))\n", + "for lb in labels:\n", + " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('performance gain relative to the slowest approach')\n", + "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "plt.title('Performance of least square fit implementations for different sample sizes')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAnIAAAIECAYAAACdVcNJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXdYVMfXx7/30vsuZQFR6YKgYtdYEBQ1RBNjiYIVLDG2\nvBrzsytg10SNUYyRqDQ1ligxmkgsgDVRsCuioCAqxYqKCAjn/QO54cICC8Jimc/z7PPszp05c+bc\nO3PPTuWIiMBgMBgMBoPBeOfg61oBBoPBYDAYDEb1YI4cg8FgMBgMxjsKc+QYDAaDwWAw3lGYI8dg\nMBgMBoPxjsIcOQaDwWAwGIx3FObIMRgMBoPBYLyjMEdOSbx69QojR46EsbExeJ7H0aNH61qld5Kd\nO3fC1tYWqqqqGDlypNw4Pj4+6N69u5I1Y5S+NzExMeB5Hvfu3auyLGtrayxevLgWtCyLlZUVFi1a\npJS83lZ4nsfWrVvrWo06aSejo6NFz2np3wBw6dIltG3bFlpaWrCxsQEApKamolu3btDV1YWKikqt\n6/khoYzn0c3NDV9++WWt5qEsmCNXAh8fH/A8D57noaamBisrK4wbNw6PHj16Y9m//fYbtm3bhn37\n9iE9PR0fffRRDWj8YVFQUICRI0fCy8sLqampWL16tdx4HMeB4zil6hYeHg6e/3Crk7x706FDB6Sn\np8Pc3BwAcPz4cfA8j9u3b1cqLzY2FlOmTKlttQHUzfPyJty5c6faTo6Hhwd8fX3LhKenp6N///41\nod4b8Ta0kx07dhQ9twAwbdo0SCQSJCQk4MyZMwCAxYsX48GDB7hw4QLS0tKUrqc8Ro8eDXd397pW\n450gIiICK1eurGs1agTVulbgbcPV1RU7duzAq1evEBsbizFjxiA1NRX79u2rlry8vDyoq6vjxo0b\nsLCwQPv27d9Iv2J5HyL37t1DdnY2PD09RY1saYgIbJ/rqlNYWAgA1XJIy7s3MpmsTFxF7o2RkVGV\ndfjQqMlnXN59qgvehnZSTU2tjD0SExMxYsQINGzYUKRrmzZtYGtr+0a65ufnQ01N7Y1kMKqORCKp\naxVqDmIIjBgxgjw8PERhixYtIhUVFXr58iUREW3bto1cXFxIU1OTrKys6JtvvqHs7GwhfpcuXWjU\nqFE0Z84cMjc3JzMzM3JzcyOO44SPtbU1ERHl5eXR9OnTycLCgtTV1cnJyYm2bt0qyp/jOPrxxx/J\n29ubDAwMaNCgQbR582ZSVVWlqKgoatKkCWlpaZG7uzulpaXRkSNHyMXFhXR0dMjDw4Pu3r0ryLp5\n8yb17duX6tWrR9ra2tS0aVMKCwsT5delSxcaPXo0zZ8/n8zMzMjQ0JCGDx9Oz58/F8X79ddfqWXL\nlqSpqUlGRkbk6elJjx8/Fq7/+OOP5ODgQJqammRvb0+LFi2iV69eVWj/U6dOUefOnUlLS4ukUikN\nHjyYMjMziYho8+bNIhtyHEcxMTEK38fK7tvff/9NXbp0IUNDQzIwMKAuXbrQ6dOnRTKCgoLI0dGR\nNDU1ydDQkFxdXenOnTsUFRVVRjdfX99yy7lo0SKysbEhDQ0NMjExoZ49e1JOTo7IdhYWFqStrU09\ne/akkJAQ4jhOuJfF978kqampZWwyevRosrW1JS0tLbKxsaFZs2ZRbm6ucN3Pz4/s7Oxo+/bt5ODg\nQKqqqnTt2jV69uwZff3114IOLVq0oN27d5dbnvLuTbFd7t69S7du3SoTx93dvVyZlpaWtHDhQtHv\nuXPn0ldffUUGBgZkampK69ato5ycHBo/fjxJpVKysLCgtWvXiuRwHEerV6+mfv36kY6ODllYWNDq\n1atFcaysrGjRokXC77y8PPLz8yNra2vS1NQkZ2dn+vnnn8vIXbNmDQ0cOJB0dHTI0tKSdu/eTY8e\nPSIvLy/S09MjGxsb+u2330Tp0tPTacSIEWRiYkJ6enrUsWNHOnr0qHC92GYHDx6kzp07k7a2Njk5\nOdFff/0lyltee1JZ/R4xYkS5dYjjONqyZYsQ9969ezRo0CCSSCSkpaVFbm5uFBsbWyU9iSp/1kvS\npUuXGmsnvby85OZBVHn9quy59ff3L7e+V1Z3iuVt2bKFPD09SUdHh2bMmEFEir1bKmqb/fz8yugV\nEhIi1wZZWVnk4+NDZmZmpKGhQQ0aNKBvvvlGuK5Ie1idOlBc/vDwcOratavQNv36669lZJd8Hqva\nJhEVtYn9+vUjY2Nj0tTUJBsbG/ruu+/K2LPkPS/9sbKyEuLfuHGD+vXrRxKJhKRSKfXo0YMuXbqk\nsE1rE+bIlWDEiBHUvXt3UdiKFSuI4zh6/vw5bd68maRSKYWHh9OtW7fo6NGj1KxZMxo2bJgQv0uX\nLqSnp0fjxo2j+Ph4unz5Mj169Ii+/fZbsra2poyMDHrw4AEREX377bdkZGREu3btohs3btDixYuJ\n53k6fPiwII/jODIyMqLAwEC6efMm3bhxgzZv3kw8z5O7uzudPn2azp49S/b29tSpUydydXWlf//9\nl86fP0+Ojo40aNAgQdalS5coMDCQLl68SDdv3qQ1a9YIDmFJ/SUSCX3zzTeUkJBAf//9NxkaGtLc\nuXOFOJs2bSI1NTVauHChUMa1a9cK5fLz8yNLS0uKiIig5ORk+vPPP6lhw4YiGaVJS0sjPT09GjJk\nCF2+fJmOHz9OzZo1I1dXVyIiysnJoTNnzhDHcfTHH39QRkYG5eXllXsfSzpyity3PXv20M6dO+n6\n9et09epVGj16NBkaGtLDhw+JiCg2NpZUVVUpLCyMbt++TZcuXaKNGzfSnTt3KC8vjwIDA4njOMrI\nyKCMjAx6+vSpXN1+++030tfXp3379lFqaiqdP3+eVq9eLbzcIiIiSFVVlVatWkU3btygjRs3kkwm\nI57nq+TIFRYW0uzZs+n06dOUkpJCe/fuJXNzc/Lz8xPS+Pn5kba2Nrm5udHp06fpxo0b9OzZM3Jz\ncyN3d3c6ceIE3bp1izZs2EDq6uqi57Ik5d2bki/EgoIC2rt3L3EcR7GxsZSRkSFy/EtT2rmytLQk\niURCq1atoqSkJFq4cCHxPE89e/YUwpYsWUI8z9PVq1eFdBzHkaGhIa1du5Zu3LhBq1evJlVVVfr9\n99/LzWvEiBHk4uJCBw8epOTkZNq+fTtJJBLauHGjSK6ZmRmFhoZSUlISjR8/nnR0dKhHjx4UEhJC\nSUlJNGnSJNLR0RGeoRcvXlDjxo1pwIABFBcXR0lJSbRo0SLS0NCg+Ph4IvrvheLi4kKRkZGUmJhI\nvr6+pK+vL9jr3LlzxHEc7dmzR9SeVFa/s7KyyNXVlby8vITntLgOlXxxFhYWUtu2balFixZ04sQJ\nunTpEg0aNIikUqmQlyJ6Vvasl6Ym28nExES5eShSv0o/t+np6dSgQQOaOXMmZWRk0PPnzyk9PZ06\ndOhAQ4cOFep7YWFhpXWn2JGpX78+bd26lZKTk+nWrVsKv1sqapufP39OQ4YMoY4dOwr3tzxbT5o0\niVxcXOj06dOUmppKJ0+epF9++UW4Xll7WN06UFz+evXq0datW+n69es0Z84cUlFRoXPnzolkl3we\nq9omERF9+umn1L17d7pw4QKlpKRQVFQUbdu2Tbju5uZGY8aMIaKiPwvFNsvIyKCrV6+ShYUFjRw5\nkoiK/oCZmprS+PHj6fLly3T9+nWaNGkSGRkZ0f379xWyaW3CHLkSlHYArly5QjY2NvTRRx8RUdHL\npPQ/85iYGOI4jp48eUJERZXNwcGhjOzi3o9isrOzSUNDg3766SdRvL59+1LXrl2F3xzHCf8aiinu\nAblw4YIQ9t133xHHcXT27FkhbNWqVWRsbFxhmfv06SM8zMX6N2/eXBRn3Lhxgg2IiBo0aECTJk2S\nKy87O5u0tbUpMjJSFB4SEkISiaRcPebMmUMNGjSg/Px8IezChQvEcZzQY1HcCJw4caLCMpW+j4rc\nt9IUFBSQVCoVGpPdu3eTgYFBuQ5aWFgYcRxXoV5ERCtXrqRGjRqJylmSjh070tChQ0Vh3377bbV6\n5OTlbW9vL/z28/MjnucpNTVVCIuKiiJNTU3KysoSpfX19aXPP/+8XNny7k3JFyIR0bFjx4jjOEpJ\nSSlXTjHyHLm+ffsKvwsLC0lfX58+++wzUZhUKhX1ynEcR8OHDxfJHjx4MHXu3FluXjdv3iSe5ykh\nIUGUJiAgQFQvOI6jKVOmCL/v379PHMfR119/LYQ9fvyYOI6j/fv3E1HRfatfv36Znml3d3eaPHky\nEf1nsz179gjXMzIyiOM4+vvvv4lIsXtdTOn67eHhIbe3uOSL89ChQ8RxnOBcEhHl5uaSubk5zZ8/\nX2E9K3vW5VGT7aQ8FKlfpZ9borLPI5HYEShOV1ndKa4nJXubiRR/t1TWNo8aNYrc3NwqtUOfPn3I\nx8en0njFlG4PiapXB4rLP2/ePJH8Dh06iJzWks9jddskFxcX8vf3L/d66ftXTF5eHrm5uZGrq6vw\nR8fPz4/at28vildYWEi2trb0ww8/EFHVbVqTfLizs8shOjoaenp60NbWRtOmTWFnZ4ctW7bg/v37\nuH37NqZMmQI9PT3h88knn4DjOCQmJgoyWrVqVWk+iYmJyMvLg6urqyjc1dUVV65cEYW1bdu2THqO\n49C0aVPht6mpKQCgWbNmorCHDx8Kc2levHiBGTNmoEmTJjAyMoKenh7+/PNP0eRzjuPg4uIiysvc\n3BwZGRkAgMzMTNy5cwc9evSQW64rV64gJycH/fr1E9npq6++wtOnT/Hw4cNy07Vv3x6qqv9N22zW\nrBkMDAxw9epVuWkUQdH7duvWLQwbNgz29vYwMDCAgYEBsrKyBNv06NEDNjY2sLa2hre3N4KCgsot\nS0UMGjQI+fn5sLS0hK+vL8LDw/H8+XPhenx8PDp06CBK07Fjx2qVPSgoCO3atYOZmRn09PQwa9as\nMgsNTE1NUb9+feH3mTNnkJeXBwsLC5G9tmzZInrGlU3p55LjOJiYmIied47jIJPJcP/+fVHa0hPm\nO3ToUKaOFRMbGwsiQqtWrUTlX7JkSZnyl9TH2NgYKioqIn0kEgnU1dWRmZkJoMi26enpkEgkItnH\njx8vI7t58+bCd5lMBhUVFaEOloci9VsRrly5AiMjIzg6Ogph6urqaNeuXRm7VaRnZc+6IrxpO1ma\nmqxfpalK3Smpa1XeLRW1zVVh/Pjx2LVrF5o2bYrJkyfjwIEDojmXlbWH8vRRpA4UU7pOduzYsdw6\nWd02afLkyVi8eDHat2+PGTNm4NixY5UbBsC4ceNw9+5dRERECHMXz5w5g7i4OFH++vr6SElJEXSo\nzKa1CVvsUIr27dsjJCQEqqqqqFevnuBYFFeWH3/8Ue6qIAsLCwBFLxMdHZ0a1UmePJ7nRSvtir+X\nXAZfHEZE4DgO//vf/7B3716sWrUKDg4O0NbWxtSpU5GVlSWSXXqSMMdxwkT4yiiOt2vXLjRq1KjM\ndalUKjcdx3G18tAX61PZfevduzdkMhnWrVuHBg0aQE1NDZ06dUJeXh6AonsQGxuLEydO4NChQ1i/\nfj2mTZuGw4cPo2XLlgrrU69ePVy7dg1RUVE4cuQIFixYgOnTp+Pff/8VOVQVIW8xQn5+vuj3zp07\nMXHiRCxbtgxdunSBvr4+duzYgdmzZ4vilX62CgsLYWBggNjY2DJ51PUim9ITwjmOkxum6LMqj+K0\np06dgra2dhnZFelTno7FMgsLC9G4cWNERESUSVc6L3m2rqxcitbv6lLcjiiqZ00861WhptvdqlKV\nulNSV0XbKI7j3qhtLkmPHj1w+/ZtREZGIjo6GkOHDkXTpk1x+PBh8DxfaXtYTFXrQHlU1PZXt03y\n8fHBxx9/jAMHDiAqKgqenp7o27cvwsLCyk2zfPlyRERE4NSpU6J3FRHBw8MDa9euLZPGwMAAQOU2\nrU2YI1cKTU1NYZ+gkpiamqJBgwa4du0aRo0a9cb52NnZQUNDAzExMXBychLCY2JiRD1tNcmxY8cw\ndOhQDBgwAEBRBUlISKhwBWhpZDIZ6tevj8jISPTu3bvMdWdnZ2hqaiIpKQkff/yxwnKdnZ2xefNm\n0QquCxcuICsrC02aNFFYTmkUuW8PHz5EfHw8Vq5cKew/d+fOnTL/InmeR+fOndG5c2cEBATAyckJ\n27ZtQ8uWLYUGRd7LrjTq6uro2bMnevbsiQULFsDU1BS///47JkyYACcnJ5w4cQLjxo0T4p84cUKU\nXiaToaCgAJmZmcLqurNnz4riHD16FC1atMDkyZOFsFu3blWoFwC0adMGT548QU5ODpydnSuNXxWK\nbVRQUFCjcivj1KlT+Oqrr4TfJ0+eLLdsxb3pKSkp6NWrV43q0aZNG4SFhUFPTw8mJibVllOeHRWp\n3+rq6nj16lWF8p2dnYU60bhxYwBAbm4u/v33X0ycOLHKupb3rCtCTbeTitSv6lLdulOT7xZ1dXWF\n65dUKoWXlxe8vLzg6+uLjz76CPHx8TAzM1OoPXwTTp06JXo/VFQnW7duXe02yczMDD4+PvDx8YGn\npycGDx6Mn376Cbq6umXiRkREwM/PD5GRkbC3ty+jQ3BwMCwsLKChoVFufuXZtKbb0tK8c47c6dOn\nMXnyZKipqcHCwgKhoaGi4bjaZNGiRRg1ahSkUik+++wzqKmpIT4+HgcOHMD69esBKL71hba2Nr7+\n+mvMnTtXGCLatWsX9u7di0OHDtWK/g4ODoiIiEC/fv2go6ODlStXIi0tDWZmZkIcRfT38/PDuHHj\nYGpqiv79+6OwsBBRUVHw9vaGkZERZs2ahVmzZoHjOHTr1g2vXr3CpUuXcP78eSxdulSuzIkTJ2L1\n6tXw8fHBrFmz8PjxY4wfPx6urq5vPPRR2X2TSqUwMTHBhg0bYGNjgwcPHmDatGnQ0tISZPz++++4\ndesWOnfuDBMTE8TFxSE1NVV4uVhbWwvxOnbsCG1tbbk9BBs3bgQRoU2bNpBIJDh8+DCePXsmyJk6\ndSq++OILtG3bFp6enjh+/DjCw8NFzmG7du2gp6eHGTNmYObMmUhKSsL8+fNF+Tg6OmLTpk3Yu3cv\nnJ2dsW/fPuzZs6dSW3Xt2hUeHh7o168fli9fjqZNm+Lx48c4efIktLS0MHr06KrfgNdYWlqC53ns\n378fAwcOhIaGhvBvtjSln0F5z6SiYfv370dgYCB69OiBAwcOYMeOHdi1a5fcNHZ2dhg5ciTGjBmD\n5cuXo3379sjOzkZcXJzwXFSXIUOGYNWqVejVqxcWLVoEe3t7ZGRk4MiRI3ByckKfPn0UkmNsbAxd\nXV1ERkaicePG0NDQgFQqVah+W1tbIyoqCjdv3oS+vj4kEkmZ9rNbt25o27YtBg8ejMDAQOjr62PB\nggXIy8sTOUCVUdmzrgg13U6WV78qo7xnrWT4m9Sdmnq32NjYYNeuXbh69SpkMhn09fXl9lrNnj0b\nrVu3hpOTE3ieR3h4OPT09NCwYUPo6OhU2h6+KZs2bYKjoyNatWqF8PBw/PPPPwgMDJQbt1u3btWy\n68SJE9GrVy80atQIL1++xO7du9GwYUPBiStpzytXrmDo0KHw9/dHo0aNkJ6eDqBohMvExAQTJ07E\nxo0b0adPH8yZMwf169fHnTt38Ndff6F379746KOPKrRpraOcqXg1R1pamrAVyMyZM2nXrl01JtvH\nx6fMqtXSRERE0EcffUTa2tqkr69PzZs3pwULFgjXy5tA6e/vL5poTkSUn59PM2bMEJbVOzs7i1bV\nEJVdhk1UNGlaTU1NFBYWFkY8z4vCtm3bRjzPU0FBAREVTZLu2bMn6ejokLm5Ofn7+9OoUaNE20DI\n03/hwoXCVgDFbNmyhVxcXEhDQ4OMjIyod+/eooUDv/zyCzVv3pw0NTVJKpVS+/btaf369WXsUpJ/\n/vmHXF1dSUtLiyQSCQ0ZMkRYEURUNFGW5/lKFzvIu4+V3beYmBhh6b+joyP99ttvZGdnRwEBAURE\ndPToUeratSuZmJiQpqYmNWrUiJYtWybKY/LkySSTySrcfmT37t3UoUMHkkqlwhYRmzZtEsVZvXo1\nWVhYkJaWFnXv3r3M9ghERPv376fGjRuTlpYWderUiSIjI4nneWECfH5+Po0dO5YMDQ1JX1+fhgwZ\nQmvXrhU9I/KeSaKiVagzZswga2trUldXJzMzM/L09BStbi6NvHsTFRUlWg1IRLR8+XKysLAgFRWV\nCrcfKT25XN5k85L3pxhHR0fR6uji7Uc+//xz0tbWpnr16tGqVasqzKugoICWL19Ojo6OpK6uTsbG\nxuTm5iZqa+TVS1VV1TLbPWhqaopWuz58+JDGjRsn1HkLCwvq168fnT9/vlybyZMdGhpK1tbWpKqq\nKtRNRer3zZs3ydXVlXR1dSvcfiQtLY28vLxE24/ExcUJ1xXRU5FnvTQ12U6Wh7z6VXrVaumyKbLY\ngajyulNRG1add0vptvnRo0f0ySefkIGBQYXbjyxYsICaNGlCurq6ZGBgQG5ubiKdKmsPiapXB0pu\nP+Lm5iZsC1LZ/axOmzRhwgRq1KgRaWlpCe+okivaS9pT3hZKJbfAISJKSUmhIUOGkImJCWloaJCl\npSUNGzaMkpOTFbJpbcIRvbs7p/r5+aFFixb4/PPP61oVBqPWiI6ORteuXXHnzh3Uq1evrtV5pyj+\nZzx48OC6VoXB+OBJTk6GjY0Njh8/XmbRCaP6vLOrVlNSUnDw4EF8+umnda0Kg8FgMBgMRp1QZ47c\n2rVr0bp1a2hqapY5++/Ro0fo27cvdHV1YWVlhW3btomuP336FMOHD0dISAg7rJjxQVDZAgoGg8F4\nF2BtWc1TZ0Ore/bsAc/ziIyMRE5ODjZv3ixc8/b2BlA0WfbcuXPo1asXTp48CScnJ7x69QqfffYZ\nvv32W3Tt2rUuVGcwGAwGg8F4O1DKTLwKmDNnjmg35OfPn5O6ujrduHFDCBs+fLhwHl1oaCgZGRmR\nm5sbubm50fbt2+XKrVevHgFgH/ZhH/ZhH/ZhH/Z56z8uLi7V8qPqfI4cleoQvH79OlRVVWFnZyeE\nubi4CLs+Dxs2DA8ePEBUVBSioqIwcOBAuXLv3bsnLC9WxsfPz0+p6RWJX1Gc8q4pGi4v3pvaQJn2\nrqqM2rJ3VWypyD14m21e0894da8ze1c/PmtTak4Ga1Pe72e8Ova+cOFCtfyoOnfkSo+XP3/+HPr6\n+qIwPT09PHv2TJlqVRk3NzelplckfkVxyrumaLi8eMnJyZXqVFO8qb2rKqO27F3eNUXClGlvefnX\ndvrK4lf3OrN39eOzNqXmZLA25f1+xpVp7zrffmTOnDm4e/euMEfu3Llz6NSpE7Kzs4U433//PY4e\nPYq9e/cqLLe2jnxilI+Pjw+Cg4PrWo0PBmZv5cLsrXyYzZULs7dyKW3v6votb12PXKNGjfDq1SvR\nYbgXLlyo1jFN/v7+iI6OflMVGQri4+NT1yp8UDB7Kxdmb+XDbK5cmL2VS7G9o6Oj4e/vX205ddYj\nV1BQgPz8fAQEBODu3bsICgqCqqoqVFRU4O3tDY7j8Msvv+Ds2bPo3bs3Tp06JZz7pwisR47BYDAY\nDMa7wjvXI7dgwQJoa2tj2bJlCA8Ph5aWFhYtWgQAWLduHXJyciCTyTB06FCsX7++Sk4co25gvZ/K\nhdlbuTB7Kx9mc+XC7K1casreyjltXg7+/v7ldiVKpVKFDvhmMBgMBoPB+JCp88UOtUVFXZSGhoZ4\n/PixkjViMD5cpFIpHj16VNdqMBgMxltLdYdW66xHThn4+/vDzc2tzJLfx48fs/lzDIYSYcfyMBgM\nhnyio6PfaJj1g+yRYwshGAzl8j7Uuejo6BrZa4yhOMzmyoXZW7mUtvc7t9iBwWAwGAwGg/FmsB45\nBoNR67A6x2AwGBXDeuQYDAaDwWAwPjDea0eOnexQdXx8fNC9e/c6y9/a2hqLFy9WSl5WVlbC3oUf\nKjzPY+vWrXWtxjsBa0uUD7O5cmH2Vi7F9n7Tkx3ee0fufZy4+fDhQ0ybNg2Ojo7Q0tKCqakpunTp\ngrCwMBQUFCgk4/jx4+B5Hrdv3xaFcxxXpysMY2NjMWXKFKXkVddlrSp37twBz/M4evRoldN6eHjA\n19e3THh6ejr69+9fE+oxGAwGoxq4ubm9kSP3Xm8/Ul0SElJw6FAS8vN5qKkVwsPDFg4Olm+FzNTU\nVHTq1Anq6uqYP38+WrRoATU1NZw4cQLff/89XFxc0KxZM4XllR6Pr+t5TEZGRnWa/7tATd4jmUxW\nY7Led97HP4VvO8zmyoXZW7nUlL3f6x656pCQkILg4ETcv98VT5644f79rggOTkRCQspbIXP8+PHI\nz8/H2bNn4e3tDUdHR9ja2mL48OE4e/Ys7OzsEBwcDKlUipycHFHa+fPno1GjRkhOToarqyuAoqFM\nnufRtWtXIR4RYcOGDbC0tISBgQH69OmDzMxMkayQkBA4OTlBQ0MDDRo0wNy5c0W9gW5ubhgzZgwW\nLFgAc3NzGBkZYcSIEcjOzq6wfKWHO62srDBv3jyMGzcOEokEZmZm+Omnn/Dy5UtMmDABhoaGqF+/\nPgIDA0VyeJ7Hjz/+iP79+0NXVxf169fHjz/+WGHe+fn58Pf3h42NDbS0tNCkSRNs2LChjNy1a9di\n0KBB0NXVhZWVFfbs2YPHjx/D29sb+vr6sLW1xe7du0XpMjIy4OPjA5lMBn19fXTq1AnHjh0TrkdH\nR4PneRw6dAiurq7Q0dGBs7MzDhw4IMRp2LAhAMDd3R08z8PGxgYAcOvWLfTr1w8WFhbQ0dFBs2bN\nEB4eLqTz8fHBkSNHEBISAp7nRb16pYdW09LS4OXlBalUCm1tbbi7uyMuLq5KejIYDAZDidB7SkVF\nq+ja2rWHyc+PqEsX8eeTT4rCq/Px9DxcRp6fH1Fg4OEqlenhw4ekoqJCixYtqjBeTk4OSaVSCgkJ\nEcIKCgrI0tKSli9fTgUFBbR3717iOI5iY2MpIyODHj9+TEREI0aMIAMDAxo8eDBduXKFTp06RdbW\n1jRs2DDAEwgXAAAgAElEQVRB1r59+0hFRYWWLl1KN27coO3bt5NUKqW5c+cKcbp06UISiYS++eYb\nSkhIoL///psMDQ1FceRhZWUlKp+lpSVJJBJatWoVJSUl0cKFC4nneerZs6cQtmTJEuJ5nq5evSqk\n4ziODA0Nae3atXTjxg1avXo1qaqq0u+//15uXiNGjCAXFxc6ePAgJScn0/bt20kikdDGjRtFcs3M\nzCg0NJSSkpJo/PjxpKOjQz169KCQkBBKSkqiSZMmkY6ODj18+JCIiF68eEGNGzemAQMGUFxcHCUl\nJdGiRYtIQ0OD4uPjiYgoKiqKOI4jFxcXioyMpMTERPL19SV9fX3h3pw7d444jqM9e/ZQRkYGPXjw\ngIiILl26RIGBgXTx4kW6efMmrVmzhlRVVSkqKoqIiLKyssjV1ZW8vLwoIyODMjIyKC8vTyjPli1b\niIiosLCQ2rZtSy1atKATJ07QpUuXaNCgQSSVSoW8FNFTHu9DU1NsT4byYDZXLszeyqW0vavbTrIe\nuVLk58s3SUFB9U1VWCg/bV5e1WQmJiaisLAQTk5OFcbT1NTEsGHDEBQUJIQdPHgQaWlp8PX1Bc/z\nkEqlAAATExPIZDJIJBJR+uDgYDg5OaF9+/b46quvcOjQIeH60qVLMWDAAEyfPh12dnYYOHAg/P39\n8f333+PVq1dCPCsrK6xYsQKNGjVC9+7dMWjQIJEcRXF3d8fkyZNhY2ODWbNmQVdXFxoaGkLY9OnT\nYWBggCNHjojS9e7dGxMmTICdnR2+/vprDBw4EN9//73cPG7duoWwsDDs2LEDHh4esLS0xMCBAzFl\nyhSsWbNGFNfb2xvDhg2DjY0NAgIC8OLFCzg6OmL48OGwsbHB/Pnz8eLFC/zzzz8AgO3bt+PZs2f4\n9ddf0bJlS6EcHTp0wM8//yyS7e/vjx49esDW1hZLly7Fs2fPcObMGQCAsbExgKIj5mQymTAM3aRJ\nE4wfPx5NmzaFtbU1Jk6ciF69egk9bfr6+lBXV4eWlhZkMhlkMhnU1NTK2ODIkSM4c+YMtm7dig4d\nOqBJkyYIDQ2FpqYm1q1bp7CeDAaDwVAe7/UcufKO6KoINbVCueEqKvLDFYHn5adVV6+aTKrC3Kix\nY8eiSZMmSEhIgIODA4KCgtCnTx/BGagIR0dH0Yve3NwcGRkZwu+rV6/C29tblMbV1RUvX75EUlIS\nHBwcAAAuLi6iOObm5oiMjFS4DEDRgoSScjiOg4mJiWgeIMdxkMlkuH//vijtRx99JPrdoUMHzJs3\nT24+sbGxICK0atVKFP7q1SuoqoqrSUl9jI2NoaKiItJHIpFAXV1dGI4+c+YM0tPTRc4yAOTm5kJH\nR0cU1rx5c+G7TCaDioqKyPbyePHiBebPn499+/YhLS0NeXl5yM3NFQ2XK8KVK1dgZGQER0dHIUxd\nXR3t2rXDlStX3ljPdx02f0j5MJsrF2Zv5VJs7zc9ouu9d+SqioeHLYKDD8PNrZsQlpt7GD4+dnjt\nn1SZhIQimRoaYpndutlVSY69vT14nseVK1fw+eefVxjXyckJnTp1woYNGzB9+nT88ccf2L9/v0L5\nlO6tqc4mhRzHQV1dvUxYYWHVHWJ5+sgLq47sYorTnjp1Ctra2mVkV6RPeToWyywsLETjxo0RERFR\nJl3pvErbrKRu5fG///0Pe/fuxapVq+Dg4ABtbW1MnToVWVlZFaZTFCIqY4Pq6MlgMBiMshR3OAUE\nBFQrPRtaLYWDgyV8fOwgkx2BRBINmezIayeu+qtWa0qmoaEhPD09sXbtWjx9+rTM9fz8fLx48UL4\nPXbsWISGhmLDhg2oX78+PDw8hGvFL2J525VUtiWHs7MzYmJiRGExMTHQ1taGra1tlcpUm5w6dUr0\n++TJk3B2dpYbt7gnLiUlBTY2NqKPtbX1G+nRpk0b3Lx5E3p6emVkm5mZKSynvHt27NgxDB06FAMG\nDBCGVxMSEkT3UV1dXTTsLQ9nZ2c8fPgQ8fHxQlhubi7+/fdfNGnSRGE931fYHlvKh9lcuTB7K5ea\nsjdz5OTg4GCJ8eO7YvJkN4wf3/WNtx6pSZnr1q2DmpoaWrVqhW3btuHq1atITExEeHg42rRpg8TE\nRCHugAEDAAALFy7E6NGjRXIsLS3B8zz279+PzMxMkWNYWe/bzJkz8dtvv2HZsmW4fv06duzYgYCA\nAEydOlUYhiSiam2TUTqNPBmKhu3fvx+BgYG4ceMG1qxZgx07dmDq1Kly09jZ2WHkyJEYM2YMwsPD\nkZiYiAsXLmDTpk1Yvnx5lctRkiFDhsDa2hq9evXCwYMHkZycjH///RdLlizB77//rrAcY2Nj6Orq\nIjIyEunp6Xj8+DEAwMHBAREREThz5gyuXr2KL7/8EmlpaaLyWVtbIy4uDjdv3sSDBw/kOnXdunVD\n27ZtMXjwYJw8eRKXL1/G8OHDkZeXh3Hjxr2RDRgMBoNROzBH7h2jQYMGOHv2LD7//HP4+/ujVatW\n6NixI4KCgjBu3DhRj5OGhgaGDh0KIsLIkSNFckxNTbFkyRIsXboU9erVE4Zqy9skt2SYp6cnNm3a\nhJCQEDRt2hTffPMNJkyYAD8/P1H80nIU2YBXXprK4pQXNm/ePBw6dAjNmzfH0qVL8d1336FPnz7l\nptmwYQOmTJmCRYsWwdnZGR4eHggLC3vjXkYNDQ3ExMSgdevW8PX1hYODA/r374/Y2FhYWVlVWIaS\n8DyPwMBA7NixAw0aNBB6EVetWgVLS0u4u7vDw8MDDRo0wIABA0Typk6dCmNjY7i4uEAmk+HkyZNy\n84iIiICjoyN69eqFtm3bIjMzEwcPHoShoaHCer6vsPlDyofZXLkweyuXmrI3R9XpNnkHqGhe14d0\ngPfAgQNRUFCA3377ra5VUSo8zyM8PByDBw+ua1UY+LDqHIPBYFSH6raTrEfuPeXx48eIjIxERESE\n0o68YjDeZ9j8IeXDbK5cmL2VS03Z+71ftVrV7UfeF1q0aIFHjx5h+vTp6NSpU12rw2AwGAwGQw5v\nuv0IG1plMBi1DqtzDAaDUTFsaJXBYDAYDAbjA4M5cgwGg6EAbP6Q8mE2Vy7M3sqF7SPHYDAYDAaD\n8YHD5sgxGIxah9U5BoPBqBg2R47BYDAYDAbjA4M5cgwGg6EAbP6Q8mE2Vy7M3sqFzZFjMGqB6Oho\n8DyPe/fu1bUqtY6/vz/s7e3rWg0Gg8FgvAHv9Rw5Pz8/uRsCs/k6HxZ2dnYYNmyY6CzY8sjPz8fj\nx49hYmLy3pwpevz4cbi6uiI5ORkNGzYUwrOzs5Gbmys6R7W2YHWOwWAw5FO8IXBAQEC12sn3/mQH\nBkNRh+zVq1dQU1ODTCarZY3qhtINhI6ODnR0dOpIGwaDwWAAEDqcAgICqpWeDa3KISExAYHbA/HD\nrz8gcHsgEhIT3hqZbm5uGDNmDBYsWABzc3MYGRlhxIgRyM7OFuL4+Pige/fuonTh4eHg+f9ud/Gw\n2s6dO2FnZwcdHR30798fz58/x86dO+Hg4AB9fX188cUXePr0aRnZq1atgoWFBXR0dDBw4EA8fvwY\nQNE/C1VVVdy5c0eUf2hoKCQSCXJycuSWq7r6nD17Fp6enjA1NYWenh7atm2LyMhIkb2SkpIQEBAA\nnuehoqKC27dvC0Oof/75Jzp16gQtLS1s3LixzNDq8uXLIZVKkZKSIsicP38+ZDIZ0tPTy71PGRkZ\n8PHxgUwmg76+Pjp16oRjx46J4kRFRaFZs2bQ0tKCi4sLoqKiwPM8tmzZAgBITk4Gz/M4efKkKJ2d\nnZ2owq9evRotWrSAnp4ezM3N4e3tLeiWnJwMV1dXAIC1tTV4nkfXrl1FNi9JSEgInJycoKGhgQYN\nGmDu3LkoKCgQ2bOy5+99hc0fUj7M5sqF2Vu5sDlytURCYgKCo4Jx3/Q+npg9wX3T+wiOCn4jZ66m\nZe7atQtPnjxBTEwMfv31V+zbtw/Lli0TrnMcp1AvVFpaGkJDQxEREYG//voLx44dQ79+/RAcHIxd\nu3YJYYsXLxalO336NGJiYvD333/jzz//xPnz5zFq1CgARS96e3t7bNq0SZQmKCgIQ4YMgZaWVo3q\n8+zZM3h7eyM6Ohrnzp1Dz5498dlnn+HGjRsAgD179sDKygrffvst0tPTkZaWhvr16wvpp06dipkz\nZ+LatWvo3bt3GZ2mTZuGdu3awdvbGwUFBTh69CgWLlyIkJAQmJmZyS1HTk4O3N3dkZ2djQMHDuD8\n+fP45JNP0L17d1y7dg0AcO/ePfTu3Rtt2rTBuXPnsGLFCvzf//0fgMp7EEvfX47jsGLFCly+fBl7\n9uzB7du34eXlBQBo2LAhfv/9dwDAmTNnkJ6ejt27d8uVu3//fowaNQojRozAlStXsGLFCgQGBpb5\nl1jZ88dgMBgM5fFeD61Wh0Nxh6Bhr4Ho5Oj/AtWAi79eRJtObaol8/Tx03hR/wWQ/F+Ym70bDp89\nDAc7hyrLs7KywooVKwAAjRo1wqBBg3Do0CHMnz8fQNEQmiLj7Lm5uQgJCRHmSA0cOBDr169HRkYG\njIyMAABeXl44fPiwKB0RISwsDHp6egCAwMBA9OzZEzdv3oSNjQ2+/PJLrF69GnPnzgXHcbh27RpO\nnDiBtWvX1rg+Xbp0EclYsGAB/vjjD+zcuROzZs2CVCqFiooKdHV15Q6ZzpkzB7169RJ+FzuAJQkN\nDYWLiwsmTZqEffv2YdKkSfD09Cy3HNu3b8ezZ8/w66+/QkVFBQAwa9YsHDp0CD///DNWrVqFdevW\nQSaTISgoCDzPw9HREUuWLMGnn35aoY3k8fXXXwvfLS0tsXbtWrRq1QppaWkwNzeHVCoFAJiYmFQ4\nbLx06VIMGDAA06dPB1DU85eeno4ZM2Zg3rx5UFUtai4qe/7eV0rPtWXUPszmyoXZW7nUlL1Zj1wp\n8ilfbngBCuSGK0IhCuWG5xXmVVkWx3FwcXERhZmbmyMjI6PKsiwsLEQT3U1NTWFmZiY4TcVhmZmZ\nonROTk6CEwcAHTp0AABcvXoVADB8+HBkZmYKQ5y//PILWrduXUbvmtDn/v37GD9+PBo3bgypVAo9\nPT1cuXIFt2/fVsgGbdu2rTSOTCbD5s2bsX79ehgbG1fa+1Tc8yWRSKCnpyd8jh8/jsTERABFtmrb\ntq1ouLtjx44K6Vya6Oho9OzZEw0bNoS+vj46d+4MAKLhYEW4evWqMAxbjKurK16+fImkpCQhrKae\nPwaD8XaQkJiAFVtWYFn4shqbTsRQHsyRK4UapyY3XAUq1ZbJl2NmdV69WvLU1cXpOI5DYeF/ziLP\n82V65PLzyzqoamrisnIcJzespGyg7KT50hgZGWHAgAEICgpCfn4+QkND8eWXX1aYprr6+Pj44MSJ\nE/juu+9w/PhxnD9/Hs2bN0denmJOsqKT/aOjo6GiooKMjAw8efKkwriFhYVo3LgxLly4IPpcu3YN\nQUFBQjkqs2Oxk1fRvbx9+zY++eQT2NjYYPv27YiLi8PevXsBQGEbVAWO4yp9/t5X2Pwh5cNsXvsk\nJCZgw6ENOESHsCd+D+4a333j6UQMxaip55sNrZbCo5UHgqOC4WbvJoTl3siFj5dPtYZBASChftEc\nOQ17DZHMbu7d3lRduZiamuKff/4RhZ09e7bG5MfHx+PZs2dCr1zxZHwnJychztixY+Hu7o7169fj\n5cuX8Pb2rrH8S3Ls2DF89913wvy27OxsJCUloWnTpkIcdXV10YT9qnLo0CGsXLkS+/fvx9y5c+Hj\n44N9+/aVG79NmzbC0LOJiYncOE5OTggLC0NhYaHgsJ04cUIUpzjt3bt3hbDMzEzR7zNnzuDly5f4\n4YcfoKGhIYSVpNjxqswGzs7OiImJwfjx44WwmJgYaGtrw9bWtsK0DAbj3WTfv/twVfcqcl7l4GXB\nS1zMuIhWdq2qPfWHoXxYj1wpHOwc4OPuA1mmDJJ0CWSZMvi4V9+Jq2mZisx/8/DwwLVr17Bu3Tok\nJSUhKCgIO3furK76ZeA4DsOHD8eVK1dw9OhRTJgwAX369IGNjY0Qp2PHjnBwcMD//vc/eHt719o2\nFw4ODggPD8fly5dx/vx5eHt7o7CwUGQja2trHD9+HKmpqXjw4EGV9um5f/8+hg0bhmnTpqFHjx7Y\ntm0bjh07hh9++KHcNEOGDIG1tTV69eqFgwcPIjk5Gf/++y+WLFkiLDwYN24c7t+/jy+//BLx8fE4\nfPgwZs+eLZKjpaWFjh07Yvny5bh48SLi4uIwfPhwwWEDAHt7e3Ach++//x63bt1CREQEFixYIJJj\naWkJnuexf/9+ZGZmIisrS67eM2fOxG+//YZly5bh+vXr2LFjBwICAjB16lRhfpyi8y/fR9j8IeXD\nbF67PM19ihOpJ5Dzqmg3AamjFJYGluA4rlpTfxhVg82Rq0Uc7BwwfuB4TPaajPEDx9fIv5Kakilv\nRWrpsG7dumHhwoVYvHgxmjdvjujoaMybN6/MSsfK5JQX1rZtW3Tq1Andu3eHp6cnXFxcyqxSBYDR\no0cjLy9PoWHV6uqzefNmFBYWom3btujXrx8++eQTtGnTRhQnICAAT548gYODA0xNTZGamirIKk+X\nYnx8fGBtbS1M5LexscH69esxY8YMXLhwQW56DQ0NxMTEoHXr1vD19YWDgwP69++P2NhYWFlZAQDq\n1auHP/74A6dPn0aLFi0wZcoUrFq1qoysTZs2QVdXFx06dMDgwYMxduxYmJubC9ebNWuGNWvW4Oef\nf4azszNWrlyJH374QVQGU1NTLFmyBEuXLkW9evXQt29fubb09PTEpk2bEBISgqZNm+Kbb77BhAkT\nRBspK3qfGAzG283T3KcIPh+Ml69eoiAtG8Z/pcIlKgeaf9/C89sPqj31h6F83uuTHcorGttlvvr4\n+Pjg7t27OHjwYKVxp02bhsOHDyMuLk4Jmr0f8DyP8PBwDB48uK5VqVHehzoXHR3NeoiUDLN57ZD1\nMgshF0LwKOcRUmNvQGVnNCa/UsHZ7AJYtrRG5JMCdJs8D+49yl+dz3hzSj/f1W0n3+seOX9/fzZZ\ntg7IysrCmTNnEBQUhClTptS1OgwGg8F4TdbLLASfD8ajnEcAAFnifSziTGGQowGNHKBB/BNMtm0J\nSrxVx5p+OERHR7/RSVSsR45RJXx9fXH37l38/fff5cZxc3PD6dOn4e3tjY0bNypRu3cf1iPHYDBq\niycvnyDkfAgevyw6iUfnWS4cfzqNT1+8XgjF80CTJoChIaIlErhNnlyH2n54VLedZI4cg8GodVid\nYzDqlicvnyD4fDCevCzaPkn3aS6GXyBcPnURFllZOKStjfz69aGmoQEPbW3ctbND1xIr2Bm1Dxta\nZTAYjFqETdNQPszmNUMZJy7rJUacJ8gKNAGZDAHGxrg+aBBi6tXD/fbtEZCbCziwrUdqG7aPHIPB\nYDAYjAp5nPMYweeDkZVbtO1QkRMHmJAmACBeRweqw4cjJicHzzMzwenpoaGvL66lpaFrXSrOUBg2\ntMpgMGodVucYDOVT2onTf5qL4ecJxoVFThzU1PCtmRliW7YU0mjzPNro60N6+TImV+PsZ0b1YUOr\nDAaDwWAwAACPch6Jnbislxh+rvA/J05dHacGDMBVlf+On9TieTTT1QUHgO0i9+7AHDkGg8FQADZf\nS/kwm1eP0k6cwZOXGHGOYExaAABSV8eR/v0Rqa4OGxsbvIqNha6KCgwvX4YmzyM3Lg7dnJ3rsggf\nBGyOHIPBYDAYDBEPXzxEyIUQPM19CgAweJyD4RcAI7x24jQ08Gffvjjz+gxm4wYN4KmhAZ3kZCSm\npECmr49uLVvCocSRi4y3GzZHjsFg1DqszjEYtc/DFw8RfD4Yz/KeAQCkj19i6AUSnLgCDQ1E9O2L\nSyXPa9bWxkATE6jxbICurmFz5BjvFP7+/rC3txd+BwcHQ01NrcbzqSm5Pj4+6N69ew1o9OYQEVq1\naoWdO3cCAAoKCtC4cWP89ddfdawZg8GoKx68eCB24h7lYNj5QsGJy9fSwvbPPxc5cU10dOAlkzEn\n7h2H3T1GnVHyoHUvLy/cu3evDrWpmKoeDK+qqorQ0NBa0WXr1q3Izc3FF198AQBQUVHB7NmzMX36\n9FrJj1EEm6+lfJjNFePBiwcIOR8iOHGGD3Mw7ALBkNMGALzU0kL4Z5/huqamkKa1nh76mZhApUS7\nxuytXNgcuVokJSEBSYcOgc/PR6GaGmw9PGD5hpsj1obMd52SXciamprQLNHIvG0QUZW6vGtzKPGH\nH37AqFGjRGH9+/fHhAkTEBUVBXd391rJl8FgvH0U98Q9z3sOADB88ALDLgJSvsiJy9bRQXjv3kgr\n0b52lkjQVSKp0p9TxtsL65ErRUpCAhKDg9H1/n24PXmCrvfvIzE4GCkJCXUu083NDWPGjMGCBQtg\nbm4OIyMjjBgxAtnZ2QDkD/+Fh4eDL9FtXjykuXPnTtjZ2UFHRwf9+/fH8+fPsXPnTjg4OEBfXx9f\nfPEFnj59KqQrlr1q1SpYWFhAR0cHAwcOxOPHRWf2RUdHQ1VVFXfu3BHlHxoaColEgpycnArLVnoI\ntPj3yZMn0bJlS+jo6KB169aIjY0VpRszZgzs7Oygra0NW1tbzJ49G3l5eRXmtW3bNtja2kJLSwud\nO3fG/v37wfM8Tp48WWG6kly5cgU9e/aEVCqFrq4unJycEB4eDgCwsrJCQUEBfH19wfM8VF4v73/6\n9Cl8fX1hbm4OTU1NNGzYEFOnThVkvnz5EuPGjYNEIoGhoSHGjx+PmTNnioagr1+/jri4OPTt21ek\nj5aWFj7++GNBB0bN4+bmVtcqfHAwm1fM/ez7IifOqJQTl6Wnh029eomcuB6Ghugmlcp14pi9lUtN\n2Zv1yJUi6dAhdNPQAEp0eXYDcOTiRVi2aVM9madPo9uLF6Kwbm5uOHL4cJV75Xbt2oWRI0ciJiYG\nKSkp8PLygqWlJebPnw8ACv3DSktLQ2hoKCIiIvDo0SMMGDAA/fr1g5qaGnbt2oWnT5+if//+WLx4\nMZYuXSqkO336NHR0dPD333/jwYMHGDNmDEaNGoXdu3fDzc0N9vb22LRpE+bNmyekCQoKwpAhQ6Cl\npVWlcgJAYWEhZs2ahTVr1sDY2BhTpkzBwIEDcePGDaioqICIYGpqim3btsHU1BQXLlzA2LFjoaam\nBn9/f7ky4+LiMHToUMyePRvDhg3D1atXMXny5Cr/M/X29kazZs1w6tQpaGpq4tq1aygoKDp4OjY2\nFubm5li5ciUGDRokpJkzZw7OnTuHvXv3wtzcHKmpqbh69apwfebMmdi9ezfCwsLg4OCAoKAgrFu3\nDqampkKc6OhoGBsbw8rKqoxO7dq1w5o1a6pUDgaD8W5S7MRl5xf9kTd+8AJDLgBSlSIn7oG+PkI/\n/hhPX7e9HMfhUyMjtNTTqzOdGbUDc+RKwefnyw9//ZKulszCQvnhlfQcycPKygorVqwAADRq1AiD\nBg3CoUOHBEdOkeG83NxchISEwNDQEAAwcOBArF+/HhkZGTAyMgJQNGft8OHDonREhLCwMOi9bggC\nAwPRs2dP3Lx5EzY2Nvjyyy+xevVqzJ07FxzH4dq1azhx4gTWrl1b5XIW5/fDDz+gefPmAIp6E9u3\nb4+bN2/C3t4eHMdh4cKFQvyGDRsiMTERP/30U7mO3MqVK9GpUyfBXvb29khPT8e4ceOqpNvt27cx\ndepUODo6AoDIsTI2NgYAGBgYQCaTidK0aNECbV7/Iahfvz4++ugjAEB2djbWr1+PtWvX4tPXu6l/\n9913iI6ORlZWliDj+vXrsLS0lKuTlZUVUlJS8OrVK6iqsqpd00RHR7MeCyXDbC6fzOxMhJwP+c+J\nu5+NoZc4SF47cfckEoT36IEXr504FY5DfxMTOOnoVCiX2Vu51JS93+uhVX9//ypPJiwsZ4VjYYnd\nr6tKYTkrggrVq7Z3NsdxcHFxEYWZm5sjIyOjSnIsLCwEJw4ATE1NYWZmJjhxxWGZmZmidE5OToIT\nBwAdOnQAAKFXafjw4cjMzERkZCQA4JdffkHr1q3L6Kwopctrbm4OAKLyBgUFoV27djAzM4Oenh5m\nzZqF27dvlyszPj4e7du3F4WV/q0I3377LUaPHg13d3cEBATg3LlzlaYZP348du3ahaZNm2Ly5Mk4\ncOCA4HgnJSUhNzdXsGkxHTt2FDnnWVlZ0NXVlStfX18fAPDkyZMql4fBYLwblHbiTDJfO3Gvh1OT\nDQ0RUsKJU+d5DDY1rdSJY9Qd0dHR5XY+KMJ7/be9Ooax9fDA4eBgdCvhJR/OzYWdjw9QzcUJtgkJ\nRTJLLPs+nJsLu27dqixLvZTzx3EcCl/3+PE8X6ZHLl9OD2Pp7Tg4jpMbVliqJ7Gy3j4jIyMMGDAA\nQUFB6NatG0JDQ7F48eKKC1QBPM+LhjyLvxfrtXPnTkycOBHLli1Dly5doK+vjx07dmD27NkVyq2J\nCb5z5szBkCFDcODAARw5cgSLFy/GtGnTsGDBgnLT9OjRA7dv30ZkZCSio6MxdOhQNG3atEzPZ0VI\nJBI8e/ZM7rXinjuJRFK1wjAUgvVUKB9mczEZzzMQciEEL/KLpurIMrIx+PJ/PXHXjYywo1s3vHrt\nxGmpqGCITIb6Ci4kY/ZWLsX2dnNzg5ubGwICAqol573ukasOlg4OsPPxwRGZDNESCY7IZLDz8Xmj\nFaa1IVMeMpmszBYeZ8+erTH58fHxIieieHGAk5OTEDZ27Fj88ccfWL9+PV6+fAlvb+8ay780R48e\nRYsWLTB58mS0aNECtra2uHXrVoVpnJycyixq+OeffxTKr7QDaG1tjXHjxmHnzp0ICAjATz/9JFxT\nV1cX5syVRCqVwsvLC+vXr8f+/fsRExOD+Ph42NraQl1dHSdOnBDFP3HihChfe3t7pKSkyNUvJSUF\nVr/46b0AACAASURBVFZWbFiVwXgPSX+eLnLiTEs5cRdlMvxawonTVVGBj5mZwk4c492FtfhysHRw\nqHEnqyZkVrYFhoeHB5YvX45169ahZ8+eOHLkiLBpbE3AcRyGDx+OhQsX4uHDh5gwYQL69OkDmxJH\nuXTs2BEODg743//+hxEjRkDndXd+t27d0K5duzfqoSuNo6MjNm3ahL1798LZ2Rn79u3Dnj17Kkzz\nzTffoE2bNvDz88OQIUNw7do1rFy5UihfSdmTJk3ChAkThLBi2z9//hzTp0/HgAEDYGVlhSdPnuDA\ngQNwLnE2obW1NY4cOYKePXtCXV0dxsbGmD17Nlq3bg0nJyfwPI/w8HDo6emhYcOG0NHRwVdffYU5\nc+bA1NQUjRo1wsaNG3H9+nXRYocuXbrg4cOHSE5OLrPg4Z9//mH/qGsRNn9I+TCbF5H+PB2hF0L/\nc+LSn2PwFQ4Gr52402Zm+NPVFXjtxEnV1DDc1BTSKm6GzuytXNgcuQ8QeZvSlgzz8PDAwoULsXjx\nYjRv3hzR0dGYN29emeHJimRUFNa2bVt06tQJ3bt3h6enJ1xcXLBp06Yyeo4ePRp5eXn48ssvhbCb\nN28iPT290jwr+l06bOzYsRg2bBh8fX3RsmVLnDlzBv7+/hXKadmyJbZs2YItW7agWbNmWLZsmTAc\nWnIfu+vXr+Phw4dy9VVTU8OTJ08watQoODk54eOPP4a5uTm2bt0qxF+xYgXi4uJgbW0tOGJaWlqY\nN28eWrdujTZt2uDy5cv466+/hHmHS5cuxeeff45hw4ahXbt2ePr0KSZMmCBy3h0cHNC6dWvs3r1b\nVMacnBxERkZi6NChZWzGYDDeXdKepSHk/H89cWbpzzHkCg8DFR0QgJh69UROnExdHSPNzKrsxDHe\nXdhZqwyF8PHxwd27d3Hw4MFK406bNg2HDx9GXFycEjR7c0JDQzFy5Eg8evRIWDDwtuDv748tW7bg\nxo0bQtjWrVuxaNEiXLlyRQgLCwvDd999h4sXL9aFmpXC6hyDUXXSnqUh9EIocl4V7cNpnvYc3lc4\n6KsWOXGR9evjn44dgdd/QutraGCIqSm03mBxHqPuYGetMuqcrKwsnDlzBkFBQZgyZUpdq1Mu33//\nPeLi4nDr1i3s2LEDM2bMwMCBA986J648Bg8eDC0tLdFZq4sXL8by5cvrWDMGg1FT3Ht2T+TE1bv3\nTHDiCgH8bmkpcuJstbQw3MyMOXEfIMyRYyiEImeN9unTB126dEG/fv3e6iG+S5cu4dNPP0Xjxo2F\njYHlDRG/DZRn99jYWNFZq/Hx8fj444+Vrd4HBTuHUvl8qDYv7cRZ3H0Gr6s89FV18IrjsMPaGufb\ntxecOCcdHXjLZFAvZ6srRflQ7V1XsLNWGUpl8+bNlcZ5VxqBkJCQulZBYfz8/ODn51fXajAYDCVx\n9+ldhF0Mw8tXLwEA9e88w6B4HnpqOsjlOPxqbY1bbdsCr7ezaqGnh0+NjMCzc1M/WNgcOQaDUeuw\nOsdgVE4ZJy71KQZdU4Gemg5e8Dy22NjgbuvWghPXwcAA3cs5N5Xx7lHddlLhHrnIyEicP38ez58/\nF2VafNQRg8FgMBiM6nHn6R2EXQhDbkEuAKDB7SwMvK4GPTVtPFVRQZiNDe63aiU4cd2kUnQyMGBO\nHEOxOXITJ07EsGHDcPbsWdy5cwd37txBamoqUlNTa1s/BoPBeCt4V6YOvE98KDZPzUoVOXENb2dh\nYIIq9FS18UhVFZvs7HD/dU8cx3HoZWSEzhJJjTtxH4q93xaUOkduy5YtuHjxIho0aFAjmTIYDAaD\nwShy4sIvhgtOnGVKFr64rgpdNR2kq6sj3MYGz1u0ANTVwXMc+hkbo0k55y0zPkwUmiPXqFEjxMbG\nvjPbMwBsjhyD8TbB6hyDUZbbWbcRfjEceQV5AACr5CwMuKEGXTVtpGpoYIuNDV42bw6oq0OV4zBI\nJoO9tnYda82oLarbTpbryN28eVP4fvDgQezfvx8zZsyAmZmZKF7J45neJpgjx2C8PbA6x2CIKe3E\nWd96gv6J6tBV00ailha2W1sjv3lzQE0NGjyPwaamsGTnpr7X1PiGwHZ2dsJn3Lhx2LdvHzp16iQK\nt7e3fyOlGcojOTkZPM+XOTD+QyE6Oho8z+Pevf9n777DoyrTxo9/ZzLpddIbpEISQg1BmoaqgIIs\noNJEIthe3V3Xjr5Lta2+q/5cdXWtkaqCILIqSklognRIgUBIIxXSe5s5vz+GTDKhTcqUhOdzXbnk\nnJmc88ztZHLnKfeTB4h4tJWXl4ebmxu5ubkAZGRk4ObmxuXLl03cMvMh5g8ZX0+NeVZZlm4Sl16q\nTeKS7ezYEBysTeLsLSyI9fY2ShLXU+Ntrroq3tdN5NRq9U2/VCpVlzRCMLzevXtTUFDAbbfdZpL7\nv/baawQFBbX7+3JycpDL5ezdu7dL22PqeJib5cuXM3v2bPz8/AAICgpixowZYlW6IHSxrLIs1iWu\n0yZxIell3HcliTvm4MCm4GBUgwaBpSXOCgWLfHzwubJSVRCuRa/FDrm5udja2uLq6qo9V1JSQl1d\nHb6+vgZrnKmkpqezMzmZRsASmBgZSVgnh5ANcc32kMvleHp6Gu1+Xa2rh+W6Kh4NDQ1YWVl1QYuu\nplarAU1bDamkpIS1a9de1Tu5aNEiJk2axJtvvomDmFzN2LFjTd2EW05Pi3lmWSbrTq+jUd0IQOiF\nUmamW2NnZcd+Z2d29u4NAweCQoG7pSULvL1xVhivbn9Pi7e566p46/UbYvr06eTk5Oicy8nJYcaM\nGV3SCHOSmp5O3PHjXO7fn7L+/bncvz9xx4+T2mrOoCmvuX//fkaPHo2TkxNOTk4MHjyY3377DYBL\nly7x8MMP4+3tja2tLeHh4dodGdoOJTYfr1u3jgkTJmBnZ0dISAjffvut9l5jx47l8ccf17m/JEmE\nhITw+uuvX9W2N954g5CQEGxsbPD09GTy5MnU1dURFxfHsmXLyMrKQi6XI5fLtT0969evZ/jw4bi4\nuODh4cHUqVN1Nojv3bs3AOPGjUMul2vnZObk5DBr1iw8PDywtbUlJCSEf/7zn3rH8Xrx2LhxI1On\nTsXe3p6QkJCrdoGQy+V88MEHzJs3DxcXFxYuXAho5pGOHj0aOzs7/P39WbRoESUlJTpxe+WVV/Dw\n8MDJyYkHH3yQ999/H0tLS+1zVqxYQZ8+ffjuu+8IDw/H2tqa8+fPU1VVxdNPP42/vz/29vZERUWx\nZcsWvWKvT6w2btyIl5cXQ4YM0bnmyJEjsbe3v+pegiC0X0Zphm4Sl1bCzHRrbC3t2KFU6iRxvtbW\nLPLxMWoSJ3Rfer1Lzp07x8CBA3XODRgwgDNnzhikUaa0MzkZ66FDSSgrazkZEsLpvXsZ1sGaPYf3\n7qVm0CBodc2xQ4eyKympXb1yTU1N3HvvvSxatIjVq1cDmn1D7e3tqa2tZcyYMdjb27N+/XpCQkK4\ncOECRUVFN7zmiy++yD//+U8++eQTVq9ezfz58wkLC2Pw4ME88cQTPPbYY7z77rvY29sDsHv3brKz\ns1m8eLHOdTZv3sxbb73F+vXrGTRoEMXFxezZsweAOXPmkJqayrp16zh69CiA9noNDQ0sW7aMfv36\nUVFRwbJly7jnnntITk7G0tKS48ePExUVxebNmxk1ahQWVzaEfvLJJ6mrq2PXrl24uLiQnp5OYWGh\n3rG8niVLlvDWW2/xr3/9iy+++IJHHnmEUaNG6cwHXblyJatWreL1119HrVaze/du/vSnP/H222+z\nevVqSktLefHFF5k5c6Z2DsR7773HBx98wCeffMKIESP48ccfWbVq1VV1oPLy8vj4449Zs2YNSqUS\nb29vpk2bhkwm47vvvsPX15cdO3YwZ84cfvnlF8aPH3/D2F8vVgUFBdrH9+zZw/Dhw6+KhUwmY/jw\n4ezevZsFCxZ0OrbdXUJCguixMLKeEvOM0gzWJ67XJnF9zpcwI9MGG0s7/uvmxjE/PxgwABQKAm1s\nmOvlhbWBe+KvpafEu7voqnjrlch5enpy/vx5nV9mFy5cwN3dvdMNaK+KigomTpzImTNn+OOPP+jX\nr1+XXr/xOudVnSi8qL7O9za08zqVlZWUlZUxbdo0QkJCALT//eKLL8jMzOTChQva4e6AgICbXvOR\nRx5h7ty5ALz66qvs3r2bd999l9WrVzNjxgz++te/8s0332gTt88//5ypU6detXo5KysLb29vJk2a\nhEKhwN/fn0GDBmkft7e3x8LC4qrhzNjYWJ3jr776Cnd3d44ePcrIkSO17zFXV1ed783OzmbGjBna\nPzCae+466y9/+Qv33XefNh4ffPAB8fHxOu/9GTNm8OSTT2qPFy9ezNNPP81TTz2lPRcXF0dgYCCn\nT59m4MCBvPPOOzz77LPMnz8fgGeeeYbDhw+zadMmnfvX1dWxZs0a/P39Ac0P+qFDhygsLNSW/3n0\n0Uc5ePAgH3zwAePHj79p7G8Wq3PnzjFu3LhrxiMgIIBjx461L4iCIGill6azIXGDNonre66YP2XZ\nYm1px/ceHiT7+GiTuDA7O+7z8MDSBEmc0H3p9W5ZtGgRs2bNYtu2baSkpPDjjz8ya9asq3pljMHO\nzo6ff/6Z++67zyDlDCyvc96iE/eSX+d72zuzSqlU8sgjjzBp0iTuvvtu3nrrLc6dOwfAsWPHiIyM\nbPecxZEjR+ocjx49muTkZACsra2JjY3ls88+A6C4uJgffviBRx999KrrzJ49m8bGRgICAnj44YdZ\nu3atznZu13Py5ElmzJhBcHAwTk5O2uQzKyvrht/3t7/9jTfeeIMRI0awZMkS9u3bp9frvZnBgwdr\n/908j+7SpUs6z2m7QOLIkSO89957ODo6ar8iIyORyWScP3+e8vJy8vPzGTFihM73tT0G8PLy0iZx\nzdduaGjAz89P5/rr1q0jLS0NuHnsbxariooKHB0drxkPJycnylr3Tt/CRE+F8XX3mKeXpuv0xIWn\napI4hZU9G7y8NEncleHUgQ4OPODpadIkrrvHu7vpqnjr1SO3ZMkSLC0tef7558nJyaFXr1488sgj\nPPvss13SiPZQKBQG7QmcGBlJ3LFjjB06VHuu/tgxYmNiCOvAqkuAVEki7vhxrNtcc0JUVLuv9emn\nn/L000/z22+/sWPHDpYuXcqHH37YZXW62l7j8ccf55133iExMZFdu3bh6enJlClTrvo+X19fzp49\nS3x8PLt37+bVV1/lpZde4o8//tBJTFqrqanhrrvuIiYmhri4OLy8vJAkicjISBoabtxfGRsby+TJ\nk9m+fTvx8fFMmTKFGTNmsGbNmo6/eLhq4YJMJtMuOmjWPCzcTJIklixZcs3hRy8vL5qamrTXupm2\n11ar1Tg7O2uHpK/V1pvF/maxcnFxobKy8prtKS8vR6lU3rTdgiDoulBygQ1JG2hSa37+w88WMf2i\nPVjbs8bTk4teXpqeOAsLhjs5MdnVVeybKnSIXqm/XC7nhRdeIDU1lerqas6ePcvzzz9v8NV0phAW\nHExsVBSeSUm4JCXhmZREbFRUp1aYdvU1IyMjeeaZZ/j5559ZvHgxn376KUOHDiUlJUVbB0xfBw8e\n1Dn+/fffiYyM1B6HhIQwfvx4PvvsM7744gsWLVp03Q8bKysrJk2axFtvvUViYiI1NTVs3bpV+1jb\ncjVnzpyhqKiI119/nZiYGMLCwigpKdFJJpuTlWuVuvH29iY2Npavv/6azz//nHXr1unVC9jVoqOj\nSUpKIjg4+Kove3t7nJ2d8fX1vWpV6KFDh2567WHDhlFWVkZtbe1V126dIN8o9nDjWPXp04fMzMxr\n3j8rK4u+fft2ICo9j6ixZXzdNeZpJWk6SVy/FE0Sp7JxIM7bWyeJG+viYjZJXHeNd3dl1L1WQTMp\nPTU1laKiIp1ftOPHj+/QjT/88EPi4uJISkpi7ty52tWVoCmHsHjxYnbs2IG7uztvvvmmdh5Xa4Z6\n44cFB3d5aZCuuOaFCxf49NNPuffee/H39ycvL4+9e/cSHR3N3Llzefvtt7n33nt5++23CQ4OJj09\nneLiYh544IHrXvPLL78kPDycoUOHsnbtWg4dOsRHH32k85zHH3+c+fPno1areeSRRwDYsmULL7/8\nMvHx8fj4+PDFF18gSRLDhg3DxcWFXbt2UVlZqZ3DGBQUREFBAYcOHSI0NBR7e3sCAgKwtrbmX//6\nF88++yyZmZksWbJE5/+ru7s7Dg4O/Prrr0RERGBtbY1SqeTPf/4z99xzD3379qWuro7NmzfTu3dv\nbZmMl19+mSNHjrBz585OxVyfXs5Vq1Zx11138dxzz7FgwQIcHR05f/48mzZt4sMPP8TGxobnnnuO\n5cuXEx4ezrBhw/jpp5/YsWPHTf8YGj9+PBMnTmTmzJm8/fbbDBgwgNLSUn7//XdsbW155JFHbhr7\nm8VqzJgx11yFLEkShw8f5u233+5A5ATh1pRWksY3Sd+0SuIuMy3XgTpbR9Z4eVHi4QH9+4OFBZNd\nXRnh7GziFgvdnqSHffv2Sd7e3pJSqZTkcrmkVColCwsLKSgoSJ9vv6bNmzdLP/zwg/Q///M/Umxs\nrM5jc+bMkebMmSNVV1dL+/fvl5ydnaXk5GSd58TGxkpJSUnXvf6NXpqeL9vs5OfnSzNnzpT8/f0l\na2trydfXV3rsscekiooKSZIkqaCgQHrooYckd3d3ycbGRoqIiJC+/vprSZIkKSMjQ5LL5dKBAwe0\nxzKZTFq7dq00duxYycbGRgoODpY2bNhw1X0bGxslT09PaerUqdpzX331lSSXy6WsrCxJkjT/P0eN\nGiUplUrJzs5OGjBggPTll1/qXGPevHmSq6urJJPJpJUrV0qSJEmbNm2S+vTpI9nY2EhRUVHSnj17\nJIVCoW23JEnS6tWrpaCgIEmhUGjfc0899ZTUt29fydbWVnJzc5OmTp0qpaSkaL8nNjZW5/0ZHx8v\nyeVyKTc397rxaH3cLDQ0VNtWSZIkmUwmrVu37qoY7du3T5o4caLk6Ogo2dvbSxEREdIzzzwjNTU1\nSZIkSWq1Wnr55Zcld3d3ycHBQZo7d670xhtvSI6OjtprrFixQurTp89V166trZWWLFkiBQUFSVZW\nVpK3t7c0ZcoUKT4+Xq/Y3yxWRUVFko2NjXTs2DGd++7fv1+yt7eXKisrr2pTe3XXnzlBaI9zReek\n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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 70 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "So, using a few tweaks, such as static type declarations and explicit for-loops instead of list comprehensions, we managed to increase the performance of our least squares fit implementation quite significantly - it outperforms the alternative functions in Numpy and Scipy now." + ] } ], "metadata": {} diff --git a/benchmarks/cython_least_squares.ipynb b/benchmarks/cython_least_squares.ipynb index fafb461..2e97429 100644 --- a/benchmarks/cython_least_squares.ipynb +++ b/benchmarks/cython_least_squares.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:caecd42da39e4b55b4dc50c985b30a04ee3eac4a88d143732c4441ecc28fc1e0" + "signature": "sha256:b8a2adab4cfa8ac1064656d4b3e3121a2acc1060e034c98ce29986312939c9ac" }, "nbformat": 3, "nbformat_minor": 0, @@ -13,7 +13,7 @@ "metadata": {}, "source": [ "[Sebastian Raschka](http://www.sebastianraschka.com) \n", - "last updated: 05/04/2014\n", + "last updated: 05/06/2014\n", "\n", "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb) \n", "- [Link to the GitHub repository](https://github.com/rasbt/python_reference)" @@ -73,7 +73,8 @@ "- [Bonus: How to use Cython without the IPython magic](#cython_bonus)\n", "- [Appendix I: Cython vs. Numba](#numba)\n", "- [Appendix II: Cython with and without type declarations](#type_declarations)\n", - "- [Appendix III: Cython performance after replacing list comprehensions by explicit for loops](#explicit_loops)" + "- [Appendix III: Cython performance after replacing list comprehensions by explicit for loops](#explicit_loops)\n", + "- [Final Comparison: Cython vs. NumPy vs. SciPy for least squares fitting](#showdown)" ] }, { @@ -1005,8 +1006,7 @@ "\n", "funcs = ['cy_classic_lstsqr', \n", " 'lin_lstsqr_mat', 'numpy_lstsqr', 'scipy_lstsqr']\n", - "labels = ['classic approach (cython)', 'matrix approach', \n", - " 'numpy function', 'scipy function']\n", + "\n", "orders_n = [10**n for n in range(1, 7)]\n", "times_n = {f:[] for f in funcs}\n", "\n", @@ -1057,6 +1057,15 @@ ], "prompt_number": 34 }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "In this performance comparison for different sample sizes, we see that our Cython approach is actually not so fast anymore. However, this is just the simplest approach to using Cython. There are a lot of tweaks that can be made. In a [later section](#showdown) we will come back to this comparison and see how the Cython version of our simple least squares implementation holds up against the other approaches\n", + "
" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -2193,6 +2202,195 @@ } ], "prompt_number": 88 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Final Comparison: Cython vs. NumPy vs. SciPy for least squares fitting" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To wrap it up, let us compare the Cython code of our simple least squares fit implementation to the Numpy and Scipy functions - after we made some improvements by adding static type declarations and explicit for loops." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%load_ext cythonmagic" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "\n", + "def cy_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " cdef double x_avg, y_avg, temp, var_x, cov_xy, slope, y_interc, x_i, y_i\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = 0\n", + " for x_i, y_i in zip(x,y):\n", + " temp = (x_i - x_avg)\n", + " var_x += temp**2\n", + " cov_xy += temp*(y_i - y_avg)\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import numpy as np\n", + "import scipy.stats" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def lin_lstsqr_mat(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " X = np.vstack([x, np.ones(len(x))]).T\n", + " return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 4 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def numpy_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " X = np.vstack([x, np.ones(len(x))]).T\n", + " return np.linalg.lstsq(X,y)[0]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 5 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def scipy_lstsqr(x,y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " return scipy.stats.linregress(x, y)[0:2]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 6 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "import random\n", + "random.seed(12345)\n", + "\n", + "funcs = ['cy_lstsqr', 'lin_lstsqr_mat',\n", + " 'numpy_lstsqr', 'scipy_lstsqr'] \n", + "\n", + "orders_n = [10**n for n in range(1, 6)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", + " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", + " for f in funcs:\n", + " times_n[f].append(min(timeit.Timer('%s(x,y)' %f, \n", + " 'from __main__ import %s, x, y' %f)\n", + " .repeat(repeat=3, number=1000)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 26 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "#%pylab inline\n", + "#import matplotlib.pyplot as plt\n", + "\n", + "labels = [('cy_lstsqr', 'Cython implementation'), \n", + " ('lin_lstsqr_mat', 'numpy matrix equation'),\n", + " ('numpy_lstsqr', 'numpy.linalg.lstsq()'), \n", + " ('scipy_lstsqr', 'scipy.stats.linregress()')] \n", + "\n", + "matplotlib.rcParams.update({'font.size': 12})\n", + "\n", + "fig = plt.figure(figsize=(10,8))\n", + "for lb in labels:\n", + " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('performance gain relative to the slowest approach')\n", + "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "plt.title('Performance of least square fit implementations for different sample sizes')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n44cFB3d5aZCuuOaFCxf49NNPuffee/H39ycvL4+9e/cSHR3N3Llzefvtt7n33nt5++23CQ4OJj09\nneLiYh544IHrXvPLL78kPDycoUOHsnbtWg4dOsRHH32k85zHH3+c+fPno1areeSRRwDYsmULL7/8\nMvHx8fj4+PDFF18gSRLDhg3DxcWFXbt2UVlZqZ3DGBQUREFBAYcOHSI0NBR7e3sCAgKwtrbmX//6\nF88++yyZmZksWbJE5/+ru7s7Dg4O/Prrr0RERGBtbY1SqeTPf/4z99xzD3379qWuro7NmzfTu3dv\nbZmMl19+mSNHjrBz585OxVyfXs5Vq1Zx11138dxzz7FgwQIcHR05f/48mzZt4sMPP8TGxobnnnuO\n5cuXEx4ezrBhw/jpp5/YsWPHTf8YGj9+PBMnTmTmzJm8/fbbDBgwgNLSUn7//XdsbW155JFHbhr7\nm8VqzJgx11yFLEkShw8f5u233+5A5ATh1pRWksY3Sd+0SuIuMy3XgTpbR9Z4eVHi4QH9+4OFBZNd\nXRnh7GziFgvdnqSHffv2Sd7e3pJSqZTkcrmkVColCwsLKSgoSJ9vv6bNmzdLP/zwg/Q///M/Umxs\nrM5jc+bMkebMmSNVV1dL+/fvl5ydnaXk5GSd58TGxkpJSUnXvf6NXpqeL9vs5OfnSzNnzpT8/f0l\na2trydfXV3rsscekiooKSZIkqaCgQHrooYckd3d3ycbGRoqIiJC+/vprSZIkKSMjQ5LL5dKBAwe0\nxzKZTFq7dq00duxYycbGRgoODpY2bNhw1X0bGxslT09PaerUqdpzX331lSSXy6WsrCxJkjT/P0eN\nGiUplUrJzs5OGjBggPTll1/qXGPevHmSq6urJJPJpJUrV0qSJEmbNm2S+vTpI9nY2EhRUVHSnj17\nJIVCoW23JEnS6tWrpaCgIEmhUGjfc0899ZTUt29fydbWVnJzc5OmTp0qpaSkaL8nNjZW5/0ZHx8v\nyeVyKTc397rxaH3cLDQ0VNtWSZIkmUwmrVu37qoY7du3T5o4caLk6Ogo2dvbSxEREdIzzzwjNTU1\nSZIkSWq1Wnr55Zcld3d3ycHBQZo7d670xhtvSI6OjtprrFixQurTp89V166trZWWLFkiBQUFSVZW\nVpK3t7c0ZcoUKT4+Xq/Y3yxWRUVFko2NjXTs2DGd++7fv1+yt7eXKisrr2pTe3XXnzlBaI9zReek\n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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 70 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "So, using a few tweaks, such as static type declarations and explicit for-loops instead of list comprehensions, we managed to increase the performance of our least squares fit implementation quite significantly - it outperforms the alternative functions in Numpy and Scipy now." + ] } ], "metadata": {} From 0511aa505891df4073ab7f8ab1da0d11712698d3 Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 6 May 2014 14:37:15 -0400 Subject: [PATCH 021/248] img --- Images/cython_final_leastsqr.png | Bin 0 -> 53922 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Images/cython_final_leastsqr.png diff --git a/Images/cython_final_leastsqr.png b/Images/cython_final_leastsqr.png new file mode 100644 index 0000000000000000000000000000000000000000..9ae7432ba6ea289adee7bdc337873ddd33461256 GIT binary patch literal 53922 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�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 LM=MRk`qcjb_~k5? literal 0 HcmV?d00001 From 667e4f6e327b33b8c24ac0fccfadb6277ab2c83f Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 6 May 2014 14:38:02 -0400 Subject: [PATCH 022/248] minor fixes --- .../cython_least_squares-checkpoint.ipynb | 270 ++++++++++------- benchmarks/cython_least_squares.ipynb | 283 +++++++++++------- 2 files changed, 344 insertions(+), 209 deletions(-) diff --git a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb index 2e97429..0f94642 100644 --- a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb +++ b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:b8a2adab4cfa8ac1064656d4b3e3121a2acc1060e034c98ce29986312939c9ac" + "signature": "sha256:90a74ceed4e3dca395013883669de508e2ef94573e58cf24ce3ba49686ca5fe0" }, "nbformat": 3, "nbformat_minor": 0, @@ -132,7 +132,7 @@ "source": [ "In more mathematical terms, our goal is to compute the best fit to *n* points $(x_i, y_i)$ with $i=1,2,...n,$ via linear equation of the form \n", "$f(x) = a\\cdot x + b$. \n", - "Here, we assume that the y-component is functionally dependent on the x-component. \n", + "We further have to assume that the y-component is functionally dependent on the x-component. \n", "In a cartesian coordinate system, $b$ is the intercept of the straight line with the y-axis, and $a$ is the slope of this line." ] }, @@ -280,7 +280,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 36 + "prompt_number": 1 }, { "cell_type": "markdown", @@ -301,7 +301,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Next, we will calculate the parameters separately, using only standard library functions in Python, which I will call the \"classic approach\"." + "Next, we will calculate the parameters separately, using standard library functions in Python only, which I will call the \"classic approach\"." ] }, { @@ -331,7 +331,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 37 + "prompt_number": 2 }, { "cell_type": "markdown", @@ -352,7 +352,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "For our convenience, `numpy` has a function that can also compute the leat squares solution of a linear matrix equation. For more information, please refer to the [documentation](http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html)." + "For our convenience, `numpy` has a function that can computes the least squares solution of a linear matrix equation. For more information, please refer to the [documentation](http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html)." ] }, { @@ -367,7 +367,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 38 + "prompt_number": 3 }, { "cell_type": "markdown", @@ -388,7 +388,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The last approach is using `scipy.stats.linregress()`, which returns a tuple of 5 different attributes, where the 1st value in the tuple is the slope, and the second value is the y-axis intercept, respectively. The documentation for this function can be found [here](http://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.stats.linregress.html)." + "Also scipy has a least squares function, `scipy.stats.linregress()`, which returns a tuple of 5 different attributes, where the 1st value in the tuple is the slope, and the second value is the y-axis intercept, respectively. \n", + "The documentation for this function can be found [here](http://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.stats.linregress.html)." ] }, { @@ -404,7 +405,22 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 39 + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Teaser" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "The following plot below should give you an impression of how the performance of the 4 different approaches will compare to each other at the end of this article." + ] }, { "cell_type": "markdown", @@ -433,12 +449,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In order to test our different least squares fit implementation, we will generate some sample data: \n", + "In order to test our different least squares fit implementations, we will generate some sample data: \n", "- 500 sample points for the x-component within the range [0,500) \n", "- 500 sample points for the y-component within the range [100,600) \n", "\n", "where each sample point is multiplied by a random value within\n", - "the range [0.8, 12)." + "the range [0.8, 12) to simulate some scatter in our dataset." ] }, { @@ -454,7 +470,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 40 + "prompt_number": 5 }, { "cell_type": "markdown", @@ -476,15 +492,25 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "To check how our dataset is distributed, and how the straight line, which we obtain via the least square fit method, we will plot it in a scatter plot. \n", - "Note that we are using our \"matrix approach\" here for simplicity, but after plotting the data, we will check whether all of the four different implementations yield the same parameters." + "To check how our dataset is distributed, and how the least squares regression line looks like, we will plot the results in a scatter plot. \n", + "Note that we are only using our \"matrix approach\" to visualize the results - for simplicity. We expect all 4 approaches to produce similar results, which we will confirm after visualizing the data." ] }, { "cell_type": "code", "collapsed": false, "input": [ - "%pylab inline\n", + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 7 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ "from matplotlib import pyplot as plt\n", "\n", "slope, intercept = lin_lstsqr_mat(x, y)\n", @@ -514,11 +540,11 @@ "output_type": "display_data", "png": "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\nRUdHU7duXf0+np6erz3CliQZg7W1tfwyWsTl5TDIkmQM+ZLo1Wo1W7duzfLZ39fpiPU8X19frl+/\nnucxSpIkSVJB5ePjw7Vr13K0b75cut+xYwc1atTAxcUF0J3FP+tZGhMTQ4kSJQDw8PDI8BzynTt3\n8PDwyFDW9evX9Y/2vIk/M2bMMHoMsv2y7bL9sv2y/fn7k5sT3HxJ9OvWrdNftgfo0KEDq1atAmDV\nqlV06tRJv3z9+vWo1Wpu3rzJ1atXqV27dn6EKEmSJElFksEv3SclJbFnzx6+//57/bLJkyfTvXt3\nQkJC9I/Xge456O7du+uHwfz2229lRxhJkiRJygWDJ3obG5sMYz2DbljIPXv2ZLn91KlTsxzeVNJp\n0qSJsUMwqje5/W9y20G2X7a/ibFDKLQMOmCOISgUCgpZyJIkSZKUK7nJfXIIXEmSJEkqwmSilyRJ\nkqQiTCZ6SZIkSSrCZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIkwmekmSJEkqwmSilyRJkqQiTCZ6\nSZIkSSrCZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIkwmekmSJEkqwmSilyRJkqQiTCZ6SZIkSSrC\nZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIszM2AFIkiRJWYuNjWXHjh2YmJjQtm1bnJycjB2SVAgp\nhBDC2EFkh0KhoJCFLEmSlG03btygdu1AUlLqAOnY2p7nzJkjuLu750v9f/75JzNnzichIYn+/bvQ\nv3/ffKlXylpucp88o5ckSSqAJk78mEePRqDVfgRAauqHTJv2KStWfGvwuv/880/q1GlCSso0wINj\nxz7m8eMERo9+z+B1S3lP3qOXJEkqgKKi7qHV1tC/Tk+vwe3bdw1e78OHDwkMbEVKyhBgAtADlWo1\n8+d/Y/C6AU6cOMHIkWMZO/Z9/v7773yps6iTiV6SJKkAatWqMUrlF8Bj4CFK5Ve0bh1o8HqnTp1N\nQoInYPrcUpN8uWW6f/9+mjZtz7JlJVm8WEmtWo25ePGiwest6mSilyRJKoA+/ngy77zjg6lpCczM\nPBgwoA7jx482eL2XLt1Aq+0P/AB8A/yCiUkPxo4dZvC6P/poHirVV8BkhJhNUtJ4Pv98scHrLepk\nopckSSqAzM3NWb36O1JTVaSkJPHttwsxMTH8n+yGDWtgbb0bCAMOYGLyPs2a+TNx4liD152cnAIU\n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\nYII=\n", "text": [ - "" + "" ] } ], - "prompt_number": 42 + "prompt_number": 8 }, { "cell_type": "markdown", @@ -540,7 +566,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As mentioned above, let us confirm that the different implementation computed the same parameters (i.e., slope and y-axis intercept) as solution for the linear equation." + "As mentioned above, let us now confirm that the different implementations computed the same parameters (i.e., slope and y-axis intercept) as solution of the linear equation." ] }, { @@ -580,7 +606,7 @@ ] } ], - "prompt_number": 43 + "prompt_number": 9 }, { "cell_type": "markdown", @@ -602,7 +628,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "For a first impression how the performances of the different least squares implementations compare against each other, let us do a quick benchmark using the `timeit` module via IPython's `%timeit` magic." + "To get an initial impression of how the performances of the different least squares implementations compare against each other, let us do a quick benchmark using the `timeit` module via IPython's `%timeit` magic." ] }, { @@ -626,7 +652,7 @@ "stream": "stdout", "text": [ "\n", - "matrix approach: 10000 loops, best of 3: 163 \u00b5s per loop" + "matrix approach: 10000 loops, best of 3: 158 \u00b5s per loop" ] }, { @@ -635,7 +661,7 @@ "text": [ "\n", "\n", - "classic approach: 1000 loops, best of 3: 1.55 ms per loop" + "classic approach: 1000 loops, best of 3: 1.6 ms per loop" ] }, { @@ -644,7 +670,7 @@ "text": [ "\n", "\n", - "numpy function: 1000 loops, best of 3: 221 \u00b5s per loop" + "numpy function: 1000 loops, best of 3: 217 \u00b5s per loop" ] }, { @@ -653,7 +679,7 @@ "text": [ "\n", "\n", - "scipy function: 1000 loops, best of 3: 362 \u00b5s per loop" + "scipy function: 1000 loops, best of 3: 366 \u00b5s per loop" ] }, { @@ -664,14 +690,14 @@ ] } ], - "prompt_number": 44 + "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", - "The timing above indicates, that the \"classic\" approach (Python's standard library functions only) is significantly worse in performance than the other implemenations - roughly by a magnitude of 10." + "The timing above indicates that the \"classic\" approach (Python's standard library functions only) is significantly worse in performance than the other implemenations - roughly by a magnitude of 10. However, we should keep in mind that this experiment was done for a fixed sample size n=500." ] }, { @@ -702,12 +728,12 @@ "metadata": {}, "source": [ "Maybe we can speed things up a little bit via [Cython's C-extensions for Python](http://cython.org). Cython is basically a hybrid between C and Python and can be pictured as compiled Python code with type declarations. \n", - "Since we are working in an IPython notebook here, we can make use of the IPython magic: It will automatically convert it to C code, compile it, and load the function. \n", - "Just to be thorough, let us also compile the other functions, which already use numpy objects.\n", + "Since we are working in an IPython notebook here, we can make use of the very convenient *IPython magic*: It will take care of the conversion to C code, the compilation, and eventually the loading of the function. \n", + "Let us also compile the functions for the other 3 least squares approaches - those already use numpy objects and therefore we don't expect any performance gain here, but it is good to be thorough.\n", "\n", "**Note** \n", - "Of course Cython has much more horsepower under its hood - more than I am showing in this article (for example, I am not using Cython's type definitions via `cdef` here). Here, I want to focus on how to speed up existing Python code by making only minimal changes to it. \n", - "[In a later section - Appendix II](#type_declarations) We will see how static type declarations can further improve the performance via Cython." + "Of course Cython has much more horsepower under its hood - more than I am showing in this section of this article (for example, I am not using Cython's type definitions via `cdef` here, but we will get to it [in a later section - Appendix II](#type_declarations)). \n", + "The focus of this section should be on how to speed up existing Python code by making only minimal changes to it. " ] }, { @@ -718,17 +744,8 @@ ], "language": "python", "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "The cythonmagic extension is already loaded. To reload it, use:\n", - " %reload_ext cythonmagic\n" - ] - } - ], - "prompt_number": 45 + "outputs": [], + "prompt_number": 11 }, { "cell_type": "code", @@ -766,7 +783,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 46 + "prompt_number": 12 }, { "cell_type": "markdown", @@ -809,7 +826,7 @@ "\n", "\n", "matrix approach: \n", - "10000 loops, best of 3: 165 \u00b5s per loop" + "10000 loops, best of 3: 159 \u00b5s per loop" ] }, { @@ -817,7 +834,7 @@ "stream": "stdout", "text": [ "\n", - "10000 loops, best of 3: 166 \u00b5s per loop" + "10000 loops, best of 3: 159 \u00b5s per loop" ] }, { @@ -828,7 +845,7 @@ "\n", "\n", "classic approach: \n", - "1000 loops, best of 3: 1.59 ms per loop" + "1000 loops, best of 3: 1.62 ms per loop" ] }, { @@ -836,7 +853,7 @@ "stream": "stdout", "text": [ "\n", - "10000 loops, best of 3: 127 \u00b5s per loop" + "10000 loops, best of 3: 126 \u00b5s per loop" ] }, { @@ -847,7 +864,7 @@ "\n", "\n", "numpy function: \n", - "1000 loops, best of 3: 220 \u00b5s per loop" + "1000 loops, best of 3: 218 \u00b5s per loop" ] }, { @@ -855,7 +872,7 @@ "stream": "stdout", "text": [ "\n", - "1000 loops, best of 3: 221 \u00b5s per loop" + "1000 loops, best of 3: 220 \u00b5s per loop" ] }, { @@ -866,7 +883,7 @@ "\n", "\n", "scipy function: \n", - "1000 loops, best of 3: 361 \u00b5s per loop" + "1000 loops, best of 3: 372 \u00b5s per loop" ] }, { @@ -874,7 +891,7 @@ "stream": "stdout", "text": [ "\n", - "1000 loops, best of 3: 367 \u00b5s per loop" + "1000 loops, best of 3: 354 \u00b5s per loop" ] }, { @@ -885,7 +902,7 @@ ] } ], - "prompt_number": 47 + "prompt_number": 13 }, { "cell_type": "markdown", @@ -893,8 +910,8 @@ "source": [ "
\n", "
\n", - "As we've seen before, our \"classic\" implementation of the least square method is pretty slow compared to using numpy's functions. This is not surprising, since numpy is highly optmized and uses compiled C/C++ and Fortran code already. This explains why there is no significant difference if we used Cython to compile the numpy-objects-containing functions. \n", - "However, we were able to speed up the \"classic approach\" quite significantly, roughly by 1500%.\n", + "As we've seen before, our \"classic\" implementation of the least square method is pretty slow compared to the other approaches which use Numpy objects. This is not surprising, since Numpy is highly optimized and uses compiled C/C++ and Fortran code already. This explains why there is no significant difference if we used Cython to compile the numpy-objects-containing functions. \n", + "However, we were able to speed up the \"classic approach\" quite significantly via Cython, roughly by 1500%.\n", "\n", "The following 2 code blocks are just to visualize our results in a bar plot." ] @@ -919,14 +936,13 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 50 + "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ - "#%pylab inline\n", - "#import matplotlib.pyplot as plt\n", + "import matplotlib.pyplot as plt\n", "\n", "x_pos = np.arange(len(funcs))\n", "plt.bar(x_pos, times, align='center', alpha=0.5)\n", @@ -950,21 +966,21 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\ntbWllJQUIio+SFhaWgo7dl5eHrVt25a++OILKiwspBs3bpCLiwsdOHCAiEjYFnFxcVRUVESffvop\nderUqdzYylOyICgUihcu68yZM5SUlEQKhYJkMhm5u7vT6tWriYgoPj6e2rVrR48fPyYiotTUVOEg\nWHp/K+1F7x06dCgNHTqU8vLy6K+//iJ7e3vq2rUrEZVfEPz9/emHH34gouKCcOjQISooKKB79+5R\nt27daPr06cK0Tk5O1KZNG7p9+zY9e/asWvtU6WWVzlMqlVbaZFRyeuXn4IsvvhA+QzY2NvTOO+9Q\nbm4uXbp0iUxNTUkmkxFR8XY3MjKiX3/9leRyOS1fvpyaNm1KcrmciFS3++rVq8nX15cyMjKooKCA\nwsLCKCQkRGUdTpo0iZ4/f04HDx4kY2NjGjBgAN27d48yMjKoQYMGlJCQQEREu3fvJldXV0pNTSWF\nQkELFy6kzp07CzlJJBIKCgqix48f082bN6l+/foUHx9PRGU/G8r1pCz+Fy5coIYNG9Lu3buJqOxn\nh0i12en+/ftkZWVFP/30EykUCoqOjqZ69eoJxc7Pz49cXV3p6tWrlJ+fT/7+/jRr1iwiIvruu+8o\nKCiI8vPzqaioiM6ePUs5OTkVbiutKwhOTk5Ut25dsrKyIicnJ5o8eTLl5+fT0qVLyxzMevfuTf/7\n3/+IqHinnTdvnsr40NBQlTbdZs2aCR8CIqIDBw6Qs7MzERXvqMbGxsIZA1HxztirVy9heO/evVS3\nbl0qKioiIqKcnBySSCTCB7y0AQMG0Jo1a4T5m5qaqmz0Bg0aCAceU1NTunDhQpl5VJZ3SUePHqVG\njRqpvBYSEiJ8G5k3bx6NGDGi3FiJSOWgSET0/fffq3zYS374Sn+DKX3Q2rZtm3BAU5owYQLNnz+f\niIoLwujRo4VxiYmJ1KRJE5XpFy9eTGPGjBFif/PNN4VxygNHebGVp2RBqGxZpa1atYreeustIiI6\nfPgwNW/enBITE8u0+Zbe30o7cuRIue+Vy+VkZGQkFG4iotmzZ7/wDKH0QbqkXbt2UZs2bYRhZ2dn\nlbPR6uxTymUpz0ZK51mVPoTS05uampb5DCUnJwvTt2vXjvbs2UNExdvd19dXGFdUVESNGzemY8eO\nCbkpt7u7u7vKPnDnzh0yMjIihUIhrMM7d+4I421sbFTOWgcNGiR8Xvv06aOyfhUKBZmZmdHNmzeJ\n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\n", + "png": "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\n", "text": [ - "" + "" ] }, { "metadata": {}, "output_type": "display_data", - "png": "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\n7do1yszMpIiICOrXrx8R/bsTDRs2jHJzc2n79u1kZmZG3bp1o3v37tGtW7fI1dWV9u7dK7bJxMSE\n5syZQ2q1mn7//Xeys7MTd8qXyf/Z13fOnDnUpEkTunXrFuXl5dGQIUMoMjKSiIguXLhA1tbWtH//\nfsrNzaXRo0eTiYlJsQWPiIq81/Ly8qhatWo0ZcoUys/Pp927d5ONjQ0lJiYWO/+z2WsJgkCdO3em\nx48f0/Xr18nFxYW2bt1KRETr16+n6tWr08WLF0mj0dC3335LoaGhxS5bpVKRjY0NrV69mtRqNT14\n8IBOnz4ttlu7s5f0/sjMzCRbW1tKSkoiIqKUlBS6cOECERH17t2bJk+eTERP34Pa1167DdqC97z3\neGHPFjyNRkP16tWjiRMnUn5+Pl29epX8/Pxo27ZtRPT0A96RI0dIo9GQSqUif39/mjNnDhERbd26\nlerXry9+wLp48SLduXOn2NersJLm7dWrF/Xq1Yuys7Pp/Pnz5OnpSc2bNyei4gves6/t5cuXaefO\nnZSXl0f37t2jFi1a0KhRo8Tn+vj4UHBwMN28eZOePHnySvs/ke4Jw6sev1q2bEmenp504cIFysrK\nou7du1Pfvn2L3a5u3brR0KFDKTs7m+7evUuNGjUSP2Bq99PY2FgqKCigcePGkaenp/hhZPv27WRj\nY0NZWVlE9PSDRdeuXenhw4eUkZFBnTt3pv/85z/ie6Gk42Zxr+OaNWvE1+r3338nKysrSklJISKi\n2NhY8cOJ1rPL2LVrFzk7O9OpU6coNzeXRowYQS1atBCfW9I+WZwXFjwfHx+ytrYme3t78vHxoY8/\n/phycnJo6tSp4oFS6+233xY/KYSFhdGECROKbMizlbtatWo6Zynbtm0jX19fInoarJmZmc4OOGHC\nBGrbtq04vXHjRrK2tqaCggIiIkpPTydBEMSdorBu3brR3LlzxeVbWFjo7Aiurq7izmphYUFnz54t\nsowXbfez9u7dS56enjqPNWvW7Lk79qlTp8RPOURFC1716tXFv2VlZZEgCJSamlpkOQcPHiQXFxed\nbdN66623aOHCheJ0YmIimZqakkajEXeiZz9BOTk50R9//CFOd+/eXTyALVmypEjRbdSoES1btqzY\n7Sucf+HX19/fX6eA3b59m0xNTUmtVtN///tfsfhpt9/MzKzEgvfse23fvn3k7u6u85zIyEiKiYkp\n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\n", + "png": "iVBORw0KGgoAAAANSUhEUgAAAbwAAAFhCAYAAAALEB8uAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdYFOfaBvB7qALSqyBFNEZQFKyIDWOJXYMaJZagJpZE\nj8YUOcYoJ8YWNZZoTEyixJ5jjI0gNkQ9KvZOBNtiBbtUhV2e7w+/nbCAqDjMLMvzuy6vZJadmXfu\n3Zln531ndgUiIjDGGGMGzkjpBjDGGGNy4ILHGGOsUuCCxxhjrFLggscYY6xS4ILHGGOsUuCCxxhj\nrFKQteClp6ejdevWsLGxweeffy7nqiukLl26YOXKlUo3Q2/5+Phg9+7dsq3PyMgIV65cKdd1RERE\n4Kuvviq35VtbW0OlUr3SPAkJCfD09CyfBhm4evXqYd++fZIvV6VSwcjICAUFBZIvW2mjRo3CN998\nUy7LNnnRE3x8fHDnzh0YGxvDysoKnTt3xqJFi2BlZfXKK1u6dClcXFyQkZFRpsZWNrGxsUo3Qa8J\nggBBEEr8W0REBDw9PTF16tQyLTs0NBSDBg3CsGHDXqeJr6y0bZJCZmZmuS37dbzu66Wvzp07p3QT\nZPWqr2N0dDR+/fVX7N+/X3xsyZIl5dW8F5/hCYKAmJgYZGZm4sSJEzh27NgrV18iQkFBAVJTU+Hn\n51emhqrV6jLNxyoGfXt9y7PovAh/F4R+0rf3KCsDegEfHx/avXu3OP3ZZ59Rt27diIjo0KFD1Lx5\nc7Kzs6MGDRpQQkKC+Lw2bdrQl19+SS1atCALCwsaOHAgmZqakpmZGVWtWpV2795NT58+pbFjx5K7\nuzu5u7vTuHHj6OnTp0REtGfPHvLw8KBZs2aRm5sbDRo0iKKioqhPnz40cOBAsra2poCAAEpJSaHp\n06eTi4sLeXl50Y4dO8Q2LFu2jPz8/Mja2pp8fX3pp59+Ev+mXf7cuXPJxcWFqlWrRsuXLxf/npOT\nQ+PHjydvb2+ytbWlli1bUm5u7gu3u6jjx49TYGAgWVtbU9++fendd9+lSZMmERHRgwcPqGvXruTs\n7Ez29vbUrVs3unHjhk6Gv/zyCxERLV++nFq0aEGfffYZ2dvbU40aNWjbtm3PXe+1a9fonXfeIWdn\nZ3J0dKTRo0cTEZFGo6GpU6eSt7c3ubi40ODBg+nx48dERHT16lUSBIGWL19Onp6e5ODgQEuWLKEj\nR45QQEAA2dnZicvRtikkJIRGjx5Ntra2VKdOHZ33ysvkr319Bw8eTAUFBTRjxgyqWbMmOTo60rvv\nvksPHjwQ51mxYgV5eXmRo6MjTZs2rdh7U+unn37Sea/16NGDiIiSkpKoTZs2ZGdnR3Xr1qUtW7aU\nmN3EiRPJ2NiYqlSpQlWrVqUxY8YQEZEgCPTjjz/SG2+8QXZ2dvTxxx/rzPfrr7+Sn58f2dvb09tv\nv02pqanPfX32798vvoc8PT3pt99+IyKiiIiIl35/LF++nHx9fcna2ppq1KhBq1evJiKiixcvUuvW\nrcnW1pacnJyoX79+4jyCINDly5eJqPT3eGF79uyh6tWri9M3b96ksLAwcnZ2pho1atDChQvFvx0+\nfJiCg4PJzs6OqlWrRqNHj6a8vDzx7+PGjSMXFxeysbGhgIAAOnfu3HNfr6JKmpeI6N69e9S9e3ey\nsbGhpk2b0qRJk6hly5ZE9M97WqPRiMspvF9dunSJ2rZtS46OjuTk5EQDBgygR48eic/19vamWbNm\nUUBAAFWpUoU0Gs0r7f/e3t7ie3TKlCmvdPxq06YNRUZGUtOmTcnGxoZ69uwp7g9Ft+vRo0c0dOhQ\nqlatGnl4eNCkSZPEv2n3008++YTs7OyoZs2adODAAVq2bBl5enqSi4uL+P4jInry5Al9+umn5OXl\nRa6urjRy5EjxfVHacfN5r6N2n7a2tiZ/f3/auHEjET3bH6tUqULGxsZUtWpVsre3JyKi999/X9wH\niIiWLl1KtWrVIgcHB+rRowfdunVL/NuL9smiXqrg7dq1i4ieHUTr1q1LkydPphs3bpCjo6N40N25\ncyc5OjrSvXv3xBfL29ubkpKSSKPRUH5+PkVERNBXX30lLvurr76i5s2b0927d+nu3bsUEhIi/n3P\nnj1kYmJCkZGRlJeXR7m5uTRlyhSqUqUK7dixg9RqNQ0ePJi8vb1p+vTppFar6eeff6YaNWqIy//r\nr7/oypUrRES0d+9esrS0pBMnTugsf8qUKaRWqyk2NpYsLS3FN/tHH31Ebdu2pVu3bolv8qdPnz53\nu+/evVssu6dPn5KXlxctXLiQ1Go1/fnnn2RmZiZu4/379+nPP/+k3NxcyszMpL59+1KvXr3E+UND\nQ+nXX38lomdvWlNTU/rll1+ooKCAlixZQu7u7iW+Zmq1murXr0/jx4+nnJwcevLkCR04cICInh2U\n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\n", "text": [ - "" + "" ] } ], - "prompt_number": 51 + "prompt_number": 16 }, { "cell_type": "markdown", @@ -993,7 +1009,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In the plot above, we've seen how the different implemantations perform for a fixed sample size n=500. Now, let us take a look at the effect of the sample size on the relative performances for each approach. We will consider the sample sizes 10, 100, 1000, 10000, 100000, and 1000000." + "In the previous section, we have seen how the different implemantations perform for a fixed sample size n=500. Now, let us take a look at the effect of different sample sizes on the relative performances for each approach. We will consider the sample sizes 10, 100, 1000, 10000, 100000, and 1000000." ] }, { @@ -1020,26 +1036,31 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 22 + "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ - "#%pylab inline\n", - "#import matplotlib.pyplot as plt\n", + "import matplotlib.pyplot as plt\n", "\n", - "plt.figure(figsize=(10,8))\n", + "labels = [('cy_classic_lstsqr', 'Cython implementation'), \n", + " ('lin_lstsqr_mat', 'numpy matrix equation'),\n", + " ('numpy_lstsqr', 'numpy.linalg.lstsq()'), \n", + " ('scipy_lstsqr', 'scipy.stats.linregress()')] \n", "\n", - "for f in times_n.keys():\n", - " plt.plot(orders_n, times_n[f], alpha=0.5, label=f, marker='o', lw=2)\n", + "matplotlib.rcParams.update({'font.size': 12})\n", "\n", + "fig = plt.figure(figsize=(10,8))\n", + "for lb in labels:\n", + " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", "plt.xlabel('sample size n')\n", - "plt.ylabel('time in ms')\n", - "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", + "plt.ylabel('performance gain relative to the slowest approach')\n", + "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", "plt.legend(loc=2)\n", "plt.grid()\n", - "\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", "plt.title('Performance of least square fit implementations for different sample sizes')\n", "plt.show()" ], @@ -1049,20 +1070,21 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\nJBJRUVFRrdsyatQo+r//+z9V+ZaWlmonLVdXVzpz5gzJ5XKytLRU+9VaqaHtruqnn34id3d3tdcm\nTpyo+pVcvaWruqrvN2a91bd16dKlNHLkSLp+/XqN+RpKwupa9scffyQPDw+116om0Q0lYdXNnTuX\n5s+fT0R/fdndvHlT9f7QoUMpLi5ONS2Xy8nKyoqys7NrLa++JKyh/V7b/I057sLCwlQndyJl64yZ\nmRkpFAq1L/I7d+6Qubm56tc4EdH27dtVX2ibN2+mdu3aqd67ePEiiUQiys/PV73m5OREFy5cIIVC\nQdbW1mrb/PPPP6uSw/qOd6Kan83adO/enQ4cOKCqW31J2NSpU+ntt99WvVdcXEympqaq1kuRSKSW\nXEVGRtKaNWuIiGjy5Mk0Y8YMun37dr31qSyncpsb+rxFR0dTdHR0nWVlZWVRq1atqLS0VPXayy+/\nXGcCXX2fVd8nM2fOrJHYtm/fnn766SciUh5jVVvfNTmnrlixQvXe+vXraejQobXWrTb9+/enZcuW\n1fqDsaoHDx6QSCSiR48eqbZzxowZqvc/++wzCgwMVE1fvHiR7O3tVdN+fn5qLfGHDx8mf39/IlJP\nmH799Vfy8fFRW/fKlStpypQptdbLx8eHNmzYUOP8XlsSJpfL6YUXXqBZs2YRETX4+ajvHGlsuE+Y\nwIhEIhw4cAAPHjxAZmYm/v3vf8PCwgJZWVnYs2cPHBwcVP9Onz6NO3fuqJZt6C6Y3Nxc+Pr6qqZ9\nfHyQm5urmnZxcYGZmZnaMq6urqq/LS0t4ezsrOo8a2lpCQAoLi4GABw5cgQhISFwcnKCg4MDDh8+\njPv376uWd3JyUuuPZWVlheLiYty7dw9PnjyBv79/jTprst1Vt6/6PvD19UVOTk69+6U2Da23vm39\nxz/+gYCAAAwePBj+/v5Ys2aNxuuta9nc3Fx4enrW2DZNnTlzBgMHDoSrqyvs7e2xYcMGtdgA6sdP\nVlYW5s6dq9p2JycnAHiqffk0GnPcAep19/HxgUwmw71799TKzMrKgkwmQ+vWrVXbNXPmTBQUFKjm\ncXNzU1svoPxcVH2tuLgYBQUFKC0tRY8ePVRlDRs2TG2ddR3vddmyZQuCgoJU5V2+fLlGjOqSl5en\ndjxYW1vDyclJLV7u7u5qdans9P7RRx+BiBAcHIzOnTtj8+bNGq2zrs9b5TlFJBLVe07Kzc2Fg4OD\n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\n", + "png": "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\n0/EX3NkAAAAASUVORK5CYII=\n", "text": [ - "" + "" ] } ], - "prompt_number": 34 + "prompt_number": 19 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", - "In this performance comparison for different sample sizes, we see that our Cython approach is actually not so fast anymore. However, this is just the simplest approach to using Cython. There are a lot of tweaks that can be made. In a [later section](#showdown) we will come back to this comparison and see how the Cython version of our simple least squares implementation holds up against the other approaches\n", + "In this performance comparison using different sample sizes, we can see that our Cython approach is actually not so fast anymore. However, this is just the simplest approach to using Cython. \n", + "There are a lot of improvements that can be made. In a [later section](#showdown) we will come back to this comparison and see how the Cython version of our simple least squares implementation holds up against the other approaches, after we tweaked it a little bit.\n", "
" ] }, @@ -1408,15 +1430,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Like we did with Cython before, we will use the minimalist approach to Numba and see how they compare against each other. \n", + "Like we did with Cython before, we will use the minimalist approach to Numba and see how the two - Cython and Numba - compare against each other. \n", "\n", - "Numba is using the [LLVM compiler infrastructure](http://llvm.org) for compiling Python code to machine code. Its strength is to work with NumPy arrays to speed-up code. If you want to read more about Numba, see the original [website and documentation](http://numba.pydata.org/numba-doc/0.13/index.html)." + "Numba is using the [LLVM compiler infrastructure](http://llvm.org) for compiling Python code to machine code. Its strength is to work with NumPy arrays to speed-up the code. If you want to read more about Numba, please see refer to the original [website and documentation](http://numba.pydata.org/numba-doc/0.13/index.html)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "
\n", "Here is our \"classic\" approach in Python, where I removed the list comprehensions, since they caused errors in the Numba compilation." ] }, @@ -1556,8 +1579,17 @@ "cell_type": "code", "collapsed": false, "input": [ - "#%pylab inline\n", - "#import matplotlib.pyplot as plt\n", + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", "\n", "plt.figure(figsize=(10,8))\n", "\n", @@ -1591,7 +1623,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Without making any modifications to the original code in order to account for the strengths of Numba (Numpy) and Cython (static type declarations), we see that Cython performs significantly better than Numba." + "Without making any modifications to the original Python code - thereby we are not accounting for the particular strengths of Numba (Numpy) and Cython (static type declarations), we see that Cython performs significantly better than Numba." ] }, { @@ -1622,7 +1654,7 @@ "metadata": {}, "source": [ "In the sections above, we have been using the simplest approach to Cython without using static type declarations and thereby neglecting one of its major strengths. \n", - "Let us now see how we can further improve the Cython implementation of our \"classic least squares approach\" by adding those type declarations." + "Now, let us see how and if we can further improve the Cython implementation of our \"classic least squares approach\" by adding those type declarations." ] }, { @@ -1649,7 +1681,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 44 + "prompt_number": 21 }, { "cell_type": "markdown", @@ -1666,7 +1698,8 @@ ], "language": "python", "metadata": {}, - "outputs": [] + "outputs": [], + "prompt_number": 23 }, { "cell_type": "code", @@ -1686,7 +1719,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 45 + "prompt_number": 24 }, { "cell_type": "markdown", @@ -1714,7 +1747,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 55 + "prompt_number": 25 }, { "cell_type": "markdown", @@ -1748,14 +1781,23 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 58 + "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ - "#%pylab inline\n", - "#import matplotlib.pyplot as plt\n", + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", "\n", "plt.figure(figsize=(10,8))\n", "\n", @@ -1777,13 +1819,13 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\n", + "png": "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\nBf2Ep79PRkYGHo+HRYsW0dbWxne+8x2+9rWv8eabbwLQ09NDSkpK4OuTk5M/kbUmInIuHR3wzDPQ\n2goJCWbj8unT7a5KROTMzro4W79+fWBx9vTTT4/Z4uz0K2cJCQks/mgn4czMTB555BFycnLo7e0l\nISGBxMREurq6Al/f2dlJYmLiGd977dq15OXlAZCamsqiRYsCq+uTT3foWMfhfnzdddc5qp7xPj5y\nBH72s3IGB6Gs7Dq++lXYubOcgwedUd+pxyc5pR4d69iJxyfPOaWeC/l8l5eXU19fz6eZ8I3Pf/jD\nH3Ls2LHAAwGna25uJicnh87OTpKSkrj66qu56667AjNvTzzxBE888QTvvffeqO/TAwEicrrqanjl\nFfD5ID8fvvIViIuzuyoRkTHIORsLPp+PgYEBRkZG8Pl8DA4OMjIywt/+9jdqa2vx+/20t7fzve99\nj6VLl5KUlATAN77xDX7xi1/g9XppaGjgF7/4xZjOwMn4Ov2KgNgvHHpiWWYbpo0bzcLsiivM5uVO\nXpiFQ1+CjXriTOHQlwvaW/NS/PSnP+UnP/lJ4Pg///M/efjhhykoKOB//I//QUtLC8nJyXz+859n\n/fr1ga+79957OXjwIAsWLADgm9/8Jt/61rcmqmwRCTLDw/Dyy2YD88hIuPFGszgTEQkWE35bc7zo\ntqaIdHfDs89CQwPExsJtt5nbmSIiTnPJOWciIk7X1GSeyOzqgtRUcxszM9PuqkRELtx5z5zt3buX\nn/zkJ3znO98BYN++fVRXV49bYRIawmE2INiEYk9qa+HJJ83CbPp0sxVTsC3MQrEvwU49caZw6Mt5\nLc5eeOEFrr32WhoaGvh//+//AdDd3c0PfvCDcS1ORORcLAvee8/cyhwaMqGy3/iGyTITEQlW5zVz\nNnfuXJ599lkWLVrElClT6OjoYHh4mJycHNra2iaizk+lmTOR8OLzwR//CFVV5njZMrjmGm3FJCLB\n4ZJnzlpbW1l4hn1OIiMnLIlDRCSgvx+efx4OHYJJk2DlSrOBuYhIKDiv1dXixYt5+umnR5177rnn\nuELPp8unCIfZgGAT7D1pb4fHHzcLs8REuOuu0FiYBXtfQpF64kzh0JfzunL2m9/8huXLl/PEE0/Q\n19fH5z//efbv38/bb7893vWJiAQcOmSumPX3Q3Y2rFkDp2y9KyISEs4756y3t5fXXnuNw4cPM336\n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\n9cRGU6ZM4bLLLjvja+qLPdra2qisrOS73/0u0dHRTJ06lbVr1/L666+rJzY4/cqZU3tQVFREdXX1\nqFqrq6sD720rG+fdxsTq1autNWvWWL29vdaWLVuslJQUa8+ePXaXFZTuvfde68orrxw1eGlZHz9p\ns2HDBqu/v9964IEHrCVLlgRef/TRR6158+ZZDQ0N1rFjx6zCwkLrscceC7x+5ZVXWvfff7/V3///\nt3dvIVF1bRzA/6P16ngYdTLGEx7CSoJCkoJKUhEJyUqi0qnsrJIpEVQqkholIhnphdnhpiJmTC/T\nCyXF8CIzQSEys4KsqDR1sDFrGvH5Ll7aNKl8vt/X24z2/8EGF3ud9lo3j2vN2vuLctJmaGhIRESe\nPHkiGo1GOWmj1+tFr9crZfPy8iQmJkZMJpP09PSIn5+fNDY2/ssj4RjGx8dlYGBABgYG5MOHD3Ly\n5EnZsWOHDA0NcU7srLCwUNasWSODg4MyMjIi0dHRUlhYyHmxk8nJSQkICJCysjKZmJgQk8kkycnJ\nsmfPHs7JbzQxMSFfvnyRvLw8SUtLk69fv8rExITDzoHFYpGQkBCprKyUr1+/SmVlpYSGhorVav1N\nIzazOR+cjYyMSHJysri7u0tISIgYjUZ7d2lOevXqlahUKlGr1eLh4aFcBoNBRETu3bsnERERolar\nJS4uTnnlxnenT58WrVYrWq1WcnNzp9QdGxsrarVaIiIipLm52ea+wWCQ4OBgcXd3l+TkZDGZTMo9\ni8Uihw4dEo1GIzqdTi5duvQvjYDjKy4uVl6lIcI5sSer1SpZWVni7e0tfn5+cvz4cbFYLCLCebGX\n9vZ2iY6OFm9vb/H19ZWUlBQZHBwUEc7J71JUVCQqlcrmOnv2rIg47hx0dXVJVFSUqNVqiYqKku7u\n7l85JP8zfr6JiIiIyIHM6d+cEREREc03DM6IiIiIHAiDMyIiIiIHwuCMiIiIyIEwOCMiIiJyIAzO\niIiIiBwIgzMiIiIiB8LgjIj+eAcOHMCZM2d+aZ1Hjx7F+fPnf2mdRPRnWGDvDhAR2ZtKpZryPcD/\nV3V19S+tj4j+HFw5IyICwI+lEJGjYHBGRHZVVlaGoKAgaDQaREREoKWlBQDQ0dGBdevWwcfHBwEB\nAcjJyYHValXKOTk5obq6GkuXLoVGo0FhYSFevnyJdevWwdvbG6mpqUr+1tZWBAUFobS0FIsXL0ZY\nWBgMBsOMfaqvr0dkZCR8fHywYcMGPH78eMa8J06cgE6ng5eXF1atWoWenh4AtlulW7Zsgaenp3I5\nOzvj1q1bAIDe3l4kJCRg0aJFiIiIQF1d3YxtxcbGorCwENHR0dBoNNi0aROGh4dnOdJENFcwOCMi\nu3n27BmqqqrQ2dmJT58+oampCaGhoQCABQsWoLKyEsPDw3jw4AGam5tx+fJlm/JNTU3o6upCe3s7\nysrKkJ6eDqPRiNevX+Px48cwGo1K3oGBAQwPD+Pdu3e4efMmMjIy8Pz58yl96urqwuHDh3H9+nWM\njIwgMzMTW7duxbdv36bkbWxsRFtbG54/f47R0VHU1dVBq9UCsN0qvXv3LsxmM8xmM2pra+Hv74/4\n+Hh8/vwZCQkJ2Lt3Lz5+/IiamhpkZWXh6dOnM46Z0WjEjRs3MDg4iG/fvqG8vPwfjzsROTYGZ0Rk\nN87OzrBYLHjy5AmsViuCg4OxZMkSAMDq1auxdu1aODk5ISQkBBkZGbh//75N+dOnT8PDwwMrVqzA\nypUrkZiYiNDQUGg0GiQmJqKrq8sm/7lz57Bw4UJs3LgRmzdvxp07d5R73wOpa9euITMzE2vWrIFK\npcK+ffvg4uKC9vb2Kf3/66+/YDab8fTpU0xOTmL58uXw8/NT7v+8VdrX14cDBw6gtrYWgYGBqK+v\nR1hYGPbv3w8nJydERkZi+/btM66eqVQqHDx4EOHh4XB1dcWuXbvQ3d39D0aciOYCBmdEZDfh4eGo\nqKhAcXExdDod9Ho93r9/D+DvQCYpKQn+/v7w8vJCQUHBlC08nU6n/K1Wq23Srq6uGBsbU9I+Pj5Q\nq9VKOiQkRGnrR/39/bh48SJ8fHyU6+3bt9PmjYuLQ3Z2No4dOwadTofMzEyYzeZpn3V0dBTbtm1D\nSUkJ1q9fr7T18OFDm7YMBgMGBgZmHLMfgz+1Wm3zjEQ0PzA4IyK70uv1aGtrQ39/P1QqFXJzcwH8\n/SqKFStW4MWLFxgdHUVJSQkmJydnXe/Ppy9NJhPGx8eVdH9/PwICAqaUCw4ORkFBAUwmk3KNjY0h\nJSVl2nZycnLQ2dmJnp4e9PX14cKFC1PyTE5OYvfu3YiPj8eRI0ds2oqJibFpy2w2o6qqatbPSUTz\nD4MzIrKbvr4+tLS0wGKxwMXFBa6urnB2dgYAjI2NwdPTE25ubujt7Z3Vqyl+3Eac7vRlUVERrFYr\n2tra0NDQgJ07dyp5v+dPT0/HlStX0NHRARHB58+f0dDQMO0KVWdnJx4+fAir1Qo3Nzeb/v/YfkFB\nAcbHx1FRUWFTPikpCX19fbh9+zasViusVisePXqE3t7eWT0jEc1PDM6IyG4sFgvy8/OxePFi+Pv7\nY2hoCKWlpQCA8vJyGAwGaDQaZGRkIDU11WY1bLr3kv18/8e0n5+fcvIzLS0NV69exbJly6bkjYqK\nwvXr15GdnQ2tVoulS5cqJyt/9unTJ2RkZECr1SI0NBS+vr44derUlDpramqU7cvvJzaNRiM8PDzQ\n1NSEmpoaBAYGwt/fH/n5+dMePpjNMxLR/KAS/htGRPNca2sr0tLS8ObNG3t3hYjov+LKGREREZED\nYXBGRH8Ebv8R0VzBbU0iIiIiB8KVMyIiIiIHwuCMiIiIyIEwOCMiIiJyIAzOiIiIiBwIgzMiIiIi\nB/IfaLkgtnNsZy4AAAAASUVORK5CYII=\n", "text": [ - "" + "" ] } ], - "prompt_number": 59 + "prompt_number": 27 }, { "cell_type": "markdown", @@ -1791,7 +1833,8 @@ "source": [ "
\n", "
\n", - "The improvement is pretty significant when static type declarations are used. One more experiment to see by how much we could improve our \"classic least squares\" code via Cython compared to the initial Python implementation.\n", + "The improvement is pretty significant when static type declarations are used. \n", + "One more experiment to see by how much we could improve our \"classic least squares\" code via Cython compared to the initial Python implementation:\n", "
\n", "
" ] @@ -1809,7 +1852,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 60 + "prompt_number": 30 }, { "cell_type": "code", @@ -1832,20 +1875,30 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 61 + "prompt_number": 31 }, { "cell_type": "code", "collapsed": false, "input": [ - "#%pylab inline\n", - "#import matplotlib.pyplot as plt\n", + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", "\n", "x_pos = np.arange(len(funcs[1:]))\n", "plt.bar(x_pos, times_rel, align='center', alpha=0.5, color=\"green\")\n", "plt.xticks(x_pos, labels[1:], rotation=90)\n", - "plt.ylabel('relative performance gain')\n", - "plt.title('Performance gain compared to the classic least square implementation')\n", + "plt.ylabel('rel. performance gain')\n", + "plt.title('Performance gain compared to the classic least square'\\\n", + " '(n={})'.format(len(x)))\n", "plt.grid()\n", "plt.show()" ], @@ -1855,13 +1908,13 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\n", + "png": "iVBORw0KGgoAAAANSUhEUgAAAdUAAAHnCAYAAADuC8dRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdUFPcWB/DvIEhHepGuIGAJaNBn1NhiLyHYY8WWRJNn\nNM0WItanSSwxaiwxYkQxsUejGGM3MZYoJCoqlgUsoKCiokjxvj88zDICiro4uz/u5xzOYX87O3vv\nlrk7c6dIRERgjDHG2AszUjsAxhhjTBRcVBljjDEd4aLKGGOM6QgXVcYYY0xHuKgyxhhjOsJFlTHG\nGNMRVYtqfn4+Bg0aBEdHRxgZGWHfvn1qhiOsPXv2wMjICFeuXFE7FKFERESgdevWqsYQFRUFf39/\nVZ7bx8cHU6dOfWnP17x5c7zzzjvP/XiNRgMjIyP8+eefOoyKPY6I8Oqrr2LNmjVqh6IzMTExaNiw\nYZmmfWpRjYiIgJGREYyMjGBiYgIfHx8MGzYMN27ceOFA161bh9jYWGzZsgVpaWl47bXXXnierLjG\njRsjLS0Nbm5uaociHEmSSr3v0qVLOvuxqMt56YokSU/MX9c2btyIWbNmvbTn0xU/Pz9MnDhR7TBe\nmlWrVuHBgwfo3r17uT5P0dpU+FepUiU8fPhQMd3WrVsREhICMzMz+Pr6Yvbs2cXmdejQITRq1Ajm\n5uaoWrUqxo0bp5hP7969cfPmTaxbt+6pcZVpTbVp06ZIS0tDcnIy5s6di/Xr16N///5leWiJcnNz\nAQBJSUlwd3dHw4YN4ezsDBMTkxeaHyuZiYkJnJ2dX+oC0FDk5+e/0OPLcu4UXZ5fpSKfq8XW1hZW\nVlZqh/HMRPjePcsyds6cORg8eHA5RvOIJElybSr8u3r1KoyMtGXt6NGjCAsLQ8eOHZGQkICoqCiM\nGzcOixYtkqdJTU1F69atERQUhGPHjuG7777DokWLMH78eHkaIyMjDBgwAHPnzn16YPQUAwYMoFat\nWinGpk6dSpUqVaKcnBwiIoqNjaXg4GAyMzMjHx8f+uijjyg7O1uevlmzZjR48GD6/PPPyc3NjVxd\nXal58+YkSZL85+vrS0REubm5NHr0aHJ3d6fKlStTzZo1adWqVYrnlySJ5s6dS2+//TZVqVKFevbs\nScuWLSNjY2PavXs31a5dm8zNzalFixZ09epV2rVrFwUHB5OlpSW1atWKLl++LM/rwoULFB4eTlWr\nViULCwuqU6cOrVixQvF8zZo1oyFDhtCkSZPI1dWV7O3tqX///nT37l3FdKtXr6Z69eqRmZkZOTg4\nUPv27enmzZvy/XPnzqWAgAAyMzMjf39/mjp1KuXn5z/x9f/999+pdu3aZGZmRiEhIbRv3z6SJIli\nYmLkacaNG0dBQUFkYWFBnp6e9N5771FWVpZ8/+7du0mSJDnvwts7duyg119/nSwsLKhmzZq0bdu2\nJ8ZCRLRjxw5q0qQJWVhYUJUqVahZs2Z0/vx5+f6vvvqKfH19qXLlylS9enWaM2eO4vHe3t4UGRlJ\n7733HlWpUoVcXFxowYIFdP/+fRo+fDjZ2dmRu7s7zZs3T/E4SZLom2++oS5dupClpSW5u7vTN998\no5hmzpw5FBISQlZWVuTq6kq9evWiq1evFnsdfv31V2rcuDGZmZnRwoULy/TeZGZmUo8ePcjS0pJc\nXFzo888/p/79+xf7bjwec0mfcSKi6OhoCgoKosqVK5OHhwd9/vnnT/wslDavCRMmkJ+fH23atIkC\nAgLI0tKSmjdvTklJSYrHHz16lFq3bk1WVlbk5OREXbp0oeTk5FKfj4goLy+PoqKiqFq1amRqakru\n7u703//+V77fx8eHpk6dKt9euXIlNWjQgKpUqUKOjo7UsWNHOnv2rGKeU6dOlefn5OREbdu2pfv3\n7xMRUWpqKnXp0oUcHR3JzMyMqlWrRl999ZX82MLvYVHz5s2joKAgMjU1JWdnZ+ratWup+Vy8eJEk\nSaI//vhDHktLS6MBAwaQk5MTWVtbU+PGjWnfvn2Kxw0ZMoSqV69O5ubmVK1aNRo3bhw9ePBAvv9J\ncTdr1qzYe1fa637ixAlq06YN2drakqWlJQUFBSmWRRqNhtq2bUvm5ubk6elJc+fOLfaaeHt705Qp\nUxTzHTx4MDVv3ly+/dtvv1GzZs3I3t5e/g4fPnxY8ZjHl7G9evWSH9uoUSMyNzcnd3d3GjhwIGVm\nZsqPO3PmDEmSRBcvXiw2vwULFlDfvn3J2tqaPDw86H//+1+Jr0NZlVSbHvf2229T48aNFWOffvop\n+fj4yLfHjh1Lnp6eimnmz59PlpaWdO/ePXns5MmTJEkSpaSkPPE5y1RUW7durRibOXMmSZJEd+/e\npWXLlpGdnR3FxMTQxYsXad++ffTKK69Qv3795OmbNWtG1tbWNGzYMEpMTKQTJ07QjRs36JNPPiFf\n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\n", "text": [ - "" + "" ] } ], - "prompt_number": 63 + "prompt_number": 35 }, { "cell_type": "markdown", @@ -1897,7 +1950,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "List, set and dictionary comprehensions in Python do not only look prettier and are easier to read (at least most of the time) than nested loop structures, but they also come with some small performance benefits. \n", + "In Python, we have those wonderful list, set, and dictionary comprehensions, which do not only look prettier and are easier to read (at least most of the time) than nested loop structures, but they also additionally come with some small performance benefits. \n", "Does this also apply in Cython? Let's check it out." ] }, @@ -2347,8 +2400,17 @@ "cell_type": "code", "collapsed": false, "input": [ - "#%pylab inline\n", - "#import matplotlib.pyplot as plt\n", + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", "\n", "labels = [('cy_lstsqr', 'Cython implementation'), \n", " ('lin_lstsqr_mat', 'numpy matrix equation'),\n", diff --git a/benchmarks/cython_least_squares.ipynb b/benchmarks/cython_least_squares.ipynb index 2e97429..f1c57d5 100644 --- a/benchmarks/cython_least_squares.ipynb +++ b/benchmarks/cython_least_squares.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:b8a2adab4cfa8ac1064656d4b3e3121a2acc1060e034c98ce29986312939c9ac" + "signature": "sha256:bbbdc8e390979922204161079c12c6b2020e8457991ef30ddd3766fb3c4503e6" }, "nbformat": 3, "nbformat_minor": 0, @@ -90,7 +90,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "![](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/cython_vs_chart.png) \n", + "![Performance vs. Productivity for different programming languages](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/cython_vs_chart.png) \n", "(Note that this chart just reflects my rather objective thoughts after experimenting with Cython, and it is not based on real numbers or benchmarks.)\n", "
\n", "
\n", @@ -132,7 +132,7 @@ "source": [ "In more mathematical terms, our goal is to compute the best fit to *n* points $(x_i, y_i)$ with $i=1,2,...n,$ via linear equation of the form \n", "$f(x) = a\\cdot x + b$. \n", - "Here, we assume that the y-component is functionally dependent on the x-component. \n", + "We further have to assume that the y-component is functionally dependent on the x-component. \n", "In a cartesian coordinate system, $b$ is the intercept of the straight line with the y-axis, and $a$ is the slope of this line." ] }, @@ -280,7 +280,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 36 + "prompt_number": 1 }, { "cell_type": "markdown", @@ -301,7 +301,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Next, we will calculate the parameters separately, using only standard library functions in Python, which I will call the \"classic approach\"." + "Next, we will calculate the parameters separately, using standard library functions in Python only, which I will call the \"classic approach\"." ] }, { @@ -331,7 +331,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 37 + "prompt_number": 2 }, { "cell_type": "markdown", @@ -352,7 +352,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "For our convenience, `numpy` has a function that can also compute the leat squares solution of a linear matrix equation. For more information, please refer to the [documentation](http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html)." + "For our convenience, `numpy` has a function that can computes the least squares solution of a linear matrix equation. For more information, please refer to the [documentation](http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html)." ] }, { @@ -367,7 +367,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 38 + "prompt_number": 3 }, { "cell_type": "markdown", @@ -388,7 +388,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The last approach is using `scipy.stats.linregress()`, which returns a tuple of 5 different attributes, where the 1st value in the tuple is the slope, and the second value is the y-axis intercept, respectively. The documentation for this function can be found [here](http://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.stats.linregress.html)." + "Also scipy has a least squares function, `scipy.stats.linregress()`, which returns a tuple of 5 different attributes, where the 1st value in the tuple is the slope, and the second value is the y-axis intercept, respectively. \n", + "The documentation for this function can be found [here](http://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.stats.linregress.html)." ] }, { @@ -404,7 +405,33 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 39 + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Teaser" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "The following plot below should give you an impression of how the performance of the 4 different approaches will compare to each other at the end of this article.\n", + "\n", + "![Performance of the final Cython implemenation of the least squares fit](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/cython_final_leastsqr.png)\n", + "
" + ] }, { "cell_type": "markdown", @@ -433,12 +460,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In order to test our different least squares fit implementation, we will generate some sample data: \n", + "In order to test our different least squares fit implementations, we will generate some sample data: \n", "- 500 sample points for the x-component within the range [0,500) \n", "- 500 sample points for the y-component within the range [100,600) \n", "\n", "where each sample point is multiplied by a random value within\n", - "the range [0.8, 12)." + "the range [0.8, 12) to simulate some scatter in our dataset." ] }, { @@ -454,7 +481,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 40 + "prompt_number": 5 }, { "cell_type": "markdown", @@ -476,15 +503,25 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "To check how our dataset is distributed, and how the straight line, which we obtain via the least square fit method, we will plot it in a scatter plot. \n", - "Note that we are using our \"matrix approach\" here for simplicity, but after plotting the data, we will check whether all of the four different implementations yield the same parameters." + "To check how our dataset is distributed, and how the least squares regression line looks like, we will plot the results in a scatter plot. \n", + "Note that we are only using our \"matrix approach\" to visualize the results - for simplicity. We expect all 4 approaches to produce similar results, which we will confirm after visualizing the data." ] }, { "cell_type": "code", "collapsed": false, "input": [ - "%pylab inline\n", + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 7 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ "from matplotlib import pyplot as plt\n", "\n", "slope, intercept = lin_lstsqr_mat(x, y)\n", @@ -514,11 +551,11 @@ "output_type": "display_data", "png": "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\nRUdHU7duXf0+np6erz3CliQZg7W1tfwyWsTl5TDIkmQM+ZLo1Wo1W7duzfLZ39fpiPU8X19frl+/\nnucxSpIkSVJB5ePjw7Vr13K0b75cut+xYwc1atTAxcUF0J3FP+tZGhMTQ4kSJQDw8PDI8BzynTt3\n8PDwyFDW9evX9Y/2vIk/M2bMMHoMsv2y7bL9sv2y/fn7k5sT3HxJ9OvWrdNftgfo0KEDq1atAmDV\nqlV06tRJv3z9+vWo1Wpu3rzJ1atXqV27dn6EKEmSJElFksEv3SclJbFnzx6+//57/bLJkyfTvXt3\nQkJC9I/Xge456O7du+uHwfz2229lRxhJkiRJygWDJ3obG5sMYz2DbljIPXv2ZLn91KlTsxzeVNJp\n0qSJsUMwqje5/W9y20G2X7a/ibFDKLQMOmCOISgUCgpZyJIkSZKUK7nJfXIIXEmSJEkqwmSilyRJ\nkqQiTCZ6SZIkSSrCZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIkwmekmSJEkqwmSilyRJkqQiTCZ6\nSZIkSSrCZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIkwmekmSJEkqwmSilyRJkqQiTCZ6SZIkSSrC\nZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIszM2AFIkiRJWYuNjWXHjh2YmJjQtm1bnJycjB2SVAgp\nhBDC2EFkh0KhoJCFLEmSlG03btygdu1AUlLqAOnY2p7nzJkjuLu750v9f/75JzNnzichIYn+/bvQ\nv3/ffKlXylpucp88o5ckSSqAJk78mEePRqDVfgRAauqHTJv2KStWfGvwuv/880/q1GlCSso0wINj\nxz7m8eMERo9+z+B1S3lP3qOXJEkqgKKi7qHV1tC/Tk+vwe3bdw1e78OHDwkMbEVKyhBgAtADlWo1\n8+d/Y/C6AU6cOMHIkWMZO/Z9/v7773yps6iTiV6SJKkAatWqMUrlF8Bj4CFK5Ve0bh1o8HqnTp1N\nQoInYPrcUpN8uWW6f/9+mjZtz7JlJVm8WEmtWo25ePGiwest6mSilyRJKoA+/ngy77zjg6lpCczM\nPBgwoA7jx482eL2XLt1Aq+0P/AB8A/yCiUkPxo4dZvC6P/poHirVV8BkhJhNUtJ4Pv98scHrLepk\nopckSSqAzM3NWb36O1JTVaSkJPHttwsxMTH8n+yGDWtgbb0bCAMOYGLyPs2a+TNx4liD152cnAIU\n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\nYII=\n", "text": [ - "" + "" ] } ], - "prompt_number": 42 + "prompt_number": 8 }, { "cell_type": "markdown", @@ -540,7 +577,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As mentioned above, let us confirm that the different implementation computed the same parameters (i.e., slope and y-axis intercept) as solution for the linear equation." + "As mentioned above, let us now confirm that the different implementations computed the same parameters (i.e., slope and y-axis intercept) as solution of the linear equation." ] }, { @@ -580,7 +617,7 @@ ] } ], - "prompt_number": 43 + "prompt_number": 9 }, { "cell_type": "markdown", @@ -602,7 +639,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "For a first impression how the performances of the different least squares implementations compare against each other, let us do a quick benchmark using the `timeit` module via IPython's `%timeit` magic." + "To get an initial impression of how the performances of the different least squares implementations compare against each other, let us do a quick benchmark using the `timeit` module via IPython's `%timeit` magic." ] }, { @@ -626,7 +663,7 @@ "stream": "stdout", "text": [ "\n", - "matrix approach: 10000 loops, best of 3: 163 \u00b5s per loop" + "matrix approach: 10000 loops, best of 3: 158 \u00b5s per loop" ] }, { @@ -635,7 +672,7 @@ "text": [ "\n", "\n", - "classic approach: 1000 loops, best of 3: 1.55 ms per loop" + "classic approach: 1000 loops, best of 3: 1.6 ms per loop" ] }, { @@ -644,7 +681,7 @@ "text": [ "\n", "\n", - "numpy function: 1000 loops, best of 3: 221 \u00b5s per loop" + "numpy function: 1000 loops, best of 3: 217 \u00b5s per loop" ] }, { @@ -653,7 +690,7 @@ "text": [ "\n", "\n", - "scipy function: 1000 loops, best of 3: 362 \u00b5s per loop" + "scipy function: 1000 loops, best of 3: 366 \u00b5s per loop" ] }, { @@ -664,14 +701,14 @@ ] } ], - "prompt_number": 44 + "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", - "The timing above indicates, that the \"classic\" approach (Python's standard library functions only) is significantly worse in performance than the other implemenations - roughly by a magnitude of 10." + "The timing above indicates that the \"classic\" approach (Python's standard library functions only) is significantly worse in performance than the other implemenations - roughly by a magnitude of 10. However, we should keep in mind that this experiment was done for a fixed sample size n=500." ] }, { @@ -702,12 +739,12 @@ "metadata": {}, "source": [ "Maybe we can speed things up a little bit via [Cython's C-extensions for Python](http://cython.org). Cython is basically a hybrid between C and Python and can be pictured as compiled Python code with type declarations. \n", - "Since we are working in an IPython notebook here, we can make use of the IPython magic: It will automatically convert it to C code, compile it, and load the function. \n", - "Just to be thorough, let us also compile the other functions, which already use numpy objects.\n", + "Since we are working in an IPython notebook here, we can make use of the very convenient *IPython magic*: It will take care of the conversion to C code, the compilation, and eventually the loading of the function. \n", + "Let us also compile the functions for the other 3 least squares approaches - those already use numpy objects and therefore we don't expect any performance gain here, but it is good to be thorough.\n", "\n", "**Note** \n", - "Of course Cython has much more horsepower under its hood - more than I am showing in this article (for example, I am not using Cython's type definitions via `cdef` here). Here, I want to focus on how to speed up existing Python code by making only minimal changes to it. \n", - "[In a later section - Appendix II](#type_declarations) We will see how static type declarations can further improve the performance via Cython." + "Of course Cython has much more horsepower under its hood - more than I am showing in this section of this article (for example, I am not using Cython's type definitions via `cdef` here, but we will get to it [in a later section - Appendix II](#type_declarations)). \n", + "The focus of this section should be on how to speed up existing Python code by making only minimal changes to it. " ] }, { @@ -718,17 +755,8 @@ ], "language": "python", "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "The cythonmagic extension is already loaded. To reload it, use:\n", - " %reload_ext cythonmagic\n" - ] - } - ], - "prompt_number": 45 + "outputs": [], + "prompt_number": 11 }, { "cell_type": "code", @@ -766,7 +794,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 46 + "prompt_number": 12 }, { "cell_type": "markdown", @@ -809,7 +837,7 @@ "\n", "\n", "matrix approach: \n", - "10000 loops, best of 3: 165 \u00b5s per loop" + "10000 loops, best of 3: 159 \u00b5s per loop" ] }, { @@ -817,7 +845,7 @@ "stream": "stdout", "text": [ "\n", - "10000 loops, best of 3: 166 \u00b5s per loop" + "10000 loops, best of 3: 159 \u00b5s per loop" ] }, { @@ -828,7 +856,7 @@ "\n", "\n", "classic approach: \n", - "1000 loops, best of 3: 1.59 ms per loop" + "1000 loops, best of 3: 1.62 ms per loop" ] }, { @@ -836,7 +864,7 @@ "stream": "stdout", "text": [ "\n", - "10000 loops, best of 3: 127 \u00b5s per loop" + "10000 loops, best of 3: 126 \u00b5s per loop" ] }, { @@ -847,7 +875,7 @@ "\n", "\n", "numpy function: \n", - "1000 loops, best of 3: 220 \u00b5s per loop" + "1000 loops, best of 3: 218 \u00b5s per loop" ] }, { @@ -855,7 +883,7 @@ "stream": "stdout", "text": [ "\n", - "1000 loops, best of 3: 221 \u00b5s per loop" + "1000 loops, best of 3: 220 \u00b5s per loop" ] }, { @@ -866,7 +894,7 @@ "\n", "\n", "scipy function: \n", - "1000 loops, best of 3: 361 \u00b5s per loop" + "1000 loops, best of 3: 372 \u00b5s per loop" ] }, { @@ -874,7 +902,7 @@ "stream": "stdout", "text": [ "\n", - "1000 loops, best of 3: 367 \u00b5s per loop" + "1000 loops, best of 3: 354 \u00b5s per loop" ] }, { @@ -885,7 +913,7 @@ ] } ], - "prompt_number": 47 + "prompt_number": 13 }, { "cell_type": "markdown", @@ -893,8 +921,8 @@ "source": [ "
\n", "
\n", - "As we've seen before, our \"classic\" implementation of the least square method is pretty slow compared to using numpy's functions. This is not surprising, since numpy is highly optmized and uses compiled C/C++ and Fortran code already. This explains why there is no significant difference if we used Cython to compile the numpy-objects-containing functions. \n", - "However, we were able to speed up the \"classic approach\" quite significantly, roughly by 1500%.\n", + "As we've seen before, our \"classic\" implementation of the least square method is pretty slow compared to the other approaches which use Numpy objects. This is not surprising, since Numpy is highly optimized and uses compiled C/C++ and Fortran code already. This explains why there is no significant difference if we used Cython to compile the numpy-objects-containing functions. \n", + "However, we were able to speed up the \"classic approach\" quite significantly via Cython, roughly by 1500%.\n", "\n", "The following 2 code blocks are just to visualize our results in a bar plot." ] @@ -919,14 +947,13 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 50 + "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ - "#%pylab inline\n", - "#import matplotlib.pyplot as plt\n", + "import matplotlib.pyplot as plt\n", "\n", "x_pos = np.arange(len(funcs))\n", "plt.bar(x_pos, times, align='center', alpha=0.5)\n", @@ -950,21 +977,21 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\ntbWllJQUIio+SFhaWgo7dl5eHrVt25a++OILKiwspBs3bpCLiwsdOHCAiEjYFnFxcVRUVESffvop\nderUqdzYylOyICgUihcu68yZM5SUlEQKhYJkMhm5u7vT6tWriYgoPj6e2rVrR48fPyYiotTUVOEg\nWHp/K+1F7x06dCgNHTqU8vLy6K+//iJ7e3vq2rUrEZVfEPz9/emHH34gouKCcOjQISooKKB79+5R\nt27daPr06cK0Tk5O1KZNG7p9+zY9e/asWvtU6WWVzlMqlVbaZFRyeuXn4IsvvhA+QzY2NvTOO+9Q\nbm4uXbp0iUxNTUkmkxFR8XY3MjKiX3/9leRyOS1fvpyaNm1KcrmciFS3++rVq8nX15cyMjKooKCA\nwsLCKCQkRGUdTpo0iZ4/f04HDx4kY2NjGjBgAN27d48yMjKoQYMGlJCQQEREu3fvJldXV0pNTSWF\nQkELFy6kzp07CzlJJBIKCgqix48f082bN6l+/foUHx9PRGU/G8r1pCz+Fy5coIYNG9Lu3buJqOxn\nh0i12en+/ftkZWVFP/30EykUCoqOjqZ69eoJxc7Pz49cXV3p6tWrlJ+fT/7+/jRr1iwiIvruu+8o\nKCiI8vPzqaioiM6ePUs5OTkVbiutKwhOTk5Ut25dsrKyIicnJ5o8eTLl5+fT0qVLyxzMevfuTf/7\n3/+IqHinnTdvnsr40NBQlTbdZs2aCR8CIqIDBw6Qs7MzERXvqMbGxsIZA1HxztirVy9heO/evVS3\nbl0qKioiIqKcnBySSCTCB7y0AQMG0Jo1a4T5m5qaqmz0Bg0aCAceU1NTunDhQpl5VJZ3SUePHqVG\njRqpvBYSEiJ8G5k3bx6NGDGi3FiJSOWgSET0/fffq3zYS374Sn+DKX3Q2rZtm3BAU5owYQLNnz+f\niIoLwujRo4VxiYmJ1KRJE5XpFy9eTGPGjBFif/PNN4VxygNHebGVp2RBqGxZpa1atYreeustIiI6\nfPgwNW/enBITE8u0+Zbe30o7cuRIue+Vy+VkZGQkFG4iotmzZ7/wDKH0QbqkXbt2UZs2bYRhZ2dn\nlbPR6uxTymUpz0ZK51mVPoTS05uampb5DCUnJwvTt2vXjvbs2UNExdvd19dXGFdUVESNGzemY8eO\nCbkpt7u7u7vKPnDnzh0yMjIihUIhrMM7d+4I421sbFTOWgcNGiR8Xvv06aOyfhUKBZmZmdHNmzeJ\n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\n", + "png": "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\n", "text": [ - "" + "" ] }, { "metadata": {}, "output_type": "display_data", - "png": "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\n7do1yszMpIiICOrXrx8R/bsTDRs2jHJzc2n79u1kZmZG3bp1o3v37tGtW7fI1dWV9u7dK7bJxMSE\n5syZQ2q1mn7//Xeys7MTd8qXyf/Z13fOnDnUpEkTunXrFuXl5dGQIUMoMjKSiIguXLhA1tbWtH//\nfsrNzaXRo0eTiYlJsQWPiIq81/Ly8qhatWo0ZcoUys/Pp927d5ONjQ0lJiYWO/+z2WsJgkCdO3em\nx48f0/Xr18nFxYW2bt1KRETr16+n6tWr08WLF0mj0dC3335LoaGhxS5bpVKRjY0NrV69mtRqNT14\n8IBOnz4ttlu7s5f0/sjMzCRbW1tKSkoiIqKUlBS6cOECERH17t2bJk+eTERP34Pa1167DdqC97z3\neGHPFjyNRkP16tWjiRMnUn5+Pl29epX8/Pxo27ZtRPT0A96RI0dIo9GQSqUif39/mjNnDhERbd26\nlerXry9+wLp48SLduXOn2NersJLm7dWrF/Xq1Yuys7Pp/Pnz5OnpSc2bNyei4gves6/t5cuXaefO\nnZSXl0f37t2jFi1a0KhRo8Tn+vj4UHBwMN28eZOePHnySvs/ke4Jw6sev1q2bEmenp504cIFysrK\nou7du1Pfvn2L3a5u3brR0KFDKTs7m+7evUuNGjUSP2Bq99PY2FgqKCigcePGkaenp/hhZPv27WRj\nY0NZWVlE9PSDRdeuXenhw4eUkZFBnTt3pv/85z/ie6Gk42Zxr+OaNWvE1+r3338nKysrSklJISKi\n2NhY8cOJ1rPL2LVrFzk7O9OpU6coNzeXRowYQS1atBCfW9I+WZwXFjwfHx+ytrYme3t78vHxoY8/\n/phycnJo6tSp4oFS6+233xY/KYSFhdGECROKbMizlbtatWo6Zynbtm0jX19fInoarJmZmc4OOGHC\nBGrbtq04vXHjRrK2tqaCggIiIkpPTydBEMSdorBu3brR3LlzxeVbWFjo7Aiurq7izmphYUFnz54t\nsowXbfez9u7dS56enjqPNWvW7Lk79qlTp8RPOURFC1716tXFv2VlZZEgCJSamlpkOQcPHiQXFxed\nbdN66623aOHCheJ0YmIimZqakkajEXeiZz9BOTk50R9//CFOd+/eXTyALVmypEjRbdSoES1btqzY\n7Sucf+HX19/fX6eA3b59m0xNTUmtVtN///tfsfhpt9/MzKzEgvfse23fvn3k7u6u85zIyEiKiYkp\ndv6wsDDxLEBLEASd4vHuu+/StGnTiIioXbt2OgVSo9GQpaUlXb9+vciyJ0+eTBERES/V7mc9+/7I\nzMwke3t7Wrt2LWVnZ+s8r3///jR48GCds8Fnt+HKlSslvscLe7bgHT58mLy9vYtsz4ABA4qdd/bs\n2fTOO+8Q0dODV40aNejw4cNF3pslbTcR0e7du4udV61Wk6mpqc4Hl7Fjx5Z4hlfchxmtdevWUXBw\nsDjt6+ur0/PzKvu/dv5nC96rHL/CwsLEQkP09IzIzMyMCgoKdLYrJSWFzM3Ndc7OV65cSa1atSKi\np/vpG2+8If7t7NmzJAgC3b17V3zMycmJzpw5QwUFBWRlZSV+KCJ6ejzRFuKSjptEL34diYiCgoJo\nw4YNYttKKngDBw6kMWPGiH/LzMwkU1NTsfekuH1y6tSpz133S43hbdiwAQ8fPoRKpcL8+fNRqVIl\nJCcnY82aNXBwcBD/HThwACkpKeK8L7qy6/bt2/Dx8RGnvb29cfv2bXHaxcUFZmZmOvO4urqK/29h\nYQFnZ2dxvMXCwgIAkJmZCQDYsmULQkJC4OTkBAcHB8TFxeHBgwfi/E5OTjAy+jcCS0tLZGZm4v79\n+3jy5AmqVatWpM0vs93Pbp+np6fOY15eXuIYTXZ2NoYMGQJfX1/Y2dmhZcuWePz48XPHcNzd3XXa\n+uy2PuvGjRvw8fHR2TatO3fuFMlcrVYjNTVVfMzNzU38fwsLiyLTWVlZ4nTh7fPx8cGdO3cAvDj/\nwq+vSqXCO++8I+YaEBAAExMTpKam4s6dO6hSpYrO9js5ORUXU7Fu375d5P3o4+ODW7duPXee4sbx\nCr8G2vyTk5MxcuRIse3athW3/Js3b8LPz++FbS7p/WFlZYXff/8dP/74Izw8PNCpUyckJiYCAKZP\nnw4iQqNGjVC7dm0sWbKkyLJLeo+XJDk5Gbdv39Z5/0+ZMgV3794FACQlJaFTp06oXLky7Ozs8NVX\nX4mv+VtvvYXhw4fj448/hpubG4YMGfLSF9G0atWq2Hnv3bsHtVqt89p6e3u/9Pakpqaid+/eqFKl\nCuzs7NCvXz+d9yigexx7lf2/OK9y/Cq8bm9vb+Tn5+P+/fs6y0xOTkZ+fj4qV64stmno0KG4d++e\n+JzC+zDwdP979rHMzEzcu3cP2dnZqF+/vris9u3b66zzecfN51m6dCmCg4PF5Z0/f75Ixs9T+Hhl\nZWUFJycnnf3qeftkcUp9W4K3tzf69euHhw8fiv8yMjLw5Zdfis950cC/h4eHziXS169fh4eHx3Pn\nf5ULCXJzc9G9e3d8+eWXuHv3Lh4+fIgOHTq81AUBzs7OqFSpEi5fvlzkby+z3VqVK1cucsC7fv26\nuB2zZs1CUlISjh49isePH2Pv3r2gp2fdL72dxfHy8sL169eh0WiK/K24zE1MTHR2iFdRePuSk5Ph\n4eHxUvkXfj29vb2xdetWnWyzs7Ph4eGBypUr48aNG+Jzs7OzS9xpCi/bw8MDN27c0Fl/cnKyThEt\naf4X8fb2xqJFi3TanpWVhZCQkCLP9fLywpUrV17Y9he9P9q2bYvt27cjJSUFNWvWxIcffgjg6cFt\n0aJFuHXrFn766Sd89NFHRW6nKOk9XhIvLy9UrVpVZzvT09OxefNmAE8vKQ8ICMDly5fx+PFjTJo0\nSefS+REjRuD48eNISEhAUlISZsyYobPNJSluXldXV5iYmOD69evi8579f+3V5NnZ2eJjzxansWPH\nwtjYGOfPn8fjx4+xbNmyIpf6P9u2V9n/pVB4u0xNTeHs7KzzHC8vL5ibm+PBgwdimx4/foxz5869\n8vqcnZ1hYWGBhIQEcVmPHj166SvrC7+OycnJGDx4MBYsWIC0tDQ8fPgQtWvXFt/Dr1ojsrKy8ODB\ngyIftF9WqQte3759sWnTJmzfvh0ajQZPnjxBfHy8zgGw8IG78HRkZCS+/fZb3L9/H/fv38c333yD\nfv36PXedr1II8vLykJeXB2dnZxgZGWHLli3Yvn37S81rZGSEgQMHYvTo0bhz5w40Gg0OHTqEvLy8\nl9purdDQUBgbG2P+/PlQq9XYsGEDjh07Jv49MzMTFhYWsLOzQ1paGv773/++9PaVpHHjxqhcuTKi\no6ORnZ2NJ0+e4ODBgwCeZj579myoVCpkZmZi7Nix6N27d7Fng8/z7Otw9+5dzJs3D/n5+VizZg0u\nXryIDh06lCr/oUOHYuzYseJOfu/ePWzcuBEA0KNHD2zevBkHDhxAXl4exo8fX+I9SG5ubjoH+ZCQ\nEFhaWmL69OnIz89HfHw8Nm/ejN69ez93/pKKkjYHbRZDhw7F5MmTkZCQAAB4/Pgx1qxZU+x8ffr0\nwc6dO7FmzRqo1Wo8ePAAZ86cKbLMkt4fd+/exYYNG5CVlQVTU1NYWVnB2NgYALBmzRrcvHkTAGBv\nbw9BEIq8viW9x0vSqFEj2NjYYPr06cjJyYFGo8H58+dx/Phxsc02NjawtLTExYsXsXDhQvGgdvz4\ncRw5cgT5+fmwtLREpUqVxDYXfr0Ke968RkZGiIiIQExMDHJycpCQkIClS5eK63RxcYGnpyeWLVsG\njUaDxYsX67yumZmZsLKygq2tLW7duiUW4Od5lf3/dRERli9fjn/++QfZ2dkYP348evbsWaRIVK5c\nGW3btsXo0aORkZGBgoICXLlypVT3/xkZGeHDDz/EqFGjxDPEW7duvfSxs/DrmJWVBUEQ4OzsjIKC\nAixZskTnVg03NzfcvHkT+fn5Otut3QciIyOxZMkSnDlzBrm5uRg7dixCQkKeexb/ohpR6oJXpUoV\nbNiwAZMnT4arqyu8vb0xa9asEj/BF77HaNy4cWjQoAHq1KmDOnXqoEGDBhg3btxLz/+85wBPb7Cd\nN28e3n33XTg6OmLVqlXo2rVrifM+a+bMmQgMDETDhg3h5OSE//znPygoKHjudhd38DU1NcVff/2F\nX3/9FQ4ODlixYgU6deokduONGjUKOTk5cHZ2RmhoKNq3b//cNr3MtmsZGRlh06ZNuHz5Mry9veHl\n5YU//vgDADBw4ED069cPLVq0gJ+fHywtLfH999+/VCbFPadx48a4dOkSXFxc8PXXX2Pt2rVwcHAo\nVf4jR45Ely5d0LZtW9ja2qJJkyY4evQoACAgIAALFizAe++9Bw8PDzg6OpbYZT5o0CAkJCTAwcEB\nERERMDU1xaZNm7Blyxa4uLhg+PDhWLZsGWrUqFHs/CNHjsSff/4JR0dHjBo16rk5aLehW7duGDNm\nDHr37g07OzsEBgZi27Ztxc7n5eWFuLg4zJo1C05OTggODsbZs2eLLLOk90dBQQFmz54NT09PODk5\nYf/+/eL9S8ePH0dISAhsbGzQtWtXzJs3D76+vkUyf957/HnbCgDGxsbYvHkzTp8+DT8/P7i4uGDw\n4MHiGcDMmTOxcuVK2NraYvDgwTofKNLT0zF48GA4OjrC19cXzs7O4hdQFH69Citp3vnz5yMzMxPu\n7u4YOHAgBgwYoHMc+vnnnzFjxgw4OzsjISEBTZs2Ff82YcIEnDx5EnZ2dujcuTO6d+9e4j7wKvt/\ncRm+7PFL+//9+vVDVFQUKleujLy8PMybN6/Y5y5duhR5eXkICAiAo6MjevbsKZ7JvsqxAwCmTZuG\n6tWrIyQkBHZ2dmjTpg2SkpJeat7Cr2NAQAA+++wzNGnSBO7u7jh//jyaNWsmPj88PBy1atWCu7u7\n2N37bHvDw8MxceJEdO/eHR4eHrh27RpWr15dYn4lHsNKHF3UAwMGDCBXV1eqXbt2kb/NnDmTBEGg\nBw8eKNCy0mnUqBHFxsYq3QxJFDfgzJjSDOV9WdLFNax09P67NAcMGICtW7cWefzGjRvYsWOHzoCm\nPtq3bx9SUlKgVqvx22+/4fz582jXrp3SzWKMlQPEX0IgKb0veM2bN4eDg0ORx0ePHo3p06cr0KJX\nk5iYiKCgIDg4OGD27Nn4888/S32BiL4p66/BYqw0DOl9aSjboS8EKgcfIVQqFTp37ixedbRhwwbE\nx8dj9uzZqFq1Kk6cOAFHR0eFW8kYY0yfvfDLo/VNdnY2Jk+ejB07doiPlYOazRhjTGHlruBduXIF\nKpUKdevWBfD0Jt769evj6NGjOjd1AkD16tVfeGk5Y4wxXXXr1sXp06eVbobk9H4Mr7DAwECkpqbi\n2rVruHbtGqpUqYKTJ08WKXbA0+JI/7unQ5//TZgwQfE2GNI/zpOz1Nd/5SVP7X2hhkbvC15kZCRC\nQ0ORlJQELy+vIl+TZAiDuq/6g5ysZJyndDhLaXGeytL7Ls1Vq1aV+Pey/gVqxhhjhkHvz/Aqgqio\nKKWbYFA4T+lwltLiPJVVLm5LKC1BEGDAm8cYY2XCUI+dfIanB+Lj45VugkHhPKXDWUqL81QWFzzG\nGGMVAndpMsYY02Gox04+w2OMMVYhcMHTA9yvLy3OUzqcpbQ4T2VxwWOMMVYhVOgxvOiYaKQ8SpGx\nRfrL3d4dU2OmKt0MxpgeMNQxPL3/ppWylPIoBb7dfJVuhl5QrVcp3QTGGCtT3KWpB1SnVUo3waDw\nOIl0OEtpcZ7K4oLHGGOsQuCCpwd8g3yVboJBCQsLU7oJBoOzlBbnqSwueIwxxioELnh6gMfwpMXj\nJNLhLKXFeSqLCx5jjLEKgQueHuAxPGnxOIl0OEtpcZ7K4oLHGGOsQuCCpwd4DE9aPE4iHc5SWpyn\nsrjgMcYYqxC44OkBHsOTFo+TSIezlBbnqSwueIwxxioELnh6gMfwpMXjJNLhLKXFeSpL7wvewIED\n4ebmhsDAQPGxL774Av7+/qhbty4iIiLw+PFjBVvIGGOsPND7gjdgwABs3bpV57G2bdviwoULOHPm\nDGrUqIEpU6Yo1Dpp8BietHicRDqcpbQ4T2XpfcFr3rw5HBwcdB5r06YNjIyeNr1x48a4efOmEk1j\njDFWjuh9wXuRxYsXo0OHDko347XwGJ60eJxEOpyltDhPZZXrgjdp0iSYmZnhvffeU7opjDHG9JyJ\n0g0ordjYWMTFxWHXrl0lPi8qKgq+vr4AAHt7ewQFBYn96Ck3U4DT/46hac+0Kuq09tOnNh+e5uln\n6Ut7yvu0lr60JywsDPHx8YiNjQUA8XhpiAQiIqUb8SIqlQqdO3fGuXPnAABbt27FZ599hr1798LZ\n2fm58wmCgJI2L2pUFHy7+Urd3HJJtV6F2DmxSjeDMaYHXnTsLK/0vkszMjISoaGhSExMhJeXFxYv\nXowRI0YgMzMTbdq0QXBwMD766COlm/laeAxPWoU/SbPS4yylxXkqS++7NFetWlXksYEDByrQEsYY\nY+WZ3p/hVQR8H560tGMU7PVxltLiPJXFBY8xxliFwAVPD/AYnrR4nEQ6nKW0OE9lccFjjDFWIXDB\n0wM8hictHieRDmcpLc5TWVzwGGOMVQhc8PQAj+FJi8dJpMNZSovzVBYXPMYYYxUCFzw9wGN40uJx\nEulwltLiPJXFBY8xxliFwAVPD/AYnrR4nEQ6nKW0OE9lccFjjDFWIcj25dGJiYmYOXMmVCoV1Go1\ngKc/QbF79265mqC3eAxPWjxOIh3OUlqcp7JkK3g9e/bEsGHD8MEHH8DY2BjA04LHGGOMyUG2Lk1T\nU1MMGzYMjRs3RoMGDdCgQQPUr19frtXrNR7DkxaPk0iHs5QW56ks2Qpe586dsWDBAty5cwdpaWni\nP8YYY0wOAsn0O+6+vr7FdmFeu3atzNb5op+pjxoVBd9uvmW2/vJEtV6F2DmxSjeDMaYHXnTsLK9k\nG8NTqVRyrYoxxhgroswL3q5duxAeHo61a9cWe4YXERFR1k3Qe6rTKr5SU0Lx8fF8NZxEOEtpcZ7K\nKvOCt2/fPoSHh2PTpk1c8BhjjClGtjE8JfAY3svjMTzGmBaP4Ulg8+bNSEhIwJMnT8THxo8fL2cT\nGGOMVVCy3ZYwZMgQ/PHHH5g3bx6ICH/88QeSk5PlWr1e4/vwpMX3OkmHs5QW56ks2QrewYMHsXTp\nUjg6OmLChAk4fPgwEhMTXzjfwIED4ebmhsDAQPGxtLQ0tGnTBjVq1EDbtm3x6NGjsmw6Y4wxAyBb\nwbOwsAAAWFpa4tatWzAxMUFKSsoL5xswYAC2bt2q89jUqVPRpk0bJCUlITw8HFOnTi2TNsuFr9CU\nFl8FJx3OUlqcp7JkK3idOnXCw4cP8cUXX6B+/frw9fVFZGTkC+dr3rw5HBwcdB7buHEj3n//fQDA\n+++/j/Xr15dJmxljjBkO2Qre+PHj4eDggO7du0OlUuHixYuYOHFiqZaVmpoKNzc3AICbmxtSU1Ol\nbKrseAxPWjxOIh3OUlqcp7Jku0qzuBvP7ezsEBgYCFdX11IvVxCEEn91ISoqCr6+vgAAe3t7BAUF\nid0KKTdTgNP/dilqC4/c01pKrV87rd0ZtfmU12ktfWlPeZ4+ffq0XrWnvE/ra57x8fGIjY0FAPF4\naYhkuw+vY8eOOHToEFq1agXgadj16tXDtWvXMH78ePTv3/+586pUKnTu3Bnnzp0DANSsWRPx8fFw\nd3fHnTt30KpVK1y8eLHIfHwf3suT4j686JhopDx68bhsReBu746pMeV7bJlVXHwf3mvKz8/HP//8\nI3ZFpqamol+/fjhy5AhatGhRYsErrEuXLvjtt98wZswY/Pbbb+jWrVtZNZu9gpRHKfwB4n9U61VK\nN4ExVohsY3g3btwQix0AuLq64saNG3BycoKZmdlz54uMjERoaCgSExPh5eWFJUuWIDo6Gjt27ECN\nGjWwe/duREdHy7EJZYbH8KTFeUqncDcxez2cp7JkO8Nr1aoVOnbsiHfffRdEhLVr1yIsLAxZWVmw\nt7d/7nyrVq0q9vGdO3eWVVMZY4wZINkK3oIFC7B27VocOHAAwNPbCbp37w5BELBnzx65mqGX+D48\naXGe0tFe4MCkwXkqS7aCJwgCevTogR49esi1SsYYY0wk2xgeez4ec5IW5ykdHnOSFuepLC54jDHG\nKgRZC152dvZLfWF0RcNjTtLiPKXDY07S4jyVJVvB27hxI4KDg/H2228DAE6dOoUuXbrItXrGGGMV\nnGwFLyYmBkeOHBG/CDo4OBhXr16Va/V6jcecpMV5SofHnKTFeSpLtoJnampa5H47IyMeQmSMMSYP\n2SpOrVq1sGLFCqjValy6dAkjRoxAaGioXKvXazzmJC3OUzo85iQtzlNZshW877//HhcuXIC5uTki\nIyNha2uLOXPmyLV6xhhjFZxsBc/KygqTJ0/G8ePHcfz4cUyaNAmVKlWSa/V6jcecpMV5SofHnKTF\neSpLtoLXunVrPHr0SJxOS0sTr9hkjDHGyppsBe/+/fs6F604OjqW+18qlwqPOUmL85QOjzlJi/NU\nlmwFz9hOClWnAAAgAElEQVTYGMnJyeK0SqXiqzQZY4zJRraKM2nSJDRv3hx9+/ZF37590aJFC0ye\nPFmu1es1HnOSFucpHR5zkhbnqSzZfi2hXbt2OHHiBA4fPgxBEDBnzhw4OzvLtXrGGGMVnGwFDwDy\n8vLg6OgItVqNhIQEAECLFi3kbIJe4jEnaXGe0uExJ2lxnsqSreCNGTMGv//+OwICAmBsbCw+zgWP\nMcaYHGQreOvWrUNiYiLMzc3lWmW5oTqt4rMSCXGe0omPj+ezEglxnsqS7aKVatWqIS8vT67VMcYY\nYzpkO8OzsLBAUFAQwsPDxbM8QRAwb948uZqgt/hsRFqcp3T4bERanKeyZCt4Xbp0KfL7d4IgyLV6\nxhhjFZxsBS8qKkquVZU7POYkLc5TOjzmJC3OU1myjeElJSWhR48eCAgIQNWqVVG1alX4+fm91jKn\nTJmCWrVqITAwEO+99x5yc3Mlai1jjDFDI1vBGzBgAIYOHQoTExPEx8fj/fffR58+fUq9PJVKhZ9/\n/hknT57EuXPnoNFosHr1aglbLB8+G5EW5ykdPhuRFuepLNkKXk5ODlq3bg0igo+PD2JiYvD333+X\nenm2trYwNTVFdnY21Go1srOz4enpKWGLGWOMGRLZCl6lSpWg0WhQvXp1zJ8/H3/99ReysrJKvTxH\nR0d89tln8Pb2hoeHB+zt7dG6dWsJWywf/u5HaXGe0uHvfpQW56ks2S5amTNnDrKzszFv3jx8/fXX\nSE9Px2+//Vbq5V25cgVz5syBSqWCnZ0devbsiRUrVhTpJo2KioKvry8AwN7eHkFBQWK3QsrNFOD0\nv11g2gOl3NNaSq1fO63dGbX5vOo056k7/bp56sP06dOn9ao95X1aX/OMj49HbGwsAIjHS0MkEBEp\n3YjS+P3337Fjxw788ssvAIBly5bh8OHDWLBggfgcQRBQ0uZFjYqCbzffsm5quaBar0LsnNjXWgbn\n+S8p8mRMKS86dpZXsnVpHjt2DO+88w6Cg4MRGBiIwMBA1KlTp9TLq1mzJg4fPoycnBwQEXbu3ImA\ngAAJW8wYY8yQyNal2adPH8ycORO1a9eW5Idf69ati/79+6NBgwYwMjJCvXr1MHjwYAlaKj++b0xa\nnKd0+L4xaXGeypKt4Lm4uBT5ppXX9eWXX+LLL7+UdJmMMcYMk2wFb8KECRg0aBBat24NMzMzAE/7\niSMiIuRqgt7isxFpcZ7S4bMRaXGeypKt4P32229ITEyEWq3W6dLkgscYY0wOshW848eP4+LFi/yF\n0cXgMSdpcZ7S4TEnaXGeypLtKs3Q0FAkJCTItTrGGGNMh2xneIcOHUJQUBCqVq2q83t4Z8+elasJ\neovPRqTFeUqHz0akxXkqS5aCR0RYtGgRvL295VgdY4wxVoRsZ3gfffQRzp8/L9fqyhUec5KWoeQZ\nHRONlEcpirYh5WYK3Ku4K9oGAHC3d8fUmKlKN+O18RiesmQpeIIgoH79+jh69CgaNWokxyoZK/dS\nHqUo/1Vtp/Wji1i1XqV0E5gBkO0M7/Dhw1i+fDl8fHxgZWUFgMfwtPThgGJIOE/pcJbS4rM7ZclW\n8LZt2wYA4m0JhvjFpIwxxvSXbLcl+Pr64tGjR9i4cSM2bdqEx48fG/TPULwK/v02aXGe0uEspcW/\nh6cs2Qre3Llz0bdvX9y7dw+pqano27cv5s2bJ9fqGWOMVXCydWn+8ssvOHLkiDh+Fx0djZCQEHzy\nySdyNUFv8TiJtDhP6XCW0uIxPGXJdoYHQOc7NKX4iSDGGGPsZclWdQYMGIDGjRsjJiYGEyZMQEhI\nCAYOHCjX6vUaj5NIi/OUDmcpLR7DU1aZd2levXoVfn5+GD16NFq2bIn/+7//gyAIiI2NRXBwcFmv\nnjHGGAMgQ8Hr2bMnTpw4gfDwcOzatQv169cv61WWOzxOIi3OUzqcpbR4DE9ZZV7wNBoNJk2ahMTE\nRHz33Xc6998JgoDRo0eXdRMYY4yxsh/DW716NYyNjaHRaJCRkYHMzEzxX0ZGRlmvvlzgcRJpcZ7S\n4SylxWN4yirzM7yaNWviiy++gI+PDyIjI8t6dYwxxlixZLlK09jYGDNnzpRjVeUSj5NIi/OUDmcp\nLR7DU5ZstyW0adMGM2fOxI0bN5CWlib+Y4wxxuQg2zetrF69GoIgYMGCBTqPX7t2Ta4m6C1D+f02\nfcF5SoezlBb/Hp6yZCt4KpVK8mU+evQIH3zwAS5cuABBELB48WKEhIRIvh7GGGPln2xdmllZWZg4\ncSI+/PBDAMClS5ewefPm11rmyJEj0aFDB/zzzz84e/Ys/P39pWiq7PgTtLQ4T+lwltLisztlyfrV\nYmZmZjh48CAAwMPDA1999VWpl/f48WPs379f/HoyExMT2NnZSdJWxhhjhke2gnflyhWMGTMGZmZm\nACD+akJpXbt2DS4uLhgwYADq1auHDz/8ENnZ2VI0VXZ8r5O0OE/pcJbS4vvwlCXbGJ65uTlycnLE\n6StXrsDc3LzUy1Or1Th58iTmz5+Phg0bYtSoUZg6dSq++eYbnedFRUWJPzRrb2+PoKAgsVsh5WYK\ncPrfbhvtzi33tJZS69dOa3dGbT6vOs156k4bQp4pl1MUfz2lylMfpk+fPq1X7dFOx8fHIzY2FgAM\n+oe5BXr2u77K0Pbt2zFp0iQkJCSgTZs2OHDgAGJjY9GqVatSLS8lJQVNmjQRr/L8v//7P0ydOlVn\nXFAQBJS0eVGjouDbzbdU6zc0qvUqxM6Jfa1lcJ7/4jylJUWe7OW96NhZXsl2hte2bVvUq1cPR44c\nARFh3rx5cHZ2LvXy3N3d4eXlhaSkJNSoUQM7d+5ErVq1JGwxY4wxQyLbGB4RYe/evdi5cyd2796N\n/fv3v/Yyv//+e/Tp0wd169bF2bNnMXbsWAlaKj8eJ5EW5ykdzlJaPIanLNnO8D766CNcuXIFkZGR\nICL89NNP2LFjB3744YdSL7Nu3bo4duyYhK1kjDFmqGQreHv27EFCQgKMjJ6eVEZFRSEgIECu1es1\nvtdJWpyndDhLafF9eMqSrUuzevXquH79ujh9/fp1VK9eXa7VM8YYq+BkK3jp6enw9/dHy5YtERYW\nhoCAAGRkZKBz587o0qWLXM3QSzxOIi3OUzqcpbR4DE9ZsnVpFr4/Dvj30ldBEORqBmOMsQpKtoLH\nfdfPx+Mk0uI8pcNZSouPg8qSrUuTMcYYUxIXPD3A4yTS4jylw1lKi8fwlCVrwcvOzkZiYqKcq2SM\nMcYAyFjwNm7ciODgYLz99tsAgFOnTlX4qzO1eJxEWpyndDhLafEYnrJkK3gxMTE4cuQIHBwcAADB\nwcG4evWqXKtnjDFWwclW8ExNTWFvb6+7ciMeQgR4nERqnKd0OEtp8RiesmSrOLVq1cKKFSugVqtx\n6dIljBgxAqGhoXKtnjHGWAUnW8H7/vvvceHCBZibmyMyMhK2traYM2eOXKvXazxOIi3OUzqcpbR4\nDE9Zst14npiYiMmTJ2Py5MlyrZIxxhgTyXaGN3r0aNSsWRNff/01zp8/L9dqywUeJ5EW5ykdzlJa\nPIanLNkKXnx8PPbs2QNnZ2cMGTIEgYGBmDhxolyrZ4wxVsHJeplk5cqVMXLkSPz444+oW7dusV8o\nXRHxOIm0OE/pcJbS4jE8ZclW8BISEhATE4PatWtj+PDhCA0Nxa1bt+RaPWOMsQpOtoI3cOBA2Nvb\nY9u2bdi7dy8++ugjuLq6yrV6vcbjJNLiPKXDWUqLx/CUJdtVmocPH5ZrVYwxxlgRZV7wevbsiTVr\n1iAwMLDI3wRBwNmzZ8u6CXqPx0mkxXlKx5CyjI6JRsqjFKWbgdj1sYqu393eHVNjpiraBqWUecGb\nO3cuAGDz5s0gIp2/8S+dM8bkkvIoBb7dfJVuhuJU61VKN0ExZT6G5+HhAQD44Ycf4Ovrq/Pvhx9+\nKOvVlws8TiItzlM6nKW0OE9lyXbRyvbt24s8FhcX99rL1Wg0CA4ORufOnV97WYwxxgxXmXdpLly4\nED/88AOuXLmiM46XkZGBpk2bvvby586di4CAAGRkZLz2spRiSOMk+oDzlA5nKS3OU1llXvDee+89\ntG/fHtHR0Zg2bZo4jmdjYwMnJ6fXWvbNmzcRFxeHr776Ct99950UzWWMMWagyrxL087ODr6+vli9\nejV8fHxgaWkJIyMjZGVl4fr166+17E8//RQzZswo97+rx/360uI8pcNZSovzVJZs9+Ft3LgRn332\nGW7fvg1XV1ckJyfD398fFy5cKNXyNm/eDFdXVwQHB5d4M2dUVBR8fX0BAPb29ggKChK/3iflZgpw\n+t9uBu2bUe5pLaXWr53W5qjN51WnOU/daUPIM+VyiuKvJ+cp7bTWs/nEx8cjNjb26fP/d7w0RAIV\nvlegjNSpUwe7d+9GmzZtcOrUKezZswfLli3D4sWLS7W8sWPHYtmyZTAxMcGTJ0+Qnp6O7t27Y+nS\npeJzBEEocivEs6JGRfFlyv+jWq9C7JzY11oG5/kvzlNanKd0XibLFx07yyvZ+gJNTU3h7OyMgoIC\naDQatGrVCsePHy/18iZPnowbN27g2rVrWL16Nd566y2dYscYY4w9S7aC5+DggIyMDDRv3hx9+vTB\nJ598Amtra8mWX55vYud+fWlxntLhLKXFeSpLtoK3fv16WFpaYvbs2WjXrh2qV6+OTZs2SbLsli1b\nYuPGjZIsizHGmGGS7aIV7dmcsbExoqKi5FptucD35kiL85QOZyktzlNZZV7wrK2tn9vdKAgC0tPT\ny7oJjDHGWNl3aWZmZiIjI6PYf1zsnuJ+fWlxntLhLKXFeSpL1ju29+/fjyVLlgAA7t27h2vXrsm5\nesYYYxWYbAUvJiYG06ZNw5QpUwAAeXl56NOnj1yr12vcry8tzlM6nKW0OE9lyVbw1q1bh40bN8LK\nygoA4OnpiczMTLlWzxhjrIKTreCZm5vrfOdlVlaWXKvWe9yvLy3OUzqcpbQ4T2XJVvB69uyJIUOG\n4NGjR1i0aBHCw8PxwQcfyLV6xhhjFZws9+EREXr16oWLFy/CxsYGSUlJmDhxItq0aSPH6vUe9+tL\ni/OUDmcpLc5TWbLdeN6hQwecP38ebdu2lWuVjDHGmEiWLk1BEFC/fn0cPXpUjtWVO9yvLy3OUzqc\npbQ4T2XJdoZ3+PBhLF++HD4+PuKVmoIg4OzZs3I1gTHGWAUmW8Hbtm2bXKsqd7hfX1qcp3Q4S2lx\nnsqSreAZ8q/oMsYY03+yfrUYKx7360uL85QOZyktzlNZXPAYY4xVCFzw9AD360uL85QOZyktzlNZ\nXPAYY4xVCFzw9AD360uL85QOZyktzlNZXPAYY4xVCFzw9AD360uL85QOZyktzlNZXPAYY4xVCFzw\n9AD360uL85QOZyktzlNZ5bbg3bhxA61atUKtWrVQu3ZtzJs3T+kmMcYY02OyfbWY1ExNTTF79mwE\nBQUhMzMT9evXR5s2beDv7690014Z9+tLi/OUDmcpLc5TWeX2DM/d3R1BQUEAAGtra/j7++P27dsK\nt4oxxpi+KrcF71kqlQqnTp1C48aNlW5KqXC/vrQ4T+lwltLiPJVVbrs0tTIzM9GjRw/MnTsX1tbW\nRf4eFRUl/lKDvb09goKCEBYWBgBIuZkCnP63m0H7ZpR7Wkup9Wun4+PjAUDM51WnOU/daUPIM+Vy\niuKvJ+cp7bTWs/nEx8cjNjb26fMN+JdtBCIipRtRWvn5+ejUqRPat2+PUaNGFfm7IAgoafOiRkXB\nt5tvGbaw/FCtVyF2TuxrLYPz/BfnKS3OUzovk+WLjp3lVbnt0iQiDBo0CAEBAcUWO8YYY+xZ5bbg\nHThwAMuXL8eePXsQHByM4OBgbN26VelmlQr360uL85QOZyktzlNZ5XYMr1mzZigoKFC6GYwxxsqJ\ncnuGZ0j43hxpcZ7S4SylxXkqiwseY4yxCoELnh7gfn1pcZ7S4SylxXkqiwseY4yxCoELnh7gfn1p\ncZ7S4SylxXkqiwseY4yxCoELnh7gfn1pcZ7S4SylxXkqiwseY4yxCoELnh7gfn1pcZ7S4SylxXkq\niwseY4yxCoELnh7gfn1pcZ7S4SylxXkqiwseY4yxCoELnh7gfn1pcZ7S4SylxXkqiwseY4yxCoEL\nnh7gfn1pcZ7S4SylxXkqiwseY4yxCoELnh7gfn1pcZ7S4SylxXkqiwseY4yxCoELnh7gfn1pcZ7S\n4SylxXkqiwseY4yxCoELnh7gfn1pcZ7S4SylxXkqiwseY4yxCqFcF7ytW7eiZs2aeOONNzBt2jSl\nm1Nq3K8vLc5TOpyltDhPZZXbgqfRaDB8+HBs3boVCQkJWLVqFf755x+lm1UqKZdTlG6CQeE8pcNZ\nSovzVFa5LXhHjx5F9erV4evrC1NTU/Tu3RsbNmxQulml8iTzidJNMCicp3Q4S2lxnsoqtwXv1q1b\n8PLyEqerVKmCW7duKdgixhhj+qzcFjxBEJRugmQepTxSugkGhfOUDmcpLc5TWQIRkdKNKI3Dhw8j\nJiYGW7duBQBMmTIFRkZGGDNmjPicoKAgnDlzRqkmMsZYuVS3bl2cPn1a6WZIrtwWPLVajTfffBO7\ndu2Ch4cHGjVqhFWrVsHf31/ppjHGGNNDJko3oLRMTEwwf/58vP3229BoNBg0aBAXO8YYY89Vbs/w\nGGOMsVdRbi9aYYwxxl4FFzxWojt37mDMmDG4cuUKHjx4AAAoKChQuFXKKNwZwp0jpUNEnN1rKi5D\nzvTFuOCxElWuXBkAsGLFCnz88cc4ffo0jIyMKtzORUTirTC3b9/Gw4cPDerWGLkJgoBt27bhu+++\nw8qVK5VuTrkkCAKOHTuGLVu24Nq1axAEocJ+GH1ZXPDYc2l3nmnTpmHo0KEICwtD+/btsW/fvgq1\nc6WmpuLHH38EAOzYsQNdu3bFW2+9hXXr1iE9PV3h1pUv2g8OZ86cwYgRI5CamootW7ZgyJAhSjet\n3NBmuGvXLnTt2hVr165Fw4YNcerUKRgZGVWY/bI0yu1VmqzsaM/ejIyMkJeXBzMzM7i6umLo0KEw\nNzdHZGQk1q5di5CQEJ0zH0NERDhx4gQOHjyI1NRUHDlyBMuWLcPZs2exePFiZGVloUuXLrC1tVW6\nqeWCIAjYu3cvli9fjrlz56J9+/a4fPkyJk+ejKFDh4ofLNjzCYKAhIQE/Pnnn1i9ejVatGiBunXr\nIjw8HLt370ZQUBAKCgpgZMTnM4UZx8TExCjdCKZ/tF1OS5YsQUJCAho3bgwACA4Ohr29Pb788ku0\na9cOTk5OCre07GiLuaenJywsLHDq1Cmkpqbi888/R61atWBhYYEVK1aAiODn54dKlSop3WS9VPhD\n0ZkzZzBp0iT4+PigZcuWsLOzQ506dRAXF4e4uDh07dpVwdbqN41GA41Gg6lTp+LgwYN48803ERgY\niJCQEFhZWSEiIgKdOnWCh4eH0k3VS1zwmA7twenQoUP4+OOP0a5dO8yaNQupqalo3rw5jI2NUa9e\nPeTm5iI5ORmNGjWCRqMxuE+T2rNcQRBw+/ZtBAcHw8TEBMeOHUNqaiqaNGkCf39/GBsbY/ny5ejQ\noQNsbGwUbrX+eTbH5ORkEBGCgoLQrFkzfP311/Dz84O/vz/s7e0RHByM+vXrw83NTeFW65dnM8zO\nzoaFhQXCwsJw9+5dJCcnw9HREZ6enmjcuDFsbW1hZWWFatWqKdxq/cT34bEiEhMTMWXKFISGhmLw\n4MG4ffs23n33XbRs2RIxMTEwNTXFrl278Pvvv2PRokVKN7dMaAv/li1bMHz4cGzZsgVeXl7Ytm0b\nduzYgerVq+PTTz8F8HSMjw/SxdN2rW3evBlTpkyBs7MzXFxcMHr0aNy/fx+DBg3C1KlT0b17d3Ee\nQ+8mf1XaPLZu3YpZs2ahSpUqqFatGsaNG4fo6Gjk5+cjIiICoaGhYm6c4XMQq/AKCgp0puPi4qhT\np04UGRlJV69eJSKi27dvU926denzzz8Xn/fxxx/TnTt3ZG2rnC5cuEC1atWivXv3io9lZ2fT+vXr\nKSoqiqZPn05ERBqNhoiK5liR5eTkiP+fnJxMAQEBdOLECTp37hwtXbqUOnToQCkpKfTXX39RlSpV\nKDU1lfMrJD8/X/z/o0ePUkBAAG3evJmOHz9OQUFBNGLECCooKKCPPvqIPv30U3r48KGCrS0f+KKV\nCo6eOcG/evUqLC0tER4eDk9PT/z8889Yv349IiIi4OPjI17+rDV//nwlmiwbtVqNZs2aoUWLFlCr\n1SgoKICFhQVat24NQRDg5+cHAGJ3Ln+ifio1NRWrVq3CoEGDxG5eLy8v1KtXD8DTW11OnDiB7du3\no1+/fggJCYGrq6uSTdY7d+/eFW8FMjMzQ3Z2Nlq3bo2OHTsCAE6ePIlGjRrhwIED+Oabb5Camgp7\ne3uFW63/DGvghb0yQRDErruOHTti9OjRaNCgAezs7NCrVy+oVCqsXLkSycnJqFy5MkJDQw3yxuHi\ntsnS0hJbt27F5s2bYWJiAjMzM2zbtg2//fYbunTpgtq1ayvUWv1mbm6O9u3bIzMzE8ePH4e3tzfU\najW++uorAICTkxMcHR2RlJQEAHBxcQHAN04/KyUlBZ07d8aDBw9w48YN2NraYteuXeKXPwiCgFat\nWuHx48dwcnJCQECAwi0uH7jgMVy/fh0TJkzAzz//jJUrV6JXr17o0qULatSogYiICNy6dUvn3h5t\nkTQ02kvmZ8yYgd27d6NatWqYPXs2vvvuO8yfPx9xcXEYM2YMPD09lW6qXsrPz0d2djbs7e3h5eWF\nKVOm4JdffsGFCxcwa9YsqFQqvPvuu9i0aRNWrlyJ8PBwAE+/CB7gM2TgaYYAUKdOHTg6OmLhwoWY\nOnUqateujT59+qBhw4aIj4/H5s2bERcXx2d1r4gvWqmAqNCAdmZmJoYNG4ZJkybB29sbADBixAgY\nGxtjzpw5FeaijC1btmD06NEYNWoUZs6ciQ8++AAdO3bE/fv3MWvWLLi7u6Nr167o1KkTXxRQSF5e\nHuLj4+Hs7IykpCQkJyejb9++mDlzJszMzBAREQE/Pz98++23sLe3R6NGjdCxY0fO8Rm5ubnYv38/\nqlSpgszMTCQlJcHNzQ07duwAEWHKlCn4+eefxSuFhwwZwu/FV8RjeBVQQUEBjI2NkZmZiUqVKsHM\nzAyZmZnYuHEjhg8fDgBo1qwZTp06BQAGX+yICLdu3cKiRYuwceNG3LhxA0SEM2fOIDs7G1988QU2\nbdqk83ymy8zMDBkZGYiJiUFKSgpmz54NT09PfPXVV/jmm2+wdu1a9OvXD3PnzhXn4Rx15eXl4cmT\nJxg2bBiSkpKwe/duvPnmm7CwsMD69evx1Vdf4csvv8SQIUOQk5MDCwsLzvAV8X14Fcj169eRl5cH\na2trrF+/HkOHDsW5c+dgbGyMqKgoREdH4+LFizh+/DgWLlyIgQMHokaNGko3u0zQM/c2CYIAW1tb\nNG3aFFlZWRgxYgSOHDkCNzc3fPbZZzAzM0PdunVhbm6uMw/7d+xTEAR4e3vj4MGDMDc3R9u2bWFt\nbQ1nZ2eEhITg77//xvnz59GkSRPxBn3O8Snte9Hc3BzZ2dmYMmUKGjdujNDQUHh4eMDLywu2trY4\nc+YM4uPj0bJlS5iZmcHIyIgzfEVc8CqQb7/9FuPHj0fDhg2xcOFCDBgwAF5eXliwYAG8vb0xduxY\nPHjwAOnp6Rg8eDDefvttg+4uEQQBZ8+exfHjx2FsbAwPDw+kpKRg586dGDx4MHJycnDu3DkMHz4c\nXl5eSjdXbxkZGWHHjh1YtmwZpk+fDiMjI6xfvx6VKlWCv78/1Go1AgMDERwczDk+hyAI2LFjBxwd\nHREVFQUXFxf8+eefMDExwRtvvAEzMzOYmZmhffv2cHNzM7gvepALd2lWANqbf2fMmIGCggL06tUL\nffv2Re/evZGTkwMnJydMnz4d9+/fxwcffCDOZ8jdJYIgYP369Rg/fjz8/PxgYWGBGjVqYMiQIXB3\nd0fr1q1x48YNzJkzB7Vr1zbowv86tFf4fvbZZ5g9ezasrKwwYMAA5OTkYPPmzTh27Bh++eUX7Nmz\nh69qfQ5thiNHjsT333+Pt99+G7a2tkhLS8O6detw+PBhnD59GnPnzkXVqlWVbm75Jtsdf0wRmZmZ\ndP78eSIiOnLkCKWnp1N0dDT5+/tTSkoKERHl5uZSXFwchYWFkUqlEm+kNjQFBQXizc0ZGRnUu3dv\nOnnyJBER7d27l6Kjo2np0qV07949WrlyJR08eLDIfExXXl4ejRw5krZs2UJERE+ePBH/tmXLFpo9\nezZt3bpVqeaVC5mZmdS2bVvatWsXEf37BQbXrl2jP/74gzp16kTr169XsokGg8/wDFxaWhq+++47\nceB7y5YtmDJlCh49eoSIiAisW7cOrq6uCA8PR8OGDeHs7Kx0k8sEPXOGdvDgQaSnpyM5ORkXL15E\ncHAwQkNDcezYMRw8eBD9+vVDZGSkOB/Al8xrUaEzXVNTU6SlpSE+Ph7t2rUTxznPnj2LsLAwtGvX\nTpwP4ByBfzPU/letViMvL0+83eXJkyewsLCAjY0Nevbsia5du8LMzIwzlAB3BBuwgoICeHl5oW3b\ntli8eDHee+89BAYGAgAWLlyIunXrok2bNrh79y7MzMzEYkcG3JWZmJiIL774AnXq1MHnn3+OnTt3\nYu/evTAxMUH9+vWRlpaG9PR08b5DviigeMnJyUhISAAADBw4EPn5+diwYQMA4NixYxg6dCguXbok\nPp9zLCo1NRUAYGdnh6ZNmyI6OhppaWmwsLDAvn370KlTJ9y9e1fnPkXO8PVwwTNgRkZG2L17N86e\nPYtNmzbhzJkz+OWXX5CWlgYA+OGHH9CmTRudAxNgmJ8gtT86GhERgdatW8PDwwNBQUGoV68ehg8f\njowINqMAACAASURBVFGjRmHAgAHo168fbG1t+aKAYmjPSDZv3ox27dqhR48eGDNmDGrWrImqVavi\np59+QufOndG/f39ER0eLH67Yv7QZxsXFoVOnTujevTu2b9+OqKgo1K1bF02bNsWMGTMwbNgw/Oc/\n/4Grqyu/FyXEN54bOO137W3btg27du3CxIkTMXjwYAiCgL/++gsrV66EqampQV6UUVwXUN++ffHP\nP/9g7969sLa2Rn5+Ps6fP4/k5GRUqVIFDRo0MMgspHLx4kV8+eWXmDFjBtzc3NChQwe0b98eo0eP\nRm5uLpKSkuDg4IA333yTu+Ce4+jRo5g8eTKio6Oxd+9eJCcno1mzZnjnnXfw999/w8jICC4uLmje\nvDlnKDEewzMwhQ/WNWvWFL+sNzw8HBqNBsuXL8etW7cwePBgmJqaAjDcHUoQBBw+fBjXr19H7dq1\nsXz5cgwaNAg9e/bEX3/9BQsLCwQHByM4OBiAYXfnlpb2PfX48WPMmTMHt2/fhqmpKezt7bF27Vr0\n7t0b9+/fx9y5cxESEqIzr6G+r17Fs2N29+/fx3//+1+YmpoiJCQEISEh+Omnn7Bv3z4UFBSgW7du\nsLa2FucDOEMp8X14BkK7UwmCgJMnT2LEiBGoU6cOPD098fDhQ8yYMQO9e/fGm2++iVatWqFHjx5o\n2LChwZ7NaLdr//79GDhwIB4+fIh9+/bh6NGjmD9/Pnbv3o0FCxagV69eYtEHeJykONruYCcnJ/j6\n+uLSpUt4+PAhPD09UaVKFfFHgps1a6Zz0RPn+JQ2h3v37sHV1RWCIODPP/+EpaUl6tWrhwYNGuDa\ntWs4fPgwmjZtKv7CBL8XpccFzwA8+0nw0qVL8PPzw+HDh3Hu3DksWLAAHTt2xMWLF1GrVi24ubnB\n3NwclpaW4vyGuFNpf7V94sSJ+OGHH/DJJ58gMDAQ+/fvR3JyMr799lusW7cO/v7+8PDwULq5ekn7\noSEvLw8zZ87EokWLMGTIEPj6+mL//v1ISUmBu7s7vLy80L9/f4P/CrrS0mg0SEtLg4+PD9544w30\n7t0bVapUwapVq5Cbm4vg4GA0btwYwcHBqFKlitLNNWhc8AyEdiB81KhRCA8PR79+/dCkSRMIgoCl\nS5di586dyMjIQJcuXXQKnCEVu8Jnq/v378eMGTPQqFEj1KtXD9bW1sjJycGRI0fQqVMnREZGwsPD\nw2DPcksrKysLRkZGMDY2BgAYGxujTp06uHz5MpYuXYoPP/wQlStXxtatW3H37l3Uq1cPpqamMDIy\n4iz/Jz8/X8wPAKysrFC7dm0MHjwYb775Jt555x1YWlri559/Rn5+PurVqwc7OzsFW1xByHCvH5PB\nP//8QzVr1qQDBw4U+dujR4/owoULFBYWJt5obWievTn83r17lJ2dTURES5YsIT8/P9q5cycRPb0Z\nulmzZnT//n1Sq9WKtVdfXbhwgYYNG0apqam0b98+mjt3rvi3O3fu0Keffkr9+/enrKwsOnDggPil\nBuxfFy5coHHjxhERUUJCAm3fvl18P8bFxZG5ubl4I/mff/5JR48eVaytFQ0XvHLqxo0btGzZMnF6\n37591LNnT3E6Pz+fiEjnG0L69+8vfpuDodFu58aNG6lly5bUvHlzWrRoESUmJtLvv/9OlpaW9MEH\nH1C3bt1o3bp1CrdWP2VnZ1Pr1q1p8eLFRES0e/ducnNzo/nz5xMRkVqtpt27d1Pt2rWpV69eBvuN\nPK/j8ePH1LJlSzp27Bilp6fTqFGjaODAgbRr1y7KysoiIqLZs2eTIAgUFxcnzsff5CMPvsGjnCIi\nLFu2DGfOnAEA+Pn54cGDB9i+fTuApz+quXv3bkybNg1EhCtXruDKlSsG++OlgiDgxIkTmDVrFubO\nnYsRI0YgOTkZq1evRseOHTF37lzs378fHTp0QLdu3aDRaPiKzEIsLCzQp08fLF68GJ6enmjVqhX+\n/vtvzJ49GwsWLICxsTHMzc0RHh6OMWPG8P1hxdBoNMjOzsaqVavwySef4NNPP4W3tzfWrl2LQ4cO\nAQBCQ0MRERGhkx93A8tE4YLLSkHbFTd37lxas2YNERGlp6fTzJkz6YsvvqCpU6dSfHw81apVi7Zv\n3y7O9+DBA0XaK4c7d+7QgAEDKDQ0VHzswIED1Lp1azp8+DAREa1YsYI8PT1p7969SjVTb2nPMP7+\n+2+qVKkStWzZkjIzM4mI6OjRo1SnTh0aNGgQubq6it+byWclurR5zJ8/n0xMTGjo0KFE9PT7RseP\nH0+DBg2iQYMG0RtvvEHHjh3TmYfJgy9aKYe0nwzv3LmDOXPmoFWrVnBzc4O7uzssLS3x999/49Kl\nSxg2bBg6dOgAtVoNIyMjWFhYKNxy6VChe5Tof7/LdujQIWRnZ6Nx48bw8vLCoUOHoNFo0LBhQwQG\nBsLDwwM1a9aEo6Ojks3XO9ocnZycEBYWBkdHR8ydOxf169dHYGAg2rVrh5o1a6Jfv35o0aIFX5xS\nDG0ed+7cQZs2bTB79myYm5ujadOmaNGiBSwtLWFlZYU+ffqgefPmOvMwefA3rZRzEyZMwJIlS3D0\n6FG4u7uLjz958gSVKlUyyJtX/7+9e4/r+e4fP/749ImUUhNFGrqqCzeuzJxS5riIZptDuJjG5soy\nx7gcbkPjYsxp5JrDwjSnDhZpEeuAYcppF+VMuihySp8U+vTp/ftj+3xWxvea39inPj3vf0mf9+32\n+rxu717P1/H5KvudDh48yMOHD7GwsKBTp05s27aN+Ph4rKysGDRoECNHjiQsLIzOnTsbudQVU9nA\npdPpDDsLs7KyWL9+PefPn2fu3Lm4ubmVewZM6516GY4dO4aPjw//+te/GDNmTLnfSR0ah4zwKiH9\naEalUtG1a1du3rzJ9OnT8fb2xsLCAktLS8zNzcsdRjcl+u/03XffMWHCBJo0aUJISIhhDUr5ZX3z\n5MmTLFiwgC5duhhGuaI8/SW4+ktFdTodZmZm2NnZ4ebmxqVLl4iIiODtt9/G3NzcUPem9k79Udev\nXwegevXqqFQqdDodzs7O9OzZk/79+2NnZ0f79u0Nn5c6NA4JeJVAaWmp4RoRMzMzwx+K/mJXHx8f\nSkpKiI2N5dy5c+Tm5tKiRQuT/oPKyspi0qRJREVFkZubS1paGsnJySiKwvDhw6lTpw4PHjxArVbT\npk0bCXZPoe8QDR48mAsXLtC9e/dy9WRra8tf//pXw5S5Kb9P/78URSE3N5fg4GC8vLx45ZVXKC0t\nRa1Wo9PpcHJyws/Pj5o1a+Lq6mrs4lZ5EvAqsHv37nHv3j1sbW1JSEhg7dq1pKenGw6Ul+2Re3p6\n0qxZM+zt7fnmm2/w8fExqTW7J6lUKnr06MGdO3cMSXhfffVVxowZg42NDUOHDiUvL4+MjAzatWtn\n0nXxvJ4c+Xt4eHD06FHat29PjRo1ygU2W1tb7O3tjVXUCk+lUmFtbU1KSgrx8fG8++67hmlh/d9n\ngwYNcHV1lXXPCkACXgVVWFjIwoULOXPmDPfv32fKlCn4+fnxxRdfkJ2dTdeuXTEzM8PMzMwwAqxT\npw4uLi7079+/XOowU6JvNGrUqEHt2rU5fvw4tra2+Pr6kpmZSZ06dXjjjTdwd3fH1dWVzp07Y2dn\nZ+xiVyj6HKOPHj3CzMwMJycnVq1aRaNGjWQU8hyuXbtGbm4u9vb2eHl5kZaWRqtWrbCxsTH8TcrR\ng4pFNq1UYDExMRw6dIi8vDw8PT0JDAwkNzcXf39/vLy8mDt3ruFyyLJMrSf55Pcp+/P27dtZuXIl\nnTp1Ys2aNWzbtg1PT89yGzDEbzdJzJkzhxMnTlCzZk0CAgK4desWW7duZevWrZLi6hnKvncajYaP\nP/4YlUqFg4MDU6ZMISAggH79+hEYGGjkkopnkYBXwSiKYlgDADhy5AjLly9Hp9OxYMEC/vKXv3Dr\n1i18fX3p2rUrixcvNqng9izHjh0jPDycFStW/CYARkZGkpeXR+PGjfH19TW5gP8i6Ovk1KlTVKtW\nDScnJ2xtbUlOTmbu3Lm4uroSFxfHwYMHcXNzM6wPi1/p6/DGjRvUqlULlUpFQUEB48ePp0WLFuzY\nsQOdTkdUVBTu7u7GLq54CrkPrwJSq9V89913xMTEsH79egoLC4mLi2PHjh3069ePxo0bs3v3bq5c\nuWLSDXvZRvfx48dotVrg11GKfhQ3aNAgwzPSf/stfUOtv1nbx8eH5ORkwsPD6datG82bN+fevXvc\nunWL4OBgdu7cKcGujLKj4507dxISEoJOp8PX15ePPvqIiIgIrl27hpOTE5s2beLq1au4u7tLx6sC\nkre6gtE3TNOmTWPAgAEAdO/enR49epCdnc2WLVvIzMzE0dGRDh06mGQD//DhQ+DnRf9Lly6RmpqK\nnZ2d4R42PbVaTUlJSblnZbv3b+lHdrGxsURERBAeHs5nn33GyJEj+fHHH3F0dKRZs2bExsZSq1Yt\n8vPzjV3kCkX/Tp05c4bQ0FC2bNnCrl270Gq1hIWFUVBQwKuvvsoHH3zAP/7xD5YvX87jx4/lPayA\nJOBVQMeOHePTTz+ld+/ePHr0CIDevXvj4+PD9evXywU5U/ujun//PtOmTSMvLw+NRsOiRYsIDAxk\n8eLFpKSksGDBAqKioti3bx+lpaVPXcMUv45KdDodxcXFfPrppyQlJfHgwQNKSkoYNmwYo0ePZvny\n5ZSWlgKwd+9ejhw5YhhJV3U3b95k3rx5lJaWcufOHZYuXcqtW7ews7PD2dmZyZMnk5KSwtatWw3P\n2NjYUFBQYKhTUbFIa2FkT5v2uHHjBqdPn2bAgAHUqFEDgNTUVLp06UKHDh1MflPB5MmTyc/PJy8v\njzVr1gA/H9HIzs7G2tqa7du3k5+fT/Xq1fHy8jJyaSu2oqIibGxsWL9+PePGjSMxMZEWLVrQsGFD\nmjRpwunTpw3vn5OTE0lJSeVuLa/KHj58iL+/Pzdv3sTBwYGAgADy8vLYsmULgwcPpkGDBgwbNoy7\nd+9SWlpKaWkplpaWrF69Wo7BVFQvKUen+B3K3uGWmZmpnDlzxvDvoKAgZenSpYqiKEpqaqrStGlT\nQxJkU1Q2ie5///tfZePGjUqnTp2UlJQURVF+Tpj93nvvKZs2bXrmc6K8uLg4xdPTUwkJCVEOHjyo\nFBQUKAMGDFB69uypzJgxQ2nbtq0SExNj7GJWOGXfqeLiYuXDDz9URowYoWi1WiUxMVEJCgpSBgwY\noGzYsEFxc3NTEhISjFha8TzkHJ6R6RfCg4KCSE1N5cCBA7Ru3RoHBweio6NZt24dkZGRzJ8/n27d\nuhm7uC+Vfv1y1qxZDBs2jFq1arFhwwYaNGiAi4sLBQUF5OTk0LFjx988J8pvrsjOzmbhwoUEBARQ\nUlLC999/j42NDRMmTGDfvn1cvnyZuXPn0rNnT8OzUo/l6zAjI4O6devi7u7Of/7zH/bs2cOoUaN4\n5ZVXSE5OJicnh+DgYPz8/AwJIETFJgHPiPTJj6dPn87u3btRqVQsWrQIgD59+vDRRx/RqVMnhg4d\nSrt27Uw24ay+sb1w4QKzZ88mJCSEVq1a0bBhQ3Q6HRs3bqRhw4Y4OTkZDtfrmVpd/FH6ewEPHjyI\noigEBwfj4uKCVqslISEBc3Nzxo8fz65du7h27Rqvv/46VlZWUo9lqFQqEhISeO+993jzzTdp1qwZ\nrq6u/PjjjyQnJzNixAicnZ3JyclBp9Ph5uaGtbW1sYstfgfpkhiZvb09X375JcePHycsLIzDhw+T\nlpZGUFAQFy9exMXFhYYNGxo+b0oN0+PHjw272a5du8bmzZu5evUq6enpADg4ONC/f3+6devGnDlz\naNasGV27djXJnal/lL7TkJKSQt++fTl48CArVqwgPT2devXq0bt3b9q1a8e3336LSqVi+fLl3Llz\nR0Z2T9B3vP75z38SHh7O3/72N9RqNU2bNmXcuHHcv3+f8ePH061bN15//XVyc3MlwUElIgfP/0Rl\nR2h5eXlUq1bN0DOcPHky7u7ujBo1ilWrVrFhwwY2b95c7loWU1JSUsKhQ4fIzMzE2tqajIwM+vbt\nS2xsLPfv36dPnz506dIFgNu3b1NUVESjRo2MW+gK7ty5c0ycOJEZM2bg7e3NnDlziI6OJiIigubN\nm3Pr1i2Ki4txdnYGkGw0v3gy6F+4cIH58+fz9ddfo9Pp0Ol0VK9enZKSEjIzMykqKqJly5YAFBQU\nYGNjY6yii+ckuzT/ZCqVitjYWNatW0d+fj5Dhgyhe/futGnThrVr16LVaomMjGTp0qUmG+wAzM3N\nsbe3Z+7cuZw+fZr169fj4eGBpaUlmzdvZs+ePWi1Wnx8fKhbt67hORmRlFe2Pk6dOsW1a9fYuXMn\n3t7ezJo1C7VaTe/evYmPj6dFixblnpNgVz5RwdmzZ7G0tMTW1pYDBw4QERHB4MGDUavV7N27l6NH\nj/LJJ58Av3YWJNhVLrKG9ydSqVScP3+eUaNG8e9//5smTZpw7tw5zp49S7t27bCzs2PXrl1MmDCB\nN9980yTX7Mp+J1tbW2JiYnB2dsbKyoqmTZvi7OyMq6srR48e5cqVK7Rq1apcImxTqosXQb8OHBkZ\nSWBgIPXr1+enn37ixo0btGnThk6dOpGfn0+9evXKjZClHn+l3zg2ZswYunXrRpMmTXB1dWXVqlVk\nZWWh0Wj45JNPGDhwIE2bNgWQDSqV1Z+8K7RK0m9zzsnJUXbv3q306tXL8LvU1FSle/fuSmpqqqIo\nivLw4UPDM6a25b7sd8rJyTH8X3p6ujJ69Ghl5syZiqIoikajUaKjo5ULFy4YrayVSXp6uvLqq68q\nS5YsURRFUaKiopTAwEBl2bJl5T5nau/Ti3LixAmlZcuWyvnz5xVFUZQbN24oR48eVTIyMpSBAwcq\nY8eOVb777jtFUaQOKzuZ0nzJ9PkgDx8+zIwZM/jyyy+pUaMG0dHR+Pv7065dO5o3b264t61atWqG\nZ02xF65SqYiPj2f27Nl4eXlRvXp1Fi5cyLBhw9i4cSP9+vUjPT2d6OhoScD7P2g0GqysrGjevDkJ\nCQn4+/ujKAqTJk1Cq9Xy/fffk5WVZRjZmeL79CLUqFGDli1bkpycTFRUFCkpKQBMnTqVyMhIw+cU\n2e5Q6cmU5kumUqlITExk7dq1BAUF0aFDB+7cuUNGRgbJycmo1WoWLVpEUFAQzs7OhqkSU2ycVCoV\n+/fvZ+LEiWzevJnr16+zatUqMjIyGDt2LC1btuThw4cEBATg7e1t7OJWWIqicPnyZUaOHIm7uzv1\n6tXD0dGRzp07M3nyZABGjhxJ+/btDRtUxLNZWVmRm5vLpk2bePfddxk+fDhWVlZotVrD5hSQPK2m\nQCaiX4Ine4LZ2dls3ryZa9euAeDv74+vry/37t1jy5YthIaG0r59e5PvQZaWlqLVag3Z5Xfs2MH+\n/fs5e/YsAQEBODs7M27cOHr06IGiKCZfH8+jbH2oVCrc3Nxo06YN8+fP56effqK4uJgWLVrQo0cP\nFixYQFZWFvXr1zdyqSuHmjVrMnbsWPbt20e/fv0oKChg5cqVUn+myGiTqSZMP8+fnZ1tWJPbunWr\nYmFhoRw6dKjcZ4qKigw/m+L6gE6nUxRFUR49elTuO7/33ntKXFycoiiKMnnyZKVJkybKyZMnjVbO\nik5fdykpKUpoaKghDd2SJUuUPn36KHv37lXi4uKUYcOGKWfPnjVmUSutkpIS5ejRo0rbtm2VHTt2\nKIoia3amRqY0XzDll23i8fHxjB49mh07dpCVlcXf//53WrVqxdChQ+nQoYNhXUW/Zmeq0yUqlYrt\n27czZcoUUlNTsbKywt3dnb1792JpaUlOTg4JCQl88803NG/eXI4dPIW+To4cOUJgYCBFRUWkpaVx\n9+5dPv74Y/Lz80lKSiI8PJygoCDeeOONcs+J38fMzAw7Ozt8fX3LXb0ldWg65OD5S5Camsrs2bOZ\nN28eubm5nDp1iszMTFauXMlXX31FcHAw2dnZ1KpVyyS3NytPHLB///33GTJkCBqNxlAHpaWlrF69\nmgsXLhAcHGy4+08a6adLTU0lJCSEhQsX4uHhwdatWzl8+DAeHh6MGDECc3Nz7ty5Q506daQOXxCp\nR9MjuzRfsLy8PJYuXUpubi6tWrUCwNnZmc8++4zk5GRGjRqFr68vdnZ2Ri7py6VSqUhNTeXYsWO0\nbt2awYMHA2BhYVEum4xGo6FWrVrSm/4f8vPzSUxMZO/evXh4eODv74+ZmRmJiYkUFhYyduxYateu\nbeximhR5F02PTGn+QU821JaWltSuXZvdu3dz+/ZtOnfujIODA/v27aOgoICOHTtibW2NmZmZSfYg\n9d/p0KFDvP/++9y9e5eTJ0/i7u5OgwYNaN26Nebm5kydOpXBgwdja2trqANTq4sXydXVlZYtW7J4\n8WJq165Ny5YtadasGYWFhXh7e+Po6Cj1KMT/IFOaf5C+gU9KSiItLY26devSt29f0tPTWbFiBTY2\nNowYMYLRo0cTGhpq8lf8wM/TbzNmzGDJkiV4eHgwc+ZM8vLyGDBgAN7e3lSrVo3s7GwaNGhg7KJW\nOvHx8cycOZPx48fz/vvvG7s4QlQqpreA9CfSB7sffviBjz76iJo1axIWFkZoaCjVqlVj7NixHDly\nhOnTp7N27Vq6detGSUmJsYv90uXn55OcnExiYiIAM2fOxN7envDwcH744QcURTEEO+lvPR8/Pz9C\nQkL4/PPPDdfTCCF+Hwl4f4A+N+aqVauYMmUK48aNY/v27Wg0GuLi4ujcuTOrV6/Gzc2N/fv3Az8n\nTTZ1PXr0ICYmhrVr17JlyxaqV6/OjBkzqF+/Pg4ODuWm3GT67fm988477N+/HycnJ0kALcRzMP3W\n9wXTj+r0KcMyMjK4ffs2e/bsoVevXjg7OzNlyhR69uzJmDFj8PLyQqvVsmnTJsMuuqrgnXfewdzc\nnJkzZ1JcXMzw4cOZN2+eBLgXRH+DhCmuAwvxssga3nMou0Gl7BrUoUOH2LRpE+7u7gwePJjCwkL8\n/f2Jj4+nQYMGFBcXU1JSUi7rf1URGxvL9OnTSUxMxNHRUUYkQgijkYD3HPS96V27dhESEoKPjw9m\nZmbMnj2bAwcOEBoayvXr17Gzs2PixIn07t1beuD8fIFr2TvthBDCGGRK8zno7x6bOnUqUVFRhIeH\nExMTQ05ODmvWrMHS0pL169fj6upKz549jV3cCkOm34QQFYFsWnkOOp0OjUZDREQE169fJzExka+/\n/pqbN28SGBhI69atefvtt7lw4QJr166lpKREGvgypC6EEMYkI7znoFar6d69OyqVii+++IIlS5bQ\noUMHXFxcuHjxIhcvXuStt95CURTatm1bJXZkCiFEZSEt8jM8Of2m/9nCwoLHjx+j0Wg4ffo0paWl\nnDp1irCwMJo2bQpAnz59jFVsIYQQzyCbVp6i7G7M9PR0ateujZOTU7nP7Nu3j6VLl1JUVERgYCAD\nBw40PCtTd0IIUfFIwHsKfdCKi4tj0aJFLF68mHbt2hl+rz+DV1hYiKIoWFtbS/JjIYSo4CTgPcOl\nS5cYOHAgX331FW3atCn3u6cFNxnZCSFExSa7NH9x9epVxo4da/hZnxVFH+z0OTALCwufelmrBDsh\nhKjYJOD9onHjxgwfPpwrV64A4OHhQe3atUlKSqK4uBhzc3MOHDjAwoULefTokSQ9FkKISqbKT2kq\nioJOpzMcIfD29katVhsyp1y+fBkrKys8PT2ZPHkyK1euxMfHx8ilFkII8byqdMAruxZ37tw5w7GC\nLl264ODgQFRUFImJicTHx1NcXIyfn5+kCxNCiEqqygc8fW7McePGERkZSevWrQHo2LEjjo6OfPvt\ntwA8fvwYCwsL2Y0phBCVVJUOeAAnTpxgyJAhRERE8Nprr5GVlYWDgwOWlpZ4enpibW1NYmKi4SiC\nEEKIyqnKZVp5coRmbm7OgAEDOH36NAkJCURGRuLu7s706dM5cuQIhw8fBpBgJ4QQlVyVbMVVKhV7\n9+4lISGBOnXq8PDhQ7Zu3YqLiwsRERG4uLhw4sQJALy8vFAURXZlCiFEJVflAp5KpSI2NpZJkyah\n1WpxcnJi3rx5bN++nUGDBqHVavn+++9xdXUt94ys2QkhROVW5QJeXl4ey5cvZ9u2bfj5+XH8+HG2\nbdtGaWkpKSkpjBo1ilmzZtGlSxcZ1QkhhAkx+TW8J48Q6O+oi46O5ty5c6jVapKTk7l//z4BAQGs\nW7eOpk2bSrATQggTY9IjvLJB6/z589y7d4+6desya9YsCgoKGDFiBOHh4YSFhZGWloalpaXhLB7I\n0QMhhDAlJn0sQafToVariYuLY/bs2bzxxhuUlpYyYcIEXFxcANizZw/BwcEsWrSI3r17G7nEQggh\nXhaTHOE9ePAA+PmG8rS0NEJCQoiNjaVmzZqkpKQwa9Ysjh8/TmFhIcuXL+fzzz83ZFARQghhmkxu\nhJeXl8fixYtp3rw5Q4YMITU1lerVq3P79m2mTZvGsmXLCAsLQ6PRsHjxYurXry/32QkhRBVgciM8\ntVqNlZUVx44dY+fOnbRv355WrVqRlJTEsmXL6NSpE87Oztjb21NYWIi1tbXhWQl2Qghhukwm4Olv\nPahVq5ZhjS4pKYmYmBgANBoNc+bMITk5mbi4OD7++GNee+01GdkJIUQVYTJTmvrjB8nJyTx+/JjO\nnTuzZs0arl69yltvvYWPjw8ffvghRUVF+Pv7069fP7n1QAghqhCTCXgAcXFxzJo1i/nz5+Pr60t+\nfj7r168nMzOTXr160atXL7n1QAghqiiTmdIsKChg3bp1rFq1Cl9fX7RaLba2tnzwwQc4Ozuzc+dO\ncnNzsbCwACRdmBBCVDUmk2nFzMyMO3fuoNFogF9HbsXFxQQHB5OdnY2jo6MxiyiEEMKITGaEj5ET\naQAAALJJREFUV7NmTQYOHMjhw4c5c+YM5ubmHDp0iKFDh3L79m0aNWpk7CIKIYQwIpNaw8vOzmbN\nmjWkpKTg7e1NdHQ0oaGh+Pn5GbtoQgghjMykAh5AUVERqamp5Obm0rhxYzw9PWWDihBCCNMLeE+S\nYCeEEAJMaNPKs0igE0IIASa0aUUIIYT4v0jAE0IIUSVIwBNCCFElSMATQghRJUjAE0IIUSVIwBNC\nCFElSMATQghRJfw/5a9/wr1GWjoAAAAASUVORK5CYII=\n", + "png": "iVBORw0KGgoAAAANSUhEUgAAAbwAAAFhCAYAAAALEB8uAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdYFOfaBvB7qALSqyBFNEZQFKyIDWOJXYMaJZagJpZE\nj8YUOcYoJ8YWNZZoTEyixJ5jjI0gNkQ9KvZOBNtiBbtUhV2e7w+/nbCAqDjMLMvzuy6vZJadmXfu\n3Zln531ndgUiIjDGGGMGzkjpBjDGGGNy4ILHGGOsUuCCxxhjrFLggscYY6xS4ILHGGOsUuCCxxhj\nrFKQteClp6ejdevWsLGxweeffy7nqiukLl26YOXKlUo3Q2/5+Phg9+7dsq3PyMgIV65cKdd1RERE\n4Kuvviq35VtbW0OlUr3SPAkJCfD09CyfBhm4evXqYd++fZIvV6VSwcjICAUFBZIvW2mjRo3CN998\nUy7LNnnRE3x8fHDnzh0YGxvDysoKnTt3xqJFi2BlZfXKK1u6dClcXFyQkZFRpsZWNrGxsUo3Qa8J\nggBBEEr8W0REBDw9PTF16tQyLTs0NBSDBg3CsGHDXqeJr6y0bZJCZmZmuS37dbzu66Wvzp07p3QT\nZPWqr2N0dDR+/fVX7N+/X3xsyZIl5dW8F5/hCYKAmJgYZGZm4sSJEzh27NgrV18iQkFBAVJTU+Hn\n51emhqrV6jLNxyoGfXt9y7PovAh/F4R+0rf3KCsDegEfHx/avXu3OP3ZZ59Rt27diIjo0KFD1Lx5\nc7Kzs6MGDRpQQkKC+Lw2bdrQl19+SS1atCALCwsaOHAgmZqakpmZGVWtWpV2795NT58+pbFjx5K7\nuzu5u7vTuHHj6OnTp0REtGfPHvLw8KBZs2aRm5sbDRo0iKKioqhPnz40cOBAsra2poCAAEpJSaHp\n06eTi4sLeXl50Y4dO8Q2LFu2jPz8/Mja2pp8fX3pp59+Ev+mXf7cuXPJxcWFqlWrRsuXLxf/npOT\nQ+PHjydvb2+ytbWlli1bUm5u7gu3u6jjx49TYGAgWVtbU9++fendd9+lSZMmERHRgwcPqGvXruTs\n7Ez29vbUrVs3unHjhk6Gv/zyCxERLV++nFq0aEGfffYZ2dvbU40aNWjbtm3PXe+1a9fonXfeIWdn\nZ3J0dKTRo0cTEZFGo6GpU6eSt7c3ubi40ODBg+nx48dERHT16lUSBIGWL19Onp6e5ODgQEuWLKEj\nR45QQEAA2dnZicvRtikkJIRGjx5Ntra2VKdOHZ33ysvkr319Bw8eTAUFBTRjxgyqWbMmOTo60rvv\nvksPHjwQ51mxYgV5eXmRo6MjTZs2rdh7U+unn37Sea/16NGDiIiSkpKoTZs2ZGdnR3Xr1qUtW7aU\nmN3EiRPJ2NiYqlSpQlWrVqUxY8YQEZEgCPTjjz/SG2+8QXZ2dvTxxx/rzPfrr7+Sn58f2dvb09tv\nv02pqanPfX32798vvoc8PT3pt99+IyKiiIiIl35/LF++nHx9fcna2ppq1KhBq1evJiKiixcvUuvW\nrcnW1pacnJyoX79+4jyCINDly5eJqPT3eGF79uyh6tWri9M3b96ksLAwcnZ2pho1atDChQvFvx0+\nfJiCg4PJzs6OqlWrRqNHj6a8vDzx7+PGjSMXFxeysbGhgIAAOnfu3HNfr6JKmpeI6N69e9S9e3ey\nsbGhpk2b0qRJk6hly5ZE9M97WqPRiMspvF9dunSJ2rZtS46OjuTk5EQDBgygR48eic/19vamWbNm\nUUBAAFWpUoU0Gs0r7f/e3t7ie3TKlCmvdPxq06YNRUZGUtOmTcnGxoZ69uwp7g9Ft+vRo0c0dOhQ\nqlatGnl4eNCkSZPEv2n3008++YTs7OyoZs2adODAAVq2bBl5enqSi4uL+P4jInry5Al9+umn5OXl\nRa6urjRy5EjxfVHacfN5r6N2n7a2tiZ/f3/auHEjET3bH6tUqULGxsZUtWpVsre3JyKi999/X9wH\niIiWLl1KtWrVIgcHB+rRowfdunVL/NuL9smiXqrg7dq1i4ieHUTr1q1LkydPphs3bpCjo6N40N25\ncyc5OjrSvXv3xBfL29ubkpKSSKPRUH5+PkVERNBXX30lLvurr76i5s2b0927d+nu3bsUEhIi/n3P\nnj1kYmJCkZGRlJeXR7m5uTRlyhSqUqUK7dixg9RqNQ0ePJi8vb1p+vTppFar6eeff6YaNWqIy//r\nr7/oypUrRES0d+9esrS0pBMnTugsf8qUKaRWqyk2NpYsLS3FN/tHH31Ebdu2pVu3bolv8qdPnz53\nu+/evVssu6dPn5KXlxctXLiQ1Go1/fnnn2RmZiZu4/379+nPP/+k3NxcyszMpL59+1KvXr3E+UND\nQ+nXX38lomdvWlNTU/rll1+ooKCAlixZQu7u7iW+Zmq1murXr0/jx4+nnJwcevLkCR04cICInh2U\n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\n", "text": [ - "" + "" ] } ], - "prompt_number": 51 + "prompt_number": 16 }, { "cell_type": "markdown", @@ -993,7 +1020,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In the plot above, we've seen how the different implemantations perform for a fixed sample size n=500. Now, let us take a look at the effect of the sample size on the relative performances for each approach. We will consider the sample sizes 10, 100, 1000, 10000, 100000, and 1000000." + "In the previous section, we have seen how the different implemantations perform for a fixed sample size n=500. Now, let us take a look at the effect of different sample sizes on the relative performances for each approach. We will consider the sample sizes 10, 100, 1000, 10000, 100000, and 1000000." ] }, { @@ -1020,26 +1047,31 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 22 + "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ - "#%pylab inline\n", - "#import matplotlib.pyplot as plt\n", + "import matplotlib.pyplot as plt\n", "\n", - "plt.figure(figsize=(10,8))\n", + "labels = [('cy_classic_lstsqr', 'Cython implementation'), \n", + " ('lin_lstsqr_mat', 'numpy matrix equation'),\n", + " ('numpy_lstsqr', 'numpy.linalg.lstsq()'), \n", + " ('scipy_lstsqr', 'scipy.stats.linregress()')] \n", "\n", - "for f in times_n.keys():\n", - " plt.plot(orders_n, times_n[f], alpha=0.5, label=f, marker='o', lw=2)\n", + "matplotlib.rcParams.update({'font.size': 12})\n", "\n", + "fig = plt.figure(figsize=(10,8))\n", + "for lb in labels:\n", + " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", "plt.xlabel('sample size n')\n", - "plt.ylabel('time in ms')\n", - "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", + "plt.ylabel('performance gain relative to the slowest approach')\n", + "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", "plt.legend(loc=2)\n", "plt.grid()\n", - "\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", "plt.title('Performance of least square fit implementations for different sample sizes')\n", "plt.show()" ], @@ -1049,20 +1081,21 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\nJBJRUVFRrdsyatQo+r//+z9V+ZaWlmonLVdXVzpz5gzJ5XKytLRU+9VaqaHtruqnn34id3d3tdcm\nTpyo+pVcvaWruqrvN2a91bd16dKlNHLkSLp+/XqN+RpKwupa9scffyQPDw+116om0Q0lYdXNnTuX\n5s+fT0R/fdndvHlT9f7QoUMpLi5ONS2Xy8nKyoqys7NrLa++JKyh/V7b/I057sLCwlQndyJl64yZ\nmRkpFAq1L/I7d+6Qubm56tc4EdH27dtVX2ibN2+mdu3aqd67ePEiiUQiys/PV73m5OREFy5cIIVC\nQdbW1mrb/PPPP6uSw/qOd6Kan83adO/enQ4cOKCqW31J2NSpU+ntt99WvVdcXEympqaq1kuRSKSW\nXEVGRtKaNWuIiGjy5Mk0Y8YMun37dr31qSyncpsb+rxFR0dTdHR0nWVlZWVRq1atqLS0VPXayy+/\nXGcCXX2fVd8nM2fOrJHYtm/fnn766SciUh5jVVvfNTmnrlixQvXe+vXraejQobXWrTb9+/enZcuW\n1fqDsaoHDx6QSCSiR48eqbZzxowZqvc/++wzCgwMVE1fvHiR7O3tVdN+fn5qLfGHDx8mf39/IlJP\nmH799Vfy8fFRW/fKlStpypQptdbLx8eHNmzYUOP8XlsSJpfL6YUXXqBZs2YRETX4+ajvHGlsuE+Y\nwIhEIhw4cAAPHjxAZmYm/v3vf8PCwgJZWVnYs2cPHBwcVP9Onz6NO3fuqJZt6C6Y3Nxc+Pr6qqZ9\nfHyQm5urmnZxcYGZmZnaMq6urqq/LS0t4ezsrOo8a2lpCQAoLi4GABw5cgQhISFwcnKCg4MDDh8+\njPv376uWd3JyUuuPZWVlheLiYty7dw9PnjyBv79/jTprst1Vt6/6PvD19UVOTk69+6U2Da23vm39\nxz/+gYCAAAwePBj+/v5Ys2aNxuuta9nc3Fx4enrW2DZNnTlzBgMHDoSrqyvs7e2xYcMGtdgA6sdP\nVlYW5s6dq9p2JycnAHiqffk0GnPcAep19/HxgUwmw71799TKzMrKgkwmQ+vWrVXbNXPmTBQUFKjm\ncXNzU1svoPxcVH2tuLgYBQUFKC0tRY8ePVRlDRs2TG2ddR3vddmyZQuCgoJU5V2+fLlGjOqSl5en\ndjxYW1vDyclJLV7u7u5qdans9P7RRx+BiBAcHIzOnTtj8+bNGq2zrs9b5TlFJBLVe07Kzc2Fg4OD\n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\n", + "png": "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\n0/EX3NkAAAAASUVORK5CYII=\n", "text": [ - "" + "" ] } ], - "prompt_number": 34 + "prompt_number": 19 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", - "In this performance comparison for different sample sizes, we see that our Cython approach is actually not so fast anymore. However, this is just the simplest approach to using Cython. There are a lot of tweaks that can be made. In a [later section](#showdown) we will come back to this comparison and see how the Cython version of our simple least squares implementation holds up against the other approaches\n", + "In this performance comparison using different sample sizes, we can see that our Cython approach is actually not so fast anymore. However, this is just the simplest approach to using Cython. \n", + "There are a lot of improvements that can be made. In a [later section](#showdown) we will come back to this comparison and see how the Cython version of our simple least squares implementation holds up against the other approaches, after we tweaked it a little bit.\n", "
" ] }, @@ -1408,15 +1441,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Like we did with Cython before, we will use the minimalist approach to Numba and see how they compare against each other. \n", + "Like we did with Cython before, we will use the minimalist approach to Numba and see how the two - Cython and Numba - compare against each other. \n", "\n", - "Numba is using the [LLVM compiler infrastructure](http://llvm.org) for compiling Python code to machine code. Its strength is to work with NumPy arrays to speed-up code. If you want to read more about Numba, see the original [website and documentation](http://numba.pydata.org/numba-doc/0.13/index.html)." + "Numba is using the [LLVM compiler infrastructure](http://llvm.org) for compiling Python code to machine code. Its strength is to work with NumPy arrays to speed-up the code. If you want to read more about Numba, please see refer to the original [website and documentation](http://numba.pydata.org/numba-doc/0.13/index.html)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "
\n", "Here is our \"classic\" approach in Python, where I removed the list comprehensions, since they caused errors in the Numba compilation." ] }, @@ -1556,8 +1590,17 @@ "cell_type": "code", "collapsed": false, "input": [ - "#%pylab inline\n", - "#import matplotlib.pyplot as plt\n", + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", "\n", "plt.figure(figsize=(10,8))\n", "\n", @@ -1591,7 +1634,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Without making any modifications to the original code in order to account for the strengths of Numba (Numpy) and Cython (static type declarations), we see that Cython performs significantly better than Numba." + "Without making any modifications to the original Python code - thereby we are not accounting for the particular strengths of Numba (Numpy) and Cython (static type declarations), we see that Cython performs significantly better than Numba." ] }, { @@ -1622,7 +1665,7 @@ "metadata": {}, "source": [ "In the sections above, we have been using the simplest approach to Cython without using static type declarations and thereby neglecting one of its major strengths. \n", - "Let us now see how we can further improve the Cython implementation of our \"classic least squares approach\" by adding those type declarations." + "Now, let us see how and if we can further improve the Cython implementation of our \"classic least squares approach\" by adding those type declarations." ] }, { @@ -1649,7 +1692,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 44 + "prompt_number": 21 }, { "cell_type": "markdown", @@ -1666,7 +1709,8 @@ ], "language": "python", "metadata": {}, - "outputs": [] + "outputs": [], + "prompt_number": 23 }, { "cell_type": "code", @@ -1686,7 +1730,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 45 + "prompt_number": 24 }, { "cell_type": "markdown", @@ -1714,7 +1758,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 55 + "prompt_number": 25 }, { "cell_type": "markdown", @@ -1748,14 +1792,23 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 58 + "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ - "#%pylab inline\n", - "#import matplotlib.pyplot as plt\n", + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", "\n", "plt.figure(figsize=(10,8))\n", "\n", @@ -1777,13 +1830,13 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\n", + "png": "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\nBf2Ep79PRkYGHo+HRYsW0dbWxne+8x2+9rWv8eabbwLQ09NDSkpK4OuTk5M/kbUmInIuHR3wzDPQ\n2goJCWbj8unT7a5KROTMzro4W79+fWBx9vTTT4/Z4uz0K2cJCQks/mgn4czMTB555BFycnLo7e0l\nISGBxMREurq6Al/f2dlJYmLiGd977dq15OXlAZCamsqiRYsCq+uTT3foWMfhfnzdddc5qp7xPj5y\nBH72s3IGB6Gs7Dq++lXYubOcgwedUd+pxyc5pR4d69iJxyfPOaWeC/l8l5eXU19fz6eZ8I3Pf/jD\nH3Ls2LHAAwGna25uJicnh87OTpKSkrj66qu56667AjNvTzzxBE888QTvvffeqO/TAwEicrrqanjl\nFfD5ID8fvvIViIuzuyoRkTHIORsLPp+PgYEBRkZG8Pl8DA4OMjIywt/+9jdqa2vx+/20t7fzve99\nj6VLl5KUlATAN77xDX7xi1/g9XppaGjgF7/4xZjOwMn4Ov2KgNgvHHpiWWYbpo0bzcLsiivM5uVO\nXpiFQ1+CjXriTOHQlwvaW/NS/PSnP+UnP/lJ4Pg///M/efjhhykoKOB//I//QUtLC8nJyXz+859n\n/fr1ga+79957OXjwIAsWLADgm9/8Jt/61rcmqmwRCTLDw/Dyy2YD88hIuPFGszgTEQkWE35bc7zo\ntqaIdHfDs89CQwPExsJtt5nbmSIiTnPJOWciIk7X1GSeyOzqgtRUcxszM9PuqkRELtx5z5zt3buX\nn/zkJ3znO98BYN++fVRXV49bYRIawmE2INiEYk9qa+HJJ83CbPp0sxVTsC3MQrEvwU49caZw6Mt5\nLc5eeOEFrr32WhoaGvh//+//AdDd3c0PfvCDcS1ORORcLAvee8/cyhwaMqGy3/iGyTITEQlW5zVz\nNnfuXJ599lkWLVrElClT6OjoYHh4mJycHNra2iaizk+lmTOR8OLzwR//CFVV5njZMrjmGm3FJCLB\n4ZJnzlpbW1l4hn1OIiMnLIlDRCSgvx+efx4OHYJJk2DlSrOBuYhIKDiv1dXixYt5+umnR5177rnn\nuELPp8unCIfZgGAT7D1pb4fHHzcLs8REuOuu0FiYBXtfQpF64kzh0JfzunL2m9/8huXLl/PEE0/Q\n19fH5z//efbv38/bb7893vWJiAQcOmSumPX3Q3Y2rFkDp2y9KyISEs4756y3t5fXXnuNw4cPM336\n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\n9cRGU6ZM4bLLLjvja+qLPdra2qisrOS73/0u0dHRTJ06lbVr1/L666+rJzY4/cqZU3tQVFREdXX1\nqFqrq6sD720rG+fdxsTq1autNWvWWL29vdaWLVuslJQUa8+ePXaXFZTuvfde68orrxw1eGlZHz9p\ns2HDBqu/v9964IEHrCVLlgRef/TRR6158+ZZDQ0N1rFjx6zCwkLrscceC7x+5ZVXWvfff7/V3///\nt3dvIVF1bRzA/6P16ngYdTLGEx7CSoJCkoJKUhEJyUqi0qnsrJIpEVQqkholIhnphdnhpiJmTC/T\nCyXF8CIzQSEys4KsqDR1sDFrGvH5Ll7aNKl8vt/X24z2/8EGF3ud9lo3j2vN2vuLctJmaGhIRESe\nPHkiGo1GOWmj1+tFr9crZfPy8iQmJkZMJpP09PSIn5+fNDY2/ssj4RjGx8dlYGBABgYG5MOHD3Ly\n5EnZsWOHDA0NcU7srLCwUNasWSODg4MyMjIi0dHRUlhYyHmxk8nJSQkICJCysjKZmJgQk8kkycnJ\nsmfPHs7JbzQxMSFfvnyRvLw8SUtLk69fv8rExITDzoHFYpGQkBCprKyUr1+/SmVlpYSGhorVav1N\nIzazOR+cjYyMSHJysri7u0tISIgYjUZ7d2lOevXqlahUKlGr1eLh4aFcBoNBRETu3bsnERERolar\nJS4uTnnlxnenT58WrVYrWq1WcnNzp9QdGxsrarVaIiIipLm52ea+wWCQ4OBgcXd3l+TkZDGZTMo9\ni8Uihw4dEo1GIzqdTi5duvQvjYDjKy4uVl6lIcI5sSer1SpZWVni7e0tfn5+cvz4cbFYLCLCebGX\n9vZ2iY6OFm9vb/H19ZWUlBQZHBwUEc7J71JUVCQqlcrmOnv2rIg47hx0dXVJVFSUqNVqiYqKku7u\n7l85JP8zfr6JiIiIyIHM6d+cEREREc03DM6IiIiIHAiDMyIiIiIHwuCMiIiIyIEwOCMiIiJyIAzO\niIiIiBwIgzMiIiIiB8LgjIj+eAcOHMCZM2d+aZ1Hjx7F+fPnf2mdRPRnWGDvDhAR2ZtKpZryPcD/\nV3V19S+tj4j+HFw5IyICwI+lEJGjYHBGRHZVVlaGoKAgaDQaREREoKWlBQDQ0dGBdevWwcfHBwEB\nAcjJyYHValXKOTk5obq6GkuXLoVGo0FhYSFevnyJdevWwdvbG6mpqUr+1tZWBAUFobS0FIsXL0ZY\nWBgMBsOMfaqvr0dkZCR8fHywYcMGPH78eMa8J06cgE6ng5eXF1atWoWenh4AtlulW7Zsgaenp3I5\nOzvj1q1bAIDe3l4kJCRg0aJFiIiIQF1d3YxtxcbGorCwENHR0dBoNNi0aROGh4dnOdJENFcwOCMi\nu3n27BmqqqrQ2dmJT58+oampCaGhoQCABQsWoLKyEsPDw3jw4AGam5tx+fJlm/JNTU3o6upCe3s7\nysrKkJ6eDqPRiNevX+Px48cwGo1K3oGBAQwPD+Pdu3e4efMmMjIy8Pz58yl96urqwuHDh3H9+nWM\njIwgMzMTW7duxbdv36bkbWxsRFtbG54/f47R0VHU1dVBq9UCsN0qvXv3LsxmM8xmM2pra+Hv74/4\n+Hh8/vwZCQkJ2Lt3Lz5+/IiamhpkZWXh6dOnM46Z0WjEjRs3MDg4iG/fvqG8vPwfjzsROTYGZ0Rk\nN87OzrBYLHjy5AmsViuCg4OxZMkSAMDq1auxdu1aODk5ISQkBBkZGbh//75N+dOnT8PDwwMrVqzA\nypUrkZiYiNDQUGg0GiQmJqKrq8sm/7lz57Bw4UJs3LgRmzdvxp07d5R73wOpa9euITMzE2vWrIFK\npcK+ffvg4uKC9vb2Kf3/66+/YDab8fTpU0xOTmL58uXw8/NT7v+8VdrX14cDBw6gtrYWgYGBqK+v\nR1hYGPbv3w8nJydERkZi+/btM66eqVQqHDx4EOHh4XB1dcWuXbvQ3d39D0aciOYCBmdEZDfh4eGo\nqKhAcXExdDod9Ho93r9/D+DvQCYpKQn+/v7w8vJCQUHBlC08nU6n/K1Wq23Srq6uGBsbU9I+Pj5Q\nq9VKOiQkRGnrR/39/bh48SJ8fHyU6+3bt9PmjYuLQ3Z2No4dOwadTofMzEyYzeZpn3V0dBTbtm1D\nSUkJ1q9fr7T18OFDm7YMBgMGBgZmHLMfgz+1Wm3zjEQ0PzA4IyK70uv1aGtrQ39/P1QqFXJzcwH8\n/SqKFStW4MWLFxgdHUVJSQkmJydnXe/Ppy9NJhPGx8eVdH9/PwICAqaUCw4ORkFBAUwmk3KNjY0h\nJSVl2nZycnLQ2dmJnp4e9PX14cKFC1PyTE5OYvfu3YiPj8eRI0ds2oqJibFpy2w2o6qqatbPSUTz\nD4MzIrKbvr4+tLS0wGKxwMXFBa6urnB2dgYAjI2NwdPTE25ubujt7Z3Vqyl+3Eac7vRlUVERrFYr\n2tra0NDQgJ07dyp5v+dPT0/HlStX0NHRARHB58+f0dDQMO0KVWdnJx4+fAir1Qo3Nzeb/v/YfkFB\nAcbHx1FRUWFTPikpCX19fbh9+zasViusVisePXqE3t7eWT0jEc1PDM6IyG4sFgvy8/OxePFi+Pv7\nY2hoCKWlpQCA8vJyGAwGaDQaZGRkIDU11WY1bLr3kv18/8e0n5+fcvIzLS0NV69exbJly6bkjYqK\nwvXr15GdnQ2tVoulS5cqJyt/9unTJ2RkZECr1SI0NBS+vr44derUlDpramqU7cvvJzaNRiM8PDzQ\n1NSEmpoaBAYGwt/fH/n5+dMePpjNMxLR/KAS/htGRPNca2sr0tLS8ObNG3t3hYjov+LKGREREZED\nYXBGRH8Ebv8R0VzBbU0iIiIiB8KVMyIiIiIHwuCMiIiIyIEwOCMiIiJyIAzOiIiIiBwIgzMiIiIi\nB/IfaLkgtnNsZy4AAAAASUVORK5CYII=\n", "text": [ - "" + "" ] } ], - "prompt_number": 59 + "prompt_number": 27 }, { "cell_type": "markdown", @@ -1791,7 +1844,8 @@ "source": [ "
\n", "
\n", - "The improvement is pretty significant when static type declarations are used. One more experiment to see by how much we could improve our \"classic least squares\" code via Cython compared to the initial Python implementation.\n", + "The improvement is pretty significant when static type declarations are used. \n", + "One more experiment to see by how much we could improve our \"classic least squares\" code via Cython compared to the initial Python implementation:\n", "
\n", "
" ] @@ -1809,7 +1863,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 60 + "prompt_number": 30 }, { "cell_type": "code", @@ -1832,20 +1886,30 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 61 + "prompt_number": 31 }, { "cell_type": "code", "collapsed": false, "input": [ - "#%pylab inline\n", - "#import matplotlib.pyplot as plt\n", + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", "\n", "x_pos = np.arange(len(funcs[1:]))\n", "plt.bar(x_pos, times_rel, align='center', alpha=0.5, color=\"green\")\n", "plt.xticks(x_pos, labels[1:], rotation=90)\n", - "plt.ylabel('relative performance gain')\n", - "plt.title('Performance gain compared to the classic least square implementation')\n", + "plt.ylabel('rel. performance gain')\n", + "plt.title('Performance gain compared to the classic least square'\\\n", + " '(n={})'.format(len(x)))\n", "plt.grid()\n", "plt.show()" ], @@ -1855,13 +1919,13 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\n", + "png": "iVBORw0KGgoAAAANSUhEUgAAAdUAAAHnCAYAAADuC8dRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdUFPcWB/DvIEhHepGuIGAJaNBn1NhiLyHYY8WWRJNn\nNM0WItanSSwxaiwxYkQxsUejGGM3MZYoJCoqlgUsoKCiokjxvj88zDICiro4uz/u5xzOYX87O3vv\nlrk7c6dIRERgjDHG2AszUjsAxhhjTBRcVBljjDEd4aLKGGOM6QgXVcYYY0xHuKgyxhhjOsJFlTHG\nGNMRVYtqfn4+Bg0aBEdHRxgZGWHfvn1qhiOsPXv2wMjICFeuXFE7FKFERESgdevWqsYQFRUFf39/\nVZ7bx8cHU6dOfWnP17x5c7zzzjvP/XiNRgMjIyP8+eefOoyKPY6I8Oqrr2LNmjVqh6IzMTExaNiw\nYZmmfWpRjYiIgJGREYyMjGBiYgIfHx8MGzYMN27ceOFA161bh9jYWGzZsgVpaWl47bXXXnierLjG\njRsjLS0Nbm5uaociHEmSSr3v0qVLOvuxqMt56YokSU/MX9c2btyIWbNmvbTn0xU/Pz9MnDhR7TBe\nmlWrVuHBgwfo3r17uT5P0dpU+FepUiU8fPhQMd3WrVsREhICMzMz+Pr6Yvbs2cXmdejQITRq1Ajm\n5uaoWrUqxo0bp5hP7969cfPmTaxbt+6pcZVpTbVp06ZIS0tDcnIy5s6di/Xr16N///5leWiJcnNz\nAQBJSUlwd3dHw4YN4ezsDBMTkxeaHyuZiYkJnJ2dX+oC0FDk5+e/0OPLcu4UXZ5fpSKfq8XW1hZW\nVlZqh/HMRPjePcsyds6cORg8eHA5RvOIJElybSr8u3r1KoyMtGXt6NGjCAsLQ8eOHZGQkICoqCiM\nGzcOixYtkqdJTU1F69atERQUhGPHjuG7777DokWLMH78eHkaIyMjDBgwAHPnzn16YPQUAwYMoFat\nWinGpk6dSpUqVaKcnBwiIoqNjaXg4GAyMzMjHx8f+uijjyg7O1uevlmzZjR48GD6/PPPyc3NjVxd\nXal58+YkSZL85+vrS0REubm5NHr0aHJ3d6fKlStTzZo1adWqVYrnlySJ5s6dS2+//TZVqVKFevbs\nScuWLSNjY2PavXs31a5dm8zNzalFixZ09epV2rVrFwUHB5OlpSW1atWKLl++LM/rwoULFB4eTlWr\nViULCwuqU6cOrVixQvF8zZo1oyFDhtCkSZPI1dWV7O3tqX///nT37l3FdKtXr6Z69eqRmZkZOTg4\nUPv27enmzZvy/XPnzqWAgAAyMzMjf39/mjp1KuXn5z/x9f/999+pdu3aZGZmRiEhIbRv3z6SJIli\nYmLkacaNG0dBQUFkYWFBnp6e9N5771FWVpZ8/+7du0mSJDnvwts7duyg119/nSwsLKhmzZq0bdu2\nJ8ZCRLRjxw5q0qQJWVhYUJUqVahZs2Z0/vx5+f6vvvqKfH19qXLlylS9enWaM2eO4vHe3t4UGRlJ\n7733HlWpUoVcXFxowYIFdP/+fRo+fDjZ2dmRu7s7zZs3T/E4SZLom2++oS5dupClpSW5u7vTN998\no5hmzpw5FBISQlZWVuTq6kq9evWiq1evFnsdfv31V2rcuDGZmZnRwoULy/TeZGZmUo8ePcjS0pJc\nXFzo888/p/79+xf7bjwec0mfcSKi6OhoCgoKosqVK5OHhwd9/vnnT/wslDavCRMmkJ+fH23atIkC\nAgLI0tKSmjdvTklJSYrHHz16lFq3bk1WVlbk5OREXbp0oeTk5FKfj4goLy+PoqKiqFq1amRqakru\n7u703//+V77fx8eHpk6dKt9euXIlNWjQgKpUqUKOjo7UsWNHOnv2rGKeU6dOlefn5OREbdu2pfv3\n7xMRUWpqKnXp0oUcHR3JzMyMqlWrRl999ZX82MLvYVHz5s2joKAgMjU1JWdnZ+ratWup+Vy8eJEk\nSaI//vhDHktLS6MBAwaQk5MTWVtbU+PGjWnfvn2Kxw0ZMoSqV69O5ubmVK1aNRo3bhw9ePBAvv9J\ncTdr1qzYe1fa637ixAlq06YN2drakqWlJQUFBSmWRRqNhtq2bUvm5ubk6elJc+fOLfaaeHt705Qp\nUxTzHTx4MDVv3ly+/dtvv1GzZs3I3t5e/g4fPnxY8ZjHl7G9evWSH9uoUSMyNzcnd3d3GjhwIGVm\nZsqPO3PmDEmSRBcvXiw2vwULFlDfvn3J2tqaPDw86H//+1+Jr0NZlVSbHvf2229T48aNFWOffvop\n+fj4yLfHjh1Lnp6eimnmz59PlpaWdO/ePXns5MmTJEkSpaSkPPE5y1RUW7durRibOXMmSZJEd+/e\npWXLlpGdnR3FxMTQxYsXad++ffTKK69Qv3795OmbNWtG1tbWNGzYMEpMTKQTJ07QjRs36JNPPiFf\n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\n", "text": [ - "" + "" ] } ], - "prompt_number": 63 + "prompt_number": 35 }, { "cell_type": "markdown", @@ -1897,7 +1961,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "List, set and dictionary comprehensions in Python do not only look prettier and are easier to read (at least most of the time) than nested loop structures, but they also come with some small performance benefits. \n", + "In Python, we have those wonderful list, set, and dictionary comprehensions, which do not only look prettier and are easier to read (at least most of the time) than nested loop structures, but they also additionally come with some small performance benefits. \n", "Does this also apply in Cython? Let's check it out." ] }, @@ -2347,8 +2411,17 @@ "cell_type": "code", "collapsed": false, "input": [ - "#%pylab inline\n", - "#import matplotlib.pyplot as plt\n", + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", "\n", "labels = [('cy_lstsqr', 'Cython implementation'), \n", " ('lin_lstsqr_mat', 'numpy matrix equation'),\n", From 3db65c76869ed380a0a31142e25de60369aeb96c Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 6 May 2014 14:45:03 -0400 Subject: [PATCH 023/248] removed temp files --- .gitignore | 1 + ...t_so_obvious_python_stuff-checkpoint.ipynb | 3969 ----------------- .../palindrome_timeit-checkpoint.ipynb | 194 - .../python_true_false-checkpoint.ipynb | 578 --- ...cope_resolution_legb_rule-checkpoint.ipynb | 1092 ----- .../timeit_test-checkpoint.ipynb | 628 --- .../timeit_tests-checkpoint.ipynb | 1883 -------- .../cython_least_squares-checkpoint.ipynb | 2461 ---------- 8 files changed, 1 insertion(+), 10805 deletions(-) delete mode 100644 .ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb delete mode 100644 .ipynb_checkpoints/palindrome_timeit-checkpoint.ipynb delete mode 100644 .ipynb_checkpoints/python_true_false-checkpoint.ipynb delete mode 100644 .ipynb_checkpoints/scope_resolution_legb_rule-checkpoint.ipynb delete mode 100644 .ipynb_checkpoints/timeit_test-checkpoint.ipynb delete mode 100644 .ipynb_checkpoints/timeit_tests-checkpoint.ipynb delete mode 100644 benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb diff --git a/.gitignore b/.gitignore index bb14e0e..6a5bebb 100755 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +*.ipynb_checkpoints/ .DS_Store *.DS_Store *.pyc diff --git a/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb b/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb deleted file mode 100644 index 1e0ef3c..0000000 --- a/.ipynb_checkpoints/not_so_obvious_python_stuff-checkpoint.ipynb +++ /dev/null @@ -1,3969 +0,0 @@ -{ - "metadata": { - "name": "", - "signature": "sha256:0e1c6e74b301e23ea4146d660afb3f07765686c6c7fa4752f3a4495da7949787" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ - { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Sebastian Raschka \n", - "last updated: 05/03/2014 ([Changelog](#changelog))\n", - "\n", - "[Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb)\n", - "\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### All code was executed in Python 3.4" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# A collection of not-so-obvious Python stuff you should know!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "I am really looking forward to your comments and suggestions to improve and \n", - "extend this little collection! Just send me a quick note \n", - "via Twitter: [@rasbt](https://twitter.com/rasbt) \n", - "or Email: [bluewoodtree@gmail.com](mailto:bluewoodtree@gmail.com)\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Sections\n", - "- [The C3 class resolution algorithm for multiple class inheritance](#c3_class_res)\n", - "- [Assignment operators and lists - simple-add vs. add-AND operators](#pm_in_lists)\n", - "- [`True` and `False` in the datetime module](#datetime_module)\n", - "- [Python reuses objects for small integers - always use \"==\" for equality, \"is\" for identity](#python_small_int)\n", - "- [Shallow vs. deep copies if list contains other structures and objects](#shallow_vs_deep)\n", - "- [Picking `True` values from logical `and`s and `or`s](#false_true_expressions)\n", - "- [Don't use mutable objects as default arguments for functions!](#def_mutable_func)\n", - "- [Be aware of the consuming generator](#consuming_generator)\n", - "- [`bool` is a subclass of `int`](#bool_int)\n", - "- [About lambda-in-closures and-a-loop pitfall](#lambda_closure)\n", - "- [Python's LEGB scope resolution and the keywords `global` and `nonlocal`](#python_legb)\n", - "- [When mutable contents of immutable tuples aren't so mutable](#immutable_tuple)\n", - "- [List comprehensions are fast, but generators are faster!?](#list_generator)\n", - "- [Public vs. private class methods and name mangling](#private_class)\n", - "- [The consequences of modifying a list when looping through it](#looping_pitfall)\n", - "- [Dynamic binding and typos in variable names](#dynamic_binding)\n", - "- [List slicing using indexes that are \"out of range](#out_of_range_slicing)\n", - "- [Reusing global variable names and UnboundLocalErrors](#unboundlocalerror)\n", - "- [Creating copies of mutable objects](#copy_mutable)\n", - "- [Key differences between Python 2 and 3](#python_differences)\n", - "- [Function annotations - What are those `->`'s in my Python code?](#function_annotation)\n", - "- [Abortive statements in `finally` blocks](#finally_blocks)\n", - "- [Assigning types to variables as values](#variable_types)\n", - "- [Only the first clause of generators is evaluated immediately](#generator_rhs)\n", - "- [Keyword argument unpacking syntax - `*args` and `**kwargs`](#splat_op)\n", - "- [Metaclasses - What creates a new instance of a class?](#new_instance)\n", - "- [Else-clauses: \"conditional else\" and \"completion else\"](#else_clauses)\n", - "- [Interning of compile-time constants vs. run-time expressions](#string_interning)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## The C3 class resolution algorithm for multiple class inheritance" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we are dealing with multiple inheritance, according to the newer C3 class resolution algorithm, the following applies: \n", - "Assuming that child class C inherits from two parent classes A and B, \"class A should be checked before class B\".\n", - "\n", - "If you want to learn more, please read the [original blog](http://python-history.blogspot.ru/2010/06/method-resolution-order.html) post by Guido van Rossum.\n", - "\n", - "(Original source: [http://gistroll.com/rolls/21/horizontal_assessments/new](http://gistroll.com/rolls/21/horizontal_assessments/new))" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "class A(object):\n", - " def foo(self):\n", - " print(\"class A\")\n", - "\n", - "class B(object):\n", - " def foo(self):\n", - " print(\"class B\")\n", - "\n", - "class C(A, B):\n", - " pass\n", - "\n", - "C().foo()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "class A\n" - ] - } - ], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "So what actually happened above was that class `C` looked in the scope of the parent class `A` for the method `.foo()` first (and found it)!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "I received an email containing a suggestion which uses a more nested example to illustrate Guido van Rossum's point a little bit better:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "class A(object):\n", - " def foo(self):\n", - " print(\"class A\")\n", - "\n", - "class B(A):\n", - " pass\n", - "\n", - "class C(A):\n", - " def foo(self):\n", - " print(\"class C\")\n", - "\n", - "class D(B,C):\n", - " pass\n", - "\n", - "D().foo()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "class C\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here, class `D` searches in `B` first, which in turn inherits from `A` (note that class `C` also inherits from `A`, but has its own `.foo()` method) so that we come up with the search order: `D, B, C, A`. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Assignment operators and lists - simple-add vs. add-AND operators" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Python `list`s are mutable objects as we all know. So, if we are using the `+=` operator on `list`s, we extend the `list` by directly modifying the object directly. \n", - "\n", - "However, if we use the assigment via `my_list = my_list + ...`, we create a new list object, which can be demonstrated by the following code:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_list = []\n", - "print('ID:', id(a_list))\n", - "\n", - "a_list += [1]\n", - "print('ID (+=):', id(a_list))\n", - "\n", - "a_list = a_list + [2]\n", - "print('ID (list = list + ...):', id(a_list))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "ID: 4366496544\n", - "ID (+=): 4366496544\n", - "ID (list = list + ...): 4366495472\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Just for reference, the `.append()` and `.extends()` methods are modifying the `list` object in place, just as expected." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_list = []\n", - "print(a_list, '\\nID (initial):',id(a_list), '\\n')\n", - "\n", - "a_list.append(1)\n", - "print(a_list, '\\nID (append):',id(a_list), '\\n')\n", - "\n", - "a_list.extend([2])\n", - "print(a_list, '\\nID (extend):',id(a_list))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[] \n", - "ID (initial): 140704077653128 \n", - "\n", - "[1] \n", - "ID (append): 140704077653128 \n", - "\n", - "[1, 2] \n", - "ID (extend): 140704077653128\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## `True` and `False` in the datetime module\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\"It often comes as a big surprise for programmers to find (sometimes by way of a hard-to-reproduce bug) that, unlike any other time value, midnight (i.e. `datetime.time(0,0,0)`) is False. A long discussion on the python-ideas mailing list shows that, while surprising, that behavior is desirable\u2014at least in some quarters.\" \n", - "\n", - "(Original source: [http://lwn.net/SubscriberLink/590299/bf73fe823974acea/](http://lwn.net/SubscriberLink/590299/bf73fe823974acea/))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import datetime\n", - "\n", - "print('\"datetime.time(0,0,0)\" (Midnight) ->', bool(datetime.time(0,0,0)))\n", - "\n", - "print('\"datetime.time(1,0,0)\" (1 am) ->', bool(datetime.time(1,0,0)))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\"datetime.time(0,0,0)\" (Midnight) -> False\n", - "\"datetime.time(1,0,0)\" (1 am) -> True\n" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## Python reuses objects for small integers - use \"==\" for equality, \"is\" for identity\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This oddity occurs, because Python keeps an array of small integer objects (i.e., integers between -5 and 256, [see the doc](https://docs.python.org/2/c-api/int.html#PyInt_FromLong))." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a = 1\n", - "b = 1\n", - "print('a is b', bool(a is b))\n", - "True\n", - "\n", - "c = 999\n", - "d = 999\n", - "print('c is d', bool(c is d))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "a is b True\n", - "c is d False\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "(*I received a comment that this is in fact a CPython artefact and **must not necessarily be true** in all implementations of Python!*)\n", - "\n", - "So the take home message is: always use \"==\" for equality, \"is\" for identity!\n", - "\n", - "Here is a [nice article](http://python.net/%7Egoodger/projects/pycon/2007/idiomatic/handout.html#other-languages-have-variables) explaining it by comparing \"boxes\" (C language) with \"name tags\" (Python)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This example demonstrates that this applies indeed for integers in the range in -5 to 256:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('256 is 257-1', 256 is 257-1)\n", - "print('257 is 258-1', 257 is 258 - 1)\n", - "print('-5 is -6+1', -5 is -6+1)\n", - "print('-7 is -6-1', -7 is -6-1)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "256 is 257-1 True\n", - "257 is 258-1 False\n", - "-5 is -6+1 True\n", - "-7 is -6-1 False\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### And to illustrate the test for equality (`==`) vs. identity (`is`):" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a = 'hello world!'\n", - "b = 'hello world!'\n", - "print('a is b,', a is b)\n", - "print('a == b,', a == b)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "a is b, False\n", - "a == b, True\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We would think that identity would always imply equality, but this is not always true, as we can see in the next example:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a = float('nan')\n", - "print('a is a,', a is a)\n", - "print('a == a,', a == a)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "a is a, True\n", - "a == a, False\n" - ] - } - ], - "prompt_number": 12 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Shallow vs. deep copies if list contains other structures and objects\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Shallow copy**: \n", - "If we use the assignment operator to assign one list to another list, we just create a new name reference to the original list. If we want to create a new list object, we have to make a copy of the original list. This can be done via `a_list[:]` or `a_list.copy()`." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "list1 = [1,2]\n", - "list2 = list1 # reference\n", - "list3 = list1[:] # shallow copy\n", - "list4 = list1.copy() # shallow copy\n", - "\n", - "print('IDs:\\nlist1: {}\\nlist2: {}\\nlist3: {}\\nlist4: {}\\n'\n", - " .format(id(list1), id(list2), id(list3), id(list4)))\n", - "\n", - "list2[0] = 3\n", - "print('list1:', list1)\n", - "\n", - "list3[0] = 4\n", - "list4[1] = 4\n", - "print('list1:', list1)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "IDs:\n", - "list1: 4346366472\n", - "list2: 4346366472\n", - "list3: 4346366408\n", - "list4: 4346366536\n", - "\n", - "list1: [3, 2]\n", - "list1: [3, 2]\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Deep copy** \n", - "As we have seen above, a shallow copy works fine if we want to create a new list with contents of the original list which we want to modify independently. \n", - "\n", - "However, if we are dealing with compound objects (e.g., lists that contain other lists, [read here](https://docs.python.org/2/library/copy.html) for more information) it becomes a little trickier.\n", - "\n", - "In the case of compound objects, a shallow copy would create a new compound object, but it would just insert the references to the contained objects into the new compound object. In contrast, a deep copy would go \"deeper\" and create also new objects \n", - "for the objects found in the original compound object. \n", - "If you follow the code, the concept should become more clear:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from copy import deepcopy\n", - "\n", - "list1 = [[1],[2]]\n", - "list2 = list1.copy() # shallow copy\n", - "list3 = deepcopy(list1) # deep copy\n", - "\n", - "print('IDs:\\nlist1: {}\\nlist2: {}\\nlist3: {}\\n'\n", - " .format(id(list1), id(list2), id(list3)))\n", - "\n", - "list2[0][0] = 3\n", - "print('list1:', list1)\n", - "\n", - "list3[0][0] = 5\n", - "print('list1:', list1)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "IDs:\n", - "list1: 4377956296\n", - "list2: 4377961752\n", - "list3: 4377954928\n", - "\n", - "list1: [[3], [2]]\n", - "list1: [[3], [2]]\n" - ] - } - ], - "prompt_number": 25 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Picking `True` values from logical `and`s and `or`s" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "** Logical `or`: ** \n", - "\n", - "`a or b == a if a else b` \n", - "- If both values in `or` expressions are `True`, Python will select the first value (e.g., select `\"a\"` in `\"a\" or \"b\"`), and the second one in `and` expressions. \n", - "This is also called **short-circuiting** - we already know that the logical `or` must be `True` if the first value is `True` and therefore can omit the evaluation of the second value.\n", - "\n", - "** Logical `and`: ** \n", - "\n", - "`a and b == b if a else a` \n", - "- If both values in `and` expressions are `True`, Python will select the second value, since for a logical `and`, both values must be true.\n" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "result = (2 or 3) * (5 and 7)\n", - "print('2 * 7 =', result)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "2 * 7 = 14\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Don't use mutable objects as default arguments for functions!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Don't use mutable objects (e.g., dictionaries, lists, sets, etc.) as default arguments for functions! You might expect that a new list is created every time when we call the function without providing an argument for the default parameter, but this is not the case: **Python will create the mutable object (default parameter) the first time the function is defined - not when it is called**, see the following code:\n", - "\n", - "(Original source: [http://docs.python-guide.org/en/latest/writing/gotchas/](http://docs.python-guide.org/en/latest/writing/gotchas/)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def append_to_list(value, def_list=[]):\n", - " def_list.append(value)\n", - " return def_list\n", - "\n", - "my_list = append_to_list(1)\n", - "print(my_list)\n", - "\n", - "my_other_list = append_to_list(2)\n", - "print(my_other_list)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[1]\n", - "[1, 2]\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Another good example showing that demonstrates that default arguments are created when the function is created (**and not when it is called!**):" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import time\n", - "def report_arg(my_default=time.time()):\n", - " print(my_default)\n", - "\n", - "report_arg()\n", - "\n", - "time.sleep(5)\n", - "\n", - "report_arg()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1397764090.456688\n", - "1397764090.456688" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Be aware of the consuming generator" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Be aware of what is happening when combining \"`in`\" checks with generators, since they won't evaluate from the beginning once a position is \"consumed\"." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "gen = (i for i in range(5))\n", - "print('2 in gen,', 2 in gen)\n", - "print('3 in gen,', 3 in gen)\n", - "print('1 in gen,', 1 in gen) " - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "2 in gen, True\n", - "3 in gen, True\n", - "1 in gen, False\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Although this defeats the purpose of an generator (in most cases), we can convert a generator into a list to circumvent the problem. " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "gen = (i for i in range(5))\n", - "a_list = list(gen)\n", - "print('2 in l,', 2 in a_list)\n", - "print('3 in l,', 3 in a_list)\n", - "print('1 in l,', 1 in a_list) " - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "2 in l, True\n", - "3 in l, True\n", - "1 in l, True\n" - ] - } - ], - "prompt_number": 27 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## `bool` is a subclass of `int`\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Chicken or egg? In the history of Python (Python 2.2 to be specific) truth values were implemented via 1 and 0 (similar to the old C). In order to avoid syntax errors in old (but perfectly working) Python code, `bool` was added as a subclass of `int` in Python 2.3.\n", - "\n", - "Original source: [http://www.peterbe.com/plog/bool-is-int](http://www.peterbe.com/plog/bool-is-int)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('isinstance(True, int):', isinstance(True, int))\n", - "print('True + True:', True + True)\n", - "print('3*True + True:', 3*True + True)\n", - "print('3*True - False:', 3*True - False)\n" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "isinstance(True, int): True\n", - "True + True: 2\n", - "3*True + True: 4\n", - "3*True - False: 3\n" - ] - } - ], - "prompt_number": 28 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## About lambda-in-closures-and-a-loop pitfall" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Remember the section about the [\"consuming generators\"](consuming_generators)? This example is somewhat related, but the result might still come unexpected. \n", - "\n", - "(Original source: [http://openhome.cc/eGossip/Blog/UnderstandingLambdaClosure3.html](http://openhome.cc/eGossip/Blog/UnderstandingLambdaClosure3.html))\n", - "\n", - "In the first example below, we call a `lambda` function in a list comprehension, and the value `i` will be dereferenced every time we call `lambda` within the scope of the list comprehension. Since the list is already constructed when we `for-loop` through the list, it will be set to the last value 4." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_list = [lambda: i for i in range(5)]\n", - "for l in my_list:\n", - " print(l())" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "4\n", - "4\n", - "4\n", - "4\n", - "4\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This, however, does not apply to generators:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_gen = (lambda: n for n in range(5))\n", - "for l in my_gen:\n", - " print(l())" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0\n", - "1\n", - "2\n", - "3\n", - "4\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And if you are really keen on using lists, there is a nifty trick that circumvents this problem as a reader nicely pointed out in the comments: We can simply pass the loop variable `i` as a default argument to the lambdas." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_list = [lambda x=i: x for i in range(5)]\n", - "for l in my_list:\n", - " print(l())" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0\n", - "1\n", - "2\n", - "3\n", - "4\n" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Python's LEGB scope resolution and the keywords `global` and `nonlocal`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "There is nothing particularly surprising about Python's LEGB scope resolution (Local -> Enclosed -> Global -> Built-in), but it is still useful to take a look at some examples!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### `global` vs. `local`\n", - "\n", - "According to the LEGB rule, Python will first look for a variable in the local scope. So if we set the variable `x = 1` `local`ly in the function's scope, it won't have an effect on the `global` `x`." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "x = 0\n", - "def in_func():\n", - " x = 1\n", - " print('in_func:', x)\n", - " \n", - "in_func()\n", - "print('global:', x)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "in_func: 1\n", - "global: 0\n" - ] - } - ], - "prompt_number": 31 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we want to modify the `global` x via a function, we can simply use the `global` keyword to import the variable into the function's scope:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "x = 0\n", - "def in_func():\n", - " global x\n", - " x = 1\n", - " print('in_func:', x)\n", - " \n", - "in_func()\n", - "print('global:', x)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "in_func: 1\n", - "global: 1\n" - ] - } - ], - "prompt_number": 34 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### `local` vs. `enclosed`\n", - "\n", - "Now, let us take a look at `local` vs. `enclosed`. Here, we set the variable `x = 1` in the `outer` function and set `x = 1` in the enclosed function `inner`. Since `inner` looks in the local scope first, it won't modify `outer`'s `x`." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def outer():\n", - " x = 1\n", - " print('outer before:', x)\n", - " def inner():\n", - " x = 2\n", - " print(\"inner:\", x)\n", - " inner()\n", - " print(\"outer after:\", x)\n", - "outer()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "outer before: 1\n", - "inner: 2\n", - "outer after: 1\n" - ] - } - ], - "prompt_number": 36 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here is where the `nonlocal` keyword comes in handy - it allows us to modify the `x` variable in the `enclosed` scope:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def outer():\n", - " x = 1\n", - " print('outer before:', x)\n", - " def inner():\n", - " nonlocal x\n", - " x = 2\n", - " print(\"inner:\", x)\n", - " inner()\n", - " print(\"outer after:\", x)\n", - "outer()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "outer before: 1\n", - "inner: 2\n", - "outer after: 2\n" - ] - } - ], - "prompt_number": 35 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## When mutable contents of immutable tuples aren't so mutable" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As we all know, tuples are immutable objects in Python, right!? But what happens if they contain mutable objects? \n", - "\n", - "First, let us have a look at the expected behavior: a `TypeError` is raised if we try to modify immutable types in a tuple: " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "tup = (1,)\n", - "tup[0] += 1" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "'tuple' object does not support item assignment", - "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[0mtup\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mtup\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" - ] - } - ], - "prompt_number": 41 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### But what if we put a mutable object into the immutable tuple? Well, modification works, but we **also** get a `TypeError` at the same time." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "tup = ([],)\n", - "print('tup before: ', tup)\n", - "tup[0] += [1]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "tup before: ([],)\n" - ] - }, - { - "ename": "TypeError", - "evalue": "'tuple' object does not support item assignment", - "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[0mtup\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'tup before: '\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtup\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mtup\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+=\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[0m", - "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" - ] - } - ], - "prompt_number": 42 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('tup after: ', tup)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "tup after: ([1],)\n" - ] - } - ], - "prompt_number": 43 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "However, **there are ways** to modify the mutable contents of the tuple without raising the `TypeError`, the solution is the `.extend()` method, or alternatively `.append()` (for lists):" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "tup = ([],)\n", - "print('tup before: ', tup)\n", - "tup[0].extend([1])\n", - "print('tup after: ', tup)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "tup before: ([],)\n", - "tup after: ([1],)\n" - ] - } - ], - "prompt_number": 44 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "tup = ([],)\n", - "print('tup before: ', tup)\n", - "tup[0].append(1)\n", - "print('tup after: ', tup)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "tup before: ([],)\n", - "tup after: ([1],)\n" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Explanation\n", - "\n", - "**A. Jesse Jiryu Davis** has a nice explanation for this phenomenon (Original source: [http://emptysqua.re/blog/python-increment-is-weird-part-ii/](http://emptysqua.re/blog/python-increment-is-weird-part-ii/))\n", - "\n", - "If we try to extend the list via `+=` *\"then the statement executes `STORE_SUBSCR`, which calls the C function `PyObject_SetItem`, which checks if the object supports item assignment. In our case the object is a tuple, so `PyObject_SetItem` throws the `TypeError`. Mystery solved.\"*" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### One more note about the `immutable` status of tuples. Tuples are famous for being immutable. However, how comes that this code works?" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_tup = (1,)\n", - "my_tup += (4,)\n", - "my_tup = my_tup + (5,)\n", - "print(my_tup)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "(1, 4, 5)\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "What happens \"behind\" the curtains is that the tuple is not modified, but every time a new object is generated, which will inherit the old \"name tag\":" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_tup = (1,)\n", - "print(id(my_tup))\n", - "my_tup += (4,)\n", - "print(id(my_tup))\n", - "my_tup = my_tup + (5,)\n", - "print(id(my_tup))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "4337381840\n", - "4357415496\n", - "4357289952\n" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## List comprehensions are fast, but generators are faster!?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\"List comprehensions are fast, but generators are faster!?\" - No, not really (or significantly, see the benchmarks below). So what's the reason to prefer one over the other?\n", - "- use lists if you want to use the plethora of list methods \n", - "- use generators when you are dealing with huge collections to avoid memory issues" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "def plainlist(n=100000):\n", - " my_list = []\n", - " for i in range(n):\n", - " if i % 5 == 0:\n", - " my_list.append(i)\n", - " return my_list\n", - "\n", - "def listcompr(n=100000):\n", - " my_list = [i for i in range(n) if i % 5 == 0]\n", - " return my_list\n", - "\n", - "def generator(n=100000):\n", - " my_gen = (i for i in range(n) if i % 5 == 0)\n", - " return my_gen\n", - "\n", - "def generator_yield(n=100000):\n", - " for i in range(n):\n", - " if i % 5 == 0:\n", - " yield i" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### To be fair to the list, let us exhaust the generators:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def test_plainlist(plain_list):\n", - " for i in plain_list():\n", - " pass\n", - "\n", - "def test_listcompr(listcompr):\n", - " for i in listcompr():\n", - " pass\n", - "\n", - "def test_generator(generator):\n", - " for i in generator():\n", - " pass\n", - "\n", - "def test_generator_yield(generator_yield):\n", - " for i in generator_yield():\n", - " pass\n", - "\n", - "print('plain_list: ', end = '')\n", - "%timeit test_plainlist(plainlist)\n", - "print('\\nlistcompr: ', end = '')\n", - "%timeit test_listcompr(listcompr)\n", - "print('\\ngenerator: ', end = '')\n", - "%timeit test_generator(generator)\n", - "print('\\ngenerator_yield: ', end = '')\n", - "%timeit test_generator_yield(generator_yield)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "plain_list: 10 loops, best of 3: 22.4 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "listcompr: 10 loops, best of 3: 20.8 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "generator: 10 loops, best of 3: 22 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "generator_yield: 10 loops, best of 3: 21.9 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 13 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Public vs. private class methods and name mangling\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Who has not stumbled across this quote \"we are all consenting adults here\" in the Python community, yet? Unlike in other languages like C++ (sorry, there are many more, but that's one I am most familiar with), we can't really protect class methods from being used outside the class (i.e., by the API user). \n", - "All we can do is to indicate methods as private to make clear that they are better not used outside the class, but it is really up to the class user, since \"we are all consenting adults here\"! \n", - "So, when we want to mark a class method as private, we can put a single underscore in front of it. \n", - "If we additionally want to avoid name clashes with other classes that might use the same method names, we can prefix the name with a double-underscore to invoke the name mangling.\n", - "\n", - "This doesn't prevent the class user to access this class member though, but he has to know the trick and also knows that it his own risk...\n", - "\n", - "Let the following example illustrate what I mean:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "class my_class():\n", - " def public_method(self):\n", - " print('Hello public world!')\n", - " def __private_method(self):\n", - " print('Hello private world!')\n", - " def call_private_method_in_class(self):\n", - " self.__private_method()\n", - " \n", - "my_instance = my_class()\n", - "\n", - "my_instance.public_method()\n", - "my_instance._my_class__private_method()\n", - "my_instance.call_private_method_in_class()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Hello public world!\n", - "Hello private world!\n", - "Hello private world!\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## The consequences of modifying a list when looping through it" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "It can be really dangerous to modify a list when iterating through it - this is a very common pitfall that can cause unintended behavior! \n", - "Look at the following examples, and for a fun exercise: try to figure out what is going on before you skip to the solution!" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a = [1, 2, 3, 4, 5]\n", - "for i in a:\n", - " if not i % 2:\n", - " a.remove(i)\n", - "print(a)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[1, 3, 5]\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "b = [2, 4, 5, 6]\n", - "for i in b:\n", - " if not i % 2:\n", - " b.remove(i)\n", - "print(b)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[4, 5]\n" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "**The solution** is that we are iterating through the list index by index, and if we remove one of the items in-between, we inevitably mess around with the indexing, look at the following example, and it will become clear:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "b = [2, 4, 5, 6]\n", - "for index, item in enumerate(b):\n", - " print(index, item)\n", - " if not item % 2:\n", - " b.remove(item)\n", - "print(b)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0 2\n", - "1 5\n", - "2 6\n", - "[4, 5]\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Dynamic binding and typos in variable names\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Be careful, dynamic binding is convenient, but can also quickly become dangerous!" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('first list:')\n", - "for i in range(3):\n", - " print(i)\n", - " \n", - "print('\\nsecond list:')\n", - "for j in range(3):\n", - " print(i) # I (intentionally) made typo here!" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "first list:\n", - "0\n", - "1\n", - "2\n", - "\n", - "second list:\n", - "2\n", - "2\n", - "2\n" - ] - } - ], - "prompt_number": 14 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## List slicing using indexes that are \"out of range\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As we have all encountered it 1 (x10000) time(s) in our live, the infamous `IndexError`:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_list = [1, 2, 3, 4, 5]\n", - "print(my_list[5])" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "IndexError", - "evalue": "list index out of range", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mIndexError\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[0mmy_list\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m5\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmy_list\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mIndexError\u001b[0m: list index out of range" - ] - } - ], - "prompt_number": 15 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "But suprisingly, it is not raised when we are doing list slicing, which can be a really pain for debugging:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_list = [1, 2, 3, 4, 5]\n", - "print(my_list[5:])" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[]\n" - ] - } - ], - "prompt_number": 16 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## Reusing global variable names and `UnboundLocalErrors`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Usually, it is no problem to access global variables in the local scope of a function:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def my_func():\n", - " print(var)\n", - "\n", - "var = 'global'\n", - "my_func()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "global\n" - ] - } - ], - "prompt_number": 37 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And is also no problem to use the same variable name in the local scope without affecting the local counterpart: " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def my_func():\n", - " var = 'locally changed'\n", - "\n", - "var = 'global'\n", - "my_func()\n", - "print(var)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "global\n" - ] - } - ], - "prompt_number": 38 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "But we have to be careful if we use a variable name that occurs in the global scope, and we want to access it in the local function scope if we want to reuse this name:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def my_func():\n", - " print(var) # want to access global variable\n", - " var = 'locally changed' # but Python thinks we forgot to define the local variable!\n", - " \n", - "var = 'global'\n", - "my_func()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "UnboundLocalError", - "evalue": "local variable 'var' referenced before assignment", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mUnboundLocalError\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 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mvar\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'global'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mmy_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m\u001b[0m in \u001b[0;36mmy_func\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmy_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# want to access global variable\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mvar\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'locally changed'\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[0mvar\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'global'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mUnboundLocalError\u001b[0m: local variable 'var' referenced before assignment" - ] - } - ], - "prompt_number": 40 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this case, we have to use the `global` keyword!" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def my_func():\n", - " global var\n", - " print(var) # want to access global variable\n", - " var = 'locally changed' # changes the gobal variable\n", - "\n", - "var = 'global'\n", - "\n", - "my_func()\n", - "print(var)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "global\n", - "locally changed\n" - ] - } - ], - "prompt_number": 43 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Creating copies of mutable objects\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's assume a scenario where we want to duplicate sub`list`s of values stored in another list. If we want to create independent sub`list` object, using the arithmetic multiplication operator could lead to rather unexpected (or undesired) results:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_list1 = [[1, 2, 3]] * 2\n", - "\n", - "print('initially ---> ', my_list1)\n", - "\n", - "# modify the 1st element of the 2nd sublist\n", - "my_list1[1][0] = 'a'\n", - "print(\"after my_list1[1][0] = 'a' ---> \", my_list1)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "initially ---> [[1, 2, 3], [1, 2, 3]]\n", - "after my_list1[1][0] = 'a' ---> [['a', 2, 3], ['a', 2, 3]]\n" - ] - } - ], - "prompt_number": 24 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "In this case, we should better create \"new\" objects:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_list2 = [[1, 2, 3] for i in range(2)]\n", - "\n", - "print('initially: ---> ', my_list2)\n", - "\n", - "# modify the 1st element of the 2nd sublist\n", - "my_list2[1][0] = 'a'\n", - "print(\"after my_list2[1][0] = 'a': ---> \", my_list2)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "initially: ---> [[1, 2, 3], [1, 2, 3]]\n", - "after my_list2[1][0] = 'a': ---> [[1, 2, 3], ['a', 2, 3]]\n" - ] - } - ], - "prompt_number": 25 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "And here is the proof:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "for a,b in zip(my_list1, my_list2):\n", - " print('id my_list1: {}, id my_list2: {}'.format(id(a), id(b)))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "id my_list1: 4350764680, id my_list2: 4350766472\n", - "id my_list1: 4350764680, id my_list2: 4350766664\n" - ] - } - ], - "prompt_number": 26 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## Key differences between Python 2 and 3\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "There are some good articles already that are summarizing the differences between Python 2 and 3, e.g., \n", - "- [https://wiki.python.org/moin/Python2orPython3](https://wiki.python.org/moin/Python2orPython3)\n", - "- [https://docs.python.org/3.0/whatsnew/3.0.html](https://docs.python.org/3.0/whatsnew/3.0.html)\n", - "- [http://python3porting.com/differences.html](http://python3porting.com/differences.html)\n", - "- [https://docs.python.org/3/howto/pyporting.html](https://docs.python.org/3/howto/pyporting.html) \n", - "etc.\n", - "\n", - "But it might be still worthwhile, especially for Python newcomers, to take a look at some of those!\n", - "(Note: the the code was executed in Python 3.4.0 and Python 2.7.5 and copied from interactive shell sessions.)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "### Unicode...\n", - "####- Python 2: \n", - "We have ASCII `str()` types, separate `unicode()`, but no `byte` type\n", - "####- Python 3: \n", - "Now, we finally have Unicode (utf-8) `str`ings, and 2 byte classes: `byte` and `bytearray`s" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "#############\n", - "# Python 2\n", - "#############\n", - "\n", - ">>> type(unicode('is like a python3 str()'))\n", - "\n", - "\n", - ">>> type(b'byte type does not exist')\n", - "\n", - "\n", - ">>> 'they are really' + b' the same'\n", - "'they are really the same'\n", - "\n", - ">>> type(bytearray(b'bytearray oddly does exist though'))\n", - "\n", - "\n", - "#############\n", - "# Python 3\n", - "#############\n", - "\n", - ">>> print('strings are now utf-8 \\u03BCnico\\u0394\u00e9!')\n", - "strings are now utf-8 \u03bcnico\u0394\u00e9!\n", - "\n", - "\n", - ">>> type(b' and we have byte types for storing data')\n", - "\n", - "\n", - ">>> type(bytearray(b'but also bytearrays for those who prefer them over strings'))\n", - "\n", - "\n", - ">>> 'string' + b'bytes for data'\n", - "Traceback (most recent call last):s\n", - " File \"\", line 1, in \n", - "TypeError: Can't convert 'bytes' object to str implicitly" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### The print statement\n", - "Very trivial, but this change makes sense, Python 3 now only accepts `print`s with proper parentheses - just like the other function calls ..." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Python 2\n", - ">>> print 'Hello, World!'\n", - "Hello, World!\n", - ">>> print('Hello, World!')\n", - "Hello, World!\n", - "\n", - "# Python 3\n", - ">>> print('Hello, World!')\n", - "Hello, World!\n", - ">>> print 'Hello, World!'\n", - " File \"\", line 1\n", - " print 'Hello, World!'\n", - " ^\n", - "SyntaxError: invalid syntax" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And if we want to print the output of 2 consecutive print functions on the same line, you would use a comma in Python 2, and a `end=\"\"` in Python 3:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Python 2\n", - ">>> print \"line 1\", ; print 'same line'\n", - "line 1 same line\n", - "\n", - "# Python 3\n", - ">>> print(\"line 1\", end=\"\") ; print (\" same line\")\n", - "line 1 same line" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Integer division\n", - "This is a pretty dangerous thing if you are porting code, or executing Python 3 code in Python 2 since the change in integer-division behavior can often go unnoticed. \n", - "So, I still tend to use a `float(3)/2` or `3/2.0` instead of a `3/2` in my Python 3 scripts to save the Python 2 guys some trouble ... (PS: and vice versa, you can `from __future__ import division` in your Python 2 scripts)." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Python 2\n", - ">>> 3 / 2\n", - "1\n", - ">>> 3 // 2\n", - "1\n", - ">>> 3 / 2.0\n", - "1.5\n", - ">>> 3 // 2.0\n", - "1.0\n", - "\n", - "# Python 3\n", - ">>> 3 / 2\n", - "1.5\n", - ">>> 3 // 2\n", - "1\n", - ">>> 3 / 2.0\n", - "1.5\n", - ">>> 3 // 2.0\n", - "1.0" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### `xrange()` \n", - "`xrange()` was pretty popular in Python 2.x if you wanted to create an iterable object. The behavior was quite similar to a generator ('lazy evaluation'), but you could iterate over it infinitely. The advantage was that it was generally faster than `range()` (e.g., in a for-loop) - not if you had to iterate over the list multiple times, since the generation happens every time from scratch! \n", - "In Python 3, the `range()` was implemented like the `xrange()` function so that a dedicated `xrange()` function does not exist anymore." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Python 2\n", - "> python -m timeit 'for i in range(1000000):' ' pass'\n", - "10 loops, best of 3: 66 msec per loop\n", - "\n", - " > python -m timeit 'for i in xrange(1000000):' ' pass'\n", - "10 loops, best of 3: 27.8 msec per loop\n", - "\n", - "# Python 3\n", - "> python3 -m timeit 'for i in range(1000000):' ' pass'\n", - "10 loops, best of 3: 51.1 msec per loop\n", - "\n", - "> python3 -m timeit 'for i in xrange(1000000):' ' pass'\n", - "Traceback (most recent call last):\n", - " File \"/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py\", line 292, in main\n", - " x = t.timeit(number)\n", - " File \"/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py\", line 178, in timeit\n", - " timing = self.inner(it, self.timer)\n", - " File \"\", line 6, in inner\n", - " for i in xrange(1000000):\n", - "NameError: name 'xrange' is not defined" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Raising exceptions\n", - "\n", - "Where Python 2 accepts both notations, the 'old' and the 'new' way, Python 3 chokes (and raises a `SyntaxError` in turn) if we don't enclose the exception argument in parentheses:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Python 2\n", - ">>> raise IOError, \"file error\"\n", - "Traceback (most recent call last):\n", - " File \"\", line 1, in \n", - "IOError: file error\n", - ">>> raise IOError(\"file error\")\n", - "Traceback (most recent call last):\n", - " File \"\", line 1, in \n", - "IOError: file error\n", - "\n", - " \n", - "# Python 3 \n", - ">>> raise IOError, \"file error\"\n", - " File \"\", line 1\n", - " raise IOError, \"file error\"\n", - " ^\n", - "SyntaxError: invalid syntax\n", - ">>> raise IOError(\"file error\")\n", - "Traceback (most recent call last):\n", - " File \"\", line 1, in \n", - "OSError: file error" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Handling exceptions\n", - "\n", - "Also the handling of excecptions has slightly changed in Python 3. Now, we have to use the `as` keyword!" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Python 2\n", - ">>> try:\n", - "... blabla\n", - "... except NameError, err:\n", - "... print err, '--> our error msg'\n", - "... \n", - "name 'blabla' is not defined --> our error msg\n", - "\n", - "# Python 3\n", - ">>> try:\n", - "... blabla\n", - "... except NameError as err:\n", - "... print(err, '--> our error msg')\n", - "... \n", - "name 'blabla' is not defined --> our error msg" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### The `next()` function and `.next()` method\n", - "\n", - "Where you can use both function and method in Python 2.7.5, the `next()` function is all that remain in Python 3!" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Python 2\n", - ">>> my_generator = (letter for letter in 'abcdefg')\n", - ">>> my_generator.next()\n", - "'a'\n", - ">>> next(my_generator)\n", - "'b'\n", - "\n", - "# Python 3\n", - ">>> my_generator = (letter for letter in 'abcdefg')\n", - ">>> next(my_generator)\n", - "'a'\n", - ">>> my_generator.next()\n", - "Traceback (most recent call last):\n", - " File \"\", line 1, in \n", - "AttributeError: 'generator' object has no attribute 'next'" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### In Python 3.x for-loop variables don't leak into the global namespace anymore" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This goes back to a change that was made in Python 3.x and is described in [What\u2019s New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html) as follows:\n", - "\n", - "\"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope.\"" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "i = 1\n", - "print([i for i in range(5)])\n", - "print(i, '-> i in global')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[0, 1, 2, 3, 4]\n", - "1 -> i in global\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In Python 2.x this would print \n", - "`4 -> i in global`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## Function annotations - What are those `->`'s in my Python code?\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Have you ever seen any Python code that used colons inside the parantheses of a function definition?" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def foo1(x: 'insert x here', y: 'insert x^2 here'):\n", - " print('Hello, World')\n", - " return" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And what about the fancy arrow here?" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def foo2(x, y) -> 'Hi!':\n", - " print('Hello, World')\n", - " return" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 10 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Q: Is this valid Python syntax? \n", - "A: Yes!\n", - " \n", - " \n", - "Q: So, what happens if I *just call* the function? \n", - "A: Nothing!\n", - " \n", - "Here is the proof!" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "foo1(1,2)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Hello, World\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "foo2(1,2) " - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Hello, World\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**So, those are function annotations ... ** \n", - "- the colon for the function parameters \n", - "- the arrow for the return value \n", - "\n", - "You probably will never make use of them (or at least very rarely). Usually, we write good function documentations below the function as a docstring - or at least this is how I would do it (okay this case is a little bit extreme, I have to admit):" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def is_palindrome(a):\n", - " \"\"\"\n", - " Case-and punctuation insensitive check if a string is a palindrom.\n", - " \n", - " Keyword arguments:\n", - " a (str): The string to be checked if it is a palindrome.\n", - " \n", - " Returns `True` if input string is a palindrome, else False.\n", - " \n", - " \"\"\"\n", - " stripped_str = [l for l in my_str.lower() if l.isalpha()]\n", - " return stripped_str == stripped_str[::-1]\n", - " " - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "However, function annotations can be useful to indicate that work is still in progress in some cases. But they are optional and I see them very very rarely.\n", - "\n", - "As it is stated in [PEP3107](http://legacy.python.org/dev/peps/pep-3107/#fundamentals-of-function-annotations):\n", - "\n", - "1. Function annotations, both for parameters and return values, are completely optional.\n", - "\n", - "2. Function annotations are nothing more than a way of associating arbitrary Python expressions with various parts of a function at compile-time.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The nice thing about function annotations is their `__annotations__` attribute, which is dictionary of all the parameters and/or the `return` value you annotated." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "foo1.__annotations__" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 17, - "text": [ - "{'y': 'insert x^2 here', 'x': 'insert x here'}" - ] - } - ], - "prompt_number": 17 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "foo2.__annotations__" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 18, - "text": [ - "{'return': 'Hi!'}" - ] - } - ], - "prompt_number": 18 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**When are they useful?**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Function annotations can be useful for a couple of things \n", - "- Documentation in general\n", - "- pre-condition testing\n", - "- [type checking](http://legacy.python.org/dev/peps/pep-0362/#annotation-checker)\n", - " \n", - "..." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Abortive statements in `finally` blocks" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Python's `try-except-finally` blocks are very handy for catching and handling errors. The `finally` block is always executed whether an `exception` has been raised or not as illustrated in the following example." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def try_finally1():\n", - " try:\n", - " print('in try:')\n", - " print('do some stuff')\n", - " float('abc')\n", - " except ValueError:\n", - " print('an error occurred')\n", - " else:\n", - " print('no error occurred')\n", - " finally:\n", - " print('always execute finally')\n", - " \n", - "try_finally1()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "in try:\n", - "do some stuff\n", - "an error occurred\n", - "always execute finally\n" - ] - } - ], - "prompt_number": 24 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "But can you also guess what will be printed in the next code cell?" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def try_finally2():\n", - " try:\n", - " print(\"do some stuff in try block\")\n", - " return \"return from try block\"\n", - " finally:\n", - " print(\"do some stuff in finally block\")\n", - " return \"always execute finally\"\n", - " \n", - "print(try_finally2())" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "do some stuff in try block\n", - "do some stuff in finally block\n", - "always execute finally\n" - ] - } - ], - "prompt_number": 21 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "Here, the abortive `return` statement in the `finally` block simply overrules the `return` in the `try` block, since **`finally` is guaranteed to always be executed.** So, be careful using abortive statements in `finally` blocks!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#Assigning types to variables as values" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "I am not yet sure in which context this can be useful, but it is a nice fun fact to know that we can assign types as values to variables." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_var = str\n", - "a_var(123)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 1, - "text": [ - "'123'" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from random import choice\n", - "\n", - "a, b, c = float, int, str\n", - "for i in range(5):\n", - " j = choice([a,b,c])(i)\n", - " print(j, type(j))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0 \n", - "1 \n", - "2.0 \n", - "3 \n", - "4 \n" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Only the first clause of generators is evaluated immediately" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The main reason why we love to use generators in certain cases (i.e., when we are dealing with large numbers of computations) is that it only computes the next value when it is needed, which is also known as \"lazy\" evaluation.\n", - "However, the first clause of an generator is already checked upon it's creation, as the following example demonstrates:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "gen_fails = (i for i in 1/0)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "ZeroDivisionError", - "evalue": "division by zero", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgen_fails\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mZeroDivisionError\u001b[0m: division by zero" - ] - } - ], - "prompt_number": 18 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Certainly, this is a nice feature, since it notifies us about syntax erros immediately. However, this is (unfortunately) not the case if we have multiple cases in our generator." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "gen_succeeds = (i for i in range(5) for j in 1/0)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 19 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('But obviously fails when we iterate ...')\n", - "for i in gen_succeeds:\n", - " print(i)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "ZeroDivisionError", - "evalue": "division by zero", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mZeroDivisionError\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[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'But obviously fails when we iterate ...'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mgen_succeeds\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgen_succeeds\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mj\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mZeroDivisionError\u001b[0m: division by zero" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "But obviously fails when we iterate ...\n" - ] - } - ], - "prompt_number": 20 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##Keyword argument unpacking syntax - `*args` and `**kwargs`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Python has a very convenient \"keyword argument unpacking syntax\" (often also referred to as \"splat\"-operators). This is particularly useful, if we want to define a function that can take a arbitrary number of input arguments." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Single-asterisk (*args)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def a_func(*args):\n", - " print('type of args:', type(args))\n", - " print('args contents:', args)\n", - " print('1st argument:', args[0])\n", - "\n", - "a_func(0, 1, 'a', 'b', 'c')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "type of args: \n", - "args contents: (0, 1, 'a', 'b', 'c')\n", - "1st argument: 0\n" - ] - } - ], - "prompt_number": 55 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Double-asterisk (**kwargs)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def b_func(**kwargs):\n", - " print('type of kwargs:', type(kwargs))\n", - " print('kwargs contents: ', kwargs)\n", - " print('value of argument a:', kwargs['a'])\n", - " \n", - "b_func(a=1, b=2, c=3, d=4)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "type of kwargs: \n", - "kwargs contents: {'d': 4, 'a': 1, 'c': 3, 'b': 2}\n", - "value of argument a: 1\n" - ] - } - ], - "prompt_number": 56 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### (Partially) unpacking of iterables\n", - "Another useful application of the \"unpacking\"-operator is the unpacking of lists and other other iterables." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "val1, *vals = [1, 2, 3, 4, 5]\n", - "print('val1:', val1)\n", - "print('vals:', vals)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "val1: 1\n", - "vals: [2, 3, 4, 5]\n" - ] - } - ], - "prompt_number": 57 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Metaclasses - What creates a new instance of a class?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Usually, it is the `__init__` method when we think of instanciating a new object from a class. However, it is the static method `__new__` (it is not a class method!) that creates and returns a new instance before `__init__()` is called. \n", - "More specifically, this is what is returned: \n", - "`return super(, cls).__new__(subcls, *args, **kwargs)` \n", - "\n", - "For more information about the `__new__` method, please see the [documentation](https://www.python.org/download/releases/2.2/descrintro/#__new__).\n", - "\n", - "As a little experiment, let us screw with `__new__` so that it returns `None` and see if `__init__` will be executed:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "class a_class(object):\n", - " def __new__(clss, *args, **kwargs):\n", - " print('excecuted __new__')\n", - " return None\n", - " def __init__(self, an_arg):\n", - " print('excecuted __init__')\n", - " self.an_arg = an_arg\n", - " \n", - "a_object = a_class(1)\n", - "print('Type of a_object:', type(a_object))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "excecuted __new__\n", - "Type of a_object: \n" - ] - } - ], - "prompt_number": 53 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As we can see in the code above, `__init__` requires the returned instance from `__new__` in order to called. So, here we just created a `NoneType` object. \n", - "Let us override the `__new__`, now and let us confirm that `__init__` is called now to instantiate the new object\":" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "class a_class(object):\n", - " def __new__(cls, *args, **kwargs):\n", - " print('excecuted __new__')\n", - " inst = super(a_class, cls).__new__(cls)\n", - " return inst\n", - " def __init__(self, an_arg):\n", - " print('excecuted __init__')\n", - " self.an_arg = an_arg\n", - " \n", - "a_object = a_class(1)\n", - "print('Type of a_object:', type(a_object))\n", - "print('a_object.an_arg: ', a_object.an_arg)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "excecuted __new__\n", - "excecuted __init__\n", - "Type of a_object: \n", - "a_object.an_arg: 1\n" - ] - } - ], - "prompt_number": 54 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "for i in range(5):\n", - " if i == 1:\n", - " print('in for')\n", - "else:\n", - " print('in else')\n", - "print('after for-loop')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "in for\n", - "in else\n", - "after for-loop\n" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "for i in range(5):\n", - " if i == 1:\n", - " break\n", - "else:\n", - " print('in else')\n", - "print('after for-loop')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "after for-loop\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Else-clauses: \"conditional else\" and \"completion else\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "I would claim that the conditional \"else\" is every programmer's daily bread and butter. However, there is a second flavor of \"else\"-clauses in Python, which I will call \"completion else\" (for reason that will become clear later). \n", - "But first, let us take a look at our \"traditional\" conditional else that we all are familiar with. \n", - "### Conditional else:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# conditional else\n", - "\n", - "a_list = [1,2]\n", - "if a_list[0] == 1:\n", - " print('Hello, World!')\n", - "else:\n", - " print('Bye, World!')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Hello, World!\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# conditional else\n", - "\n", - "a_list = [1,2]\n", - "if a_list[0] == 2:\n", - " print('Hello, World!')\n", - "else:\n", - " print('Bye, World!')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Bye, World!\n" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Why am I showing those simple examples? I think they are good to highlight some of the key points: It is **either** the code under the `if` clause that is executed, **or** the code under the `else` block, but not both. \n", - "If the condition of the `if` clause evaluates to `True`, the `if`-block is exectured, and if it evaluated to `False`, it is the `else` block. \n", - "\n", - "### Completion else\n", - "**In contrast** to the **either...or*** situation that we know from the conditional `else`, the completion `else` is executed if a code block finished. \n", - "To show you an example, let us use `else` for error-handling:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Completion else (try-except)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "try:\n", - " print('first element:', a_list[0])\n", - "except IndexError:\n", - " print('raised IndexError')\n", - "else:\n", - " print('no error in try-block')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "first element: 1\n", - "no error in try-block\n" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "try:\n", - " print('third element:', a_list[2])\n", - "except IndexError:\n", - " print('raised IndexError')\n", - "else:\n", - " print('no error in try-block')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "raised IndexError\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "In the code above, we can see that the code under the **`else`-clause is only executed if the `try-block` was executed without encountering an error, i.e., if the `try`-block is \"complete\".** \n", - "The same rule applies to the \"completion\" `else` in while- and for-loops, which you can confirm in the following samples below." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Completion else (while-loop)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "i = 0\n", - "while i < 2:\n", - " print(i)\n", - " i += 1\n", - "else:\n", - " print('in else')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0\n", - "1\n", - "in else\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "i = 0\n", - "while i < 2:\n", - " print(i)\n", - " i += 1\n", - " break\n", - "else:\n", - " print('completed while-loop')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0\n" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Completion else (for-loop)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "for i in range(2):\n", - " print(i)\n", - "else:\n", - " print('completed for-loop')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0\n", - "1\n", - "completed for-loop\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "for i in range(2):\n", - " print(i)\n", - " break\n", - "else:\n", - " print('completed for-loop')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0\n" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Interning of compile-time constants vs. run-time expressions" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This might not be particularly useful, but it is nonetheless interesting: Python's interpreter is interning compile-time constants but not run-time expressions (note that this is implementation-specific).\n", - "\n", - "(Original source: [Stackoverflow](http://stackoverflow.com/questions/15541404/python-string-interning))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let us have a look at the simple example below. Here we are creating 3 variables and assign the value \"Hello\" to them in different ways before we test them for identity." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "hello1 = 'Hello'\n", - "\n", - "hello2 = 'Hell' + 'o'\n", - "\n", - "hello3 = 'Hell'\n", - "hello3 = hello3 + 'o'\n", - "\n", - "print('hello1 is hello2:', hello1 is hello2)\n", - "print('hello1 is hello3:', hello1 is hello3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "hello1 is hello2: True\n", - "hello1 is hello3: False\n" - ] - } - ], - "prompt_number": 34 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, how does it come that the first expression evaluates to true, but the second does not? To answer this question, we need to take a closer look at the underlying byte codes:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import dis\n", - "def hello1_func():\n", - " s = 'Hello'\n", - " return s\n", - "dis.dis(hello1_func)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - " 3 0 LOAD_CONST 1 ('Hello')\n", - " 3 STORE_FAST 0 (s)\n", - "\n", - " 4 6 LOAD_FAST 0 (s)\n", - " 9 RETURN_VALUE\n" - ] - } - ], - "prompt_number": 38 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def hello2_func():\n", - " s = 'Hell' + 'o'\n", - " return s\n", - "dis.dis(hello2_func)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - " 2 0 LOAD_CONST 3 ('Hello')\n", - " 3 STORE_FAST 0 (s)\n", - "\n", - " 3 6 LOAD_FAST 0 (s)\n", - " 9 RETURN_VALUE\n" - ] - } - ], - "prompt_number": 39 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def hello3_func():\n", - " s = 'Hell'\n", - " s = s + 'o'\n", - " return s\n", - "dis.dis(hello3_func)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - " 2 0 LOAD_CONST 1 ('Hell')\n", - " 3 STORE_FAST 0 (s)\n", - "\n", - " 3 6 LOAD_FAST 0 (s)\n", - " 9 LOAD_CONST 2 ('o')\n", - " 12 BINARY_ADD\n", - " 13 STORE_FAST 0 (s)\n", - "\n", - " 4 16 LOAD_FAST 0 (s)\n", - " 19 RETURN_VALUE\n" - ] - } - ], - "prompt_number": 40 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "It looks like that `'Hello'` and `'Hell'` + `'o'` are both evaluated and stored as `'Hello'` at compile-time, whereas the third version \n", - "`s = 'Hell'` \n", - "`s = s + 'o'` seems to be not interned. Let us quickly confirm the behavior with the following code:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print(hello1_func() is hello2_func())\n", - "print(hello1_func() is hello3_func())" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "True\n", - "False\n" - ] - } - ], - "prompt_number": 42 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally, to show that this hypothesis is the answer to this rather unexpected observation, let us `intern` the value manually:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import sys\n", - "\n", - "print(hello1_func() is sys.intern(hello3_func()))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "True\n" - ] - } - ], - "prompt_number": 45 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
\n", - "
\n", - "
\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Changelog" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 05/03/2014\n", - "- new section: else clauses: conditional vs. completion\n", - "- new section: Interning of compile-time constants vs. run-time expressions\n", - "\n", - "#### 05/02/2014\n", - "- new section in Python 3.x and Python 2.x key differences: for-loop leak\n", - "- new section: Metaclasses - What creates a new instance of a class? \n", - "\n", - "#### 05/01/2014\n", - "- new section: keyword argument unpacking syntax\n", - "\n", - "#### 04/27/2014\n", - "- minor fixes of typos \n", - "- new section: \"Only the first clause of generators is evaluated immediately\"" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [] - } - ], - "metadata": {} - } - ] -} \ No newline at end of file diff --git a/.ipynb_checkpoints/palindrome_timeit-checkpoint.ipynb b/.ipynb_checkpoints/palindrome_timeit-checkpoint.ipynb deleted file mode 100644 index ef0e33f..0000000 --- a/.ipynb_checkpoints/palindrome_timeit-checkpoint.ipynb +++ /dev/null @@ -1,194 +0,0 @@ -{ - "metadata": { - "name": "", - "signature": "sha256:6ea19109869c82ee989c8ea0599ec49401e74246a542ad0b7b05f6ef464bda19" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ - { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Sebastian Raschka 04/2014\n", - "\n", - "#Timing different Implementations of palindrome functions" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import re\n", - "import timeit\n", - "import string\n", - "\n", - "# All functions return True if an input string is a palindrome. Else returns False.\n", - "\n", - "\n", - "\n", - "####\n", - "#### case-insensitive ignoring punctuation characters\n", - "####\n", - "\n", - "def palindrome_short(my_str):\n", - " stripped_str = \"\".join(l.lower() for l in my_str if l.isalpha())\n", - " return stripped_str == stripped_str[::-1]\n", - "\n", - "def palindrome_regex(my_str):\n", - " return re.sub('\\W', '', my_str.lower()) == re.sub('\\W', '', my_str[::-1].lower())\n", - "\n", - "def palindrome_stringlib(my_str):\n", - " LOWERS = set(string.ascii_lowercase)\n", - " letters = [c for c in my_str.lower() if c in LOWERS]\n", - " return letters == letters[::-1]\n", - "\n", - "LOWERS = set(string.ascii_lowercase)\n", - "def palindrome_stringlib2(my_str):\n", - " letters = [c for c in my_str.lower() if c in LOWERS]\n", - " return letters == letters[::-1]\n", - "\n", - "def palindrome_isalpha(my_str):\n", - " stripped_str = [l for l in my_str.lower() if l.isalpha()]\n", - " return stripped_str == stripped_str[::-1]\n", - "\n", - "\n", - "\n", - "####\n", - "#### functions considering all characters (case-sensitive)\n", - "####\n", - "\n", - "def palindrome_reverse1(my_str):\n", - " return my_str == my_str[::-1]\n", - "\n", - "def palindrome_reverse2(my_str):\n", - " return my_str == ''.join(reversed(my_str))\n", - "\n", - "def palindrome_recurs(my_str):\n", - " if len(my_str) < 2:\n", - " return True\n", - " if my_str[0] != my_str[-1]:\n", - " return False\n", - " return palindrome(my_str[1:-1])\n", - "\n", - "\n", - "\n" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 10 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "test_str = \"Go hang a salami. I'm a lasagna hog.\"\n", - "\n", - "print('case-insensitive functions ignoring punctuation characters')\n", - "%timeit palindrome_short(test_str)\n", - "%timeit palindrome_regex(test_str)\n", - "%timeit palindrome_stringlib(test_str)\n", - "%timeit palindrome_stringlib2(test_str)\n", - "%timeit palindrome_isalpha(test_str)\n", - "\n", - "print('\\n\\nfunctions considering all characters (case-sensitive)')\n", - "%timeit palindrome_reverse1(test_str)\n", - "%timeit palindrome_reverse2(test_str)\n", - "%timeit palindrome_recurs(test_str)\n" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "case-insensitive functions ignoring punctuation characters\n", - "100000 loops, best of 3: 15.3 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "100000 loops, best of 3: 19.9 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "100000 loops, best of 3: 13.5 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "100000 loops, best of 3: 8.58 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "100000 loops, best of 3: 9.42 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "\n", - "functions considering all characters (case-sensitive)\n", - "1000000 loops, best of 3: 508 ns per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "100000 loops, best of 3: 3.08 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1000000 loops, best of 3: 480 ns per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [] - } - ], - "metadata": {} - } - ] -} \ No newline at end of file diff --git a/.ipynb_checkpoints/python_true_false-checkpoint.ipynb b/.ipynb_checkpoints/python_true_false-checkpoint.ipynb deleted file mode 100644 index b2786a2..0000000 --- a/.ipynb_checkpoints/python_true_false-checkpoint.ipynb +++ /dev/null @@ -1,578 +0,0 @@ -{ - "metadata": { - "name": "" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ - { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Sebastian Raschka, 03/2014 \n", - "Code was executed in Python 3.4.0" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "###`True` and `False` in the `datetime` module\n", - "\n", - "Pointed out in a nice article **\"A false midnight\"** at [http://lwn.net/SubscriberLink/590299/bf73fe823974acea/](http://lwn.net/SubscriberLink/590299/bf73fe823974acea/):\n", - "\n", - "*\"it often comes as a big surprise for programmers to find (sometimes by way of a hard-to-reproduce bug) that, \n", - "unlike any other time value, midnight (i.e. datetime.time(0,0,0)) is False. \n", - "A long discussion on the python-ideas mailing list shows that, while surprising, \n", - "that behavior is desirable\u2014at least in some quarters.\"*" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import datetime\n", - "\n", - "print('\"datetime.time(0,0,0)\" (Midnight) evaluates to', bool(datetime.time(0,0,0)))\n", - "\n", - "print('\"datetime.time(1,0,0)\" (1 am) evaluates to', bool(datetime.time(1,0,0)))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\"datetime.time(0,0,0)\" (Midnight) evaluates to False\n", - "\"datetime.time(1,0,0)\" (1 am) evaluates to True\n" - ] - } - ], - "prompt_number": 17 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Boolean `True`" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_true_val = True\n", - "\n", - "\n", - "print('my_true_val == True:', my_true_val == True)\n", - "print('my_true_val is True:', my_true_val is True)\n", - "\n", - "print('my_true_val == None:', my_true_val == None)\n", - "print('my_true_val is None:', my_true_val is None)\n", - "\n", - "print('my_true_val == False:', my_true_val == False)\n", - "print('my_true_val is False:', my_true_val is False)\n", - "\n", - "print(my_true_val\n", - "if my_true_val:\n", - " print('\"if my_true_val:\" is True')\n", - "else:\n", - " print('\"if my_true_val:\" is False')\n", - " \n", - "if not my_true_val:\n", - " print('\"if not my_true_val:\" is True')\n", - "else:\n", - " print('\"if not my_true_val:\" is False')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "my_true_val == True: True\n", - "my_true_val is True: True\n", - "my_true_val == None: False\n", - "my_true_val is None: False\n", - "my_true_val == False: False\n", - "my_true_val is False: False\n", - "\"if my_true_val:\" is True\n", - "\"if not my_true_val:\" is False\n" - ] - } - ], - "prompt_number": 83 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Boolean `False`" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_false_val = False\n", - "\n", - "\n", - "print('my_false_val == True:', my_false_val == True)\n", - "print('my_false_val is True:', my_false_val is True)\n", - "\n", - "print('my_false_val == None:', my_false_val == None)\n", - "print('my_false_val is None:', my_false_val is None)\n", - "\n", - "print('my_false_val == False:', my_false_val == False)\n", - "print('my_false_val is False:', my_false_val is False)\n", - "\n", - "\n", - "if my_false_val:\n", - " print('\"if my_false_val:\" is True')\n", - "else:\n", - " print('\"if my_false_val:\" is False')\n", - " \n", - "if not my_false_val:\n", - " print('\"if not my_false_val:\" is True')\n", - "else:\n", - " print('\"if not my_false_val:\" is False')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "my_false_val == True: False\n", - "my_false_val is True: False\n", - "my_false_val == None: False\n", - "my_false_val is None: False\n", - "my_false_val == False: True\n", - "my_false_val is False: True\n", - "\"if my_false_val:\" is False\n", - "\"if not my_false_val:\" is True\n" - ] - } - ], - "prompt_number": 76 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## `None` 'value'" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_none_var = None\n", - "\n", - "print('my_none_var == True:', my_none_var == True)\n", - "print('my_none_var is True:', my_none_var is True)\n", - "\n", - "print('my_none_var == None:', my_none_var == None)\n", - "print('my_none_var is None:', my_none_var is None)\n", - "\n", - "print('my_none_var == False:', my_none_var == False)\n", - "print('my_none_var is False:', my_none_var is False)\n", - "\n", - "\n", - "if my_none_var:\n", - " print('\"if my_none_var:\" is True')\n", - "else:\n", - " print('\"if my_none_var:\" is False')\n", - "\n", - "if not my_none_var:\n", - " print('\"if not my_none_var:\" is True')\n", - "else:\n", - " print('\"if not my_none_var:\" is False')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "my_none_var == True: False\n", - "my_none_var is True: False\n", - "my_none_var == None: True\n", - "my_none_var is None: True\n", - "my_none_var == False: False\n", - "my_none_var is False: False\n", - "\"if my_none_var:\" is False\n", - "\"if not my_none_var:\" is True\n" - ] - } - ], - "prompt_number": 62 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Empty String" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_empty_string = \"\"\n", - "\n", - "print('my_empty_string == True:', my_empty_string == True)\n", - "print('my_empty_string is True:', my_empty_string is True)\n", - "\n", - "print('my_empty_string == None:', my_empty_string == None)\n", - "print('my_empty_string is None:', my_empty_string is None)\n", - "\n", - "print('my_empty_string == False:', my_empty_string == False)\n", - "print('my_empty_string is False:', my_empty_string is False)\n", - "\n", - "\n", - "if my_empty_string:\n", - " print('\"if my_empty_string:\" is True')\n", - "else:\n", - " print('\"if my_empty_string:\" is False')\n", - " \n", - "if not my_empty_string:\n", - " print('\"if not my_empty_string:\" is True')\n", - "else:\n", - " print('\"if not my_empty_string:\" is False')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "my_empty_string == True: False\n", - "my_empty_string is True: False\n", - "my_empty_string == None: False\n", - "my_empty_string is None: False\n", - "my_empty_string == False: False\n", - "my_empty_string is False: False\n", - "\"if my_empty_string:\" is False\n", - "\"if my_empty_string:\" is True\n" - ] - } - ], - "prompt_number": 61 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Empty List\n", - "It is generally not a good idea to use the `==` to check for empty lists..." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_empty_list = []\n", - "\n", - "\n", - "print('my_empty_list == True:', my_empty_list == True)\n", - "print('my_empty_list is True:', my_empty_list is True)\n", - "\n", - "print('my_empty_list == None:', my_empty_list == None)\n", - "print('my_empty_list is None:', my_empty_list is None)\n", - "\n", - "print('my_empty_list == False:', my_empty_list == False)\n", - "print('my_empty_list is False:', my_empty_list is False)\n", - "\n", - "\n", - "if my_empty_list:\n", - " print('\"if my_empty_list:\" is True')\n", - "else:\n", - " print('\"if my_empty_list:\" is False')\n", - " \n", - "if not my_empty_list:\n", - " print('\"if not my_empty_list:\" is True')\n", - "else:\n", - " print('\"if not my_empty_list:\" is False')\n", - "\n", - "\n", - " \n" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "my_empty_list == True: False\n", - "my_empty_list is True: False\n", - "my_empty_list == None: False\n", - "my_empty_list is None: False\n", - "my_empty_list == False: False\n", - "my_empty_list is False: False\n", - "\"if my_empty_list:\" is False\n", - "\"if not my_empty_list:\" is True\n" - ] - } - ], - "prompt_number": 67 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## [0]-List" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_zero_list = [0]\n", - "\n", - "\n", - "print('my_zero_list == True:', my_zero_list == True)\n", - "print('my_zero_list is True:', my_zero_list is True)\n", - "\n", - "print('my_zero_list == None:', my_zero_list == None)\n", - "print('my_zero_list is None:', my_zero_list is None)\n", - "\n", - "print('my_zero_list == False:', my_zero_list == False)\n", - "print('my_zero_list is False:', my_zero_list is False)\n", - "\n", - "\n", - "if my_zero_list:\n", - " print('\"if my_zero_list:\" is True')\n", - "else:\n", - " print('\"if my_zero_list:\" is False')\n", - " \n", - "if not my_zero_list:\n", - " print('\"if not my_zero_list:\" is True')\n", - "else:\n", - " print('\"if not my_zero_list:\" is False')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "my_zero_list == True: False\n", - "my_zero_list is True: False\n", - "my_zero_list == None: False\n", - "my_zero_list is None: False\n", - "my_zero_list == False: False\n", - "my_zero_list is False: False\n", - "\"if my_zero_list:\" is True\n", - "\"if not my_zero_list:\" is False\n" - ] - } - ], - "prompt_number": 70 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## List comparison \n", - "List comparisons are a handy way to show the difference between `==` and `is`. \n", - "While `==` is rather evaluating the equality of the value, `is` is checking if two objects are equal.\n", - "The examples below show that we can assign a pointer to the same list object by using `=`, e.g., `list1 = list2`. \n", - "a) If we want to make a **shallow** copy of the list values, we have to make a little tweak: `list1 = list2[:]`, or \n", - "b) a **deepcopy** via `list1 = copy.deepcopy(list2)`\n", - "\n", - "Possibly the best explanation of shallow vs. deep copies I've read so far:\n", - "\n", - "*** \"Shallow copies duplicate as little as possible. A shallow copy of a collection is a copy of the collection structure, not the elements. With a shallow copy, two collections now share the individual elements.\n", - "Deep copies duplicate everything. A deep copy of a collection is two collections with all of the elements in the original collection duplicated.\"***\n", - "\n", - "(via [S.Lott](http://stackoverflow.com/users/10661/s-lott) on [StackOverflow](http://stackoverflow.com/questions/184710/what-is-the-difference-between-a-deep-copy-and-a-shallow-copy))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "###a) Shallow vs. deep copies for simple elements \n", - "List modification of the original list doesn't affect \n", - "shallow copies or deep copies if the list contains literals." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from copy import deepcopy\n", - "\n", - "my_first_list = [1]\n", - "my_second_list = [1]\n", - "print('my_first_list == my_second_list:', my_first_list == my_second_list)\n", - "print('my_first_list is my_second_list:', my_first_list is my_second_list)\n", - "\n", - "my_third_list = my_first_list\n", - "print('my_first_list == my_third_list:', my_first_list == my_third_list)\n", - "print('my_first_list is my_third_list:', my_first_list is my_third_list)\n", - "\n", - "my_shallow_copy = my_first_list[:]\n", - "print('my_first_list == my_shallow_copy:', my_first_list == my_shallow_copy)\n", - "print('my_first_list is my_shallow_copy:', my_first_list is my_shallow_copy)\n", - "\n", - "my_deep_copy = deepcopy(my_first_list)\n", - "print('my_first_list == my_deep_copy:', my_first_list == my_deep_copy)\n", - "print('my_first_list is my_deep_copy:', my_first_list is my_deep_copy)\n", - "\n", - "print('\\nmy_third_list:', my_third_list)\n", - "print('my_shallow_copy:', my_shallow_copy)\n", - "print('my_deep_copy:', my_deep_copy)\n", - "\n", - "my_first_list[0] = 2\n", - "print('after setting \"my_first_list[0] = 2\"')\n", - "print('my_third_list:', my_third_list)\n", - "print('my_shallow_copy:', my_shallow_copy)\n", - "print('my_deep_copy:', my_deep_copy)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "my_first_list == my_second_list: True\n", - "my_first_list is my_second_list: False\n", - "my_first_list == my_third_list: True\n", - "my_first_list is my_third_list: True\n", - "my_first_list == my_shallow_copy: True\n", - "my_first_list is my_shallow_copy: False\n", - "my_first_list == my_deep_copy: True\n", - "my_first_list is my_deep_copy: False\n", - "\n", - "my_third_list: [1]\n", - "my_shallow_copy: [1]\n", - "my_deep_copy: [1]\n", - "after setting \"my_first_list[0] = 2\"\n", - "my_third_list: [2]\n", - "my_shallow_copy: [1]\n", - "my_deep_copy: [1]\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### b) Shallow vs. deep copies if list contains other structures and objects\n", - "List modification of the original list does affect \n", - "shallow copies, but not deep copies if the list contains compound objects." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_first_list = [[1],[2]]\n", - "my_second_list = [[1],[2]]\n", - "print('my_first_list == my_second_list:', my_first_list == my_second_list)\n", - "print('my_first_list is my_second_list:', my_first_list is my_second_list)\n", - "\n", - "my_third_list = my_first_list\n", - "print('my_first_list == my_third_list:', my_first_list == my_third_list)\n", - "print('my_first_list is my_third_list:', my_first_list is my_third_list)\n", - "\n", - "my_shallow_copy = my_first_list[:]\n", - "print('my_first_list == my_shallow_copy:', my_first_list == my_shallow_copy)\n", - "print('my_first_list is my_shallow_copy:', my_first_list is my_shallow_copy)\n", - "\n", - "my_deep_copy = deepcopy(my_first_list)\n", - "print('my_first_list == my_deep_copy:', my_first_list == my_deep_copy)\n", - "print('my_first_list is my_deep_copy:', my_first_list is my_deep_copy)\n", - "\n", - "print('\\nmy_third_list:', my_third_list)\n", - "print('my_shallow_copy:', my_shallow_copy)\n", - "print('my_deep_copy:', my_deep_copy)\n", - "\n", - "my_first_list[0][0] = 2\n", - "print('after setting \"my_first_list[0][0] = 2\"')\n", - "print('my_third_list:', my_third_list)\n", - "print('my_shallow_copy:', my_shallow_copy)\n", - "print('my_deep_copy:', my_deep_copy)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "my_first_list == my_second_list: True\n", - "my_first_list is my_second_list: False\n", - "my_first_list == my_third_list: True\n", - "my_first_list is my_third_list: True\n", - "my_first_list == my_shallow_copy: True\n", - "my_first_list is my_shallow_copy: False\n", - "my_first_list == my_deep_copy: True\n", - "my_first_list is my_deep_copy: False\n", - "\n", - "my_third_list: [[1], [2]]\n", - "my_shallow_copy: [[1], [2]]\n", - "my_deep_copy: [[1], [2]]\n", - "after setting \"my_first_list[0][0] = 2\"\n", - "my_third_list: [[2], [2]]\n", - "my_shallow_copy: [[2], [2]]\n", - "my_deep_copy: [[1], [2]]\n" - ] - } - ], - "prompt_number": 13 - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Some Python oddity:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a = 1\n", - "b = 1\n", - "print('a is b', bool(a is b))\n", - "True\n", - "\n", - "a = 999\n", - "b = 999\n", - "print('a is b', bool(a is b))\n" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "a is b True\n", - "a is b False\n" - ] - } - ], - "prompt_number": 1 - } - ], - "metadata": {} - } - ] -} \ No newline at end of file diff --git a/.ipynb_checkpoints/scope_resolution_legb_rule-checkpoint.ipynb b/.ipynb_checkpoints/scope_resolution_legb_rule-checkpoint.ipynb deleted file mode 100644 index 70cbf9d..0000000 --- a/.ipynb_checkpoints/scope_resolution_legb_rule-checkpoint.ipynb +++ /dev/null @@ -1,1092 +0,0 @@ -{ - "metadata": { - "name": "", - "signature": "sha256:eb9ececefb4c35b16d0496c7f613e4a64bb35b2e9f79b7e049c5b434bd2e6654" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ - { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[Sebastian Raschka](http://www.sebastianraschka.com) \n", - "last updated: 04/28/2014\n", - "\n", - "- [Link to the containing GitHub Repository](https://github.com/rasbt/python_reference)\n", - "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb)\n", - "\n", - "Note: The code in this IPython notebook was executed in Python 3.4.0" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "I am really looking forward to your comments and suggestions to improve and extend this tutorial! Just send me a quick note \n", - "via Twitter: [@rasbt](https://twitter.com/rasbt) \n", - "or Email: [bluewoodtree@gmail.com](mailto:bluewoodtree@gmail.com)\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#A beginner's guide to Python's namespaces, scope resolution, and the LEGB rule" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is a short tutorial about Python's namespaces and the scope resolution for variable names using the LEGB-rule. The following sections will provide short example code blocks that should illustrate the problem followed by short explanations. You can simply read this tutorial from start to end, but I'd like to encourage you to execute the code snippets - you can either copy & paste them, or for your convenience, simply [download this IPython notebook](https://raw.githubusercontent.com/rasbt/python_reference/master/tutorials/scope_resolution_legb_rule.ipynb)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Sections\n", - "- [Introduction to namespaces and scopes](#introduction) \n", - "- [1. LG - Local and Global scopes](#section_1) \n", - "- [2. LEG - Local, Enclosed, and Global scope](#section_2) \n", - "- [3. LEGB - Local, Enclosed, Global, Built-in](#section_3) \n", - "- [Self-assessment exercise](#assessment)\n", - "- [Conclusion](#conclusion) \n", - "- [Solutions](#solutions)\n", - "- [Warning: For-loop variables \"leaking\" into the global namespace](#for_loop)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Objectives\n", - "- Namespaces and scopes - where does Python look for variable names?\n", - "- Can we define/reuse variable names for multiple objects at the same time?\n", - "- In which order does Python search different namespaces for variable names?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Introduction to namespaces and scopes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Namespaces" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Roughly speaking, namespaces are just containers for mapping names to objects. As you might have already heard, everything in Python - literals, lists, dictionaries, functions, classes, etc. - is an object. \n", - "Such a \"name-to-object\" mapping allows us to access an object by a name that we've assigned to it. E.g., if we make a simple string assignment via `a_string = \"Hello string\"`, we created a reference to the `\"Hello string\"` object, and henceforth we can access via its variable name `a_string`.\n", - "\n", - "We can picture a namespace as a Python dictionary structure, where the dictionary keys represent the names and the dictionary values the object itself (and this is also how namespaces are currently implemented in Python), e.g., \n", - "\n", - "
a_namespace = {'name_a':object_1, 'name_b':object_2, ...}
\n", - "\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, the tricky part is that we have multiple independent namespaces in Python, and names can be reused for different namespaces (only the objects are unique, for example:\n", - "\n", - "
a_namespace = {'name_a':object_1, 'name_b':object_2, ...}\n",
-      "b_namespace = {'name_a':object_3, 'name_b':object_4, ...}
\n", - "\n", - "For example, everytime we call a `for-loop` or define a function, it will create its own namespace. Namespaces also have different levels of hierarchy (the so-called \"scope\"), which we will discuss in more detail in the next section." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Scope" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the section above, we have learned that namespaces can exist independently from each other and that they are structured in a certain hierarchy, which brings us to the concept of \"scope\". The \"scope\" in Python defines the \"hierarchy level\" in which we search namespaces for certain \"name-to-object\" mappings. \n", - "For example, let us consider the following code:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "i = 1\n", - "\n", - "def foo():\n", - " i = 5\n", - " print(i, 'in foo()')\n", - "\n", - "print(i, 'global')\n", - "\n", - "foo()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1 global\n", - "5 in foo()\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here, we just defined the variable name `i` twice, once on the `foo` function." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- `foo_namespace = {'i':object_3, ...}` \n", - "- `global_namespace = {'i':object_1, 'name_b':object_2, ...}`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "So, how does Python now which namespace it has to search if we want to print the value of the variable `i`? This is where Python's LEGB-rule comes into play, which we will discuss in the next section." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Tip:\n", - "If we want to print out the dictionary mapping of the global and local variables, we can use the\n", - "the functions `global()` and `local()" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "#print(globals()) # prints global namespace\n", - "#print(locals()) # prints local namespace\n", - "\n", - "glob = 1\n", - "\n", - "def foo():\n", - " loc = 5\n", - " print('loc in foo():', 'loc' in locals())\n", - "\n", - "foo()\n", - "print('loc in global:', 'loc' in globals()) \n", - "print('glob in global:', 'foo' in globals())" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "loc in foo(): True\n", - "loc in global: False\n", - "glob in global: True\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Scope resolution for variable names via the LEGB rule." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We have seen that multiple namespaces can exist independently from each other and that they can contain the same variable names on different hierachy levels. The \"scope\" defines on which hierarchy level Python searches for a particular \"variable name\" for its associated object. Now, the next question is: \"In which order does Python search the different levels of namespaces before it finds the name-to-object' mapping?\" \n", - "To answer is: It uses the LEGB-rule, which stands for\n", - "\n", - "**Local -> Enclosed -> Global -> Built-in**, \n", - "\n", - "where the arrows should denote the direction of the namespace-hierarchy search order. \n", - "\n", - "- *Local* can be inside a function or class method, for example. \n", - "- *Enclosed* can be its `enclosing` function, e.g., if a function is wrapped inside another function. \n", - "- *Global* refers to the uppermost level of the executing script itself, and \n", - "- *Built-in* are special names that Python reserves for itself. \n", - "\n", - "So, if a particular name:object mapping cannot be found in the local namespaces, the namespaces of the enclosed scope are being searched next. If the search in the enclosed scope is unsuccessful, too, Python moves on to the global namespace, and eventually, it will search the global namespaces (side note: if a name cannot found in any of the namespaces, a *NameError* will is raised).\n", - "\n", - "**Note**: \n", - "Namespaces can also be further nested, for example if we import modules, or if we are defining new classes. In those cases we have to use prefixes to access those nested namespaces. Let me illustrate this concept in the following code block:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import numpy\n", - "import math\n", - "import scipy\n", - "\n", - "print(math.pi, 'from the math module')\n", - "print(numpy.pi, 'from the numpy package')\n", - "print(scipy.pi, 'from the scipy package')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "3.141592653589793 from the math module\n", - "3.141592653589793 from the numpy package\n", - "3.141592653589793 from the scipy package\n" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "(This is also why we have to be careful if we import modules via \"`from a_module import *`\", since it loads the variable names into the global namespace and could potentially overwrite already existing variable names)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. LG - Local and Global scopes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Example 1.1** \n", - "As a warm-up exercise, let us first forget about the enclosed (E) and built-in (B) scopes in the LEGB rule and only take a look at LG - the local and global scopes. \n", - "What does the following code print?" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_var = 'global variable'\n", - "\n", - "def a_func():\n", - " print(a_var, '[ a_var inside a_func() ]')\n", - "\n", - "a_func()\n", - "print(a_var, '[ a_var outside a_func() ]')" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**a)**\n", - "
raises an error
\n", - "\n", - "**b)** \n", - "
\n",
-      "global value [ a_var outside a_func() ]
\n", - "\n", - "**c)** \n", - "
global value [ a_var in a_func() ]  \n",
-      "global value [ a_var outside a_func() ]
\n", - "\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[go to solution](#solutions)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Here is why:\n", - "\n", - "We call `a_func()` first, which is supposed to print the value of `a_var`. According to the LEGB rule, the function will first look in its own local scope (L) if `a_var` is defined there. Since `a_func()` does not define its own `a_var`, it will look one-level above in the global scope (G) in which `a_var` has been defined previously.\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Example 1.2** \n", - "Now, let us define the variable `a_var` in the global and the local scope. \n", - "Can you guess what the following code will produce?" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_var = 'global value'\n", - "\n", - "def a_func():\n", - " a_var = 'local value'\n", - " print(a_var, '[ a_var inside a_func() ]')\n", - "\n", - "a_func()\n", - "print(a_var, '[ a_var outside a_func() ]')" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**a)**\n", - "
raises an error
\n", - "\n", - "**b)** \n", - "
local value [ a_var in a_func() ]\n",
-      "global value [ a_var outside a_func() ]
\n", - "\n", - "**c)** \n", - "
global value [ a_var in a_func() ]  \n",
-      "global value [ a_var outside a_func() ]
\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[go to solution](#solutions)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Here is why:\n", - "\n", - "When we call `a_func()`, it will first look in its local scope (L) for `a_var`, since `a_var` is defined in the local scope of `a_func`, its assigned value `local variable` is printed. Note that this doesn't affect the global variable, which is in a different scope." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "However, it is also possible to modify the global by, e.g., re-assigning a new value to it if we use the global keyword as the following example will illustrate:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_var = 'global value'\n", - "\n", - "def a_func():\n", - " global a_var\n", - " a_var = 'local value'\n", - " print(a_var, '[ a_var inside a_func() ]')\n", - "\n", - "print(a_var, '[ a_var outside a_func() ]')\n", - "a_func()\n", - "print(a_var, '[ a_var outside a_func() ]')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "global value [ a_var outside a_func() ]\n", - "local value [ a_var inside a_func() ]\n", - "local value [ a_var outside a_func() ]\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "But we have to be careful about the order: it is easy to raise an `UnboundLocalError` if we don't explicitly tell Python that we want to use the global scope and try to modify a variable's value (remember, the right side of an assignment operation is executed first):" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_var = 1\n", - "\n", - "def a_func():\n", - " a_var = a_var + 1\n", - " print(a_var, '[ a_var inside a_func() ]')\n", - "\n", - "print(a_var, '[ a_var outside a_func() ]')\n", - "a_func()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "UnboundLocalError", - "evalue": "local variable 'a_var' referenced before assignment", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mUnboundLocalError\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 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma_var\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'[ a_var outside a_func() ]'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0ma_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m\u001b[0m in \u001b[0;36ma_func\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0ma_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0ma_var\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0ma_var\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma_var\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'[ a_var inside a_func() ]'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mUnboundLocalError\u001b[0m: local variable 'a_var' referenced before assignment" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1 [ a_var outside a_func() ]\n" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2. LEG - Local, Enclosed, and Global scope\n", - "\n", - "\n", - "\n", - "Now, let us introduce the concept of the enclosed (E) scope. Following the order \"Local -> Enclosed -> Global\", can you guess what the following code will print?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Example 2.1**" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_var = 'global value'\n", - "\n", - "def outer():\n", - " a_var = 'enclosed value'\n", - " \n", - " def inner():\n", - " a_var = 'local value'\n", - " print(a_var)\n", - " \n", - " inner()\n", - "\n", - "outer()" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**a)**\n", - "
global value
\n", - "\n", - "**b)** \n", - "
enclosed value
\n", - "\n", - "**c)** \n", - "
local value
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[go to solution](#solutions)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Here is why:\n", - "\n", - "Let us quickly recapitulate what we just did: We called `outer()`, which defined the variable `a_var` locally (next to an existing `a_var` in the global scope). Next, the `outer()` function called `inner()`, which in turn defined a variable with of name `a_var` as well. The `print()` function inside `inner()` searched in the local scope first (L->E) before it went up in the scope hierarchy, and therefore it printed the value that was assigned in the local scope." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Similar to the concept of the `global` keyword, which we have seen in the section above, we can use the keyword `nonlocal` inside the inner function to explicitely access a variable from the outer (enclosed) scope in order to modify its value. \n", - "Note that the `nonlocal` keyword was added in Python 3.x and is not implemented in Python 2.x (yet)." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_var = 'global value'\n", - "\n", - "def outer():\n", - " a_var = 'local value'\n", - " print('outer before:', a_var)\n", - " def inner():\n", - " nonlocal a_var\n", - " a_var = 'inner value'\n", - " print('in inner():', a_var)\n", - " inner()\n", - " print(\"outer after:\", a_var)\n", - "outer()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "outer before: local value\n", - "in inner(): inner value\n", - "outer after: inner value\n" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3. LEGB - Local, Enclosed, Global, Built-in\n", - "\n", - "To wrap up the LEGB rule, let us come to the built-in scope. Here, we will define our \"own\" length-funcion, which happens to bear the same name as the in-built `len()` function. What outcome do you excpect if we'd execute the following code?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Example 3**" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_var = 'global variable'\n", - "\n", - "def len(in_var):\n", - " print('called my len() function')\n", - " l = 0\n", - " for i in in_var:\n", - " l += 1\n", - " return l\n", - "\n", - "def a_func(in_var):\n", - " len_in_var = len(in_var)\n", - " print('Input variable is of length', len_in_var)\n", - "\n", - "a_func('Hello, World!')" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**a)**\n", - "
raises an error (conflict with in-built `len()` function)
\n", - "\n", - "**b)** \n", - "
called my len() function\n",
-      "Input variable is of length 13
\n", - "\n", - "**c)** \n", - "
Input variable is of length 13
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[go to solution](#solutions)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Here is why:\n", - "\n", - "Since the exact same names can be used to map names to different objects - as long as the names are in different name spaces - there is no problem of reusing the name `len` to define our own length function (this is just for demonstration pruposes, it is NOT recommended). As we go up in Python's L -> E -> G -> B hierarchy, the function `a_func()` finds `len()` already in the global scope first before it attempts" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Self-assessment exercise" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, after we went through a couple of exercises, let us quickly check where we are. So, one more time: What would the following code print out?" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a = 'global'\n", - "\n", - "def outer():\n", - " \n", - " def len(in_var):\n", - " print('called my len() function: ', end=\"\")\n", - " l = 0\n", - " for i in in_var:\n", - " l += 1\n", - " return l\n", - " \n", - " a = 'local'\n", - " \n", - " def inner():\n", - " global len\n", - " nonlocal a\n", - " a += ' variable'\n", - " inner()\n", - " print('a is', a)\n", - " print(len(a))\n", - "\n", - "\n", - "outer()\n", - "\n", - "print(len(a))\n", - "print('a is', a)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 59 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[go to solution](#solutions)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Conclusion" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "I hope this short tutorial was helpful to understand the basic concept of Python's scope resolution order using the LEGB rule. I want to encourage you (as a little self-assessment exercise) to look at the code snippets again tomorrow and check if you can correctly predict all their outcomes." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### A rule of thumb" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In practice, **it is usually a bad idea to modify global variables inside the function scope**, since it often be the cause of confusion and weird errors that are hard to debug. \n", - "If you want to modify a global variable via a function, it is recommended to pass it as an argument and reassign the return-value. \n", - "For example:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_var = 2\n", - "\n", - "def a_func(some_var):\n", - " return 2**3\n", - "\n", - "a_var = a_func(a_var)\n", - "print(a_var)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "8\n" - ] - } - ], - "prompt_number": 42 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Solutions\n", - "\n", - "In order to prevent you from unintentional spoilers, I have written the solutions in binary format. In order to display the character representation, you just need to execute the following lines of code:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Example 1.1:', chr(int('01100011',2)))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 6 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Example 1.2:', chr(int('01100001',2)))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 7 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Example 2.1:', chr(int('01100011',2)))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 8 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Example 3.1:', chr(int('01100010',2)))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 9 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Execute to run the self-assessment solution\n", - "\n", - "sol = \"000010100110111101110101011101000110010101110010001010\"\\\n", - "\"0000101001001110100000101000001010011000010010000001101001011100110\"\\\n", - "\"0100000011011000110111101100011011000010110110000100000011101100110\"\\\n", - "\"0001011100100110100101100001011000100110110001100101000010100110001\"\\\n", - "\"1011000010110110001101100011001010110010000100000011011010111100100\"\\\n", - "\"1000000110110001100101011011100010100000101001001000000110011001110\"\\\n", - "\"1010110111001100011011101000110100101101111011011100011101000100000\"\\\n", - "\"0011000100110100000010100000101001100111011011000110111101100010011\"\\\n", - "\"0000101101100001110100000101000001010001101100000101001100001001000\"\\\n", - "\"0001101001011100110010000001100111011011000110111101100010011000010\"\\\n", - "\"1101100\"\n", - "\n", - "sol_str =''.join(chr(int(sol[i:i+8], 2)) for i in range(0, len(sol), 8))\n", - "for line in sol_str.split('\\n'):\n", - " print(line)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 58 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Warning: For-loop variables \"leaking\" into the global namespace" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In contrast to some other programming languages, `for-loops` will use the scope they exist in and leave their defined loop-variable behind.\n" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "for a in range(5):\n", - " if a == 4:\n", - " print(a, '-> a in for-loop')\n", - "print(a, '-> a in global')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "4 -> a in for-loop\n", - "4 -> a in global\n" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**This also applies if we explicitely defined the `for-loop` variable in the global namespace before!** In this case it will rebind the existing variable:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "b = 1\n", - "for b in range(5):\n", - " if b == 4:\n", - " print(b, '-> b in for-loop')\n", - "print(b, '-> b in global')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "4 -> b in for-loop\n", - "4 -> b in global\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "However, in **Python 3.x**, we can use closures to prevent the for-loop variable to cut into the global namespace. Here is an example (exectuted in Python 3.4):" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "i = 1\n", - "print([i for i in range(5)])\n", - "print(i, '-> i in global')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[0, 1, 2, 3, 4]\n", - "1 -> i in global\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Why did I mention \"Python 3.x\"? Well, as it happens, the same code executed in Python 2.x would print:\n", - "\n", - "
\n",
-      "4 -> i in global\n",
-      "
"
-     ]
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "This goes back to a change that was made in Python 3.x and is described in [What\u2019s New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html) as follows:\n",
-      "\n",
-      "\"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope.\""
-     ]
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [],
-     "language": "python",
-     "metadata": {},
-     "outputs": []
-    }
-   ],
-   "metadata": {}
-  }
- ]
-}
\ No newline at end of file
diff --git a/.ipynb_checkpoints/timeit_test-checkpoint.ipynb b/.ipynb_checkpoints/timeit_test-checkpoint.ipynb
deleted file mode 100644
index dd46362..0000000
--- a/.ipynb_checkpoints/timeit_test-checkpoint.ipynb
+++ /dev/null
@@ -1,628 +0,0 @@
-{
- "metadata": {
-  "name": "",
-  "signature": "sha256:5a2264b30b9632e14bd425a887a4455658fbdf9f8102fc5703ad982c3fa09b21"
- },
- "nbformat": 3,
- "nbformat_minor": 0,
- "worksheets": [
-  {
-   "cells": [
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "Sebastian Raschka  \n",
-      "last updated: 04/14/2014  \n",
-      "\n",
-      "[Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/timeit_test.ipynb)"
-     ]
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "\n",
-      "\n",
-      "# Python benchmarks via `timeit`"
-     ]
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "# Sections\n",
-      "- [String operations](#string_operations)\n",
-      "    - [String formatting: .format() vs. binary operator %s](#str_format_bin)\n",
-      "    - [String reversing: [::-1] vs. `''.join(reversed())`](#str_reverse)\n",
-      "    - [String concatenation: `+=` vs. `''.join()`](#string_concat)\n",
-      "    - [Assembling strings](#string_assembly)  \n",
-      "- [List operations](#list_operations)\n",
-      "    - [List reversing: [::-1] vs. reverse() vs. reversed()](#list_reverse)\n",
-      "    - [Creating lists using conditional statements](#create_cond_list)\n",
-      "- [Dictionary operations](#dict_ops) \n",
-      "    - [Adding elements to a dictionary](#adding_dict_elements)"
-     ]
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "\n",
-      "\n",
-      "# String operations"
-     ]
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "\n",
-      "## String formatting: `.format()` vs. binary operator `%s`\n",
-      "\n",
-      "We expect the string .format() method to perform slower than %, because it is doing the formatting for each object itself, where formatting via the binary % is hard-coded for known types. But let's see how big the difference really is..."
-     ]
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "import timeit\n",
-      "\n",
-      "def test_format():\n",
-      "    return ['{}'.format(i) for i in range(1000000)]\n",
-      "\n",
-      "def test_binaryop():\n",
-      "    return ['%s' %i for i in range(1000000)]\n",
-      "\n",
-      "%timeit test_format()\n",
-      "%timeit test_binaryop()\n",
-      "\n",
-      "#\n",
-      "# Python 3.4.0\n",
-      "# MacOS X 10.9.2\n",
-      "# 2.5 GHz Intel Core i5\n",
-      "# 4 GB 1600 Mhz DDR3\n",
-      "#"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "1 loops, best of 3: 400 ms per loop\n",
-        "1 loops, best of 3: 241 ms per loop"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n"
-       ]
-      }
-     ],
-     "prompt_number": 3
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "\n",
-      "## String reversing: `[::-1]` vs. `''.join(reversed())`"
-     ]
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "import timeit\n",
-      "\n",
-      "def reverse_join(my_str):\n",
-      "    return ''.join(reversed(my_str))\n",
-      "    \n",
-      "def reverse_slizing(my_str):\n",
-      "    return my_str[::-1]\n",
-      "\n",
-      "\n",
-      "# Test to show that both work\n",
-      "a = reverse_join('abcd')\n",
-      "b = reverse_slizing('abcd')\n",
-      "assert(a == b and a == 'dcba')\n",
-      "\n",
-      "%timeit reverse_join('abcd')\n",
-      "%timeit reverse_slizing('abcd')\n",
-      "\n",
-      "# Python 3.4.0\n",
-      "# MacOS X 10.9.2\n",
-      "# 2.4 GHz Intel Core Duo\n",
-      "# 8 GB 1067 Mhz DDR3\n",
-      "#"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "1000000 loops, best of 3: 1.28 \u00b5s per loop\n",
-        "1000000 loops, best of 3: 337 ns per loop"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n"
-       ]
-      }
-     ],
-     "prompt_number": 13
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "\n",
-      "## String concatenation: `+=` vs. `''.join()`"
-     ]
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "Strings in Python are immutable objects. So, each time we append a character to a string, it has to be created \u201cfrom scratch\u201d in memory. Thus, the answer to the question \u201cWhat is the most efficient way to concatenate strings?\u201d is a quite obvious, but the relative numbers of performance gains are nonetheless interesting."
-     ]
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "import timeit\n",
-      "\n",
-      "def string_add(in_chars):\n",
-      "    new_str = ''\n",
-      "    for char in in_chars:\n",
-      "        new_str += char\n",
-      "    return new_str\n",
-      "\n",
-      "def string_join(in_chars):\n",
-      "    return ''.join(in_chars)\n",
-      "\n",
-      "test_chars = ['a', 'b', 'c', 'd', 'e', 'f']\n",
-      "\n",
-      "%timeit string_add(test_chars)\n",
-      "%timeit string_join(test_chars)\n",
-      "\n",
-      "#\n",
-      "# Python 3.4.0\n",
-      "# MacOS X 10.9.2\n",
-      "# 2.5 GHz Intel Core i5\n",
-      "# 4 GB 1600 Mhz DDR3\n",
-      "#"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "1000000 loops, best of 3: 595 ns per loop\n",
-        "1000000 loops, best of 3: 269 ns per loop"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n"
-       ]
-      }
-     ],
-     "prompt_number": 16
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "\n",
-      "## Assembling strings\n",
-      "\n",
-      "Next, I wanted to compare different methods string \u201cassembly.\u201d This is different from simple string concatenation, which we have seen in the previous section, since we insert values into a string, e.g., from a variable."
-     ]
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "import timeit\n",
-      "\n",
-      "def plus_operator():\n",
-      "    return 'a' + str(1) + str(2) \n",
-      "    \n",
-      "def format_method():\n",
-      "    return 'a{}{}'.format(1,2)\n",
-      "    \n",
-      "def binary_operator():\n",
-      "    return 'a%s%s' %(1,2)\n",
-      "\n",
-      "%timeit plus_operator()\n",
-      "%timeit format_method()\n",
-      "%timeit binary_operator()\n",
-      "\n",
-      "#\n",
-      "# Python 3.4.0\n",
-      "# MacOS X 10.9.2\n",
-      "# 2.5 GHz Intel Core i5\n",
-      "# 4 GB 1600 Mhz DDR3\n",
-      "#"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "1000000 loops, best of 3: 764 ns per loop\n",
-        "1000000 loops, best of 3: 494 ns per loop"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n",
-        "10000000 loops, best of 3: 79.3 ns per loop"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n"
-       ]
-      }
-     ],
-     "prompt_number": 17
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "\n",
-      "# List operations"
-     ]
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "\n",
-      "## List reversing - `[::-1]` vs. `reverse()` vs. `reversed()`"
-     ]
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "import timeit\n",
-      "\n",
-      "def reverse_func(my_list):\n",
-      "    new_list = my_list[:]\n",
-      "    new_list.reverse()\n",
-      "    return new_list\n",
-      "    \n",
-      "def reversed_func(my_list):\n",
-      "    return list(reversed(my_list))\n",
-      "\n",
-      "def reverse_slizing(my_list):\n",
-      "    return my_list[::-1]\n",
-      "\n",
-      "%timeit reverse_func([1,2,3,4,5])\n",
-      "%timeit reversed_func([1,2,3,4,5])\n",
-      "%timeit reverse_slizing([1,2,3,4,5])\n",
-      "\n",
-      "# Python 3.4.0\n",
-      "# MacOS X 10.9.2\n",
-      "# 2.4 GHz Intel Core Duo\n",
-      "# 8 GB 1067 Mhz DDR3\n",
-      "#"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "1000000 loops, best of 3: 930 ns per loop\n",
-        "1000000 loops, best of 3: 1.89 \u00b5s per loop"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n",
-        "1000000 loops, best of 3: 775 ns per loop"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n"
-       ]
-      }
-     ],
-     "prompt_number": 1
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "\n",
-      "## Creating lists using conditional statements\n",
-      "\n",
-      "In this test, I attempted to figure out the fastest way to create a new list of elements that meet a certain criterion. For the sake of simplicity, the criterion was to check if an element is even or odd, and only if the element was even, it should be included in the list. For example, the resulting list for numbers in the range from 1 to 10 would be \n",
-      "[2, 4, 6, 8, 10].\n",
-      "\n",
-      "Here, I tested three different approaches:  \n",
-      "1) a simple for loop with an if-statement check (`cond_loop()`)  \n",
-      "2) a list comprehension (`list_compr()`)  \n",
-      "3) the built-in filter() function (`filter_func()`)  \n",
-      "\n",
-      "Note that the filter() function now returns a generator in Python 3, so I had to wrap it in an additional list() function call."
-     ]
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "import timeit\n",
-      "\n",
-      "def cond_loop():\n",
-      "    even_nums = []\n",
-      "    for i in range(100):\n",
-      "        if i % 2 == 0:\n",
-      "            even_nums.append(i)\n",
-      "    return even_nums\n",
-      "\n",
-      "def list_compr():\n",
-      "    even_nums = [i for i in range(100) if i % 2 == 0]\n",
-      "    return even_nums\n",
-      "    \n",
-      "def filter_func():\n",
-      "    even_nums = list(filter((lambda x: x % 2 != 0), range(100)))\n",
-      "    return even_nums\n",
-      "\n",
-      "%timeit cond_loop()\n",
-      "%timeit list_compr()\n",
-      "%timeit filter_func()\n",
-      "\n",
-      "#\n",
-      "# Python 3.4.0\n",
-      "# MacOS X 10.9.2\n",
-      "# 2.5 GHz Intel Core i5\n",
-      "# 4 GB 1600 Mhz DDR3\n",
-      "#"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "100000 loops, best of 3: 14.4 \u00b5s per loop\n",
-        "100000 loops, best of 3: 12 \u00b5s per loop"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n",
-        "10000 loops, best of 3: 23.9 \u00b5s per loop"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n"
-       ]
-      }
-     ],
-     "prompt_number": 14
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "\n",
-      "# Dictionary operations "
-     ]
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "\n",
-      "## Adding elements to a Dictionary\n",
-      "\n",
-      "All three functions below count how often different elements (values) occur in a list.  \n",
-      "E.g., for the list ['a', 'b', 'a', 'c'], the dictionary would look like this:  \n",
-      "`my_dict = {'a': 2, 'b': 1, 'c': 1}`"
-     ]
-    },
-    {
-     "cell_type": "code",
-     "collapsed": false,
-     "input": [
-      "import random\n",
-      "import copy\n",
-      "import timeit\n",
-      "\n",
-      "\n",
-      "\n",
-      "def add_element_check1(my_dict, elements):\n",
-      "    for e in elements:\n",
-      "        if e not in my_dict:\n",
-      "            my_dict[e] = 1\n",
-      "        else:\n",
-      "            my_dict[e] += 1\n",
-      "            \n",
-      "def add_element_check2(my_dict, elements):\n",
-      "    for e in elements:\n",
-      "        if e not in my_dict:\n",
-      "            my_dict[e] = 0\n",
-      "        my_dict[e] += 1            \n",
-      "\n",
-      "def add_element_except(my_dict, elements):\n",
-      "    for e in elements:\n",
-      "        try:\n",
-      "            my_dict[e] += 1\n",
-      "        except KeyError:\n",
-      "            my_dict[e] = 1\n",
-      "            \n",
-      "\n",
-      "random.seed(123)\n",
-      "rand_ints = [random.randrange(1, 10) for i in range(100)]\n",
-      "empty_dict = {}\n",
-      "\n",
-      "print('Results for 100 integers in range 1-10') \n",
-      "%timeit add_element_check1(copy.deepcopy(empty_dict), rand_ints)\n",
-      "%timeit add_element_check2(copy.deepcopy(empty_dict), rand_ints)\n",
-      "%timeit add_element_except(copy.deepcopy(empty_dict), rand_ints)\n",
-      "            \n",
-      "print('\\nResults for 1000 integers in range 1-10')            \n",
-      "rand_ints = [random.randrange(1, 10) for i in range(1000)]\n",
-      "empty_dict = {}\n",
-      "\n",
-      "%timeit add_element_check1(copy.deepcopy(empty_dict), rand_ints)\n",
-      "%timeit add_element_check2(copy.deepcopy(empty_dict), rand_ints)\n",
-      "%timeit add_element_except(copy.deepcopy(empty_dict), rand_ints)\n",
-      "\n",
-      "print('\\nResults for 1000 integers in range 1-1000')            \n",
-      "rand_ints = [random.randrange(1, 10) for i in range(1000)]\n",
-      "empty_dict = {}\n",
-      "\n",
-      "%timeit add_element_check1(copy.deepcopy(empty_dict), rand_ints)\n",
-      "%timeit add_element_check2(copy.deepcopy(empty_dict), rand_ints)\n",
-      "%timeit add_element_except(copy.deepcopy(empty_dict), rand_ints)\n",
-      "\n",
-      "#\n",
-      "# Python 3.4.0\n",
-      "# MacOS X 10.9.2\n",
-      "# 2.5 GHz Intel Core i5\n",
-      "# 4 GB 1600 Mhz DDR3\n",
-      "#"
-     ],
-     "language": "python",
-     "metadata": {},
-     "outputs": [
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "Results for 100 integers in range 1-10\n",
-        "100000 loops, best of 3: 16.6 \u00b5s per loop"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n",
-        "100000 loops, best of 3: 17.6 \u00b5s per loop"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n",
-        "100000 loops, best of 3: 17.9 \u00b5s per loop"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n",
-        "\n",
-        "Results for 1000 integers in range 1-10\n",
-        "10000 loops, best of 3: 135 \u00b5s per loop"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n",
-        "10000 loops, best of 3: 125 \u00b5s per loop"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n",
-        "10000 loops, best of 3: 105 \u00b5s per loop"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n",
-        "\n",
-        "Results for 1000 integers in range 1-1000\n",
-        "10000 loops, best of 3: 122 \u00b5s per loop"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n",
-        "10000 loops, best of 3: 123 \u00b5s per loop"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n",
-        "10000 loops, best of 3: 104 \u00b5s per loop"
-       ]
-      },
-      {
-       "output_type": "stream",
-       "stream": "stdout",
-       "text": [
-        "\n"
-       ]
-      }
-     ],
-     "prompt_number": 13
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "### Conclusion\n",
-      "Interestingly, the `try-except` loop pays off if we have more elements (here: 1000 integers instead of 100) as dictionary keys to check. Also, it doesn't matter much whether the elements exist or do not exist in the dictionary, yet."
-     ]
-    }
-   ],
-   "metadata": {}
-  }
- ]
-}
\ No newline at end of file
diff --git a/.ipynb_checkpoints/timeit_tests-checkpoint.ipynb b/.ipynb_checkpoints/timeit_tests-checkpoint.ipynb
deleted file mode 100644
index d1bc680..0000000
--- a/.ipynb_checkpoints/timeit_tests-checkpoint.ipynb
+++ /dev/null
@@ -1,1883 +0,0 @@
-{
- "metadata": {
-  "name": "",
-  "signature": "sha256:75d807f509bd9f76b2e14a5a048cb44852a3318bcd0d95afc95d1c9b2904c078"
- },
- "nbformat": 3,
- "nbformat_minor": 0,
- "worksheets": [
-  {
-   "cells": [
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "Sebastian Raschka  \n",
-      "last updated: 04/14/2014  \n",
-      "\n",
-      "[Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/benchmarks/timeit_tests.ipynb)"
-     ]
-    },
-    {
-     "cell_type": "markdown",
-     "metadata": {},
-     "source": [
-      "
\n", - "I am really looking forward to your comments and suggestions to improve and extend this collection! Just send me a quick note \n", - "via Twitter: [@rasbt](https://twitter.com/rasbt) \n", - "or Email: [bluewoodtree@gmail.com](mailto:bluewoodtree@gmail.com)\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "# Python benchmarks via `timeit`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Sections\n", - "- [String operations](#string_operations)\n", - " - [String formatting: .format() vs. binary operator %s](#str_format_bin)\n", - " - [String reversing: [::-1] vs. `''.join(reversed())`](#str_reverse)\n", - " - [String concatenation: `+=` vs. `''.join()`](#string_concat)\n", - " - [Assembling strings](#string_assembly) \n", - " - [Testing if a string is an integer](#is_integer)\n", - " - [Testing if a string is a number](#is_number)\n", - "- [List operations](#list_operations)\n", - " - [List reversing: [::-1] vs. reverse() vs. reversed()](#list_reverse)\n", - " - [Creating lists using conditional statements](#create_cond_list)\n", - "- [Dictionary operations](#dict_ops) \n", - " - [Adding elements to a dictionary](#adding_dict_elements)\n", - "- [Comprehensions vs. for-loops](#comprehensions)\n", - "- [Copying files by searching directory trees](#find_copy)\n", - "- [Returning column vectors slicing through a numpy array](#row_vectors)\n", - "- [Speed of numpy functions vs Python built-ins and std. lib.](#numpy)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# String operations" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## String formatting: `.format()` vs. binary operator `%s`\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We expect the string .format() method to perform slower than %, because it is doing the formatting for each object itself, where formatting via the binary % is hard-coded for known types. But let's see how big the difference really is..." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "def test_format():\n", - " return ['{}'.format(i) for i in range(1000000)]\n", - "\n", - "def test_binaryop():\n", - " return ['%s' %i for i in range(1000000)]\n", - "\n", - "%timeit test_format()\n", - "%timeit test_binaryop()\n", - "\n", - "#\n", - "# Python 3.4.0\n", - "# MacOS X 10.9.2\n", - "# 2.5 GHz Intel Core i5\n", - "# 4 GB 1600 Mhz DDR3\n", - "#" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1 loops, best of 3: 400 ms per loop\n", - "1 loops, best of 3: 241 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## String reversing: `[::-1]` vs. `''.join(reversed())`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "def reverse_join(my_str):\n", - " return ''.join(reversed(my_str))\n", - " \n", - "def reverse_slizing(my_str):\n", - " return my_str[::-1]\n", - "\n", - "\n", - "# Test to show that both work\n", - "a = reverse_join('abcd')\n", - "b = reverse_slizing('abcd')\n", - "assert(a == b and a == 'dcba')\n", - "\n", - "%timeit reverse_join('abcd')\n", - "%timeit reverse_slizing('abcd')\n", - "\n", - "# Python 3.4.0\n", - "# MacOS X 10.9.2\n", - "# 2.4 GHz Intel Core Duo\n", - "# 8 GB 1067 Mhz DDR3\n", - "#" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1000000 loops, best of 3: 1.28 \u00b5s per loop\n", - "1000000 loops, best of 3: 337 ns per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 13 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## String concatenation: `+=` vs. `''.join()`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Strings in Python are immutable objects. So, each time we append a character to a string, it has to be created \u201cfrom scratch\u201d in memory. Thus, the answer to the question \u201cWhat is the most efficient way to concatenate strings?\u201d is a quite obvious, but the relative numbers of performance gains are nonetheless interesting." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "def string_add(in_chars):\n", - " new_str = ''\n", - " for char in in_chars:\n", - " new_str += char\n", - " return new_str\n", - "\n", - "def string_join(in_chars):\n", - " return ''.join(in_chars)\n", - "\n", - "test_chars = ['a', 'b', 'c', 'd', 'e', 'f']\n", - "\n", - "%timeit string_add(test_chars)\n", - "%timeit string_join(test_chars)\n", - "\n", - "#\n", - "# Python 3.4.0\n", - "# MacOS X 10.9.2\n", - "# 2.5 GHz Intel Core i5\n", - "# 4 GB 1600 Mhz DDR3\n", - "#" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1000000 loops, best of 3: 595 ns per loop\n", - "1000000 loops, best of 3: 269 ns per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 16 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## Assembling strings\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next, I wanted to compare different methods string \u201cassembly.\u201d This is different from simple string concatenation, which we have seen in the previous section, since we insert values into a string, e.g., from a variable." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "def plus_operator():\n", - " return 'a' + str(1) + str(2) \n", - " \n", - "def format_method():\n", - " return 'a{}{}'.format(1,2)\n", - " \n", - "def binary_operator():\n", - " return 'a%s%s' %(1,2)\n", - "\n", - "%timeit plus_operator()\n", - "%timeit format_method()\n", - "%timeit binary_operator()\n", - "\n", - "#\n", - "# Python 3.4.0\n", - "# MacOS X 10.9.2\n", - "# 2.5 GHz Intel Core i5\n", - "# 4 GB 1600 Mhz DDR3\n", - "#" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1000000 loops, best of 3: 764 ns per loop\n", - "1000000 loops, best of 3: 494 ns per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "10000000 loops, best of 3: 79.3 ns per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 17 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## Testing if a string is an integer" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "def string_is_int(a_str):\n", - " try:\n", - " int(a_str)\n", - " return True\n", - " except ValueError:\n", - " return False\n", - "\n", - "an_int = '123'\n", - "no_int = '123abc'\n", - "\n", - "%timeit string_is_int(an_int)\n", - "%timeit string_is_int(no_int)\n", - "%timeit an_int.isdigit()\n", - "%timeit no_int.isdigit()\n", - "\n", - "#\n", - "# Python 3.4.0\n", - "# MacOS X 10.9.2\n", - "# 2.5 GHz Intel Core i5\n", - "# 4 GB 1600 Mhz DDR3\n", - "#" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1000000 loops, best of 3: 401 ns per loop\n", - "100000 loops, best of 3: 3.04 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "10000000 loops, best of 3: 92.1 ns per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "10000000 loops, best of 3: 96.3 ns per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## Testing if a string is a number" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "def string_is_number(a_str):\n", - " try:\n", - " float(a_str)\n", - " return True\n", - " except ValueError:\n", - " return False\n", - " \n", - "a_float = '1.234'\n", - "no_float = '123abc'\n", - "\n", - "a_float.replace('.','',1).isdigit()\n", - "no_float.replace('.','',1).isdigit()\n", - "\n", - "%timeit string_is_number(an_int)\n", - "%timeit string_is_number(no_int)\n", - "%timeit a_float.replace('.','',1).isdigit()\n", - "%timeit no_float.replace('.','',1).isdigit()\n", - "\n", - "#\n", - "# Python 3.4.0\n", - "# MacOS X 10.9.2\n", - "# 2.5 GHz Intel Core i5\n", - "# 4 GB 1600 Mhz DDR3\n", - "#" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1000000 loops, best of 3: 400 ns per loop\n", - "1000000 loops, best of 3: 1.15 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1000000 loops, best of 3: 452 ns per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1000000 loops, best of 3: 394 ns per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "# List operations" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## List reversing - `[::-1]` vs. `reverse()` vs. `reversed()`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "def reverse_func(my_list):\n", - " new_list = my_list[:]\n", - " new_list.reverse()\n", - " return new_list\n", - " \n", - "def reversed_func(my_list):\n", - " return list(reversed(my_list))\n", - "\n", - "def reverse_slizing(my_list):\n", - " return my_list[::-1]\n", - "\n", - "%timeit reverse_func([1,2,3,4,5])\n", - "%timeit reversed_func([1,2,3,4,5])\n", - "%timeit reverse_slizing([1,2,3,4,5])\n", - "\n", - "# Python 3.4.0\n", - "# MacOS X 10.9.2\n", - "# 2.4 GHz Intel Core Duo\n", - "# 8 GB 1067 Mhz DDR3\n", - "#" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1000000 loops, best of 3: 930 ns per loop\n", - "1000000 loops, best of 3: 1.89 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1000000 loops, best of 3: 775 ns per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## Creating lists using conditional statements\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "In this test, I attempted to figure out the fastest way to create a new list of elements that meet a certain criterion. For the sake of simplicity, the criterion was to check if an element is even or odd, and only if the element was even, it should be included in the list. For example, the resulting list for numbers in the range from 1 to 10 would be \n", - "[2, 4, 6, 8, 10].\n", - "\n", - "Here, I tested three different approaches: \n", - "1) a simple for loop with an if-statement check (`cond_loop()`) \n", - "2) a list comprehension (`list_compr()`) \n", - "3) the built-in filter() function (`filter_func()`) \n", - "\n", - "Note that the filter() function now returns a generator in Python 3, so I had to wrap it in an additional list() function call." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "def cond_loop():\n", - " even_nums = []\n", - " for i in range(100):\n", - " if i % 2 == 0:\n", - " even_nums.append(i)\n", - " return even_nums\n", - "\n", - "def list_compr():\n", - " even_nums = [i for i in range(100) if i % 2 == 0]\n", - " return even_nums\n", - " \n", - "def filter_func():\n", - " even_nums = list(filter((lambda x: x % 2 != 0), range(100)))\n", - " return even_nums\n", - "\n", - "%timeit cond_loop()\n", - "%timeit list_compr()\n", - "%timeit filter_func()\n", - "\n", - "#\n", - "# Python 3.4.0\n", - "# MacOS X 10.9.2\n", - "# 2.5 GHz Intel Core i5\n", - "# 4 GB 1600 Mhz DDR3\n", - "#" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "100000 loops, best of 3: 14.4 \u00b5s per loop\n", - "100000 loops, best of 3: 12 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "10000 loops, best of 3: 23.9 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 14 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "# Dictionary operations " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## Adding elements to a Dictionary\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "All three functions below count how often different elements (values) occur in a list. \n", - "E.g., for the list ['a', 'b', 'a', 'c'], the dictionary would look like this: \n", - "`my_dict = {'a': 2, 'b': 1, 'c': 1}`" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import random\n", - "import timeit\n", - "from collections import defaultdict\n", - "\n", - "\n", - "def add_element_check1(elements):\n", - " d = dict()\n", - " for e in elements:\n", - " if e not in d:\n", - " d[e] = 1\n", - " else:\n", - " d[e] += 1\n", - " return d\n", - " \n", - "def add_element_check2(elements):\n", - " d = dict()\n", - " for e in elements:\n", - " if e not in d:\n", - " d[e] = 0\n", - " d[e] += 1 \n", - " return d\n", - " \n", - "def add_element_except(elements):\n", - " d = dict()\n", - " for e in elements:\n", - " try:\n", - " d[e] += 1\n", - " except KeyError:\n", - " d[e] = 1\n", - " return d\n", - " \n", - "def add_element_defaultdict(elements):\n", - " d = defaultdict(int)\n", - " for e in elements:\n", - " d[e] += 1\n", - " return d\n", - "\n", - "def add_element_get(elements):\n", - " d = dict()\n", - " for e in elements:\n", - " d[e] = d.get(e, 1) + 1\n", - " return d\n", - "\n", - "\n", - "random.seed(123)\n", - "\n", - "print('Results for 100 integers in range 1-10') \n", - "rand_ints = [random.randrange(1, 10) for i in range(100)]\n", - "%timeit add_element_check1(rand_ints)\n", - "%timeit add_element_check2(rand_ints)\n", - "%timeit add_element_except(rand_ints)\n", - "%timeit add_element_defaultdict(rand_ints)\n", - "%timeit add_element_get(rand_ints)\n", - "\n", - "print('\\nResults for 1000 integers in range 1-5') \n", - "rand_ints = [random.randrange(1, 5) for i in range(1000)]\n", - "%timeit add_element_check1(rand_ints)\n", - "%timeit add_element_check2(rand_ints)\n", - "%timeit add_element_except(rand_ints)\n", - "%timeit add_element_defaultdict(rand_ints)\n", - "%timeit add_element_get(rand_ints)\n", - "\n", - "print('\\nResults for 1000 integers in range 1-1000') \n", - "rand_ints = [random.randrange(1, 1000) for i in range(1000)]\n", - "%timeit add_element_check1(rand_ints)\n", - "%timeit add_element_check2(rand_ints)\n", - "%timeit add_element_except(rand_ints)\n", - "%timeit add_element_defaultdict(rand_ints)\n", - "%timeit add_element_get(rand_ints)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Results for 100 integers in range 1-10\n", - "10000 loops, best of 3: 28 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "10000 loops, best of 3: 26.2 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "10000 loops, best of 3: 26.5 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "10000 loops, best of 3: 22.8 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "10000 loops, best of 3: 33.3 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "Results for 1000 integers in range 1-5\n", - "1000 loops, best of 3: 242 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1000 loops, best of 3: 239 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1000 loops, best of 3: 203 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "10000 loops, best of 3: 184 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1000 loops, best of 3: 350 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "Results for 1000 integers in range 1-1000\n", - "1000 loops, best of 3: 262 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1000 loops, best of 3: 370 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1000 loops, best of 3: 502 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1000 loops, best of 3: 422 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1000 loops, best of 3: 373 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 25 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Conclusion" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We see from the results that the `try-except` variant is faster than then the `if element in my_dict` alternative if we have a low number of unique elements (here: 1000 integers in the range 1-5), which makes sense: the `except`-block is skipped if an element is already added as a key to the dictionary. However, in this case the `collections.defaultdict` has even a better performance. \n", - "However, if we are having a relative large number of unique entries(here: 1000 integers in range 1-1000), the `if element in my_dict` approach outperforms the alternative approaches." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Comprehesions vs. for-loops" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Comprehensions are not only shorter and prettier than ye goode olde for-loop, \n", - "but they are also up to ~1.2x faster." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "n = 1000\n", - "\n", - "#\n", - "# Python 3.4.0\n", - "# MacOS X 10.9.2\n", - "# 2.5 GHz Intel Core i5\n", - "# 4 GB 1600 Mhz DDR3\n", - "#" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 19 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Set comprehensions" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def set_loop(n):\n", - " a_set = set()\n", - " for i in range(n):\n", - " if i % 3 == 0:\n", - " a_set.add(i)\n", - " return a_set" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 20 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def set_compr(n):\n", - " return {i for i in range(n) if i % 3 == 0}" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 21 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%timeit set_loop(n)\n", - "%timeit set_compr(n)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "10000 loops, best of 3: 136 \u00b5s per loop\n", - "10000 loops, best of 3: 113 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 22 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## List comprehensions" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def list_loop(n):\n", - " a_list = list()\n", - " for i in range(n):\n", - " if i % 3 == 0:\n", - " a_list.append(i)\n", - " return a_list" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 23 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def list_compr(n):\n", - " return [i for i in range(n) if i % 3 == 0]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 24 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%timeit list_loop(n)\n", - "%timeit list_compr(n)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "10000 loops, best of 3: 129 \u00b5s per loop\n", - "10000 loops, best of 3: 111 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 25 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Dictionary comprehensions" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def dict_loop(n):\n", - " a_dict = dict()\n", - " for i in range(n):\n", - " if i % 3 == 0:\n", - " a_dict[i] = i\n", - " return a_dict" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 26 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def dict_compr(n):\n", - " return {i:i for i in range(n) if i % 3 == 0}" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 27 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%timeit dict_loop(n)\n", - "%timeit dict_compr(n)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "10000 loops, best of 3: 121 \u00b5s per loop\n", - "10000 loops, best of 3: 127 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 28 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Copying files by searching directory trees" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Executing `Unix`/`Linux` shell commands:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import subprocess\n", - "\n", - "def subprocess_findcopy(path, search_str, dest): \n", - " query = 'find %s -name \"%s\" -exec cp {} %s \\;' %(path, search_str, dest)\n", - " subprocess.call(query, shell=True)\n", - " return " - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 30 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Using Python's `os.walk()` to search the directory tree recursively and matching patterns via `fnmatch.filter()`" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import shutil\n", - "import os\n", - "import fnmatch\n", - "\n", - "def walk_findcopy(path, search_str, dest):\n", - " for path, subdirs, files in os.walk(path):\n", - " for name in fnmatch.filter(files, search_str):\n", - " try:\n", - " shutil.copy(os.path.join(path,name), dest)\n", - " except NameError:\n", - " pass\n", - " return" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 33 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "\n", - "def findcopy_timeit(inpath, outpath, search_str):\n", - " \n", - " shutil.rmtree(outpath)\n", - " os.mkdir(outpath)\n", - " print(50*'#')\n", - " print('subprocsess call')\n", - " %timeit subprocess_findcopy(inpath, search_str, outpath)\n", - " print(\"copied %s files\" %len(os.listdir(outpath)))\n", - " shutil.rmtree(outpath)\n", - " os.mkdir(outpath)\n", - " print('\\nos.walk approach')\n", - " %timeit walk_findcopy(inpath, search_str, outpath)\n", - " print(\"copied %s files\" %len(os.listdir(outpath)))\n", - " print(50*'#')\n", - "\n", - "print('small tree')\n", - "inpath = '/Users/sebastian/Desktop/testdir_in'\n", - "outpath = '/Users/sebastian/Desktop/testdir_out'\n", - "search_str = '*.png'\n", - "findcopy_timeit(inpath, outpath, search_str)\n", - "\n", - "print('larger tree')\n", - "inpath = '/Users/sebastian/Dropbox'\n", - "outpath = '/Users/sebastian/Desktop/testdir_out'\n", - "search_str = '*.csv'\n", - "findcopy_timeit(inpath, outpath, search_str)\n" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "small tree\n", - "##################################################" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "subprocsess call\n", - "1 loops, best of 3: 268 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "copied 13 files\n", - "\n", - "os.walk approach\n", - "100 loops, best of 3: 12.2 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "copied 13 files\n", - "##################################################\n", - "larger tree\n", - "##################################################\n", - "subprocsess call\n", - "1 loops, best of 3: 623 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "copied 105 files\n", - "\n", - "os.walk approach\n", - "1 loops, best of 3: 417 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "copied 105 files\n", - "##################################################\n" - ] - } - ], - "prompt_number": 35 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "I have to say that I am really positively surprised. The shell's `find` scales even better than expected!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Returning column vectors slicing through a numpy array" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Given a numpy matrix, I want to iterate through it and return each column as a 1-column vector. \n", - "E.g., if I want to return the 1st column from matrix A below\n", - "\n", - "
\n",
-      "A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])\n",
-      ">>> A\n",
-      "array([[1, 2, 3],\n",
-      "       [4, 5, 6],\n",
-      "       [7, 8, 9]])
\n", - "\n", - "I want my result to be:\n", - "
\n",
-      "array([[1],\n",
-      "       [4],\n",
-      "       [7]])
\n", - "\n", - "with `.shape` = `(3,1)`\n", - "\n", - "\n", - "However, the default behavior of numpy is to return the column as a row vector:\n", - "\n", - "
\n",
-      ">>> A[:,0]\n",
-      "array([1, 4, 7])\n",
-      ">>> A[:,0].shape\n",
-      "(3,)\n",
-      "
" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import numpy as np\n", - "\n", - "# 1st column, e.g., A[:,0,np.newaxis]\n", - "\n", - "def colvec_method1(A):\n", - " for col in A.T:\n", - " colvec = row[:,np.newaxis]\n", - " yield colvec" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 83 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# 1st column, e.g., A[:,0:1]\n", - "\n", - "def colvec_method2(A):\n", - " for idx in range(A.shape[1]):\n", - " colvec = A[:,idx:idx+1]\n", - " yield colvec" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 82 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# 1st column, e.g., A[:,0].reshape(-1,1)\n", - "\n", - "def colvec_method3(A):\n", - " for idx in range(A.shape[1]):\n", - " colvec = A[:,idx].reshape(-1,1)\n", - " yield colvec" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 81 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# 1st column, e.g., np.vstack(A[:,0]\n", - "\n", - "def colvec_method4(A):\n", - " for idx in range(A.shape[1]):\n", - " colvec = np.vstack(A[:,idx])\n", - " yield colvec" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 79 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# 1st column, e.g., np.row_stack(A[:,0])\n", - "\n", - "def colvec_method5(A):\n", - " for idx in range(A.shape[1]):\n", - " colvec = np.row_stack(A[:,idx])\n", - " yield colvec" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 77 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# 1st column, e.g., np.column_stack((A[:,0],))\n", - "\n", - "def colvec_method6(A):\n", - " for idx in range(A.shape[1]):\n", - " colvec = np.column_stack((A[:,idx],))\n", - " yield colvec" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 74 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# 1st column, e.g., A[:,[0]]\n", - "\n", - "def colvec_method7(A):\n", - " for idx in range(A.shape[1]):\n", - " colvec = A[:,[idx]]\n", - " yield colvec" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 89 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def test_method(method, A):\n", - " for i in method(A): \n", - " assert i.shape == (A.shape[0],1), \"{}, {}\".format(i.shape, A.shape[0],1)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 69 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "A = np.random.random((300, 3))\n", - "\n", - "for method in [\n", - " colvec_method1, colvec_method2, \n", - " colvec_method3, colvec_method4, \n", - " colvec_method5, colvec_method6,\n", - " colvec_method7]:\n", - " print('\\nTest:', method.__name__)\n", - " %timeit test_method(colvec_method2, A)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "Test: colvec_method1\n", - "100000 loops, best of 3: 16.6 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "Test: colvec_method2\n", - "10000 loops, best of 3: 16.1 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "Test: colvec_method3\n", - "100000 loops, best of 3: 16.2 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "Test: colvec_method4\n", - "100000 loops, best of 3: 16.4 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "Test: colvec_method5\n", - "100000 loops, best of 3: 16.2 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "Test: colvec_method6\n", - "100000 loops, best of 3: 16.8 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "Test: colvec_method7\n", - "100000 loops, best of 3: 16.3 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 91 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Speed of numpy functions vs Python built-ins and std. lib." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import numpy as np\n", - "import timeit\n", - "\n", - "samples = list(range(1000000))\n", - "\n", - "%timeit(sum(samples))\n", - "%timeit(np.sum(samples))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "100 loops, best of 3: 18.3 ms per loop\n", - "10 loops, best of 3: 136 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%timeit(list(range(1000000)))\n", - "%timeit(np.arange(1000000))\n", - "\n", - "# note that in Python range() is implemented as xrange()\n", - "# with lazy evaluation (generator)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "10 loops, best of 3: 82.6 ms per loop\n", - "100 loops, best of 3: 5.35 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import statistics\n", - "\n", - "%timeit(statistics.mean(samples))\n", - "%timeit(np.mean(samples))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1 loops, best of 3: 1.14 s per loop\n", - "10 loops, best of 3: 141 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 14 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [] - } - ], - "metadata": {} - } - ] -} \ No newline at end of file diff --git a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb b/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb deleted file mode 100644 index 0f94642..0000000 --- a/benchmarks/.ipynb_checkpoints/cython_least_squares-checkpoint.ipynb +++ /dev/null @@ -1,2461 +0,0 @@ -{ - "metadata": { - "name": "", - "signature": "sha256:90a74ceed4e3dca395013883669de508e2ef94573e58cf24ce3ba49686ca5fe0" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ - { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[Sebastian Raschka](http://www.sebastianraschka.com) \n", - "last updated: 05/06/2014\n", - "\n", - "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb) \n", - "- [Link to the GitHub repository](https://github.com/rasbt/python_reference)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### The code in this notebook was executed in Python 3.4.0" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "I am really looking forward to your comments and suggestions to improve and \n", - "extend this little collection! Just send me a quick note \n", - "via Twitter: [@rasbt](https://twitter.com/rasbt) \n", - "or Email: [bluewoodtree@gmail.com](mailto:bluewoodtree@gmail.com)\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Implementing the least squares fit method for linear regression and speeding it up via Cython" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#Sections" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- [Introduction](#introduction)\n", - "- [Least squares fit implementations](#implementations)\n", - "- [Generating sample data and benchmarking](#sample_data)\n", - "- [Compiling the Python code via Cython in the IPython notebook](#cython_nb)\n", - "- [Performance growth rates for different sample sizes](#sample_sizes)\n", - "- [Bonus: How to use Cython without the IPython magic](#cython_bonus)\n", - "- [Appendix I: Cython vs. Numba](#numba)\n", - "- [Appendix II: Cython with and without type declarations](#type_declarations)\n", - "- [Appendix III: Cython performance after replacing list comprehensions by explicit for loops](#explicit_loops)\n", - "- [Final Comparison: Cython vs. NumPy vs. SciPy for least squares fitting](#showdown)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/cython_vs_chart.png) \n", - "(Note that this chart just reflects my rather objective thoughts after experimenting with Cython, and it is not based on real numbers or benchmarks.)\n", - "
\n", - "
\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Introduction" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Linear regression via the least squares method is the simplest approach to performing a regression analysis of a dependent and a explanatory variable. The objective is to find the best-fitting straight line through a set of points that minimizes the sum of the squared offsets from the line. \n", - "The offsets come in 2 different flavors: perpendicular and vertical - with respect to the line. \n", - "![](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/least_squares_vertical.png) \n", - "![](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/least_squares_perpendicular.png) \n", - "\n", - "As Michael Burger summarizes it nicely in his article \"[Problems of Linear Least Square Regression - And Approaches to Handle Them](http://www.arsa-conf.com/archive/?vid=1&aid=2&kid=60101-220)\": \"the perpendicular offset method delivers a more precise result but is are more complicated to handle. Therefore normally the vertical offsets are used.\" \n", - "Here, we will also use the method of computing the vertical offsets.\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In more mathematical terms, our goal is to compute the best fit to *n* points $(x_i, y_i)$ with $i=1,2,...n,$ via linear equation of the form \n", - "$f(x) = a\\cdot x + b$. \n", - "We further have to assume that the y-component is functionally dependent on the x-component. \n", - "In a cartesian coordinate system, $b$ is the intercept of the straight line with the y-axis, and $a$ is the slope of this line." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In order to obtain the parameters for the linear regression line for a set of multiple points, we can re-write the problem as matrix equation \n", - "$\\pmb X \\; \\pmb a = \\pmb y$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$\\Rightarrow\\Bigg[ \\begin{array}{cc}\n", - "x_1 & 1 \\\\\n", - "... & 1 \\\\\n", - "x_n & 1 \\end{array} \\Bigg]$\n", - "$\\bigg[ \\begin{array}{c}\n", - "a \\\\\n", - "b \\end{array} \\bigg]$\n", - "$=\\Bigg[ \\begin{array}{c}\n", - "y_1 \\\\\n", - "... \\\\\n", - "y_n \\end{array} \\Bigg]$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "With a little bit of calculus, we can rearrange the term in order to obtain the parameter vector $\\pmb a = [a\\;b]^T$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$\\Rightarrow \\pmb a = (\\pmb X^T \\; \\pmb X)^{-1} \\pmb X^T \\; \\pmb y$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "The more classic approach to obtain the slope parameter $a$ and y-axis intercept $b$ would be:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$a = \\frac{S_{x,y}}{\\sigma_{x}^{2}}\\quad$ (slope)\n", - "\n", - "\n", - "$b = \\bar{y} - a\\bar{x}\\quad$ (y-axis intercept)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "where \n", - "\n", - "\n", - "$S_{xy} = \\sum_{i=1}^{n} (x_i - \\bar{x})(y_i - \\bar{y})\\quad$ (covariance)\n", - "\n", - "\n", - "$\\sigma{_x}^{2} = \\sum_{i=1}^{n} (x_i - \\bar{x})^2\\quad$ (variance)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## Least squares fit implementations" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 1. The matrix approach" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "First, let us implement the equation:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$\\pmb a = (\\pmb X^T \\; \\pmb X)^{-1} \\pmb X^T \\; \\pmb y$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "which I will refer to as the \"matrix approach\"." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import numpy as np\n", - "\n", - "def lin_lstsqr_mat(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " X = np.vstack([x, np.ones(len(x))]).T\n", - " return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 2. The classic approach" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next, we will calculate the parameters separately, using standard library functions in Python only, which I will call the \"classic approach\"." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$a = \\frac{S_{x,y}}{\\sigma_{x}^{2}}\\quad$ (slope)\n", - "\n", - "\n", - "$b = \\bar{y} - a\\bar{x}\\quad$ (y-axis intercept)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def classic_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3. Using the lstsq numpy function" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For our convenience, `numpy` has a function that can computes the least squares solution of a linear matrix equation. For more information, please refer to the [documentation](http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html)." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def numpy_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " X = np.vstack([x, np.ones(len(x))]).T\n", - " return np.linalg.lstsq(X,y)[0]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 4. Using the linregress scipy function" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Also scipy has a least squares function, `scipy.stats.linregress()`, which returns a tuple of 5 different attributes, where the 1st value in the tuple is the slope, and the second value is the y-axis intercept, respectively. \n", - "The documentation for this function can be found [here](http://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.stats.linregress.html)." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import scipy.stats\n", - "\n", - "def scipy_lstsqr(x,y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " return scipy.stats.linregress(x, y)[0:2]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Teaser" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "The following plot below should give you an impression of how the performance of the 4 different approaches will compare to each other at the end of this article." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Generating sample data and benchmarking" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In order to test our different least squares fit implementations, we will generate some sample data: \n", - "- 500 sample points for the x-component within the range [0,500) \n", - "- 500 sample points for the y-component within the range [100,600) \n", - "\n", - "where each sample point is multiplied by a random value within\n", - "the range [0.8, 12) to simulate some scatter in our dataset." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import random\n", - "random.seed(12345)\n", - "\n", - "x = [x_i*random.randrange(8,12)/10 for x_i in range(500)]\n", - "y = [y_i*random.randrange(8,12)/10 for y_i in range(100,600)]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 5 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "#### Visualization" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To check how our dataset is distributed, and how the least squares regression line looks like, we will plot the results in a scatter plot. \n", - "Note that we are only using our \"matrix approach\" to visualize the results - for simplicity. We expect all 4 approaches to produce similar results, which we will confirm after visualizing the data." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%pylab inline" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 7 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from matplotlib import pyplot as plt\n", - "\n", - "slope, intercept = lin_lstsqr_mat(x, y)\n", - "\n", - "line_x = [round(min(x)) - 1, round(max(x)) + 1]\n", - "line_y = [slope*x_i + intercept for x_i in line_x]\n", - "\n", - "plt.figure(figsize=(8,8))\n", - "plt.scatter(x,y)\n", - "plt.plot(line_x, line_y, color='red', lw='2')\n", - "\n", - "plt.ylabel('y')\n", - "plt.xlabel('x')\n", - "plt.title('Linear regression via least squares fit')\n", - "\n", - "ftext = 'y = ax + b = {:.3f} + {:.3f}x'\\\n", - " .format(slope, intercept)\n", - "plt.figtext(.15,.8, ftext, fontsize=11, ha='left')\n", - "\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\nRUdHU7duXf0+np6erz3CliQZg7W1tfwyWsTl5TDIkmQM+ZLo1Wo1W7duzfLZ39fpiPU8X19frl+/\nnucxSpIkSVJB5ePjw7Vr13K0b75cut+xYwc1atTAxcUF0J3FP+tZGhMTQ4kSJQDw8PDI8BzynTt3\n8PDwyFDW9evX9Y/2vIk/M2bMMHoMsv2y7bL9sv2y/fn7k5sT3HxJ9OvWrdNftgfo0KEDq1atAmDV\nqlV06tRJv3z9+vWo1Wpu3rzJ1atXqV27dn6EKEmSJElFksEv3SclJbFnzx6+//57/bLJkyfTvXt3\nQkJC9I/Xge456O7du+uHwfz2229lRxhJkiRJygWDJ3obG5sMYz2DbljIPXv2ZLn91KlTsxzeVNJp\n0qSJsUMwqje5/W9y20G2X7a/ibFDKLQMOmCOISgUCgpZyJIkSZKUK7nJfXIIXEmSJEkqwmSilyRJ\nkqQiTCZ6SZIkSSrCZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIkwmekmSJEkqwmSilyRJkqQiTCZ6\nSZIkSSrCZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIkwmekmSJEkqwmSilyRJkqQiTCZ6SZIkSSrC\nZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIszM2AFIkiRJWYuNjWXHjh2YmJjQtm1bnJycjB2SVAgp\nhBDC2EFkh0KhoJCFLEmSlG03btygdu1AUlLqAOnY2p7nzJkjuLu750v9f/75JzNnzichIYn+/bvQ\nv3/ffKlXylpucp88o5ckSSqAJk78mEePRqDVfgRAauqHTJv2KStWfGvwuv/880/q1GlCSso0wINj\nxz7m8eMERo9+z+B1S3lP3qOXJEkqgKKi7qHV1tC/Tk+vwe3bdw1e78OHDwkMbEVKyhBgAtADlWo1\n8+d/Y/C6AU6cOMHIkWMZO/Z9/v7773yps6iTiV6SJKkAatWqMUrlF8Bj4CFK5Ve0bh1o8HqnTp1N\nQoInYPrcUpN8uWW6f/9+mjZtz7JlJVm8WEmtWo25ePGiwest6mSilyRJKoA+/ngy77zjg6lpCczM\nPBgwoA7jx482eL2XLt1Aq+0P/AB8A/yCiUkPxo4dZvC6P/poHirVV8BkhJhNUtJ4Pv98scHrLepk\nopckSSqAzM3NWb36O1JTVaSkJPHttwsxMTH8n+yGDWtgbb0bCAMOYGLyPs2a+TNx4liD152cnAIU\n178WwpnExGSD1qlSqRg+fCzly9chKKgr169fN2h9xiA740mSJBVgpqamr94olx49esSOHTtQKBSM\nHTuSs2ffY//+NoCCRo0aERa2AYVCYfA4hgzpyaRJE1GpbAAVSuVsBg9eZtA6O3fuw++/W5CSspCr\nVw9Tp04Trlw5T7FixQxab36SiV6SJOkN9s8//1CzZiNUqiqAwMZmKqdOHcLc3BwhBK6urvmS5AHe\ne284arWab78dh5mZGR9/PJ+2bdsapK7k5GQ++mgWu3dvR4gngAVabX3U6gMcOHCALl26GKReY5DP\n0UuSJBnZX3/9RUxMDJUrV6ZkyZL5WnfPnoP5v//zRKOZDYCZ2VR69XrI6tXf5Wsc+UkIQZMmbTlx\nwoLU1J3APcABENjZNWbt2g9p166dkaPMKDe5T96jlyRJMqIxYyZRt24Q3bvPw8+vCrt3787X+v/5\n5y4aTS396/T0WkRGRudrDPnt+vXr/PHHeVJTNwHDgCBgBebmg3Fze0KzZs2MHGHekolekiTJSA4f\nPsyKFT+jUl3k8eO9JCX9TNeuffLlquW6devx9q7C+fOnMDObDyQAj1Eqv6Zly0YGr9+YhBAoFKbo\nUuBXQD9MTafRo4eCP/44iLW1tZEjzFsy0UuSJBnJjRs3UCjqAo5PlzRCpUokMTHRoPXu3buXd9+d\nSGTkIpKSdiNEJAqFM6amJejevQKTJ080aP3G5uPjg79/WSwt3wV2Y2FxET8/d0JCluHg4GDs8PKc\nTPSSJElGUqVKFTSafcDNp0vW4eLijq2trUHr3bhxC8nJE4AmQFU0mp/x8ipPcnIioaFL86WnvzGZ\nmJiwb99WBg1yombN+fTuLThyJBwLCwtjh2YQste9JEmSkQQEBDBv3sd88EFVzMycsLaG7du3GLyX\nu4ODLaamd9Boni25g52dHebm5gattyCxs7Nj6dKFxg4jX8he95IkSUaWkJBAbGwspUqVypezyjt3\n7lC1al0SEjqQnl4Ca+tv+eWXH2nVqpXB65ZyJje5TyZ6SZKkN1B0dDQ//BBCUlIyXbt2platWq/e\nSTIameglSZIkqQiTz9FLkiRJkpQlmeglSZIk6UWEgEWLIC7O2JHkmEz0kiRJkpQVrRZGj4axY6FD\nB93rQkg+XidJkiRJ/5WeDkOHwsqVYGEBkyZBPkwTbAgy0UuSJEnS89Rq6NsXNm0CpRK2bIHmzY0d\nVY4Vzq8nkiRJ0hsvKSmJLl36olQ64uzsxY8//pT7QlNS4J13dEne3h7Cwwt1kgf5eJ0kSZJUSPXo\nMYgtW1JITV0M3MTauiPh4Rtp2LBhzgpMTISOHWHfPiheHHbtgho18jTmnJKP10mSJElvnF27dpGa\nOg9wBmqRkjKY3bv35Kyw+Hho2VKX5N3c4ODBApPkc0smekmSJKlQcnAoBlzWv7a0vEzx4sWyX1Bs\nLDRtCseOgZcXHDoEFSvmXaBGJhN9Ieft7U1ERIRBytZoNIwaNQpfX1/8/PwICQl54bZz586lcuXK\nVKhQgYEDB6JWqwG4desWZmZmVKtWTf/z6NEjAI4ePUqDBg2oWLEiFStWZNKkSXkaf58+ffDw8MDE\nxASVSpVh3fHjx6latSpvvfUWrVq1IjY2Vh/T87F6eHhQ4wXf6lUqFT169MDPz48KFSrw22+/6det\nWbOGKlWqYG5uzjfffJPl/gcOHMDU1PSF6yVJermlSz9HqeyDufk4lMqOeHpeYdCgQdkrJDoaAgPh\n7Fnw89MleV9fwwRsLKKQKYQh50hoaKiYOXPmK7fz9vYWFy5cMEgMq1atEq1atRJCCBEbGys8PT3F\nrVu3Mm23a9cuUaVKFaFSqYQQQgwdOlQEBwcLIYS4efOmcHZ2zrL8CxcuiGvXrgkhhEhNTRUNGzYU\nP/744yvjGjBggDhw4MArt9u/f7+4f/++UCgUIikpSb9co9EIHx8fceTIESGEEJ9++qkYPHhwlmV0\n6tRJLFiwIMt1s2bNEsOGDRNCCHH16lXh5uYmEhMT9W2LiIgQ/fv3F998802mfRMSEkSdOnVE+/bt\nxZIlS17ZFkmSsnbu3Dnx+eefi++++048efIkezvfvClE2bJCgBCVKgkRE2OQGPNCbnLfG3VGP3/+\nfP73v//pX9+7dw83NzdSUlJyXfa9e/do2rQpNWvWpFKlSnz44Yf6dUOHDmXChAn67cqWLcuff/75\n0vKyM03lmjVrqFmzJn5+fnl6drhx40aGDRsGgLOzM506dWLTpk2Ztvvzzz9p1KgR1tbWAAQFBfHT\nT6/u/VqxYkV8fHwAsLCwICAggNu3b79yP4VC8VrHp0mTJri4uGRafvr0aaytralfvz4Aw4cPZ+PG\njZm2u3//PuHh4fTr1y/L8jdu3Mjw4cMB8PX1pWbNmuzYsUPftgoVKmBiYpJlB5oJEyYwadIkihcv\nrl+WnJxM1apVCQsLA2Dfvn1UqFCBpKSkV7ZVMr5z584xYMAIevcewsGDB40dzhujatWqfPDBBwwb\nNgxbW9vX3/HyZWjUCG7c0N2LP3BAd2++CHqjnqMfMmQI/v7+fP755yiVSpYvX06fPn2wsrLKtG23\nbt24du1apuUKhYJjx45haWmZYbmjoyNbt27FxsaGtLQ0goKC2LVrF61atWLx4sXUqVOHLVu2sHjx\nYiZNmkSVKlVeGmtWyeFFYmNjOXXqFPfv36datWo0btyYypUrZ9jm0qVL9O7dO8v9W7Zsybx58zIt\nv337NqVLl9a/9vLy4p9//sm0XY0aNfj+++95+PAhDg4ObNy4kcjISP36hIQEatSogUKhoGfPnrz/\n/vuZyrh//z6bN29m+/btr9Xm7Byf//pvu5ydndFqtcTHx+Po6Khfvnr1alq1apXll4WsynnR8fmv\nHTt28OTJE7p06cLWrVv1X1qsra3ZuHEjLVu2xM3NjSFDhvDLL79gY2OT06ZK+eTs2bM0atSSpKQP\nAGu2bOnBzz+vJCgoyNihFXqJiYkMHPgeO3b8hp2dI4sWBdO9e7fcFfrnn9CiBdy/Dw0bwrZt4OCQ\nNwEXQG9UondycqJDhw6sXr2aIUOG8MMPP7Bv374st83qzPVl0tPTef/99zl27BhCCO7evcu5c+do\n1aoVVlZWbNy4kRo1atCmTRtGjBiRZRnbt2/no48+AiAuLg61Ws2vv/4KwOjRoxk8eHCW+7377rsA\nlChRgrZt23LgwIFMib5ChQqcPXs2W216XW+//TajRo2iZcuWWFlZ0axZM3bv3g2Au7s7UVFRODs7\nExsbS4cOHXByctLHDPDkyRM6dOjA+++/T9WqVbOs45NPPmHz5s2ALsEePnxY/+191apVr/zilBOh\noaFZfgHKjfj4eCZPnsyePbqewUKIDF9a3nrrLWbPnk39+vX5+uuvX3g8pILliy++JSnpQ0D3JVal\nKsGsWV/JRJ8HBg0axbZtaaSmXkSlus7Age9QurQXderUyVmBJ09CUBA8eqRL9r/8AkX8y/QblehB\nlzD79OmDi4sL/v7++kvH/9W1a1euX7+e5bpjx45lugrw5ZdfEh8fz8mTJ7GwsGD48OEZbglcvHgR\nBwcH7t69i0ajwdTUNFO5bdq0oU2bNoAueUVGRvLxxx+/sk3PJwohRJaXtSMiIujTp0+W+7do0YLP\nP/8803IvLy9u3bql74wWGRlJmTJlsixjzJgxjBkzBtBd0q74tMeqhYUFzs7OALi4uNCnTx+OHDmi\nT/QqlYp27doRFBTE+PHjX9jG6dOnM336dAAGDRrEoEGDaNy48Qu3f5nSpUtnuOLw4MEDTExMMpzN\nHz9+nEePHunfj6w8Oz7PLr9HRkbStGnTTNs9/35cuHCBu3fvUrt2bX3d27Zt49GjR0ybNg3Q3Vpw\ndXV9rasDUsGQkqIGnr9sbKfvkGoIT5484eHDh3h4eGBubm6wegqCnTt3kJp6DnAD3EhNHUh4+O6c\nJfrff4e2bXXPy3foABs2QBZXdIucPOgjkK/yIuS3335blCpVSmzdujUPItKZOHGiGD9+vBBCiDt3\n7ghXV1cxa9YsIYQQN27cEF5eXuLatWtiwIABYvLkya8s73U745UuXVoMHTpUCCHE/fv3hYeHR551\nzlu5cqVo1aqV0Gq14v79+y/sjCeEEDFPO7HExcWJ6tWriy1btuhjUqvVQgghkpKSRPPmzcWiRYuE\nEEIkJyeLpk2big8//DBbcQ0cOPC1OuMJIYRWqxUKhULfSU6IfzvjHT58WAghxCeffJKpM97QoUNf\nGdfMmTP1x/7KlSvC1dU1Qz1C6DoOvqyz3cCBAzN01tu8ebOoXr26iIuLExUrVhQ7dux4rXZKxhUe\nHi6UypICfhawQyiVviIkJNQgdS1a9K2wsLAVSqWnKFGitPjrr78MUk9B4e5eTsABoZtGTghr6y45\n68C6c6cQ1ta6Qnr1EuLp36XCIje5741M9GvWrBHe3t55EM2/IiMjRe3atUWlSpVEUFCQ6NOnj5g1\na5ZQq9Widu3aYt26dUIIXbLz9/cXO3fufGl5K1eu1H9ReBlvb28xdepUUaNGDeHr65tlD++c0mg0\nYuTIkcLHx0f4+PiI77//Xr9u2bJl4uOPP9a/rly5sqhYsaIoV66cWLx4sX755s2bRaVKlUTVqlWF\nv7+/+PDDD4VWqxVCCLFkyRJhamoqqlWrJgICAkRAQICYM2fOK+MaOHCgOHjw4Cu369y5s/D09BQm\nJibCw8NDBAUF6dcdPXpUVK5cWfj5+YmWLVuK+/fv69epVCrh4OAgLl++nKnMgIAA/ZeapKQk0a1b\nN+Hr6yveeustERYWpt9u7dq1wtPTU9jY2AgnJyfh6ekpLl26lGVbnr1nN2/eFKVKlRJXr14VQuh6\n7nt5eYmoqKhXtlUyvi1btogaNZqKqlUbix9+WGGQOs6cOfP0C8WNp4kvVHh6vmWQugqKX375RVhb\nlxBmZhNF0rhoAAAgAElEQVSFtXUn4etbJfu96zdvFsLcXJfkhwwRIj3dMMEaUG5y3xs5BO6QIUOo\nUKECEydOzKOoJEmSDC80NJTRo/eTlLT66RKBqakVCQmPUCqVeV7ftWvXOH/+PN7e3i8cTyI/nD59\nmt27d+Po6Ejfvn2z17t+zRoYOBA0Gt10swsXQjaeaiooCvQQuPHx8XTt2pUKFSrg7+/PiRMniIuL\no0WLFpQrV46WLVsSHx+v337u3Ln4+flRvnx5wsPD8zSW6Ohoypcvz/Xr1xk1alSeli1JkmRoZcuW\nBY4BCU+X/I6trZP+0da89NNP66hatT6DB/9I48ZdGDducp7X8bpq1KjB5MmTGTFiRPaS/PLl0L+/\nLslPm1Zok3yu5dFVhRfq37+/CAkJEUIIkZaWJuLj48UHH3wg5s2bJ4QQIjg4WH8v9OLFi6Jq1apC\nrVaLmzdvCh8fH6HRaDKUlw8hS5IkFUharVaMGDFOKJWewsGhubCxcRbh4eF5Xk9KSoqwsrIX8OfT\nWwRxQqksJU6fPp3ndRnMggVCf2P/6QBehVlucp9BL90/fvyYatWqcePGjQzLy5cvz8GDB3F1deXu\n3bs0adKEv//+m7lz52JiYqIfbCYoKIiZM2dSt25d/b5y9jpJkt50586dIyYmhqpVq+Lu7p7n5UdH\nR+PrW43k5Hv6Zfb27Vi1agidOnXK8/rylBDwyScwY4bu9ZIlUASu4BbYS/c3b97ExcWFQYMGUb16\ndYYOHUpSUhL37t3D1dUVAFdXV+7d032YoqOj8fT01O/v6elJVFSUIUOUJEkqdAICAmjdurVBkjzo\n/i7b2loB654uOUda2omCP66DEDBpki7Jm5hAaGiRSPK5ZdDn6NPT0zlz5gxLliyhVq1ajBs3juDg\n4AzbvGo406zWzZw5U/97kyZNaNKkSV6FLEmS9Ma7ceMGtrYOxMb2BYZhYSFYuXLlC8fRKBC0Wl1S\nX7YMzMxg7VrolssR9IzowIEDHDhwIE/KMmii9/T0xNPTk1q1agG6QWjmzp2Lm5sbd+/exc3NjZiY\nGEqUKAGAh4dHhkFC7ty5g4eHR6Zyn0/0kiRJUt7RaDQ0bdqOqKhRwHBgDxYWgwgMbGTs0F4sPR0G\nD4YffwRLS/j5Z93AOIXYf09iZ82aleOyDHrp3s3NjVKlSnHlyhUA9uzZQ8WKFWnfvj2rVq0CdCPA\nPbvn06FDB9avX49arebmzZtcvXpVP4KYJEmSZHhRUVHExSUixBjAEmiLqWkAZ86cMXZoWVOroWdP\nXZK3sYHt2wt9ks9rBh8Cd/HixfTp0we1Wo2Pjw+hoaFoNBq6d+9OSEgI3t7e+pnD/P396d69O/7+\n/piZmfHtt99maxY3SZIkKXecnJxIT08A7gCegIr09GsvnNzJqJKT4Z13YMcO3aQ0O3ZAvXrGjqrA\neSMHzJEkSSpo1Go1oaGh3LwZSb16dejYsaPRYgkOXsAnnyxCo2mHuflhOnSoxZo13+fqxCsxMZF3\n3x3Nrl27cHQsztKln9O6deucB/nkCbRvDwcPgrMzhIdDtWo5L6+Ay03uk4lekiTJyDQaDYGBbTh7\nVqBSNcLGZi1jxvRgzpyZRovp0KFDnD17ljJlytCuXbtcX13t0qUv27drSE2dB/yNUtmXY8f25Gzm\nyUePoHVrOHECSpaEPXvA3z9X8RV0MtFLkiQVYlOmTGHevE0IcRkwBe5hbl6Gx48fGmTUO2OwtnYg\nJeU6oJvN0tx8HHPmePL+++9nr6D796FlSzh/HkqXhr174QWzkBYlBfY5ekmSJOnlQkNXEhy8BCHK\noEvyAC4oFBaoVCpjhpanbGwcgFv61+bmN3FwcMheIVFREBioS/LlysGhQ29Eks8tmeglSZKMRKvV\nMm7cdGAl8BewGrgNjMXHx49ixYoZM7w89eWXc1AqO6JQTMfKqhvu7rfo1avX6xdw8yY0agR//w1V\nqujmli9VKttxpKSkkJycnO39CjOZ6CVJkoxk9Oj3SUhQAWWBHcBSoBqwik2bVhapp4769+/Lzp3r\nmTbNhODghpw5c/j1J6j5+29dkr95E2rXhv374enoqq9Lo9HQv/9wbG0dsbNzomvXfqjV6hy0pPCR\n9+glSZKM4NSpU9Sp0wCtdhz/JvkY4F2aN2/E7t3bjBtgQXHunO6efGwsNG4M27aBnV22i5k7dz6f\nfrodlSoMMMXauitjx9Zi7tycD0STn+Q9ekmSpFwKDw/HxyeA4sW96NNnqEHvjx87dozGjYPQagHe\nB7oB/YH3aNKkJjt3bjFY3YXK8ePw9tu6JB8UpHtOPptJPiEhga+++orly39CpXoPsAOUJCePZu/e\nowYJu6CRiV6SpDfeX3/9RadOfbhxYw5xcQfYvDmeAQNGGqy+GTO+IDl5LrohZrsC1VAo+lOsmAUb\nN67H1NT0FSVkX0JCAt26DaREibJUqdKAkydP5nkdeerAAWjeHOLjoXNn+PVXUCqzVURCQgIBAfWZ\nMuUYt25ZAb/r15maHsPbO/MQ60WRwUfGkyRJKuh27dqFRtMbaANASsq3/PZbOYPVp1KlAMWBhcAX\nwExcXBI4fvyQwUag69SpD0ePOpOauovY2D9o2rQtERGn8fLyMkh9ubJ9u27Eu5QU6NMHVq7UTVST\nTatXr+bu3QqkpGwA7gF1USjOYGvrgLX1JRYs+P1VRRQJ8oxekqQ3np2dHWZmt59bchulMvv3gV/X\n0KE9USonA4eBmiiVD1m8+DODzQ6nVqs5eHAXqanfAX5Ab6AF+/fvN0h9ufLzz9Cpky7JDxsGq1fn\nKMmD7oxerX52TF2BXVhaXmDFisFcvnyWUjnotV8YyUQvSdIbr3fv3ri6XsXSshcKxSyUyo588cWn\nBqtvwIB+fPnlB/j5vU+5clNYsmQm3bsbbkpVMzMzzMzM0Z3VAggUiqjX7/WeX1avhu7dIS0NJkzQ\nTTlrkvM01apVKywsVgH7gNtYWX1Ex47v0LVrVxwdHfMs7IJO9rqXJElCd/b3/fffExsbR1BQiwxT\nhBYFc+bM57PPvkelGoyV1Sl8fP7h1KmDWFlZGTs0naVL4b33dL/PmKH7yYPHC8PCwvjf/yaTkBBP\nmzZt+OGHRSizea+/IJBD4EqSJGWDEIL169ezf/9RvL09GDt2NDY2NsYOK0+Fh4czY8YCUlPVjBzZ\nlyFDBrN161b27z+Ep6cbI0aMKDhtnj8fJk369/fsDov7BpCJXpIkKRsmTZrGN9+EoVINxtLyGD4+\nNzl9+veCc3abA7/99htjx07jyZME6tatzu7dv5Oc/DXggFI5ni++mMDIkcOMHWZGQsDMmTB7tu71\nt9/CSMM97VCYyUQvSZL0mtRqNTY29qSn3wZKAAJb24b89NOHdOjQwdjh5cipU6cIDGyLSrUKKIOp\naVs0mlHA+Kdb7KFixRlcuHDEiFH+hxAwcSIsXKi7Dx8aCv37GzuqAis3uU8+XidJ0hslLS0NUABO\nT5coUChKFNrxzyMiIujRoz8q1SAgCACNpgHw/IA/Ksxy2HPdIDQa3f345cvB3BzWrdM9TpcNycnJ\nLF68hCtXImnYsCYDBgwoUkMG56UC9M5LkiQZno2NDQ0aNOX48aGkpk5EoTiGiclxAgOXGju0bLt0\n6RI1azYiObkREAnsBdKAeigU7yOEGeCIUjmbGTOWGDVWvfR0GDgQfvoJrKxg82bd3PLZkJaWRuPG\nrblwwYmUlCasW/cNJ06cZ+nShYaJuZCTl+4lSXrjJCQkMHz4eA4dOoanpwfff/8llStXNnZY2RIT\nE0OFClV5/DgQmI9uMhwPwBa4yOTJ/+POnYekpKgZMqQXrVq1yvMYhBCo1WosLS1fb4fUVOjZUzfK\nna0tbN0KOXi6Yf/+/XToMIHExNPonhKPx9zckwcPorG3t892eYWBHOtekiTpJdLT0zl+/DiHDh0i\nOTkZe3t71q0L4c6dCI4f313okjzA5MmzePKkJqAFQoB26Ka6PY6p6UQuXrzFjz8uZ9OmlTlO8klJ\nSXTu3AdLS1ucnNwJCQnVrwsJCUWpdESptKNmzSbcu3fvJSUBKhV06KBL8o6OsGdPjpK8rigVJibF\n+TeF2WFiYkFKSkqOyivq5KV7SZKKtKSkJBo1CuLq1UcoFFYUK5bM8eN7cXNzM3ZouXLrVjRabS9g\nBnAdGIeu7wFoNM24fj0813UMGTKGHTu0qNX/oFbfZsyYdpQt6421tTVjxkwjJeU4UI7z56fQpUt/\njhzZlXVBCQnQrh0cOgQuLrB7N1StmuO46tevj7n5CBSKrxHibSwsllK5chWDDR9c2MkzekmSirRP\nPgnm0qVSJCb+yZMnfxAd3Y4xYyYbO6wcu3v3LleuXKFp07oolaFAOGCPbprbJCAdS8vvqVevRq7r\nCg/fTWrqHHQdF6uSnDyE3bv3cvToUdLTuwIVAFPS06fzxx+Hsi4kLk43Oc2hQ+DhAb//nqskD+Dk\n5MTRo3tp0GAXnp696NBBRXj4L7Iz3gvIM3pJkoq0ixevk5LSmmfnNWlpbbh06SPjBpUDQgiGDx/L\n6tU/YmbmiIuLDUFBAWzZUhEhBJ6efty9WxKFwoxatWqzcOE3ua7Tyak4cXERQBlAYGkZgYtLXVxd\nXTE3/xW1WgOYAqdwcsriCsm9e9CiBfz1F5QpA3v36v7NA+XKlePQoe15UlZRJxO9JElFWt26Vdm7\ndy3Jyd0AcywtV1GrVu7OKPObEIIRI0YSEvI7Wu0tUlPtSUmZTalSJ0hKSgDA0tKSuLg40tLSKFGi\nRJ6c3S5bNp+OHXuh0fQATmFpGcn9+7707NmTatVWc+5cfYR4CyF2sGrVjxl3/ucf3Zn8lStQvrzu\nnrzHmzEtbEEje91LklSkpaWl0alTb/btO4BCYU7FiuXYuzesUPXOXrbse0aPnkJ6+lhg+tOlkTg5\nNSAu7o5B646IiODTTz/j55/3oVaPw9z8BsWK7ebcuaOcPHmShw8f0rBhQ/z8/P7d6fp1aNYMIiMh\nIAB27YISJQwaZ1EnB8yRJEl6AXNzc7Zt20hUVBTp6el4eXlhkosZ0fLb4cOH+fDDz0hPHwjsBiYB\nlkAYZcv6Grz+GzdusHlzOGr1NqAOaWkQH9+fdevWMX78+Mw7RETozuRjYqBuXd3c8k5OmbeT8o1M\n9JIkFXkKhQJPT09jh5FtBw8epHXrbiQnFwcaA7fRdYBzwtLyFmvWGHZI27Vr1zF06Iekpgp087nr\npKe7kZiYlHmHM2egVSt48ED36FxYGNjZGTRG6dXkpXtJkoqM9PR0fvjhBy5dukbNmlXp27dvoe6J\n3apVV8LD26DrVT8O3aN0F7GyWsnevdupX7++QesvX74Oly9/CmwFLgNfADdQKody9Ohuqj7fe/7o\nUWjTBh4/1v37f/8H1tYGje9NIi/dS5L0xtNqtbRp05UjR56gUrXExmYx+/cfZ8WK3Pc+N5a0tHTA\nHEgGWgHf4uqaxM6dBwgICDB4/enp6YASXYKfCrTGycmMjRvXZkzy+/bpBsNJSoKuXXXD21pYGDw+\n6fUUnhtVkiRJL3HmzBmOHr2ISrUT+JCkpD2sXbuWu3fvGju0HHvvvb6YmIwFlgN2QCRduwYZNMnH\nxsZy7tw5EhIS+N//BmJjMxzYDwSgVKrZuXMjzZs3/3eHbdt0Z/BJSTBggG6CGpnkCxSZ6CVJKhKS\nkpIwNXVBdwYMYIeZmT2JiYnGDCtXTE1NsbDwAQ4CXwFHWbFitcFuX3733Q94eZUjMLAfHh4+VKpU\ngXnz/ke1asE0aLCWbds2ULt27X932LgROnfWjWH/3nuwYgUUpFnyJEBeupckqYioXr06lpbRmJh8\njVbbBjOzlbi7F8Pb29vYoeVYXFwcpqb+/HtO5ktqqoq0tDQs8vis+dq1a4wfP5WUlD9ISfEFDtC5\nczcePLjDqFEjMu8QGgpDhoBWC5MmQXAwFOL+EEWZPKOXJKlIsLOz48iR3dSqtQ1n55YEBl7kwIHf\nCtY87K9p+/btdO8+iB079qHR/IZu+tl4zMwmUbNmozxP8gCXL1/GwqI68OyRvSZotVbExMRk3njJ\nEhg8WJfkZ8+WSb6Ak73uJUmSXiImJoaDBw+iVCpp1arV60/JmkO6R9omoVJ9hEJxHyurL7G1dSIh\n4QF16jRm06ZQShhg8JnLly9TrVpjkpP/ALyAY9jYtOPBgyisrKz+3TA4GKZM0f2+YAFMmJDnsUiZ\n5Sb3yUQvSZL0AufOnSMwMAgh6iPEPcqU0XL8+F6USqXB6ixXrhZXr84FdB3eFIqpTJig5Ysvgg1W\n5zMLFy5m6tSZWFj4kp5+nY0bV9G2bVvdSiFg+nT47DPd2fuyZTBsWLbKT0xMRKPR4ODgYIDoizY5\nH70kSZIBvPvuOBIS5vDkyWYSEw9z9aoHS5YY9nG9tDQ1YKt/LYQtKSlqg9b5zPjxo7ly5Rzbt3/J\nrVuXMib58eN1Sd7UFH78MVtJXqPR0L//MJycSuDi4kGrVp1RqVQGaoX0XzLRS5IkZeH+/fvcvn0b\nqPd0iYKUlLpERkYbtN533+2FldUgdNPPrkOp/Ir+/XsatM7nlSpVigYNGvw7t7tGA0OHwtdf6x6b\n27QJ+vTJVplffbWYn3++THr6PdLS4vj9dzMmTfrYANHn3JEjR+jYsQ9t2/Zk165dxg4nT8lEL0mS\n9B+DB4/A3b0scXGJwGdAOnAPpTKUJk0MNxrd+vUb+eyzYDSaWExNu1Kp0tds3bo+4yNt+SktDfr2\nhZAQ3Sh3YWG6x+myaf/+E6hUQ9GNBWBBSsp7/P77yTwPN6eOHDlCy5adCQtryPbtLenSZRDbtm0z\ndlh5RiZ6SZKk58ycOYvQ0M1oNNfQaq8CEYASMzNvxo3rTteuXQ1S782bNxk8eBQpKQdJS3uARhNK\nTEwUjRs3Nkh9r5SSohvlbv163Xj1O3fqxrHPAV/fUlhY/A7o7jGbmh6ibNlSeRhs7nz55XeoVDOA\nkcBgVKqFBAd/a+yw8kzhe+5EkiTJgBYu/AZoD7g9XfIHYE5CwmOs83Ds9vT0dL7+egknTpynYkUf\n/P3fwty8NsnJz4aWfQeVahT37t3DI7/ncU9Kgk6ddHPIOznpppmtVSvHxc2YMYXffnube/caAdZY\nW19j0aKDeRdvLmm1gn8HWgIwQ6PRGiucPCcTvSRJEnD+/Hl69RpGQkIC8DsQDzgC27C1dcnTJA/Q\nrdsAwsPvolL1JCwsjLJlfyE9/R7wECgO/AmkULx48dcqT6vVcvHiRdLS0qhUqVLOn7V//BjatoUj\nR3RzyO/eDVWq5Kysp5ycnPjzz2Ps37+f9PR0AgMDC1TP+9GjB7FrV2+Sk5WAJUrlRCZM+NLYYeUZ\n+XidJElvvEePHlG2bEXi4+cC+4BjwGOgNHCR0NBvGDhwYJ7VFxUVhY9PFVJTzwG9gb8AFf7+Vbh1\n6y5mZlVJSztJSMgSevXq8cryUlJSaNGiE2fPXsHExIqSJa04fHgXLi4upKen8+TJExwdHV89k9+D\nBxAUBKdPg6cn7N0L5crlRZMLvPDwcObMWUJ6uoZx4wbTtes7xg4pA/kcvSRJUg6lpKTQvXsftm27\nhRCngRTgfWAlJUq4sGhRMD16vDrZZseNGzeoXLkRKlV9wB1YCDzEyqoxn3zyLuXKlaNSpUqULVv2\ntcqbNesz5s07RXLyJsAUc/OJdO78CB8fDz7/fAEKhSleXj7s2fMrZcqUybqQmBho0QIuXgQfH91l\n+0I8fHBRIxO9JElSDnXrNoCwsFuo1beBvwFL4CEWFmWIjr752pfOX8fOnTuZOnUeycnJJCQ8Ijr6\nIXAC8Hm6xVwmTHjEggWfZ6vczp378euvzYCBT5ccpnjxXjx8mPi0fD/gc/z9N3Px4onMBURGQvPm\ncO0a+PvrLte7u+eskZJByAFzJEmSckCr1fLrrxtQq8OAOsDbwFQsLOozevToPE3y69ato3373pw9\n+z/+/juYR4/MsLIyRzcFLIAGa+tDlCnjle2yq1f3x9r6ZyANEJiZrScu7i7QBSgHKICJXLp0Co1G\nk3Hnq1ehUSNdkq9WDQ4elEm+iJFn9JIkvbGEEFhbO5Ca+hfgCazD3PwT3nuvNQsXLnz1Pe3XdObM\nGerUeZv09GnAB0+XHqFUqaEkJDxCiGpotTFUqlScAwd+y/Z4+qmpqbRu3ZUTJ85hYmKFp6c9V678\niVZbEd0ZvSVwCBubLiQmxv6744ULujP5e/egfn347TdwdMyTNhcEp06dYvv2HTg42DNgwAAcC3Hb\ncpP7ZK97SZLeWAqFgqlTpzBvXmtUqlGYm5/HzU3B7Nmz8yzJA0ye/Bnp6XWAhOeWPsbOzpHTpw9y\n9OhRbG1tCQwMzNFse5aWluzdG8aVK1dQq9VUqFCBgIAGXLyYBlRDd1a/h6+//vrfnU6fhpYtIS4O\nmjaFLVvA1vYFNRQ+W7dupWfPIaSkDMLcPIIFC5Zy/vwxnJycjB1a/hOFTCEMWZKkAm79+vWiX79h\nYvLkaeLhw4e5KissLEyUKuUvHBxKiu7dB4rNmzcLX98aApYLcBEwQ8AiYWJSXPz888951ILM7ty5\nI6pXbyxMTEyFnV1xsWLFin9XHjokhL29ECBEu3ZCJCfnef33798Xbdt2E2XLVhOdO/cV0dHReV7H\ny3h7VxYQLnQD9QthadlHzJ8/P19jyEu5yX3y0r0kSW+U06dP8+mnC0lMTGbIkB706NE9z8o+c+YM\nDRsGkZy8FiiJQtEcU1NXTE3TSE3VAPOBdZia7mPixEHMmzc3z+p+ESFExqsTe/ZAx46gUkH37rBm\nDZibv7iAHLh79y7e3pVJTW0LDAF+pXTp7fz995mMU94aUPHiXsTF7edZR0eFYgZTpmj57LNP8qX+\nvCY740mSJL2Gv/76i8DAIH79tTZ79rzD4MGTWbFiZZ6Vv2vXLtTq/uimmN2EEE1JTz9LauoFwAdz\n84G4up5k/vyp2UrySUlJDB06Bj+/mjRt2oHLly+/9r4ZknxYmG4wHJUKBg2CtWvzPMkDDBgwktRU\nE2AF0BCYz927ppw+fTrP63qR9u3bYm09EfgHOIyV1XLatAnKt/oLEnmPXpKkN8by5StJShoNjAFA\npSpJcPAkBg8emCflOzg4YGFxmuRk0CWYQHQ93gFm4OU1kmvXsp/s3nmnHwcPWpCS8g3Xrx+nXr2m\nXL587t8Z5v4jPj6egwcPYm5uzttvv60b1W/9et0ENRoNjB4NX30FJq93rqdSqYiOjsbd3R2lUvnK\n7S9fvg5oADVgBWjRaBIxN8CXihdZuvRLtNpxbNlSCxsbexYu/JoGDRrkW/0FiTyjlyTpjaHVasn4\nZ88kT28F9uvXDze3v7Gy6gncBb5EN8qeCkvLxTRqVCfbZapUKvbs2U5KymqgDkKMJS2tJvv3789y\n+8jISN56K4B+/b6hZ885VKlSD9XixdC7ty7JT5mim3L2NZP8zp07KVHCi4CAFri4eLJlS9gr9wkI\nqIxC4QZ0AlYC7+Dqakn16tVft9m5Zm1tzerV3/H48V2io6/k6S2aQidPegnko0IYsiRJBcTZs2eF\nUuksYJmAn4VS6SuWLv0uT+t4/PixWLBggahQobowMXEU4CbAVtSp87ZISEjIdnmpqanCzMxSwIOn\nHcu0wta2sfjll1+y3L51627C1HS2ftsJpnWFvkfaZ59lq+74+HhhY1NcwKGnRZwQSmVxcf/+/Zfu\nd/fuXeHjU0WYm7sJExMX4e1dQTx69ChbdUsZ5Sb3yUv3kiS9MQICAti7dyszZy4gKSmZIUM+ZsCA\nfnlah729PTY2NkRG2qDVRgNWmJlNw97+EnZ2dtkuz8LCgpEjRxMS0gqVaigWFscpWfIxrf4zZey1\na9do3bor165FAqMAmMJc5miO6zb4+msYMyZbdd+4cQNTU3d099kBamNu7sPVq1dfeNsAwNXVlYiI\nP4iIiMDCwoIKFSrk6eOKUjbl4ReOfFEIQ5Yk6SW++WaZKFmynHBxKSOmTZslNBqNsUPKtWHDRgv4\nUn8iDRdEyZLlclyeVqsV338fInr0GCymTJku4uPjM60vU6aSUCgWChgvoIuYwwdCgNCA2NWjV47q\nvX//vrCychRw+Wk7bggrq2Lizp07OW5Lbh08eFD4+VUXTk6eokuXvuLx48dGiyU/5Sb3FbqsKRO9\nJBUdGzZsFEqlj4CTAi4IpbKmmDv3C2OHlWuLFy8RSmUzASkChDA1/VS8/Xb7XJWp0WiESqXKtDwy\nMlK0a9ddKBSWAoRQ8EQsoowQINQgvm3cTKSnp+e43h9+CBXW1s7CwaGpsLZ2EYsXL815I3Lp6tWr\nwsbGWcAvAm4KS8sBomXLzkaLJz8V6ERfunRpUblyZREQECBq1aolhBDi4cOHonnz5sLPz0+0aNEi\nw72bOXPmCF9fX/HWW2+JXbt2ZQ5YJnpJKjI6deorIOS5M989okqVRsYOK9fS0tJEUFAXYWNTWtjb\nBwhPz3IiMjIyx+X98MMKYWVlJ0xNLUSVKvVFVFSUEEKIuLg44eJSWpiYzBBgI0w4L1YwUAgQKSjE\nqY8/zpP23Lx5U+zatUtcv349T8rLqWXLlglr60HPfV5UwtTUPFdfZAqL3OQ+g9+jVygUHDhwgGLF\niumXBQcH06JFCyZNmsS8efMIDg4mODiYiIgINmzYQEREBFFRUTRv3pwrV65g8pq9QyVJKlyKFbPH\nxOQ2Wu2zJZE4OtobM6Q8YWZmxvbt/8fFixdRqVRUrlxZ94hbDpw8eZIxYz4iJeUPwI+LF2fQuXM/\nTpzYy549e0hJqYhWOxNzyvAjtelBKkkoWNi4BR/NnJkn7fH29sa7AExZa2+v+7yAQPfY4j9YWNjI\nHPEK+XJ0xH8eXwkLC2PAgAEADBgwgF9//RWALVu2/D979xkfVfE1cPy3NduSUNIoodfQQeklgBTp\nHRA/SjQAACAASURBVEUQRaog2MEOSlP0ryKK8AARRDoISBEEDIQivQQQQq8hEAglfct5Xuwag4Ak\n2U1C8H5f6d07M2fWjzl7507h2WefRafTUaJECcqUKcOuXbtyIkSFQpEL3n33dby9v0erfQW1eiRm\n80g+/fR9t+o8efIkn376KV988QWXLl3yUKSZp1KpqFy5MrVr185ykgfYsWMHdnsXoDygxm5/h717\ntwKg0WiAVLxIZilL6EkKt4CDn07kvfBfH7sJcJ06daJYsVsYDF2BjzGZWvLpp+Meu356Wo480T/1\n1FNoNBoGDRrEgAEDiImJITAwEHDOzoyJiQHg8uXL1K1bN61s0aJFc/V/VIVCkb1Kly7NoUO7mD17\nDlarjZ49w6lUqVKW6rJarXTr9hwrV64C+qDRWBk79kn27t1KqVKlPBt4DipUqBBa7QJSUmw4/2Tv\nokCBQgC0aNGCwj6j+C6+LM3kItfR8k27jox+++1cjTm7GI1Gdu8OZ8aMGVy+HEPz5tNp2bJlbof1\nyMv2RL9t2zYKFSrEtWvXaNGiBRUqVLjrc5VK9a+/xu732eh0w1GhoaGEhoZ6KlyFQpHDihUrxgcf\nuPcUD/Dhh2NZtWonzv3kh2K3w61bH/DJJ5MIC5vqdv25pWvXrkybNpddu2oDFbHb1zFnzlwAvO12\nIgv5ort0gut6AyuGDuODSRNzN+BsZjabGTFiRG6Hke3Cw8MJDw/3SF3ZnugLFXL+8vT396dz587s\n2rWLwMBArly5QlBQENHR0QQEBABQpEgRLly4kFb24sWLFClS5J46R3vovZNCoXh8rFq1EYcjACib\ndk2kHNeuncxynadOnaJ37yGcPBlFpUqV+fHHqQQHB3sg2gc7ceIEx44do0yZMlSsWBGNRsP69T8T\nFhbGhx9+xpUrcfTuPZBl076k8bhx6Pbvh+BgCm7cSL+yZR/egCJP+OdD7JgxY7JcV7a+o09MTOTO\nnTuA81CG9evXU6VKFTp06MDs2bMBmD17Np06dQKgQ4cOLFiwgNTUVM6cOcOJEyeoXbt2doaoUCge\nE4GBfkAw8CFwCjiCVjuG7t3bZKm+hIQEGjRowa5drYmN3UhEhC/ly9ehR48X6Nv3JQICyhAcXIkZ\nM2Z5rA/Tps2gWrUG9O49lVq1mjJp0leAc2Tzk0++4MqVlxFJQX99EgHde8L+/VCmDGzdCkqSVzyI\n5yb/3+v06dNSrVo1qVatmlSqVEnGjx8vIs7ldc2bN7/v8rpx48ZJ6dKlpXz58vLrr7/eU2c2h6xQ\nKLLJnTt37rsO3FMiIyPFYvEXjaaGgK+oVBZ5990PxeFwZKm+7du3i49PLdcyrvkCRV1LAasLlBLY\nKbBF9PpgWbx4idvxx8bGujanOeFq84IYDAXl7NmzEh0dLQaDn4BIcc7ISUqJgNwKDhbJ4XPeFbnD\nndynnEevUCiyVUJCAp079+b339ch4qB//8F8993/smVJ1IULF1i1ahVarZYuXbpQsGDBLNcVGRlJ\n3brtSEyMApoCHwFlgDrAj8DTrjt/oHXr1axdu9it2CMjI2nQoCd37hxNu+brW49ffvmMJ554gnz5\n/CmRuoINvEAwF9mn9sK26mdqP/30v9SqeFwo59ErFIpH1uuvv0tEhBc2203s9iv8+OMfTJv2f9nS\nVnBwMEOGDGHAgAFuJXmAypUr06xZXUymlsBV4BjQCNAD0enuvIRO5/6f0pIlSwKxwAbXlR3YbCcp\nX748RqORWa+OIIKWBHOR7WoTkzt05cnWefd8davVypIlS/j+++85evTowwsoskx5olcoFNmqfPna\nREV9DdRzXZlB9+7bWLQoLDfDyhC73U5YWBhhYT+yffte4DvgFZzzmIcBycAU9u6N8MgRrOHh4XTs\n2JPUVCE11Ur+/PmpX78OP7zclwK9ekFcHBcqVODI2LG06tIlz64ft1qtNGnShsjIRByOisBK5s+f\nQYcOHXI7tEeWO7lPOb1OoVBki6SkJL799jsSE+NRqSIQqQcIev02SpUqmtvhZYhGo6F///4EBATQ\ns+fXJCc/D5iBF4H/odNBWNh0j52zHhoaSkTEb9Su3RSH4y2uX29P/JpP8FrdFhwO6NCB4IULCTYY\nPNJeblm0aBGHDqWSkBCBc2B5Ky+99BzXrimJPjsoiV6hUHhcamoqDRq05M8//UhO7gB8gl6/Hi+v\nFIKC4nnnna9yO8RMCQgIQKM5ByQBXYHK6HQ1iI6+8MBXBPHx8fTpM5CtW/8gKKgQ06ZNon79+v/a\nzvXr12ncuAUpKcWBd2nJOn62r8KEg/j27bEsWQI6nae7l+OuXr2K1VqVv98eV+fmzZjcDOmxpryj\nVygUHrdx40ZOnEghOXkpMBHYg822hbCwVzl4cDu+vr65HWKm1KlThzZtGmCx1MfL62VMppaMHz/+\ngUk+KSmJ4sWrsHx5IrGxazh8eDgtWnTk9OnTiAg2m+2+5X755RdSUioBCXRiCb/QHhNJzFLrufPd\nd49Fkgdo1KgRGs1i4CCQilb7IXXrNs3tsB5byhO9QqHwuMTERFSqQP5+liiDRqPnqaeecmvf99yi\nUqlYuPAHfvnlF86dO0fNms/RoEGDB97/4YdjuXHjInAY51B/BVJTV/HRR2NYtmwlycnx1K3blBUr\n5uHn55dWzuFwoFL50YvrzKYHWoSv8GN3zw70K5o3XndkxBNPPMG0aV/w8svNSUy8xRNPhLJ06U+5\nHdY9oqKiWLJkKVqthl69elE0j/43UCbjKRQKj7t69SrlylXj1q2PgYbo9V9Rs+YpduzY8NCyj4PG\njdsTEREO7Me5JE9QqWqg010hNXUjUBad7k0aNjzLpk0r08pdvXqVCSXL80XiTdTAOJUvv9avweYt\nGx/bE9rsdrvrcJ5Hy759+2jcuBXJyc+hVidjMq1g375tuXZugrK8TqFQPFICAgKIiFjPE0/MJyio\nI+3aJbFmjXvrzPOSKlXKotFUBVoBnwI90OlO43D0AioBeqzW0WzfHn5XuYCffuJLV5L/NrgsjjGj\nCN+84bFN8sAjmeQB3nrrYxISxmK3f4XV+j137gxk7NjPczusLFGG7hUKRbaoUqUKu3dvyu0wcsW4\ncR8SHt6SM2fspKRMQKXS4O3ty507ewAHzmes/RQo4DzFExEYOxY+/ND571OmMHTo0FyKPvdYrVaW\nLl3KlStXaNSoEbVq1cq1WOLibgF/P707HKW5du1ErsXjjsf3Z6JCoVBkwu3bt9mxYwcnTrj/xzxf\nvnzs37+VMWOGotNZsNvnc/36bGy2o3h51cNk6ofJ9AyzZn3jTPIjRzqTvFoNYWHwH0zyNpuNpk3b\n0b//t4wadZLGjdvx44+5996+e/e2mEwfAFHAIUym8fTs2S7X4nGLe7vv5rw8GLJCoXjE7du3T/Ln\nLyw+Pk+I0Rgogwe/muU98tPr1Km3wAzX3vUisFJKlqwk06ZNk2PHjonY7SJDhjg/1GpFFi3yQG/y\npiVLlojFUlfA5vquDorFUtAj/x2ywm63y8iRH0j+/EXFz6+4TJr0Za7E8Rd3cp8ydK9QKNyyf/9+\nNm/ejJ+fHz169ECv1+d2SA8VHR3N+PGfEx0dS/v2TzF69GfExU0CegG3+PHH+nTo8CtPu7mPvNls\nQKW6zt9zqG5RpEhxBg4cCDYbvPgizJkDXl6wdCm0betmz/Ku2NhYHI4Q4K939hVJTLyF3W5Hq835\nVKVWq5k48WMmTvw4x9v2NGXWvUKhyLLFi5fQt+9QHI7uaLVHqVDBzvbtvz3Syf7GjRuEhNTi+vVO\n2GyVMZm+JCnpOCK3AefSP73+FSZOLMVrr73mVluRkZHUq9eMhISXASMm0/9YvXoRofXrQ69ezuRu\nNsPKldCsmfudy8OOHj3Kk0+Gkpi4DKiJVvsRNWvuY+fOjbkd2iNBmXWvUChyxeDBr5KUtJKUlCkk\nJGzg2DENixYtyu2w/tWSJUu4c+dJbLYvgZdITFwJmID5rjuuo9Oto3Llym63VaVKFXbt2sywYfEM\nGhTN77+vIrROHejUyZnkfX3ht9/+80keICQkhAULZlKwYC+02gLUrn2IlSvn5XZYjwVl6F6hUGTZ\n7duxOJeLAaix2UK4fv16bob0UFarFYfDku6KNxqNlXz5xpCS8gWpqdEMHjyEFi1aeKS9kJAQvvnm\nC+e/3LkDbdpAeDj4+cH69VCjhkfayYz4+HgiIiJQqVQ0adLkkdnEqH379sTGts/tMB47yhO9QqHI\nsgYNnkKnGwXEAztRqxfTpEmTLNUlIpw/f56oqCjsdrtH40yvffv26HSrgalABEZjL/r0eYHz54+x\ndet8Tp2K5PPPx91TzuFwcODAAXbu3ElKSspdny1YsJDKlRtQsWJdpk+fcf+G4+KgRQsID0cKFeKd\n+k0o3LYX1as3Ztu2bZ7v6ANER0dToUJNevacSI8en1C5cu1H/seZwk2emQ+Yc/JgyArFYys2Nlaa\nNm0nWq1BChQoIosWLc5SPVarVTp2fFYMBn8xm4tLSMiTcu3aNQ9H+7cDBw5IaGh7CQmpJ2+99b6k\npqb+6/1JSUnSsGErMZtLibd3FSlZsrJER0eLiMiKFSvEZAoWWCOwUUymsjJr1g93VxATI1KtmgiI\no3hxaVa8okBtgR0Cc8VgKCCHDx++p90//vhDRo16T8aNGy8xMTEe6fszz/QTrXaka2a7Q3S6oTJo\n0AiP1K3IPu7kvjyXNZVEr1A8fr788msxmZoJJLmSzwjp1u35LNVltVrlzJkzcuvWLRERmTkzTAoX\nLi9+fsXl9dffEZvNluk6P/lkvBgMHQSsAg7RakdKp07PiYhI27bPCMxKt4RuhVSv3kjat39GKldu\nIO88P0Ds5cs7PyxXTtbPnClgETiVrsxwGTt23F1trlq1SozGAIEPRafrLwEBxeXKlStZ+k7Se+KJ\n5gK/pmt7kTRv3tnteh/k9u3bEh4eLnv37s21pXKPA3dynzJ0r1Aoct3u3ZEkJnYHDIAKq7U3e/ce\nynQ9x44do1ixClSq1Ah//yK89NJAXnnlIy5f/oHY2HV8/30EH31077D8wxw6FEVycnuc05pU2Gyd\nOHLkOOBcQgdx6e6+yJEjkaxZE0L84WEM+HEe6uPHkcqV+bxDV/p9NNHVz/RlYvHyunulwquvfkhS\n0g/AGKzW/+PGjdZMnTot07H/U+PGtTEYvgdSgESMxhk0bvyk2/Xez/HjxylVqjIdOoyiceNutGvX\nI1tfyyjuT0n0CoUi11WpUhajcQ3gPL5Vo1lJxYrlMl1P+/bPcOXKmyQmXiA19SizZy8jMfFNoC5Q\nnsTEz1i06JdM11urViWMxiU4k6Og18+jRg3nrPxRo4ZjNk8AxgKfode/g05XgzL27kTwJiUlgd0q\nNcOrPsFH323n4sUhrn52A74FXkWj+YU+ffrc1WZCQjwQnPbvNlsxbt+Oz3Ts/zRu3IeEhqrR6/3R\n6QJo0yaAd9550+16/+n06dN07vw816+/ye3bO0hI+JPw8KuEhYV5vC3FQ3hwZCFH5MGQFQrFQyQn\nJ7vegZcRH5+aEhxcQS5evJipOmw2m6hU6nQ7q4loNDVEpRog0EqgkEBlCQmpnen4UlNTpXXrLmI0\nBomXV4CYTEWkefOOsmXLFhEROXjwoAwc+Ir06/eyfPHFF1LfVF1i8BcBCaeB5NcYRK+3CMS4Yvuf\ngE5UqnxisfhLRETEPW0OH/62mEzNBY4JbBKTqZBs3rw5wzFbrVYZM2a8NGzYVnr3HnDP93njxg2J\ni4vL9HfxMA6HQ4YOfUMMBn8BH4Ez6V4TjJU33xzp8Tb/C9zJfXkuayqJXqF4PNntdtm7d69s375d\nEhMTs1SHv39xgcUCMwW+Er2+uKhU3gIfCZwXmCI+PkFp7+8zw+FwyOTJk8VgKCrwk8B0MZn8Zfv2\n7XfdlxQeLjfVGhGQtVSRgsb60rfvIDEafV0xOJOewdBFJk6c+MA5A6mpqTJs2Bvi719SihevLAsX\nLpJbt27JoUOH5MaNGw+Nt3fv/q55D8tFqx0lgYElsyWxpxcTEyOtW7cXjaaEQJxAW4EPBBwCN8Vs\nrik//fRTtsbwuFISvUKhUIjIzz//LCqVRaCNQE/Ras1iMAS7Eo0zwfr61svUk3F6tWo1E1iR7gn1\nS3n22Zf+vuH330XMZhGQg6XLSpe2PeV///tabDabjBz5gZjNNQV+Eo3mHfHzC5arV69muO21a9eK\n2VxQvL0risGQT+bOnffAe1NSUkSj0QvcTovVYnlaFi5cmKV+Z8SdO3ckOLi8qNWNBYa42r0gUEnA\nT7y88kn//sOUCXlZ5E7uUzbMUSgUj40tW3ag0fTFZpsCgM32GXb7x8BtwBdIwWaLxtvbO1P1bt68\nmd9+20hMTAygSvdJAlFRR5k8eTI9fXwIHDIEkpPhueeo+sMPLE23R/uECWMoXrwoK1euoHBhP8aM\n2Y6/v3+G2o+Pj6dbt94kJKwAGgBHGDCgCU2aNKJo0aIZ7EX2bh++YcMGbt4sisMxEhgG3ACKAq8R\nHDyJnTt/p1ChQtnWvuLBlESvUCgeG5cuXcNmq5fuSkN8fApgs4WSkNAZs/k3mjWrQ/Xq1TNcZ1jY\nbIYNe4/ExJfQar1RqV5C5GvgIjCBw4fbs/2NlQy2ufZkHzgQpk51HjmbjkqlYsiQgQwZMjDT/Tp/\n/jxqdUGcSR6gEnp9CCdOnLhvotfr9fTs2YflyzuTmDgcrXYnZvOftGrVKtNtZ5TzR4QGaAF0AcoB\nFgoUsLFq1Rolyeci5VAbhUKRI5KTk/nyy685fPgkdepUY+jQIWg0mocXzIQff/yJwYMnkJi4CvDF\naOzFoEHVqFu3BgcOHKJ8+bL06dMnU+0WKFCEuLhVQA2cM+6fpFQpDfHxt7l8uR3POaoQxotocLC4\nWGm6nz0BKtXDqs2U27dvExRUnKSk34HqwGmMxtr8+edeihcvft8yNpuNceM+47fftlGiRGE+/XQ0\nRYoU8Whc6d26dYsKFWpy7dqz2O0N8PKaRIMGBlauXIzZbM62dv8r3Ml9SqJXKBTZKiEhgXfeGU1Y\n2HySkqpht7fHZFpAmzbFWLx4jkfbEhHGjBnPZ59Nwmaz0qNHL2bN+tat0/QMBm9SUs4D+QHQ64cx\nblwJtm49QKEVGqbi7MNonmdZ5VMcitz6r/WdPHmSAwcOEBwcTJ06dTIcx8KFi+nXbwg6XTlSU6OY\nNGkcQ4cOynK/3HHgwAFmzvwRtVrFgAEvpB0AdOnSJV5//X3Onr1E06Z1+fjj9x/pkwzzEiXRKxSK\nR5LD4aBGjYYcOWLCbj8LHMc5vJuIwVCMkycPZstT5l9/I1QeeLLu1KkXv/4qpKRMBDagUr0OxDNK\n68V4axIAb/IBU00RvP56Mz755IMH1rVgwSL69RuKTtcQu/0Afft24dtvv8hwLNHR0Zw4cYKSJUsS\nHBz88ALZICIigtatu5CYOBywYzZ/S0TEemrkwuE8/yVu5b6szwHMHXkwZIXiP+vFFwcJFBD4XeDJ\ndLPV7WIyFZVTp07ldogPdefOHenZ80XJl6+waDT5RMX/5CM++KsjMlxnFqMxnwwcOFysVusD60lN\nTRWDwUfggKvoTTGbS8gff/yR6ZhsNpv83//9n7z66psSFhYmdrvdnS5miN1ul8GDX3WtjZ9218qD\nzp17Z3v7/3Xu5D5lZzyFQpHm2rVr7NmzxyOnme3du5f581fi3O61JnATGAPsRasdTqlSRShRooTb\n7TgcDs6ePcvVq1fdrut+LBYLCxbM4tixfWg1KiZxkdF8gh01gww1CF34I4mJcUyb9jVa7YPnN8fF\nxeFc6FTNdcUXjaY658+fz1Q8IkKXLr0ZMWIOX31VkGHDptG794AMlY2MjKRjx140atSOqVOnZ+oJ\nccqU75gzZwdQB0i/WiCA+PikTPVBkcM89nMjh+TBkBWKPOGHH34UozG/+PhUF5OpgCxb9rNb9S1d\nulS8vdsLtBDoKfB/AmVFp/OXLl16S2xsrNsxnzt3ToKCSotG4ydarbf07t0/255ukxMTZbpaKwKS\ngk66ME/M5rKydevWDJW32+0SGFhSYLbrSfigmEz+EhUVlak4Dh8+7DotL8lVT7wYDP5y5syZfy13\n4sQJsVj8RaX6UmCZmExVZOzYTx/a3r59+6Ro0fKug3jCBH4QKCewxbVjX0lZuHBRpvqgyDx3cl+e\ny5pKolcoPO/SpUtiNBYQOOJKHnvEZCqQpZ3Url69Kl269JFixUJEo/EV2CUwSqC2GAwF5fr16x6J\nOSUlRXx8gl2bszgE7ohO94RMn/5/HqlfxHkM78yZM2XmtGmS2K2bCEgiSCevVmKxVJEePV7I1AYw\nBw8elMDAkuLllV8MBh+ZPz/zG9j88ccf4uNTI93QuYjFUk4iIyP/tdyYMR+LRvNqunKHxN+/5L+W\niY+PlwIFigjME3hb4CXXd/29QEkxmQrLjBmzMt0HRea5k/uUdfQKhYJTp06h15cnKSnEdaUWGk0Q\n58+fJ1++fBmux2az0bjx05w61QirNQyVahwqVSMMhnyYzV6sW7eeAgUKuB2vzWajV6++3L6dAAzG\nuYmNBau1D9u27WHAgP5ut3HhwgVq1WqILeEJwlJ2YbRfxGE2c/6LL2glwoBixXj66aczNeGvatWq\nXL58ktjYWPLnz49Op8t0XFWqVMFsvk18/CQcjs5oNPMpWFBDuXL/fgiQM870Q/WOh8Z+4sQJrNZ8\nwLNAK6AxUA+TyQ+DIZWdOzdTpkyZTPdBkbOUd/QKhYJSpUqRmnocOOa6sg+bLZpixYplqp5jx45x\n8eJNrNb/AbURWY7ZXJolS2Zx5cppatas6ZF4R478kF9+OQhYgF9dV+3ASsqWzXjMEyZMxNs7EIPB\nl+7d+5KQkJD22fvvjyPpek/mJSbQ0X6ROAyMrNmAY0FBJCUlYTKZsjSrX61WExAQkKUkD2Aymdi6\ndT11627Ez+8pGjbcSUTEuocuY+vV61mMxnmoVJ8DSzCZnuO114b8a5mAgABSUy8DV4ECwFp0uj+Z\nMKElx48fUJJ8XuG5gYWckQdDVijyhFmzZovBkF98fGqKyVRAFi9emuk6oqKixGAIEkh0DQ+nitlc\nQg4ePOjRWAMDywhsFvATCBKoJ1BSvL0LS3JycobqeP31N10rAvYKXBOttpP06tU/7fP2TdpJOBVF\nQGLwl6p8IwUKlBCLpbro9a+IyVRSPv54okf7ld0OHz4snTv3ltDQDjJt2owMvXZ4//2PxWQqISbT\nS2I2l5Y33ng3ByJV/JM7uU9ZR69QKNLExMRw7tw5SpUqhZ+fX6bKXr16lUaNWhMVFYlzsLAzRmMC\ntWs72LTpF9Rqzw0glixZjbNnvwL8gFeAQ5QoEcSePREULFjwoeXj4uLw9y+C3f42MNp19TT58jUh\nLu4C3LjBlRo1CDp/nosU4imWcc4wFLs9Bqs1CjAB0ej15YiJuZCp1xt50datWzly5Ajly5cnNDQ0\nt8P5T3In9ylD9wqFIk1gYCC1a9fOdJK32WxUqFCHqKgngSTgOGr1Zp55JpB165Z5NMkDfPrp+xiN\nzwFr0GqrUrCgme3bN2YoyYNz4xmt1gxEpbt6DJPJDDExEBpK0PnzxPr40lwXx2ldM0JDi2A0lseZ\n5AEKodXm4+bNmx7t26OoYcOGDBo0SEnyeZQyGU+hULht+fLlxMXFAh/h/LNSAoejH8HBOry8vDze\nXo8e3QkI8GfJkpX4+uZj6NCdmTo0pUSJEuj1KlJSdgKdcZ6yFsbUdz+Fxo0hKgoqVMBvwwaOFS4M\nQGxsLKVLVwaWAy1Rqf6PAgVMnD59mrlz5xIYGEifPn0wGAwe769C4Q4l0SsUCrc5j2/1BXYBnQAH\nsIVChZ7LtjZDQ0Oz/IRpMplYu/Zn2rbtQmLiRlQqGzPfHUmHSZPg3DmoXh3WrYOAgLRDaf39/Vm3\nbjk9e/bj8uUeVKhQkx49nqd9+74kJz+HwbCV77//kR07Nij7u/+DiLBt2zYuXbpEzZo1KVu2bG6H\n9J+ivKNXKBRu279/P/XqNSclRQW0BI5jMkVz48bZbHmivx+bzcbq1auJi4ujUaNGlC5dOu2z3377\njZ9/Xk3+/D4MHz6UwMDAtDJXr17F/9o1dE8/DdHRULcurFkD+fP/a3sigtmcn6SkP4AKgGCxNGHW\nrFfo3r17Nvb0b8uXL2fgwFe5dSuWxo2fYtGiMPI/JO6cJiK8+OLLLFmyAY2mGlbrZubM+Z5u3brm\ndmh5irLXvUKhyHU//TRfjEZfUanUUqpUiJw7dy7H2k5NTZV69Z4Si6WOmM3PicnkJxs2bBARkZde\nGihQUGCSqFSDxN+/mMTExPxdeO9eET8/5y4yoaEit29nqE2r1SpqtVYgJW0TGpPpBZk+fXp2dPEu\nDodDFi9eLF5efgJbBeJErx8kzZt3yPa2M2vz5s1iNpcVuOP6nvaK0eibI/vzP07cyX15LmsqiV6h\neHQ5HA5JTU3N0Tbj4+OlevXaArUF7K5kslaKFq0gGzduFPAV2J6WjNXqPjJp0iRn4W3bRHx9nR88\n/bRYb9+Wd98dLRUq1JEGDVrLrl277mkvJSUlbVlao0atRacbInBFYK2YTH5y/PjxbO2vzWaTdu16\niE6XT2BAup3ubotWa8jWtrNi7ty5YrH0SBenQ3Q6s9y8eTO3Q8tT3Ml9yqx7hULhMSqVKssbwWTV\nwIGvEhmZDDTi74VETxIbe5nVq9cBOiAg7X6HI4iEhETYtAlatoRbt6BrV1i+nFffGc1XX/3OsWOf\ns21bD5o2bcOJEycAuH79Og0btsJotGA0+jBlylSWL/+JZs1iMJsrERz8OitWzH/oDnXumjlzJps2\nxWC1fgGc5u/d7o7h7Z2xVQc5qVatWtjtvwORAKhU0wkKKoqPj0/uBvZf4sEfHDkiD4asUOSq2UZO\nXwAAIABJREFUpKQk6ddvqPj7l5QyZWrKr7/+mtsh3eXOnTsyePCrUr16E3nmmX5y5cqVTJX38ysh\n8JNAUYEoAZuo1cMlNLSdjB8/QdTqqgLNBfYLfCfgI520RklWqZyPmM8/L+I6XtZi8Rc4l/b0qdMN\nk88++0xERFq16iI63csCqQInxGQqJps2bfL49/Eww4e/ITBRIFmgvqtvQ8RoDJQFCzK/d35OmDt3\nnhgMPqLX+0rRouXk6NGjuR1SnuNO7stzWVNJ9ApF5vTuPUAMhg4CxwVWidHoJwcOHMjtsETEOdTf\noEFL8fLqJbBBdLo3pXjxEElMTMxwHRUqPCmwzHXQikVAK8HBFSQmJkZu3LghRYuWE42mskBhAYv0\noLek4jyFboaXSeLSHbKTP38RgcNpid7Lq6989dVXIiJisfgJRKd9plK9I6NHj/H4d/IwYWFhYjLV\nFYgXSBSVqqOULh0ie/bsyfFYMsNqtUpsbGymDgFS/M2d3KcM3SsUj7nly5eTnPwdUA5oi9X6PGvX\nrs3tsAC4dOkSe/fuJyVlNtAcq/Uzbtwws3PnzgzX8f33kzCZBmIw7MNkakSpUhU4cmQXAQEB5M+f\nn8jInXz99WBef/0ZBukNzGMeOmx8xlu84VWNg5GRaXW9995bmEydgeloNG/h7b2JZ599FgA/vyBg\nj+tOB0bjPgoVCvLYd5FRzz//PJ06VcJgKIHFUpXixU8SHr6OWrVqpd1z9epVXnhhCA0btuW998aQ\nmpqa43H+k1arpWDBglk6H0DhHmUdvULxmDOZLMTHXwKKAKDVXsRiKZm7QbloNBpE7ICNv/8cpaLR\naO57v81mY926dWlL6IoXL06TJk3Yv38b69evx2KpR/fu3TGbzWll8uXLx9ChQ7k9fjw+qbEAfMDH\njOV1TLaKdy1He+ONEQQHF2bp0rUEBORn1KgdBAQ43+/PmjWZdu16oFI9jUp1ivLltfTt2zdD/YyO\njmbEiJFcvHiNli0b8t57b2d5LoNareann2Zw/vyHxMfHU7Zs2bvqSkhI4Mknm3D58tPYbIPYt28a\nhw/3ZcWK+VlqT/EY8ODIQo7IgyErFLnqhx/miMlUROAT0eufl6JFy2XpnPns4HA4pG3b7mI0Pi0w\nX7y8XpBKlWpLSkrKPfempKS4ltA9KRZLTzGb/WTz5s0Za2jChLTD20fqA0SjeVvM5lrSs+eLmRpK\nPnnypMycOVOWLl163xjv59ixY6LR/DVDfoloNE2lc+fnMtxmZq1Zs0a8vRulm+WeKDqd+ZH5b67I\nGndyn/JEr1A8hmJjYzl48CBBQUH07duH4sWDWb16HQULhjBo0Fe5eghLREQE3377A2q1ihEjBrBs\n2VwmTvycbduWEhJSijFjvr7vznJz587l4EEHiYk7AA2wkr59h3LmTOQ996YRgQ8+gHHjQKVCpk6l\nYZEi+Bw6RNmyI+nWrVumhpJLly5910Y8GdGlSy/s9jLANECF3d6GlSsLcvPmzfv+d1ixYgVjx36D\n3W5nxIh+9O3bJ1PtyT2bqihD5f95nvu9kTPyYMgKRY7asmWLWCz+4uvbWIzGwjJo0IhHZgLUxo0b\nxWQKEJgs8KWYTH6ybdu2DJX95JNPRK0ele5JNUZMpgIPLuBwiIwY4bxZoxGZO9dDvcgci6WgQMN0\ncSeLWm2SGzdu3HPv2rVrxWgs5JpcuEpMppIyZ07m4o6Pj5dixSqITveawHIxGttK+/Y9PdUdRS5x\nJ/fluaypJHqF4t/5+xcXWO1KKrfEbC4vv/32W6bquHnzphw9elTi4+M9GlvTph0FfkiX9L6Vjh17\nZais80dCcYEzAnbRal+Tpk3b3/9mm02kf39nI3q9yLJlHuxF5tSo0cg14/9tgTUCT0uVKnXue2+H\nDr0E/i/d97Nc6tRpmek2Y2Ji5IUXhkiDBm3k3XdHZ/g1g+LR5U7uU4buFYrHiM1mIzb2AtDadcUH\nkYacOnWKp556KkN1zJu3gP79h6DV+iMSx88/z89w2YexWm2AOd0VM6mptgfca2XBggXExMTQsGFD\nmjVrxtixbzBqVCXsdjvVq9dlwYJF9ysIffvC/PlgNMLPP0OrVh6JPysWLJhB/frNuXXrJ+z2MEqV\nKsSOHdvve69erwMS0l2JR6fL/J/pgIAAwsK+y1rAisePB39w5Ig8GLJCkaNKlKgkMMv1RHhRTKZg\n2b59e4bKXrhwQYzGggKHXOV/F4vFz2NP9gsXLnI9la8UWCYmUxFZtWrVPffdvHlTAgPLiEpVW1Sq\nYWIwBMnMmWEi4twCNiEh4f4NJCWJdOzofBz29hbJ6GS9bHbnzh3Ztm2bREZG/utrlF27donJ5Ccw\nSWCyGI0Bsn79+hyM9G63b98Wm82Wa+0r/uZO7stzWVNJ9ArFv4uMjBR//+JisZQSvd5bxo+flOGy\nGzZsEF/fJumGjkUsltLy559/eiy+efPmS61azeSJJ5rLsvsMqTscDqlS5QmBGvL33vVHxGDw/fe5\nBvHxIi1aOIPOn1/kPvvU5wW7d++W3r0HSM+e/SQ8PDxXYjh37pxUqFBLtFqjeHlZZMaMWbkSh+Jv\n7uQ+5ZhaheIxlJqaytmzZ/Hz86NAgQIZLnf69GkqV65DUtJeoBhwCKOxCVeunMuxvclv3LhBQEBh\n7PZngTDXVRtgICioFCkpifTs2Z3Jkz/7e/34rVvQrh1s3QoBAfDbb1C1ao7E+ziqXr0hhw+3xm5/\nD4jCZGrKli2/3LUpjyJnuZP7sn1nPLvdTo0aNWjfvj3g/J+4RYsWlCtXjpYtW3Lz5s20eydMmEDZ\nsmWpUKEC69evz+7QFIrHll6vp1y5chlO8mfOnCE8PByj0cj48R9hNNbC17cxRmMzZs2alqMHkGg0\nGlQqNbAK+B24BXRDpcrPlSuziYvbwuzZh3nrrQ+cBa5fh+bNnUm+aFGIiFCSvBscDgeRkX9gt4/E\nuTSvPA5He/7444/cDk2RRdme6L/++mtCQkLS1qpOnDiRFi1aEBUVRfPmzZk4cSIAR48eZeHChRw9\nepRff/2Vl19+GYfDkd3hKRT/eV98MZlKlWrTqdMHlClThWLFinDkyC6WLRvNiRMHeeaZHjkaj6+v\nL1279sTLqwjQGwhEowlH5G2gHlCKpKTPWbr0F7hyBUJDYe9eKF3ameSz+fS4nGS1Wvnhhx8YO3Ys\nGzduzJE21Wo1+fIFAX8l9lQ0mr0UKVIkR9pXZAMPvT64rwsXLkjz5s1l06ZN0q5dOxERKV++fNrp\nVNHR0VK+fHkRERk/frxMnDgxrWyrVq1kx44d99SZzSErFHmGw+GQS5cuydmzZ7O8Tj4qKkqMRn+B\n86534XvEaMz34MluOcRqtcqECZOkRo0GUqRIJSlWrLxoNIPTzR34WZqXrSlSpozzQkiIyKVLuRqz\np9lsNmnUqLWYzaGiVo8Uk6mETJr0ZY60vXr1ajGZ/MTbu6dYLFWkTZtuYrfbc6Rtxf25k/uy9Yn+\ntddeY9KkSajVfzcTExNDYGAgAIGBgcTExABw+fJlihYtmnZf0aJFuXTpUnaGp1DkWVarlY4dn6VU\nqSpUrFiXOnWacfv27UzXc/r0afT6qkCw60ot1GpfoqOjPRpvZmm1WkqXLsHx4+e5dOl9zp8fgt3+\nIzpdX9TqUVQx9OOXWxfh5EmoUQM2b4bChXMkth9+mEPBgsEYjb507dqHhISEhxfKgg0bNrB/fwwJ\nCRtwOCaSmLiZd999F6vVmi3tpdemTRsOHfqDqVPbs2zZF/zyy8K7/o4r8pZsW0e/atUqAgICqFGj\nBuHh4fe9R6VS/ev2kw/6bPTo0Wn/HBoaSmhoqBuRKhR5z6BBL7N69RUcjkuAjkOHBvDqq+8wa9a3\nmaqnTJkyJCfvAzYCzYDfUasTH4lh2kmTppGYOBno5LqSRMWKSxnc0Jv+izTorl6F+vVh9WpsFguv\nDnuDOXPmotPpef/9t3jtteEej2nLli28/PI7JCWtBEqwZs1Q+vcfzvz5Mz3eVlxcHCpVKZzb/QIU\nRURFUlJSlg/EyYysbPer8Jzw8PAH5s7MyrZEv337dlauXMmaNWtITk7m9u3b9OnTh8DAQK5cuUJQ\nUBDR0dFpJ0MVKVKECxcupJW/ePHiA//YpE/0CsV/zaZNm5g9+2ccjv8BBgBSUl5g5853MlVPbGws\nHTv2AkxAZzQaA0ajsHz5QgwGg8fjziznD/3083TMtA4IYsiC+XDjBjRrBitWgMXCR++NISxsL4mJ\nu4DbvP9+F4oUKUSPHt09GtO6db+RlNQfcM4+T06eyLp1DT3axl8aNGiAw/EKsBxogFb7OZUqVc/R\niZGK3PPPh9gxY8ZkvTIPvkJ4oPDw8LR39G+99Vbau/gJEybIyJEjRUTkyJEjUq1aNUlJSZHTp09L\nqVKl7vveMYdCVigeWZ069RZoJ9Ar3Trzt6RLlz6Zqqdr1z6i0w0XcAgkisEQKhMnfpZNUWfesmXL\nXKfuzRGYJs298onVbHa+k2/Xzrk5jkv58rUFItK9w58mPXv283hMX375pRgMPdK1s1ZKlKji8Xb+\nEhERISVKVBaTKb80btxGoqOjs60txaPNndyXY1vg/jUMP2rUKHr06MHMmTMpUaIEixY5t7AMCQmh\nR48ehISEoNVq+e677zJ1qpRC8V+h1WqAJjif9KoBWvT6C0yZ8i+nuN3Hvn2RWK3/h3MJlZHk5J4c\nPLgnU3XcunWLCRMmcfbsZZo1q8+AAS957P/bzp07s3ChjsmTf+DJ27F8fDAZTUIy9OgBc+dCuuHr\nggXzAycA59O1VnsCf3/3T+i7du0affu+zO7deyhWrDjfffcpRYrMIjq6I1ZrCbTaeUyd+qPb7TxI\nw4YN//10PoUiIzz4gyNH5MGQFQqP2r59uxiNfgJfC4wUvb6ALFmyJNP1tGnTXTSaD11PplYxGtvL\n+PGfZrj85cuXXSfRPSswXfT66jJs2BuZjuOhVqxwHkwDIi++6Dyw5h927twpZrOfaLWviJdXX/Hz\nC5aLFy+61axzh766rlPgTohKNU3y5y8sZ8+elenTp8vnn38uhw4dEhHnKoFt27bJxo0b5c6dOxlu\nY9euXbJgwQI5cuSIW7EqHn/u5L48lzWVRK9QOJN95869pX37ZzO0F/pfS/H+Wtoq4lz+GhxcXnx8\naorZXEYaNmwpycnJGY6hVq0GArVdQ/8icF00Gq9Mn5RmtVolLi7u/ksE5893HjELIsOGifzLEq/j\nx4/Lp59+Kl9++eVd/cyKixcvysyZM0Wvz5+ufyI+Pi3u2Zs/MTFRnnwyVCyWSuLjU18KFSot586d\ne2gbb7zxrphMxcTbu6uYTIEybdoMt2L+p507d0qtWqESHFxJBgx4RRITEz1avyJnKYleoVA8UHx8\nvDRp0kYMhoLi5ZVf2rbtnpaMExMTZdu2bbJnz55Mr5PW680CbdO9r04RtVqfqTX406fPFL3eLDqd\nRcqUqSZnzpz5+8MZM0RUKmflo0Y5z5fPAb///ruYzX7i7d1KwEvguqt/NrFYKsvmfxyU88kn48Vg\n6CJgExDRaD6RVq26PrD+mJgYadq0jahU+dPVHSVeXj5y+/Ztt+O32WyyYMECMRjyC8wW2C8GQyfp\n2jVzczgUjxYl0SsUigcaNuwNMRh6CqQKJInR2EY++mhslupyOBwyefK3UqlSfdFq8wkECPxP4A+B\nzlKx4hMZrmvPnj1iMhUSOC7gELV6olSq5Dqn/auv/j5VZ9y4LMWaVUFBpQTWupp/Q6CswHgxGltL\ngwYt7znN7dlnXxL4Pt0Pnt1SsmT1+9admpoq5crVELW6q0DoXYcHmc3F5NSpU27FnpqaKo0bPy1e\nXoUEnktX/03Rag1Z3lhJkfvcyX3KDggKxWNux479JCf3A3SAgaSkvmzbti9LdU2ZMpVRo77jyJGP\nsdleBuJRqb5HpepE/vx72bJlbYbr2rlzJyLtgHKACofjDY4e3Y1j7Fh49VXnTV99Be++m6VYs0JE\nuHr1PBDqujIJrbYkTZpsZNKkdmza9AsajeauMvXr18BkmofzHHkHev1Mateucd/6jx8/zuXLd3A4\nvgYOAztcnyzGYHDctWlYZkVFRfHWW2+xe7eVlJSPgfQbKF1Dp8v9JZOKXOK53xs5Iw+GrFDkql69\nXhKt9g3Xk51DvLxekldeeTNLdVWsWFdgU7onxbflyScbyJw5cyQp3XK3jFixYoVYLDUEkl11bZb/\nGSzOilUq59D9v3j//Y/Ez6+UBAaWkQkTJnnsabVq1fqiVk90vZs/KyZTsGzduvWB99tsNnnmmRfF\nyyufGI1BUqNGQ7lx48Z97z1x4oQYjYVcfV4tUEDAKPnzF5E9e/ZkOeZ33hktRmOA6PXFBcYK3Bao\nIPCiwFdiMpWViRM/z3L9itznTu7Lc1lTSfQKxcOlpqbKvn375ODBg3L58mUpXjxEvL3riLd3TalQ\noZbcvHkzS/VWq9ZYYHlaolepxsjAga9kqS673S4dOjwjFkuI+Fi6yndag7hecovMmycizlcFx44d\nk127dt317r9Nm44CRQV2CewTgyFEpkyZmqU4/unMmTNSsmRl8fIqIDqdSb744usMlbty5YqcO3fu\nX+c6OBwOadOmm5hMLQSmisHQWho1uvd1QGbs3r1bTKaiAlcFFgmECMQKXBeVqoEULlxOli5dmuX6\nFY8Gd3Kfch69QvGYuX79Og0btuLixQREUqlSpSSrVy/iwIEDaDQa6tati5eXV5bqXrlyJT169CMl\npSWgwWRay+7dWwgJCQEgNTWVsLAwzp49T/36ddOOp34QEeH3DRsoMXYspbZsAb0eFi2Cjh1xOBz0\n6TOQn39eg04XiMFwk4iIdVy9epUmTbricHwJ9HLV9At1637Ljh2/Zqlf94vr2rVr+Pj4eHyXQKvV\nyjfffMvevUeoXr0CI0a8gl6vz3Q9s2f/SFjYEu7cieX48QASEn4GBHgH+BKDwZfSpUuycePKtPNF\nFHmXW7nPIz81clAeDFmhyFHPPTdAdLqhrqFnmxgM3eTddz/ySN1z5swVLy9/0WieEa22vDRv3i5t\nyNxqtUq9ek+JydRSYLSYTOUePukvJUWkRw/nk7zJJJJuqeC8efPEbH5SIN41ejBZatZsLDNnzhSN\npqLAp+leIUyRp57q7JE+5gVTpkwVk6ms6wn+XQEfgVPy18l++fMXlgsXLiiT7x4j7uS+PJc1lUSv\nUPy7qlUb/eM9+lx5+ukebtdrs9nEYPAWOOyqN1nM5hDZsGGDiIisX7/e9c7d5vr8smi1hgeuzT93\n/LjsLRwsApJsMIhjy5a7Pv/ggw8FPkjXj0vi7R0gf/zxhxgMQQJ+rlnxb4tKZXLrHbenpKamyscf\nj5eWLbvJK6+8KXFxcdnSTokSVQW2pvtu2olGYxKLpbTky1dIdu7cmS3tKnKPO7lPmXWvUDxmqlcP\nQa9fiPNAGCtG41Jq1arkdr2JiYnYbDYgxHXFC5WqStqRtrdu3UKlCubv09YCUat1JCYm3lPXnvBw\nosqHUPPyBa5joYmtKKNWrb/rnkqVQjCbVwN3AFCr51O+fAh16tThww/fQK9PRqebjcHwPTNmfMPG\njRv54IOP2LMnc9v4elL37n2ZMGEz69d3Zfr0OOrVe4qUlBS36xURLl68mPZd37vNcA0GDerPnj2r\niY4+Te3atd1uU/EY8dzvjZyRB0NWKHLUjRs3pHLlOmI2lxKTKVgaNWqd6RnxD1KmTDVRqz8T52E6\nO8Vo9JOoqCgREYmOjhZv7wCBnwTOiU73mtSo0fDeSuLiZKfOuaXtZYKkEpECF0Svt9w11OxwOKRz\n516uYeliAmZ5442RaZ/HxMRIZGSknD17VgICSohe309UqvfEZAqQNWvWeKS/mXH16lXR630FEtNW\nOHh715KNGze6Ve+dO3ekXr2nxGDwFy+vAtKuXQ+ZPPnbdEP334jZ7CeHDx/2UE8UjyJ3cl+ey5pK\nolcoHs5ms8nhw4flzz//dOs9bVxcnPTq1V/KlKklbdp0l4iICKlQ4QlRq7Xi7e0nP//881337969\nWypWrC358hWWFi06y9WrV++u8No1cVSvLgJyDpOUIcqVFK+KRmO8J9ayZWsIfCJwQOCkmEzFJCIi\n4q57PvpojGi1g9INY6+ScuUyvnGPp0RHR4uXV35xbkz015a59TO0RfG/GThwuHh59RawinPDo1by\nyScTZPbsH6Vp047Svv2zj8RrC0X2cif3KbPuFQrFfTkcDmrXbkpkZAVSU/uh0awjIGAOUVEH0Ol0\n6PX6zJ1Ud/kytGgBR49ySq2hqcOHC7wPVAY+oHXrQqxdu/yu9rVaHSLJODf7AYNhMJMmVWbYsGGE\nh4fz3XezOXBgPydO9MQ52xzgMIULd+PSpWMe+ibuz2q18u2333Ho0HFq1Ahh8OBBtGjRiZ07vUlO\n7o9Wu4FChZbz5597MZvNWW6nWrXGHDo0BmjquvITTz+9kjVrFnqkH4q8wZ3cp7yjVygU93Xx4kWO\nHj1OaupUoA52+4ckJASwa9cuvLy8Mpfkz52Dxo3h6FGoVImLP80l1ihotVNQq/sQEuJg5crFAMyd\nOw9//+JYLAXQ6/MB61yVxKPRbKV06dKsX7+etm2fYfHiJzlxogEwCdgCnMRofI2uXTt49Lv4J4fD\nQevWXXj33dWEhVVk1KhldO3ah9WrF/HSS0WpUWMcXbteZefO391K8gDly5dCq/1r2aDg5bWOkJDS\n7ndC8d/hoVGFHJMHQ1Yo8qQrV66Il1e+tOVtYBeLpfI9Q+d/WbFihbRt+4x069ZX9u7d+/cHx4+L\nFC3qHMuuVUskNlZERM6fPy/Lli2Tbdu2pQ3Zb9261bX//U6Ba6LTPSVarbf4+jYVk6mY9O07WBwO\nhzRq1NY1F+Cv4fq+YjQGSsGCxWTIkNckNTU1276Xffv2ScGCRVyz/lNc7SeJ0RgkJ06c8Hh70dHR\nUrx4RfHxqS0WS1WpXLmORw6/UeQt7uQ+bW7/0FAoFI+mwMBAOnbsyKpVbUlMfA6DYT0BASqOHDmC\nv78/5cuXT7t3/vwF9O//NomJHwM3Wbu2Fdu2baCaWu0cro+JgYYNYdUq8PUFIDg4mODg4Lva/O23\nDSQlvQg4Z41brWFYLDVZvPgd/P39qV69uuu6DTCmK9mQFi2srFjxUzZ+IxAWNpt+/V7G+ZpgEfDX\nRjdeaDTeJCUlZbluq9WKTqe753pQUBBHj+5h165daRse3e8+heKBPPiDI0fkwZAVijzLZrPJV19N\nlm7d+krRomXFbK4tJtMLYjL5ydq1a0VEZNGixWI0FhZYk+4Je6yM7dRdJH9+54UWLUTi4x/a3uTJ\nk11Hvv5VzwYJDq54z30//TRPTKYSAisFFovJVEh+/fVXj/c/vf3794uXV0HX1rtJAhUFPhQ4IBrN\n21K6dNUsjSTs379fgoMriEqlloCAErJt27ZsiF6R17mT+/Jc1lQSvUKR8+bMmSNmcxPXsjoR2CRB\nQaVlyZKlYjIFC1QS2JCWoBsxWBJ1Oue/dOggksHlfXfu3JGyZauJydRedLoRYjT6y6pVq+57748/\n/iS1ajWT2rVbyIoVK2TPnj0ybtw4+fbbb+XOnTue7L6IiEydOlUMhucFvAVOClwU6CAqVT5p1Ki1\nXL58OdN1JiYmSsGCRQXmur7bFeLtHSDXr1/3ePyKvM2d3KcM3SsUeYSIMGtWGFu27KJs2WK89toI\ntyd6ZVRMTAypqTX4e/5uTW7cuMKUKbNJTPwM5xGtg4HPaUkEP/M9Rivw7LMwezZkcKjZYrGwf/82\n5s2bx82bN2nZ8jeqVat233t79+5F797Ove6XL19Oo0ZtSE19Hr1+L1988T0HDmzD29vbzZ7/rVCh\nQmi1R4BPgYZAI2Anw4cP4quvJmapzlOnTpGaagGec13pgFo9gSNHjtCoUSOPxK1Q5LnH4zwYskLh\nEYMHvyom0xMCU8Rg6CFVq9aTlJQUt+u1Wq1y+PBhiYqKeuCa+x07driOVz0iYBWt9jVp1OhpadGi\ni8As15P8bOlICUn+67G+f38RN05lywiHwyFjx34qKpWPwO9pIwpGY1f55ptv0u47ePCgPPVUJ6la\ntbF89NFYsVqtmW7LbrdL69ZdxGKpLkZjG9HpLDJx4kS34ndOePQViHbFfkOMxkA5fvy4W/UqHj/u\n5L48lzWVRK/4L4qPjxet1ijOY1nrC+QTtdpfpk+f7la9165dk4oVnxCLpbQYjYWlZctOD/zxMHNm\nmJhM+USt1kqdOs0lJiZGNm3aJEajv8A30os+Yv0r044YIeLGRj0HDhyQl14aKi++OER27Nhx33vs\ndrsMHz5C9PpyrhnwF9MSvVo9Sj7++BMRETl79qx4eweISjVFYKOYTI1lyJBXsxSX3W6XNWvWSFhY\nmBw7dizL/Utv9OjxYjIVF5Opn5jNZWT48Lc9Uq/i8aIkeoXiMXf9+nXR6SwCJQW+Ebgm8J34+ARJ\nfAYmuT1Ijx4viF7/ijhPuksRo/FpGTfu0wfe73A47plwtmXLFvm+Zj2x/5Vl338/Lck7HA5Zs2aN\nfP/997J79+4MxbRnzx4xmfwExgv8P3tnHhZl9b7xe/aZd4YBZFUBE0TEfV9zScP9p7lruaWpaS5l\nkdpimaW2mZq54JqaW6amiAuaqKm57xsiGIobIoIyMMDM/ftjRoKvoCCoYedzXV7F+57znOeckvs9\n2/N8R0ly486dO3OUeTC7Vii8CCwg0J9AdwLXCOyhTufBv/76iyQ5ffp0ajSDsh3wi6MkORdglApP\nVFQUa9duRoPBjdWqvfzQR8LevXs5Z86ch/opEDxACL1A8IJjtVpZrVp9Ar7ZBIt0cKie70xlBw4c\n4IIFC7g7W5a48uXrENiXzeZ8du7ct2DOTZ36j0PZlrKtVit79HiTen1l6nQDKUml+NPG0LK+AAAg\nAElEQVRPcx5rrmvXfgR+yObTYjZr9n85ymzZsoUGQ1UCIwgE2+/69yPgSLW6BJct+4WbN29maGgo\nv//+e+p0vbPZu0gHB7eC9bEQhITMp1xuJPANgWuUyX6km1uZQn2gCf57FEb7xGE8gaAYIJPJsHRp\nCKpXbwyrNQmAI4D7yMy8AWdn58fWnzLle0ycOA0yWXMAX2Hw4B6YOnUSKlUKQEzMWmRk1AdggU63\nETVq1MufUyTw5ZfA+PG2n2fOBN55J+v1/v37ERq6BykpJ2G78x6N996rigED+kGr1eZpNjXVbO/f\nA5yQlpaeo0x8fDyAQABjADQEcA2AAgaDGps2rcHAgSNw86YBMpkGWm00tNpMpKePhcUSCEn6DsHB\n7+Wvj4Vky5YtGDnyY1itngCCAQDkcJjNi3D69GnUq5fPsRYICkMRfnA8E4qhywJBkTF48Ejq9VUp\nl4+hXl+d/fq9/dg6u3btolJpyLaHbTvwdf78ed64cYN+flXp4FCZen1ZNm7cOs/88TmwWsng4Acb\n4uSiRQ8VWbt2LY3G/8uxAqHVuvDGjRuPNL1hwwZKkheBTQTCKUnluGjRzznKREVF2Zf3dxG4Qpms\nHT08vBkdHc3hw9+nWj3Evh1BKpUfs23bLhw8eAQ7dHidCxcuLlSin/xw8OBBVq/emDqdO4FP7WcI\nkuzjcJ+SVIrnzp17qj4IXiwKo32PrTl9+nTeuXPniRsoaoTQC/7LWK1Wrlu3jl9++SXXrFnzWMHa\nsmULtVpn2tK8/iO4jo6NGBERQZJMS0vjoUOHeOLECVoslsc7YbGQQ4fSrqLkqlU5/Nu7dy9/++03\n7tu3zy7GOwlkUiabRh+fCvkS2ZUrV7FKlZdZsWIDzpu3INcyYWFhdHHxolyuYPXqLzM2NpYk2bJl\nVwIrsvU3nNWrN318v4qIv//+mwaDG4GlBN6yby8MI1CdwMeUyyuzV68BT/1jQ/Bi8VSF/qOPPqKf\nnx+7devGzZs3P/f/OYXQC4oLVquV0dHRPHfuHDOf8jWzvPD1rUZgHW3R3JbbZ7mb6eDgztv2mPMF\nIiOD7NvXpqAaDblxY9Yrq9XKnj3fpF5fjkbj/1GSXDlp0iSWKFGaMpmc5cvXfCqx4P/3d9KkSd9Q\nklrY9+3N1Gq7cMSI4CJvNy8WLFhAvf4N+0fGVfvY9yXwGpVKHT/++OPn/ntUUPx4qkJP2k64bt68\nmT169KCfnx/HjRvHqKioJ260MAihFxQH0tPT2bZtV+p0HtTry7By5XpPJqyFxMXFh7YobkcJ+BNQ\nUKcrwV27dhXcmNlMduliE3m9nty+PcfrsLAw6vWVCZjsIhdBZ+dSJPlE99ZJW3jYLVu28Pr16/mu\nk5GRwe7d+1Gl0lOtdmDLlq/RZDI9UftPwooVK2gwvJq1dQAcpFyu4ieffMpjx449Mz8ELxaF0b58\npamVy+Xw9PSEh4cHFAoFEhMT0bVrVwQHBz+towMCQbFm8OCh2Lw5HqmpfyMlJQYXLtTBO+8U7O+L\nxWIptB9t27aGVjsGQGkAy6HTeWDz5rVo0qRJwQylpgKvvQb89pstKc22bUCLFjmKxMbGgqyHf5LN\nvIy7d28gIyMDSmXBzv2SxFtvjUCjRh3Qo8e3KFeuCiIiIvJVV6lUYtWqxYiPj8P165exdes66HS6\nx1V7ItLT07F3717s27cP6em2A4MdOnRAqVIJ0GheB/AdJKk3vvjiS0yc+EVWUh6B4JnyuC+BadOm\nsWbNmgwKCuKqVauy7tBaLBb6+vo+8RfGk5IPlwWC58qOHTuoULgQmJdtn3g//f1r56v+5s2bs5a7\nAwPr8NKlS0/sS0pKCrt3709JcqaLizcXLfqZGRkZDA0N5dKlS3n58uXHG0lOJps1s3XExYXMnoI2\nG9u3b6da7W5fQSBlsuksX77GE/kdHh5Ovb4CgWT7+G2li4vXE9l6Wty5c4cBATXp4FCNDg5VGRhY\nO+s8U3JyMidPnsJhw97lunXrnrOngheBwmjfY2uOHz8+z18GZ86ceeKGnxQh9IJ/O927v0mgA4HX\nCGTYl3A/YMeOrz+2bkxMjP0AWwSBDMrl37Js2cpFtqdrNpvZoMGrNBjq0GDoQb3e9dHL+HfukPXr\n20S+ZEkyj7/zly9fppubD9XqagQ0BAwsXdr/iffk586dS0kakO1DyUKZTEGz2cwJEyaxdOlAvvRS\nVf7889Insl8YrFYrz58/z44de2Q73W+lWj2YQ4aMeub+CP4bPFWh/7chhF7wb6dPn8EEviIQRKAc\ngUpUq13yld1s9erVdHDolE3grFSrjUW2v79gwQJKUnMCmXb7v/OllyrnXvjWLZorViQBXtPoOPO9\n4Dz32jt16k2FYoLdZhoVikEcNGj4E/t54MAB+xW7v+0257Fs2cr8+uvvKUk1CRwhEEFJ8s4zu93T\nIDExkX5+1SiXuxDwoC1N7oP/Vuv58svtnpkvgv8WhdG+fO3RCwSC/PPee29Dr/8BQAsAXaDRXMfK\nlfNQsmTJh8rGxcXh44/HY9SoD7B37164u7uDPAcgzV4iCoAFRqOxwH7Yfjfk5Nq1a0hLqwtAYX9S\nH7duXXu4clwcLI0aQX32LC6gBOqaf8SHcw9h8OCRubYVG3sNFkt9+08aWCwtcPny9QL7/IC6deti\n4sRgqNWVoNf7wMNjEjZuXIklS36DyfQ9gJoAmsJkGodly9Y+cTsFITMzE1Wr1sGlSzJYrbEA+gNY\nBCADQAa02mWoXz/3THsCwfNECL1AUMTUqFEDe/ZsQ+/el9C9+y2Ehf2KTp06PVTu6tWrqFq1Hr7+\nOgkzZiShadM2CAmZh6ZNK8NgqA+dbhAkqSlmzJgGVT7TvALArFlzYTC4QqXSok2brrh3717Wu4YN\nG0KrXQEgBoAVSuUU1KvXKKeBmBigcWMoLl7EabkRTXAWVzEQJtM6LF26MNdDgi1aNIJONw22dLVJ\nkKSZCApq9FC5gjB69EjEx8fh1KlduHLlAipVqgSDQQ/gnw8Imew6jMZnk6r39OnTuHEjEUAnABKA\n8QDuAnCDVuuFevVM+OKLT56JLwJBgSi6hYVnQzF0WSDIlXHjPqFCMdIe3KUkgS8I9Kanpy9/+eUX\nzp49+7GJYK5fv87w8PCsKGvbt2+nJPkQOEvgPjWaPuzaNWfs+qlTZ1CtlqhQaFi7dlPeunXrn5fn\nzpGlS5MA43196a1vk21pOpEKhTrXmABms5nduvWlQqGmQqHmgAHDnkrsgJ07d1KncyXwOeXy0TQa\n3XOcAzhy5Ahff/0tdu3aj9v/5/pfYTl+/Dg1Gg8CtQncs4/JVwwMrMXLly+Lu/GCp0phtE9mN1Bs\nkMlkuS5JCgTFjZEj38ePP7oCWAxgIQDbDFij6YtJk6pj9OjRj6y/detWdOnSG0plZaSnn8eIEYMg\nl1swZYoawGf2Upfh7NwYd+5cyVHXYrHAbDZDkqR/Hp44AQQFAfHxQJMmuPPzzwis1wwJCb1hsdSG\nJE1Dz56VsGDBT3n6ZDabQRK3b9+GwWCAk5NTQYflsRw5cgTLl6+GRqPGoEEDULZsWQDA0aNH0bhx\nK5hMYwDoodN9gV9/nY927doVSbuZmZmoXbspTp1KgtV6A4ADVKoknDt3CH5+fkXShkCQF4XSvqL5\n1nh2FEOXBYJcCQ0NpVzuTEAiEJM1c5bLx/Lzzyc8sm5mZiYNBhcCe+z1blOSfDh69GhqtZ2zBWv5\nneXK5eOK219/kU5ONgdatSJTUkiSsbGxfP31t/jyy+341VffPHaWfu3aNQYG1qZO506VSs/33hv7\n0Ew3IyODP/wwnb16DeSXX05mamrq4/3LB717DyLwbbYViF9Zp86rRWL7AUlJSRw+/H3WqtWMvXr1\ney5BkAT/TQqjfSJ7nUDwHLBarRg16mNYrV1gOxj3NoBpAGKg1S5E+/Zhj6yflJSE9PQMAC/bn7hA\noaiLKlWqoEyZCFy92hpWqw9ksvUICVn9aGciImBt3x7ylBSsgwzBZ2Kw9MQJNGjQAN7e3ggJmQaL\nJX8HAnv3fhsXL76KzMxJAO4gJKQZGjWqjS5dumSV6dHjTWzZEgeTqQd0ui0IDW2PP//cCoVCkbfh\nfGA2Z+CfYD0AICEzM7NQNv8Xo9GIH3/8rkhtCgRPnSL84HgmFEOXBYKHaNiwhf2+eQKBNAKjCLjT\nxaUsN23a9Nj6VquVbm4+BNbYZ6+XqNN58NSpUzSZTFy6dClnzZrFCxcuPNpQWBitWi0JcClqUoEk\nAmvp4ODOa9eusX//t6lUaqlUSmzZstNjQ8k6O5cmcDnbrPoLjhkzLuv9uXPnqNW6ZAuTm0mDIYAH\nDhzI17g9ij/++IM6nQeBVQRCKUl+XLhwcaHtCgT/BgqjfcVONYXQC4o74eHhdpF/ibbMbg/uyzfl\nolzSvebFoUOHWKJEaRoMZanRGDlr1tyCObJmDa0qFQlwDjSUwZIl0EZjczZt2pxKZV3a0quaqdV2\n5bBhox9psmrVRgTm2+2kU5KaMyQkhJcuXWK5ctWoUGgJOBM52qrD3bt3F8z3PAgLC2P9+i1Zq1Zz\nIfKCF4rCaJ84jCcQPGUyMzMxduxnWLVqPQwGA+rWrYAlS34DMBPAh7Bd1zoBb+8kXLx4HBqN5rE2\nSWLlypU4fPgoXFyc8fbbb6NEiRL5d2rpUqB/f8BqxVQ0wPs4CeAigJIAUqFQ+IDUwmr9CkBfe6Vd\nqFz5Y5w69WeeZk+ePImmTVuDrAiLJQ516pTD1q1rUbVqA0RG9oTV+h6AOgBqAxgEhSIMnp6/IDLy\neM6DgXmQkZGBhQsX4tKly6hTpya6du0KmUyW/34LBMWUwmifEHqB4Cnz7rtjMG/eQZhMPwC4ArX6\nDVgsLrBY3AC8DiAcMtkOXL4cCR8fn3zZ7NSpFzZvPgOzuTskKRzNmrkjNHT1Q6IXGxuLS5cuwd/f\nH15eXraHc+YAQ4cCAL7Tl0Bwyh4AGwCEAGgDhWIbyHhYrQMA3LM/l0Eun4i2bc9g48aVj/QtISEB\nBw8ehNFoRIMGDZCZmQmdTg+r1Qxb6I4EKBSN4eycjtq1ayAkZCq8vb0f22er1YpXX+2AAwfSYDI1\ng16/GoMGtcUPP0zJ15jlZk8uF6FEBMUDcepeIHgGWK1Wzp4dwrp1g9i8eUfu27cvX/Xc3X3t99of\n7Ft/Qm/vQKrVXlQofKlQOPHXX3/Ntx/jxo23n9S/mxVyVq/35ZH/STYzZ8486nQudHRsTJ3OxRYX\n/ttvHzjBSSVK0dMzgErlGPsp/U1UqcqwV69eVCq97OcHqhJ4mUAjKpWOjImJKciQkbSNm4ODK4ED\n9qZTaTBU4ebNmwtkZ8+ePTQYAmnLH2C7aaBS6ZmYmFggO7dv32bjxm0olytpMLhy8eIlBaovEDwP\nCqN9xU41hdALnhfffz+dklSRwEYC8ylJrvnKL16mTOVse/GkSjWEX3wxkdu3b+evv/7Kq1ev5tuH\nmzdvUq02EPDJdoWONBjqMyIiIqvc1atXqdOVIHDRXuYMJyo0WSI/TNaBwEGqVK9To3GlXv8SNZoS\nbNu2C5csWUKNxpXAJwROEhhAoASrVGn0RONGkuvXr6dO50qDoTs1mvL09CzP/v3fZnR09GPr/vzz\nUjo6elIuV1KhqJ/tg8lKnc69QONHki1adKBK9Y79EOQJSlJJ/vXXX0/aNYHgmSCEXiB4BpQpU4XA\n/mxC8znfffeDx9ZbsWIlJakUga+pVA6nq6s3r1+/nqPM/fv3+dFHn/G113rz66+/yzN5zKlTp2gw\nBBCoQuAz+/37GXR09GRSUlJWub1799LRsW6WIH6H0SRAi0zGwdqAbH3IpEZTgrt37+bnn0+kJHnS\nwaELlUonymSuBLwJvEyttiK//356ocYvMjKSPXu+QY3Gm8AiyuXj6eRU8pFCvXfvXkpSSQJH7af5\nHQnMJRBDpXIMAwNr02KxFMgPjcaBwJ1sH17v8euvvy5U3wSCp01htE/coxcI8ontnnd61s8yWTqU\nysff/e7Zswc8PNzx228b4ejojOHDD8DT0zPrfWZmJho3bo2zZ71gNrfCtm2/YN++I1i/fvlDtnx9\nfaFS3QPwCYBNAOZALk/Hli1hOe65lytXDhkZlyDDYczCfLyNuUgHcHLMGCyfuRmAFbb9chPIDHh4\neGDy5O9gNp8AUAbATSiV5VGihCNksusYOnQA3ntvxBON2wP8/f0RHr4HZnMYgMqwWgGT6QaWL1+O\n4ODgXOvs3LkTZnMfADXsT9ZDJusEJ6eJqFmzFpYt21jgfXZnZ3fcuHECQDMAVqjVJ+HuXvXJOyYQ\n/Nspwg+OZ0IxdFnwgjBv3gJKUlkCP1Mm+4Z6vWtWjPnCsHfvXhoMlbNdOTNRoymRZ1rbw4cPs2RJ\nP8rlKrq4eOV5NW3NytX8RaEmAZoA/vXZ50xPT2eNGi9Tq+1GYA4lqRH79BnEkydP0sGhQraZPuno\n2CDf197u3r3LJUuWcMGCBYyLi8vx7sSJE2zSpB0DAupSo8m+nUAqlSM5efLkPO3OmTOHktQu2zbF\ndpYuHZAvn/IiNDSUOp0rdbq3aDA0Zu3aTWk2mwtlUyB42hRG+4qdagqhFzxPVq/+lW3b9mCPHm/y\n5MmTD71PTU1ldHT0YwPLZCciIoJGY11mX07X6Tx5+fLlR9YzmUx5J1JJSyM7dSIBZkoSU7IF4UlJ\nSeGECV+yV6+BnDlzFi0WC1NSUujo6Ml/8qtHUK93ZXx8/GP9v3XrFkuX9qde356S1JOOjp48c+YM\nSVsIXQcHdwKzCPxJhaI8FYrqBLYRmE293pWRkZFZthYvXsJSpQLo4uLDkSODmZyczMqV61GvD6JG\nM5SS5FYk+efPnDnDWbNmceXKlULkBcUCIfQCwb+ArVu30mBwoV7vTb2+RL4FKSUlhd7eAVQqPyaw\nhxrNQNau3fTJs6GlpNji1QO2+PX5PGi2b98+OjuXolrtSAcHV4aHh+er3qhRwfbDbbYmZbLpbNGi\nI0ly9uzZ1On6ZfuIuU25XMvq1ZuxRYuOPHr0aJadrVu3UpK8COwlcIGS1JTBwZ8wNTWVS5Ys4fTp\n03nq1KmCj4dA8AIghF4geM7cvXuXBoMrgV12QdtHSXLJ14yYJOPi4vjaa28wMLA++/V7m3fv3s3x\nPj09PX+HzpKSyCZNbKrq5kYeP57jdUZGBkePHsfSpSvQ378WN2zYkOO9xWJhfHx8gVLMdu7cl8CC\nbGK+h4GB9UmSCxYsoCR1zvbub2q1xlw/YgYNGk7g+2xlD/Gll6rl2w+B4EWmMNonokUIBEXApUuX\nIJeXAtDE/qQBVCpfXLx48bF1SSI6Ohp9+nTG1q2rsXjxbDg6OgIAUlJS0LZtN+h0Bmi1BowfPzHv\noBl37gCvvgrs3g2UKmX7Z7VqOYp8+OGnmDNnH+LiVuHixYno0eMt7N+/P+u9XC6Hq6trgRLMtGnT\nFJL0I4DrAO5Bp5uMVq2aAgA6d+4MR8cTUCpHApgPSWqHDz8MzjWanbOzEQpFbLYnf8NodMi3HwKB\nIA+K7HPjGVEMXRb8B7h16xa1WqdsB81iqNWWeOwdb6vVyi5d+lCvL0+jsQP1eldu3749633//kOp\n1fYgkEogjpJUkStXruT69evZunU3duz4hi0hzI0bZJUqtqlw2bLkpUu5tufhUY7A6Wyz5gn84IMx\nheq71Wrlhx9+QpVKR4VCzR49+jMtLS3r/c2bNzlqVDC7devPxYuXZM3mjx07xt9//z0rCE9cXBxd\nXb2pUr1FmWwcJcktx1gIBP9lCqN94nqdQFAEuLm5YejQgZg5szrU6gqwWmMxZcpElC5d+pH1QkND\nsWXLSaSknACgBbAdPXsOQHz83wCAHTt2Iy3tF/u7UjCZhmD27AU4dOg8TKYvASTj7NbWOOnuAG1s\nLBAQAGzfDjwId/s/SJIetpl3JQCAUnkdDg6lCtV3mUwGk+keLBaCJM6cOY+EhASUKmWz6+7ujmnT\nvslR5733xiEkZBmUyqrIzDyIJUvmokuXzjh16iAWL/4ZJlMqOnfehurVqxfKN4FAgOI3PS6GLgv+\nA7z//kfU6/2o1Q6kRlOGgwYNz1e9mTNnUqsdkm2GnU65XJG1H1+3bgv+kw3OSrW6Dz08yhMIJUD6\nIooxcLZVrlaNvHkzh32r1crjx4/zjz/+4J07d7hmzRrqdJ4EvqJS+Q5dXb3zvMaXX954oz+BEgQi\n7dfgxrFu3eZ5lj906BAlyTtb0Joj1OkcmZ6eXig/BIIXmcJo31Pbo09LS0O9evVQvXp1VKxYEePG\njQMA3LlzB0FBQShfvjxatmyJu3fvZtWZPHky/P39UaFCBWzbtu1puSYQFJqzZ8+iceO28PWtjq5d\n38BPP4UgJeUA0tLmw2w+jKVLl+PKlSuPtVO7dm3I5aEAYgAQcvkMVKhQKysIzNy538HB4SPo9b1g\nMAShTJmTcHFxAaBEBZzDbjTBS0hElKs7sHMn4O6eZZsk3njjLTRs2AGvvTYeZctWxEsvvYQtW1Zh\n5Mg7GDfOFdu2/Y5Ro8ahevWmGDZsNFJSUgo0DgkJCVi5cgWAXgD8AcgAfIwjR/bmWefvv/+GUlkT\ngLP9SU1YrQokJiYWqG2BQJBPiu5742FSUlJI2k761qtXj3v27GFwcHBWuMkpU6ZwzBjb/uCZM2dY\nrVo1pqenMyYmhn5+frmeMn7KLgsEj+XmzZt0cipJmWwmgcNUqVpSocgeVpY0Gqvy8OHD+bI3Y8Ys\nqtV6ajQl+NJLlXjpf/bXr169ysWLF3PVqlVMSUnhokU/s4G2FG/BSAKMkKt4IJe97DVr1lCvr0Eg\nxe7Xcvr5/XOK/f79+/TyKk+lchyBHdRqe7Jp07YFutYXFRVFjcaFQH3+k2xmO52cSj9Ubv/+/UxK\nSmJkZCR1OrdsZwVW0s3Np8ChbAWC/xKF0b5nopopKSmsXbs2T58+zYCAAN64cYMkef36dQYE2KJc\nTZo0iVOmTMmq06pVK+7fv/9hh4XQC54zK1eupINDx2zCHk9AR2CVXexW0Nm5FO/du5dvm2lpabx5\n82b+RHbfPpoliQT4l4sHd2/dmmuxr7/+mkrl6Gx+3qVarc96v23bNhqNjXJsG2g0zll/P/NDRkYG\nvb0DCFSz/+lCQM81a9aQtG0dDB/+AXU6dxqNtejkVJJHjhzhkiXLqNUaqdN50tXV+6HMewKBICeF\n0b6ner3OarWievXq8PDwwCuvvIJKlSrh5s2b8PDwAAB4eHjg5s2bAIBr1679ky8bgJeXF+Li4p6m\newLBE6HVakHeAfDPNTeFIhOlS38CmUwDb+8J2L59IwwGQ456UVFRqF79ZWi1RpQvXxPHjh3LeqfR\naODu7p7rtbMc/PEHEBQEtckEdOmCetdi0bhly1yLVqtWDRrNRgDxAACZbBEqVPjnup1CoQBpztaP\nTJCWAl2tUyqV2LVrM2rUMEKlioSHx2GsX/8LunTpAgAIDw/HokUbkZp6AcnJh3H37lR07twHffq8\ngTt3buDChYO4fj0aNWvWzHebAoGgYDzVU/dyuRzHjx9HUlISWrVqhZ07d+Z4L5PJHvmLLa93n3/+\neda/N2vWDM2aNSsKdwWCfNGyZUuULv0FLl/uC7O5PvT6BRg0aDR++GEKLJbchTIjIwPNmrXFtWvD\nQG7ExYub0Lx5O8TEnIWTk1Ou7WzYsAEhISug12sxduxI1Lh2DejSBTCbgb59gQULAGXef4VbtWqF\nESNex9Sp5aBSlYCTkwq//RaW9b5Ro0YoXZqIjn4L6ektIEmL0br1/8HV1bVA41G2bFkcPbo713fn\nz59HZmYLAA/62AlXrvQGSeh0Onh7exeoLYHgv0JERAQiIiKKxljRLSw8mi+++ILffvstAwICslJ0\nXrt2LWvpfvLkyTmSW7Rq1SrXHNHP0GWBIE+SkpI4fvwE9ukzmIsWLX7skvv58+dpMPj+T9KYRty5\nc2eu5W2pbW3pXIGp7K1xoFWptFUcOpQswH52fHw8IyMjcz3VfvfuXb777ods3bobv/xySpGffN++\nfTv1+nIEbtv7/TN9fasUaRsCwX+BwmjfU1PN+Ph4JiYmkrQl32jcuDG3b9/O4ODgrL34yZMnP3QY\nz2w2Mzo6mr6+vrn+8hRCLyiO3Lx5kxqNo30/nwRSKEnePHHiRK7lK1VqSGAzAbIfFjETMpvIBweT\nBYyBb7FYuHbtWk6dOpV79uwpiu4UiA8++JhabQkajZXp4pJ3nwUCQd78K4X+5MmTrFGjBqtVq8Yq\nVarwm2++IUkmJCSwRYsW9Pf3Z1BQUNbHAEl+9dVX9PPzY0BAALds2ZK7w0LoBc+QpKQk9u07hH5+\nNRkU1OmhE/EF4YMPPqZeH0Cl8gPq9TXZq9eAPFcCAgPrE9jBYZiZtQSwtmbdAot8eno6X365JbXa\nalSrh1OSfPjttz88cR+elCtXrvDYsWNZN3EEAkHBKIz2yewGig0ymSzvWN8CQRFCEo0bt8bhwyVh\nNg+DXL4TLi6zEBl5Is999ccRFhaGkydPwt/fH507d87zHEpIyHxcGT4WEzMSAABjVXp02rMD9erV\ny3dbqampqFWrEc6duwUgCrboerFQqQJx9248JEl6oj4IBIJnT2G0T4TAFQjyICEhAYcOHUB6+m0A\nSlitdWE2h2Pv3r1o167dE9ls3bo12rRp8+jT9SQGX/kbyEiAFcAP5auiTciMAok8AEyf/iOiolQA\nqsEm8gDgDYVCQnJyshB6geA/gsheJxDkgVqtBpkBwGR/QpBJUKvVBbaVnJyMRo2CoFJpIUnO+P77\n6bkXJIHRo4EvvwQUCsiXLcP7F06gadOm+W4rLi4OISEh2LhxGzIyOgA4BGCTvR9T4OnpAfdsEfQE\nAsGLjVi6FwgewcCB72DlymMwmfpBo9kFf/9oHDmyO99in5iYiDfffAcbNmwGabfYDeoAACAASURB\nVATwGwBnaLVB+PXXGWjfvv0/hS0W4O23gfnzAbUaWLkS6NSpQP6eOXMGDRu2QGZmS2RmnkJ6uhXA\nFAAjAVyG0eiJ48d3o2zZsgWyKxAIni+F0T4xoxf8J7h8+TIaNWqFEiW8UK9eC0RFReWr3rx5P+Lb\nb/uiV69DGDOmAvbv355vkSeJVq06IzTUAHIvgDEAOgJwQlraEISHR/xTOCMD6NPHJvI6HbBhQ4FF\nHgBGjfoY9+59ApNpCdLTj0AmU0Au7wqtNgk1atTHokXTsXDhIsyaNQtpaWmwWq2YOnUGmjbtgF69\nBiImJqbAbQoEgn83YkYveOExm80oV64qrl0bAKu1J+TytXB3n4lLl0491X1qW6pWP6SnJwB4EESn\nDYC3ASzF5Ml1MHbsGCAtDejZE/j9d8DBAQgNBZo0KVBbW7duxebN27Fixe+4dWs+gAf1F6Ft2y0I\nCZmKwYPfQVjYPgCDIZcfQOXKKWjSpCEWLvwTJtOHUChOw2ici3PnjmZFrxQIBP8OxIxeIHgEFy5c\nQFKSHFbrGABlYLW+B5PJiNOnT+coZzabER8fX2QfklqtFlZrOoAk+xMrgFgA70Ol2gJHRyPSExOB\nDh1sIu/sDOzYUWCRnzVrLjp3HoLp011w+7YeMtl4AHcBXIVePx2dO7fG3r17ERa2BcA+AF/Cat2G\ns2ctmDPnJ5hMawF0hsUyHmlpzbB+/foi6b9AIPh3IIRe8MJjNBqRkZEA4L79SSoyMm7BaDRmlZk9\nOwRGowu8vQPg61sF0dHR+bKdnJyMN94YBB+fymjUqDXOnDmT9U6v12PYsOHQ61sAmArbbD4WQAKs\n1sH44v2VOOtTFggPt6WXjYgA6tQpcP/GjfsMJlMogLGwWg9ALr8GudwTGk0gRo58DQMG9EdY2A4A\nFgA+9loyWCw+sMW5z34DoGhXzKKiojBjxgzMmzcPSUlJj68gEAiKnkLc338uFEOXBc8Rq9VKq9XK\n3r0HUa+vQ+AL6vUN2KVLn6xgNcuXL6dC4UogigApl3/HwMA6+bLftGlbajR9CRynTDaLjo6evHnz\nZo72ly1bxiFDRrJ9+44E1ATOsARu8xBqkQBTXFzICxeeuI8ajYFAQlZoXY1mKKdOncqbN2+yWbP2\n1Omc6ODgTsCPwGACVwisJyCxXr0mlKQGBH6nXP4lnZxKZoWoPnv2LGfOnMlly5YxNTW1wH7t37+f\ner0rNZohlKTOLF3an7dv337ifgoE/2UKo33FTjWF0AvyQ0ZGBgcOfIdqtZ46nSPHjfuMS5cu5Ycf\njuPPP/+clfv8/PnzVKv1BPpni0OfQZlMzszMzEe2ce/ePSqV2mx52ElJasdPP/2USUlJOcpGRUVR\nq3UloKQH/uZJVCYBRskc+MtXXxWqr1279qVW25nAOQJrKEmu3LZtGyXJk8Bwe9jdVQT0BLwJONr/\nfEmt1pnjxn3KRo3asmvXvoyKiiJJbtmyhZLkSq12EPX6FqxcuR5NJlOB/KpZsymBZVljo1IN4scf\njy9UXwWC/ypC6AWC/+Gjjz6nJDW3i1wsJaka581b8FC5Dz8cR6CrPZd6ql2U/qCLi1dWmQMHDvCd\nd97j6NEfMjIykiT5yy/L2aHD65TJVNni11sJVKNOV5FubmWyRJMkw8LC6OgYRG+8zEg4kgBPowzL\napx5/vz5QvXVZDKxf/+h9PAox4oV6zE8PJwlS/oSUBHIzBJarbYzVSpnAnMJXLYn1qnLvXv3PmTT\n2zuQwNasful07Th79uwC+eXjU5nA0WwfUNM4cOA7heqrQPBfpTDaJ/boBS8koaE7YDJ9DMAVgDdM\nptHYuHHHQ+WsVgIIAFAVtghy/weZ7P+wfPkCAMAff/yBV15pj59+csUPPyhQq1YjBAePxaBBE7Bh\nQwuQdQE0APA+gOYAVEhNPYqEhBEYMGBkVjvlypWDd9ph7EEU/JGEo5DjFdzGtNWLERAQUKi+6nQ6\nLFo0CzduXMSZM3/Bw8MD9+4pAagBXH7QUwB/Qy7PBFAFQBkAR5GRcQnlypV7yGZiYry9HADIYDZX\nxa1b8QXyq127IOh04wEkADgPSfoR7du/+iRdFAgEhaEIPzieCcXQZcFzoGXLzpTJpmfNJpXKDzhk\nyMiHyp08eZKS5EpgNoFJVKu9ciwv16/fksDyLDsy2QSq1c4ETtufxdiXwV+yL4s3IHCPwCmWKlWe\nN2/etG0TnDrF+0YjCfAvhZ6lpBIMDd2Uwxer1cpdu3ZxxYoVvHjx4hP3PTY2llqtC4Hv7T59QKA+\nq1VryA0bNlCvd6GDgz8lyZm//bY2Vxvt2nWnWj2QQAqBk5Sk0ty9e3eB/EhNTWWvXgOo0Rjo4ODG\nqVOnP3GfBIL/OoXRvmKnmkLoBfnh9OnTNBo9qNP1oyR1o7t7GcbFxeVa9sCBAwwK6sz69Vtx9uyQ\nHBnlKld+mcD2bMvPs6lUGu0Cn0HAh8Db9mV7C4FuBMZSLg+iXK6lRlOCbT3KMNPJiQSY2qgR/9q+\nnfHx8Tl8sFqt7NnzTer1AXRw6EpJcuX69evz1Ver1cpvvpnKsmWr0d+/Nn/5ZTkHDRpBvb4agT5U\nqUqzbt2XaTabSdrOFpw9e5bJycl52kxMTOSrr3akQqGmg4MbFyxYlC9fBALB06Ew2icC5gheWK5e\nvYrQ0FAolUp06tQJLi4uBbYxdeoMfPrpAphMcwHchyS9iVdfbYDt26/DZOoFYAKAXwA8WJJeBZls\nKGxx8Q+gIeIRhlfhiDSgXTtgzRpAq83RBkn8+OOPGDNmFtLSjgHQATgIvb4NIiK24syZMyhfvjwa\nNGiQq4/Tp8/ERx+FwGQKyfJx9eo5SE1NxalTp1GhQgB69OgBubzgO3UkH52ARyAQPBMKpX1F8qnx\nDCmGLguKMVarlVOmfJdjtpyZmcnPP/+Kvr5VCXjYT+xbCKQTaM369RtTr+/HFgjnfUgkwNWQMS2X\nGbTFYmFQUEcqlS72Q4EPVg6slMlU1OlK0WB4g5JUhsHBn+TqY9WqjQlsy1Z3Drt16/+0h0YgEDxD\nCqN94jCeQPAIZDIZxox5H9HRxxEZeQgdO3ZA1659MWnSJNy+fRMuLhoAuwB4AygJne4oBg7sizaZ\nO7AJ7aCHCYvwCvooHdC991AsXrwk66ucJF55pRXCw08jMzMMwG4AZ+3tzgCpRWrqAdy/vwwm0xHM\nnBmCixcvPuSjXi8B+OegnEwWD4NB97SHRiAQFBOE0AsEBeCtt0Zi82Yr0tOvIDl5K0ymDDRvXhEe\nHnrI5WYolf7YNexdrEiPgwbpmKPywUD8hQzrYGzY8CqGD/8WEydOBgBs2LABf/11DkALAHUBfA+g\nPgAtSpb8CXq9CwAve8suUKvL4fr16w/5VK9eJQCDAUwCMBaSNB3BwSOe/mAIBIJigRB6gSCf3Lhx\nAxs3/g6z+VUAegDVkJY2BIGBfkhKug2r9Ri63huAnzNMUJKI6toVR/u1hEbbEVbrtwD6IyVlHb79\n9gcAQHR0NKzW+gDCAPwNoDeAT+HvH4iLF49DrU4HsAa2MLXhsFguomLFijl8Onz4MEJCVgD4GbZZ\n/UF4epZEYGBgkfX7wIEDCArqjAYNWmPOnHnijIxAUMxQPm8HBILnze7du3HgwAF4eXmhe/fuUCgU\nSEtLQ1paGpycnAAAx44dQ7NmbWAy1QQwG8BiAFuh0ZyFQuEJtdoXg9LCMAOjAABfaDzRdswYVN63\nD+SpbK3pYbFkAgBq1qwJtXoGMjOHAKgEQAOl0opNmw5CkiRs2/Y72rXrhjt3+sDBwRnr1v0KV1dX\nAEBqairOnTuHzZs3g2wPoIv9TyZiYrSwWCxQKBQoLKdOnULz5u1hMn0FwBOnTo2DyZSK0aNHPrau\nQCD4l1BUBwWeFcXQZcFz4sqVK+zUqTerVm3MYcNGMyUl5aEyU6fOoCT5UKV6j3p9Q7Zo0YFjx46n\nUqmlSqVnnTrNePv2bVat2ojAQvthNwuBNlSrK7JcuaqMiYnheJXuwUk4jsQo6vUuTEhI4OXLl2kw\nuBGYSeAPSlJTDh78z33+iROnUKXSU6FwpVZbgrNmzcrhn9Vq5b1793Jc+btw4QI9PMrSwaEy1WpH\nKpWBBNLszUewRInSRTaG778/hsD4bAf9/qKPT+Uisy8QCPJHYbSv2KmmEHpBfkhOTmbJkn5UKD4l\n8AeVynrU671YqVJDLl68hCSZnp5OlUqy34kngXRqtT7UagMI3CSQSaVyAB0dvQkYCERmE7wpbNGi\nNe8lJ5PjxpEALQCHadwoSSW4cWNoli8nTpxg8+Yd6OHhR1/fGhw0aHhW4pvLly/TwcGNMtkIAjMp\nST5cuHDxI/tWo0bjbMGA7lKhKEmt1p8ODp0pSa7cvHlzocbu+vXrPHfuHM1mMz/4YCxlsnHZ+r2H\nL71UtVD2BQJBwRFCLxD8D5s2baKDQzO7OP1KoAyBLQS2UpJe4ooVK5mYmEiVymAPdvMg8UoFApOy\nrrgB9QkMJdCLtsxvmQSuU6+vyDWrV5MjRtgqKhRMXbiQ58+f5/379x/yZ8CAYZSkxgRWUKUaRS+v\n8kxOTuYnn4ynQvFuNiHdzTJlHj1j1utdCFzPVucj9u3bjytXrmR0dPQTj5nVauXo0eOo0TjSYPBj\nqVLluHXrVur1rpTJviWwjJLkyzlzQp64DYFA8GQURvvEYTxBsSIxMRGtW3eBVmuEu3tZrF+/Ptdy\ntv3pNNgOsv0CYDKAVgBawmT6GnPnLoejoyP8/QOhUHwGIAlAGGSyK9Bq/wSQCaAngFMAPgLwE4Bo\nAAbI5WXw7oiu6BwWBvz4I6BW49bs2eixPhzdug3CuHETkJqamuVLeno6fv55PkymjQB6IiNjGpKS\nymDbtm1IT8+AxeKQzXMjMjIyHjkG/v6BkMnW2H+6D71+C9q1a4sePXrA29sbsbGxSElJKeDIAmFh\nYZg7dx3M5ku4fz8KN24Mw4cfTsT+/X+ga9czaN36d8yfPwlDhgwqsG2BQPAcKcIPjmdCMXRZUIQE\nBb1GtXoQbfnX91CS3Hns2LGHyqWmptLfvzrV6rcIvExgVrYZ8Fy2bt2VJHn16lXWq9eCarWeXl4B\n3Lp1K+vUaUat1pdAZQI17CsCtr15na45Z02fTvbo8SAvLe+tXUt39zJUKL4g8Ae12s5s06ZLDl8U\nCrU9brytmoNDO65atYpHjx61x9pfRmAnJak2x4+f+MgxOH/+PN3dX6LRWJU6nQf79h1Cq9XKEydO\n0N29DCWpFDUaB86ZM69AYztp0iQqFMHZximBGo1DgWwIBIKnQ2G0r9ipphD6/y7bt2+nLfXq3Swx\nUquHc+rUqSRtOegvXbrEW7dukbTFax81KpgNGrSgSuVEYAqBrylJrrmmZn1Aeno6hwwZQpVqKIF9\nBNwIdCFQgY3rNKWlXTtb40YjuWcP161bRweHltkEMo1KpS5HLPkuXfpQp2tLYCsVigl0c/PhnTt3\nSJIRERGsX78lK1VqyEmTvrUlwXkMKSkpPHz4cFbyG6vVylKlyhH42e7DRUqSJ0+cOJHv8V29ejX1\n+prZPkh+ZkBArXzXFwgETw8h9IIXnhMnTthnvu4EDmTtoev1QVy8eDFjY2NZtmxl6vXeVKuNHDky\nOMdJ9cOHD3PAgGEcMGAYDx06lGc7sbGxXLduHefOnUtJ8rIf1IulTNadlV+qQEvz5jY1L1GCV9av\nZ/36r1KvL0G5vHa2vf4kKpXaHKf8zWYzg4M/Ya1azdmpU29evny5SMcnKSmJSqWU7WODNBh6ccmS\nJbmWP3jwIEeOfJ8ffDCWUVFRJG0fC716DaAkedHRsQGdnUvx+PHjReqnQCB4MoTQC154Jk78kgrF\nBwRW0RZf/l0CjVm1agOmpqayQYMgKhQT7GKbQL2+Mn/77bcCtbFt2zbq9a40GttTry/HmjUbUaWS\nqFY7skbZykytVcumoJ6eTD10iCVL+lEu/47AOQJeBN4ksJSS1Jj9+g15SiORO1arlQ4OrgT+zDqN\nr9f7cs+ePQ+V3bFjByXJjcBEyuUf0sHBnRcuXMiyc/LkSUZERDAxMfGZ9kEgEOSNEHrBC8/UqVOp\n0fSxi9ghAsNpNLrRZDJx5MhgAjoCcdlmtOP5ySefFqiNEiW8COyw10+hwVCZv//+OxMuXKC1Rg2b\nYW9vMjKShw8fpoNDlRz72TKZKxs2bMXvv5/GzMzMpzQSeRMWFkZJcqWjY0tKkhffeef9XMvVrfsq\ngRVZvstkn3Hw4BHP2FuBQFAQCqN94tS9oFjQt29fODn9CaXybQA7IUnrMW3at1iyZBnmz98JoCps\noWQBwAy9fgfKlfPLl+3Lly8jMLAO7tyJA9DU/lSC2VwDYfPnw7FjR8iOHQPKlQP+/BPw94fRaERG\nRjwAk728BqQFer0ao0ePKpKodAWlTZs2iIw8juXLR2Hv3o2YOfO7rHe0fdQDAFJSTAA8sr3zQHKy\n6X/NCQSCFwSRj15QbIiPj8ePP/6EhIQkvPZaW2i1WrRu3QMm00QA9WC7PlcGMtlltGvXGOvXL89T\ncK1WK06ePImUlBT07DkQcXH9Qf4KoC+AUQCi4YM6+AMm+CEN1sBAyHfsAEqWBABs2bIFr73WG2az\nF4CuAEIBBEAuX4HU1PtQq9WP7IvFYsGKFSsQExODmjVrol27dkU1TA/1c+TIYISEzAYAvPnmIPj5\nlcGECUthMs0FcA+S1B9r1oSgTZs2T8UHgUBQeAqjfULoBcWSK1euIDCwJlJSmgFwBhAC4C6Aj1C3\n7jn89dcfkMlkudZNS0tDUNBrOHo0EqmpySCTAZgBRAHoAOAa/JGGHdDDG4k4Kjfi/LQv8foIW0a4\nEydOoGHDIJhM/QFsstepCKAllMoyuHXrOm7dugUfHx/odA+niyWJ//u/HoiIiIPJ1BSStBYjRvTA\n5MkTiniUgO++m4bPPlsNk+l3AHJIUieMG9cOCoUcc+cuhVqtxuefv4/XX+9V5G0LBIKio1DaV9h9\ng2dNMXRZ8BRYsWIFHRy62O/TVyTwKoEgOjmVzDpYlhcTJ06iTteRwNcEOhBwIHDKvmdtYmV48Doc\nSYC78TJdVQP4ww8/kCSPHDnCN954gwrFaAKJBDwJ6Ak4Uqn04auvtqNWa4ssZzR65HoYbv/+/dTr\n/QmY7W3eolptyPPw25kzZ/jDDz9wwYIFuUbdexTNmnUg8Fu2swQb2aBB6wLZEAgEz5/CaJ/YoxcU\nS5ydnUFeAmAEcBBAZygUEThz5jDKly//yLonT0YiNbU9bKlhW8CWja4FgH6oDX/sQjw8kYRtaIzW\neB/3Fb8jKCgIH374KRo37ojffjsBiyUawI8AygOIBHAEMpkOu3btRlraX7h/PwrJyYvQvn23hyLd\n3b17F0qlD4AHy/uuUCodkJyc/JCv27dvR506TTF27EWMGLEW1as3wv379/M9TqVLu0OhOJ71s1x+\nHKVLu+e7vkAgeAEowg+OZ0IxdFlQhFitVqalpTEzM5NNmrShXt+UCsWHlKQy/O67afmy8fXX31GS\nWhGYS6CuPQDPMTZGVSbZp77r4UUN3CiTGbl27VqePHmSklSKwG37TN6Xtvj5O7LNlhdTqfTNcZdd\nkkoyNjY2R/u3b9+mo6MngaUEblKh+IJ+flVzDZTj61uNwKasuAFabbesAEH54e+//6arqzclqSsl\nqQdLlChdqHj4AoHg+VAY7RP56AXFhvnzF2DEiPdhNqcgIKA6Nm5cgb179yIuLg716y9E8+bN82Xn\nvfdGIiJiP3buHI/MTAsyMz3QEgqsQyokAMuhQj/oYJHdwYYNq9G+fTts2rQJKlUVAC52K4cA+AI4\nC8DWrkJxFuQdADcAeAI4DDIV7u45Z9AuLi7YuTMMr78+GLGxo1C1ak2sXh0KufzhBbbExATY9v8B\nQIa0tIqIj0/I95j5+Pjg3Lmj2LBhAwCgffsZD/kjEAhebMRhPEGxYMWKFXj99cEA/gBQC8DXKF9+\nDS5cOPJE9kgiJiYG6enp+CmoA767GgMNMjEfPhiCVwD5GqxZsxSdOnUCAMTGxiIwsBZMpi329tfA\n0fEdWCxERsZrkMlMMBh2o1+/3pg1awHU6kBkZJzGhAnj4O7uBn9/fzRo0KDAfvbo8SY2bDAjLW0W\ngL8hSe0RGroEr7zyyhP1WyAQFE/EYTzBC4+ra2kC3bMti1spl6sfeTjt3r177Nq1Lw0GN5YqVZ7r\n1q17uNAvv9Ail5MAp6ElZehHlUrPZcuWPVR07dp11OmcqNW60sXFi4cOHWJMTAynT5/On376KSvG\nfmRkJMPDw/nRR59RkkrTYHidklSGY8d+VuB+37t3jx069KJaraeTU0nOn7+wwDYEAkHxpzDaJ2b0\ngmKBWi0hI8MXwBEAGgCnoFTWh9l8L9clbwDo2rUvQkMzYDaPADASQBTq1q2FtWuXoHTp0sC8ecCQ\nIQCJUx06YujtdGh1Ggwc2B1HjpyAyZSG3r27o2HDhlk2MzIykJCQADc3t0cGxbFdrysPs/k0AC8A\nt6HVVsTp0/vh55e/QD4CgUDwgMJon9ijFzx30tPTcePGDXh6euYZaKZmzYY4cOAOgLoAqgH4HcHB\n7+Yp8gCwefMmmM07ALwCYBiARTh48Bf4+FTEaHk6vs1MsxWcPBlVxo7FnwAuXbqEmjUb4f79/rBa\nS2LRotcwadI4+Pn5oXbt2nBxcUF6ejosFstjhV6tLmkPqAMArtBo/HD9+nUh9AKB4NlSRKsKz4xi\n6LLgEWzdupUGgyslqRQNBldu27Yt13JXrlxh+fI1qFTqqVCoOXLk6Mfa9vDwJfCK/YT8gyV/Cz+G\nU9ax+CV1G+WoM3z4aMpkH2VtDwBBlMtL0WhsQ63WmVqtAyWpFB0c3Lhjx448205JSaGTU0kCa+y2\nttHBwZ0JCQkFGyCBQCCgSGojKKbcuXOHer0rgd12MdxFvd41z8AxVquVt27dYmpqar7sr1q1moAT\ngZIE0ghYOQWjSYCZkLM/JtPVtUyOOv36vU3gh6zgMkAlAib7z1sJlLL/+w4aDG5MSkrKs/2DBw/S\n3f0lKpVaOjuXZERERL7HRiAQCLJTGO0TAXMEz42LFy9CofAB0Nj+pAkUCi9ERUXlWl4mk8HNzQ1a\nrTbHc7PZjNjYWJjN5hzPu3fvhm7d2gPQQoY2mIkmGIOpyADQC8uxGFXg5FQiR52+fbtBp/sGwGYA\nuwDUBvAgjO0rsF2dswJoDrncHdHR0Xn2r06dOrhxIxqJifFISIhD06ZN8ywrEAgETwsh9ILnhpeX\nF9LTY2CLUAcAl5Ge/je8vLweVS0H4eHhcHX1QrlytWEwuOLtt4ciMzMz631IyI9Q4CYWYjfewZ9I\nA9AJdfArdkGn64+ffpqSw17z5s2xbNlMVKgwASVL/g6Vaks2/34EUAW2vzaXkJ4eZzvU9whkMhkM\nBkOecfcFAoHgqVOEKwvPhGLosuARTJs2kzqdO43GNtTp3Dljxqx8101MTLQv/e+yL6fvJmBgmzZd\naLVaSZK3rl7lr7Bdn7sHic3xO4FR1GqNPHnyZJ62zWYzZ82axebNW1Gp1FGnc6ejYylqNC52X904\ne3ZIofsvEAgE+aEw2ieu1wmeOxcuXEBkZCTKly+PgICAh95fuXIFy5cvR2amBd27d4O/vz8AYO/e\nvWjS5E1YrZHZSteCWh2NixdPwMfNDezaFbKwMNyFHG1RHvtRA8AGLF78E/r165erP5mZmWjatC2O\nHZMhNfVlSNIyDBz4f5g27RtERkbi4sWLqFChQpYfRUlcXBwSEhLg7++fa+Y7gUDw30QEzBEUezIy\nMhgXF0ez2Zzj+cWLF+no6EmVaigVindpMLjx6NGjJMn33gu2Z46Lts/oYwg4U6crxYtHj5KvvGI7\neOfszA5e5QnIqdMZOW/evEf6Eh4eToOhOoFMu90bVKl0NJlMBeqTxWJhVFQUY2JislYYHsX7/9/e\nnQdEVb0NHP8OMwPMgOAOCCKGIiIIKq65YC6E5p7mXtpiWpbtZmbaT8W0zD1zqUxLLTX33dxywdwV\nLU1REUVxIZEBZmDO+8fQlK9LiwgyPJ+/nLuc+zy3iWfuveee88YQ5eJSQhUrVlWVLu2vjh49+q+O\nJ4RwXPdT++Q9elHg9uzZQ0xMRzIyLICZefO+oGNH29Cz//vfx6Sl9cdqHQbAzZtBvPXWCAYM6M3G\njTuATkAEUBM4ClQnokIagf37Q1wc+Pig3biRZSEhmM1m9Hr93z4vv3HjBk5OfsAf78mXQaPRYzKZ\n/vFV9o0bN2jevB3x8SdRKptHH63LypXf4eLicsft169fz/Tpi8jKOklWVinS0mbRsWPv/zzErxBC\n/EE644kCZTabefzxDly7NpmMjEtkZGykV68XOHfuHABXr/6O1VrxL3s8wu7d+3j66Y85fjwLuAws\nBSyAjvByyWzTmdHExUGFCrB9O4TYJoVxdnb+R53iHn30UWyT1swFzqDXv0lISBglS5b8mz3/9MYb\nQzl8OACT6SwZGefYsUMxevS4W7ZRSvHtt/Pp3PkZPvxwNBZLS/6cNKc7p04d/cfHE0KIu5FCL/LF\nwYMHWbVqFefPn79l+YULF8jKcgI65C6phV5fg/j4eAC6dGmN0TgaOAz8irPzu5jNBm7e/Ins7J+A\n60BX3N1TaFKpLHvdrOiOHoWgIFuR/w+j0Hl5ebF582pCQz+jRIlGPPbYWdav/+Ef/UhYsmQJPXo8\nz9Kla8nK6ontroAzGRnd2L370C3bjh07nuef/5BFixqya1cpzOaVwB9z0i/F3//2/gpCCPGv5d0T\nhPxRCEMu8l5++U1lNPopT89oZTSWVitXrrSvS09PV66uHgric5+Hpyij0cf+fNpqtapx4z5VpUsH\nqBIl/HJ7wb+au+1pBRuVVuuijq1apawVK9pGvAsLUyo5Od/zHDVqjDIa5fUbaAAAIABJREFUKymY\npjSaGgoG5I6ul6NcXHqoN98ccsv2Hh5eCn6xj8Kn1YYqvb6U8vSsrUqUKGfviyCEEPdT+6TXvXig\ndu7cScuWPUlPPwB4Artxc2vNjRsp9nHqv/56Hv37v45OV5fs7AO88spzxMYOv2N7u3fvpmnTDmRm\nhmCb4KYMIU4X2F/KDZeUFKhdG9auhX9xm/1esX/77SKMRlcGDHiBgICAO253/fp1YmKeJC4uDtgN\nhAIpaDRhODuXRK+HSpVKsn37Wtzd3e37ubmVwmQ6DNjexXd27s/rrxenbdu2VKtWDQ8Pj/vOQQjh\nGO6n9kmhFw/Ut99+S79+y7h5c6F9mV5fjKFD38JoNNKlSxf8/f357bffOHLkCBUrViQiIuKebTZs\nGMWOHaeBQ1TnHBtoRFnSuB4WRomffoI8KJCrV6/mySf7kJExCCenqxQr9g0HDuykYsWKt23bsWMv\nVq1yw2xeDOwHygOg0w2gXz8nevfuTc2aNdHpbu372r//a3z99UFMphHAr7i7v8ehQ7t55JFH7jt+\nIYRjkUIvHlrx8fHUqdMMk2k7UBn4Bo2mH1ptL5ycwNX1B37+eRtBQUG37XvlyhUOHDhAqVKlqFGj\nhv0ZucHgQWZmb+rQi7U8TglSWQv0MpYk8WrSbUPk/hfVqzfkyJG3gHYAODm9wyuvKD79dOxt2/r4\nBJGcvAz4HDgCjARO4Ob2Jvv377hjbmB7X/+DD0axdOk6SpcuyYQJ/6NGjRr3HbsQwvHcT+2Tznji\ngapWrRoTJozGxaUWRqMvzs4DUepFsrM/w2z+jLS0QQwdOvq2/fbs2UNgYCidO8fSuHEnunbta/+S\nKwVNWMpGmlOCVJZQk3aUx4SRixcv5knc6ekmwMv+2Wr1Ii3NdMdty5cvj0azDRgHNECjeRJ//4/Z\ntGnlXYs8gE6nY9SoD4iP38nWrSulyAshHggp9OKBe/75vly9epHjx3dRq1YdoLF9nVKVuHIl9bZ9\nunTpy40bk/n99x9JTz/GqlWHWLp0KQAfN3uMNVygGDeZhwdd+AUzA9FoTPj4+ORJzE8/3Rmj8RVg\nL7AOo/FjevTodMdtv/xyEp6eI/DwaI+7+xpq1Ajkl1/2ULdu3TyJRQgh7scDLfSJiYk0bdqUatWq\nERoayqRJkwC4du0aLVq0ICgoiJYtW5Ka+ucf+tjYWCpXrkxwcDDr169/kOGJfDRlynSqVo0gLm4r\nWu0QIB74CaPxf3Tu3Oq27S9cOA08nvvJgNnchFOnTsHixby0YTUGFF+7etAbKy5Gf4zGj1i48Os8\nuW0PMHToO7z1Vjv8/fsQFDSUr7+eTNOmTe+4bbVq1Thx4hBz5jzP4sWj2b17kwxfK4R4eNxfh/97\nu3jxojpw4IBSSqm0tDQVFBSkjh07pt566y310UcfKaWUGjNmjHrnnXeUUkrFx8er8PBwZTabVUJC\nggoMDFQ5OTm3tPmAQxYPwOLFi5XRWFnBSQXXlJNTeQUuCtyVwVBS7d69+7Z9wsLqK41mvH0IWje3\nQHXk7beVcrJNUKNef10pq1UlJiaqHTt2qJSUlALITAgh8sf91L4HekXv7e1t70Ht7u5O1apVSUpK\nYvny5fYJRZ5++mn7Ldlly5bRrVs39Ho9AQEBVKpUiT179jzIEEUeyszM5OjRoyQnJ9+yfOXKTZhM\nLwOVgJtYrWnAFiCNjIzZPP54h9vmkv/hh7n4+n6Om5s/zs6V+bZJCKFjx4LVCh98AB9/DBoNfn5+\nNGjQgNKlS9v3VUqxYsUKJk2axE8//fSg0xZCiIdavj2jP3PmDAcOHKBu3bpcunQJLy9bRycvLy8u\nXboE2EZJ++tc5H5+fiQlJeVXiOI+xMfH4+8fTIMGTxIQUJUhQ0bY1/n6lkGvPwJcAZpjK/j1cte2\nx2JxsQ95+4dHHnmEIUNe5bHHGrDk0Tq0Xb3CtmLcOBg+HO4ySp1Siu7dn6Nbt6G8/favREf34KOP\nxudxtrceLzZ2HKVK+VOypB/vvTcCq9X6wI4nhBD/Vr5ManPz5k06derExIkTKVas2C3rNBrNPYcW\nvdO64cOH2/8dFRVFVFRUXoUq/qN27XqQkvI+8CyQwqRJ9Tlx4hd++eUcZcuWpFSp46Sk1CMnpw6w\nGVvRLw2cIDv7mv2HH9iKZ82ajTh48DrDqEhrNgFgmTQJ/cCB94xj7969rFixmfT0o4AReJdhw6oy\nYMDzt3338sIXX3zFyJFzMJnWAjomTOhOyZLFeeONV/P8WEKIomPLli1s2bIlT9p64IXeYrHQqVMn\nevXqRfv27QHbVXxycjLe3t5cvHiRsmXLAuDr60tiYqJ93/Pnz+Pr63tbm38t9KLgKaVISDgK9Mxd\nUoaMjKYsX74Li2Uax4//jIfHXkqUcOPKlUFAFaAGUB2tdidTpky4ZRS42bO/4ODBOMbxIm8yhRyc\neEFbji5BQUT/TSwpKSlotZWwFXkAP3S6YqSmpnL58mXi4+MJCAigevXqeZL7woWrMJneA2wT55hM\nI/j++0lS6IUQ9+X/X8SOGDHi7hv/jQd6614pxbPPPktISAiDBg2yL2/bti1z5swBYM6cOfYfAG3b\ntmXBggWYzWYSEhI4efIkderUeZAhijyg0Wjw9a0MLMtdcgOrdT0Wy0igMVbrG1gsDShf3gedbjnw\nAbAYZ+fLDBzYl+ee63NLe5s2bGMa8CZTMKPnKRbypdX/tuf4d1KrVi2s1oPASiALjWYipUp5sHnz\nVsLC6tGr1+fUrx/D0KH/y5Pcy5QpjpPT6b+ci1OULOmZJ20LIUSeyJPugHexfft2pdFoVHh4uIqI\niFARERFqzZo16urVq6pZs2aqcuXKqkWLFur69ev2fUaNGqUCAwNVlSpV1Nq1a29r8wGHLP6jPXv2\nKE9Pb+XpWU8ZDN5KozEquJzba14pd/doNW3aNFWhQlVVrFiEcnMLVA0bRqvMzMxbG7JY1P6w6kqB\nMqFVMUxQME7pdB7q6tWr/yiW7du3Kx+fSsrJSadCQuqoQ4cOKVdXTwVHc+O5rAwGb/vEOffjxIkT\nysPDS+n1Lyqd7mXl7l5GHTp06L7bFUKIv7qf2idD4Io8k5qaytGjRylTpgxTp85i9uytmEwD0Ov3\n4u29kfj4n9Hr9Rw8eBAXFxfCw8PtE9sAkJUF3bvDkiWkazS003jxo9Lg5JTF0qVzeOKJJ245XnZ2\nNu+99yHff7+C4sU9+fTTETRp0sS+XimFRqMhISGBsLAmpKf/2eHP07Ml8+e/RkxMzH3nnZiYyIIF\nC7BarXTu3FnGqhdC5DkZ614UOKUU58+fx2w2U7FiRTQaDdOnz2Dduu1UqODD+++/c8srcLcxmaBT\nJ9vMc8WLk7FkCStSUsjMzKR58+aUK1futl1eeeUtZs/+GZNpLHAGo/Eldu3adNvzd7PZjLd3Ra5f\nn4Zt7PoDGI0tOX58H/7+/nl6HoQQ4kGQQi8KVHZ2Np069WL9+o04OblSubI/mzevpESJEv+sgbQ0\naNMGtm6FMmVg/Xr4mxnsAEqWLM/165uxva5nm3hm2DA3Pvhg2G3bxsXFERPTkcxMK5DBl1/OwN+/\nPGazmdq1a2M0Gm/bRwghHhb3U/vy5fU64dg+/XQSGzakkJmZCDhz/PjLDBjwJvPnz/77na9dg5gY\n2LMHypWDTZsgOBj489b73bi4uALX7J+12qsYDKXuuG3dunW5fPksycnJuLm5ER3dkePHL+Pk5I6H\nRyq7dm26ZQwHIYRwFDKpjbgvixYtZvDg/5GR0Q1wBZwwm3uzb9/hv9/50iVo2tRW5CtWhO3bOaXX\n07NnX4oXL49Wq8fLq+Jd3yX93//exWjsDExCq30NT8/19hEX70Sn0+Hn58ekSVM5cqQ0N28e5saN\nOC5e7Er//m/+l/SFEOKhJ1f04h/bv38/n3wyjawsC/369SQgIIDevV/Eau0OrAaeAbTodCuoWrXy\nvRs7fx6aNYMTJ6BKFdi4kdNmMzVqNCAtTQu8BbzE5cubadOmC7/+evC25/TPPdeXcuW8WbRoJaVK\nefLaa7tvGXjnbuLjT5GZGQ1oAcjJieHXX1f/+xMihBCFgBR68Y8cOHCARo2iMZkGA+6sWfM0L73U\nE52uCfAx8ARQDVB4e8Nnn22+a1s5J06gadECp3PnIDzc9ky+bFmmvz2Emzc7AkuA13K3jsbJKZJ9\n+/bdsUNeq1ataNXq9tnv7qVu3XBWrZqPydQDcMHZ+SsiI8P/VRtCCFFYyK178besVisDB76NyfQW\n8AbQD5NpCsuXb8JqPQxYgfXABzg7n+f48TsXZYDvPxxJcpVgnM6d46CrkcS5cyF3ZESTKROlvIF0\n4I9X4TLIyTlhHz3xTrGdPHmSs2fP/uOOKq+++jKPP+6Di4sfBoMf1arFM3XquH9+QoQQohCRQi/+\n1jPP9Gf37l/5c1hZAAOuru507NgUo7EGbm7dMBoH8eWXs3F3d79jO/HffEPUBx/gi2IzUTTJeoMn\ner5oX9+zZxeMxmlAV6AB0Adn55q0bt3ojiMkXr9+nVq1GhMR0Yzg4Dq0bt0Zi8Xyt/nodDoWL57H\n6dNHOHZsJ3v3bv3nbwgIIUQhI4Ve3NP58+f5/vvF5OTMAEYCC4FVuLq+xMCBz+Dq6oLFcgGLZRNl\nypSkadMmd2znzPz5lO/dmzJYWY0frZjPDfU+R4/G2Wd7q1evHkuWfE2NGr/h7+9BmzapfPfdGBYs\n+OKOve8HDnyHY8eqYTKdITPzHFu2pPPxxxP+cW7lypUjICDg1kF7hBDCwcgzenFP6enpaLUeQDTw\nFTAROECDBtVxcdEzb94GLJalQH2SkmLp2fNFNm1adksbv//wA6W798AdxSKa0R1fLDwNvEeJEj63\nFNro6Giio/9u6hqb/fuPYDaPw/Z71YWMjKfYvXsD48aNZ+/eo0REBPP666/i4uJi38dkMpGamoq3\nt7cUeCFEkSAD5oh7ys7OpkqVmpw925acnKexTVwzAReXkmi1lzCZtIA3kAbMolSp3ly5cta+/+/f\nfotrj564oJhDb55lNjkAeGAwGFi8eN5/Hoa2U6feLF/uQ3b2GMCKq2s3ypU7zsWL5cjIeBKDYTl1\n6uTw448rcXJyYvz4Sbz77hCcnIx4eZVm06YVBAYG3ucZEkKIB09GxhMP1IULF2jUKIbTpy9im152\nGvAKcBXYCrgAY4CFREaW4Oeff7Tt+P33ZD/1FDqlmEZZXuYCCi1wDSenchw+vI9q1arZj7N69Wr6\n9h3I9euXqFevCYsWfUWZMmXs681mM5mZmfYpbZOTk6lfvznXrjljtZp45JGSnDiRQGbmmdyYLLi5\nVWHHjh9IT0+nRYuumEzbgQpoNOMJCfmOo0d3P+jTJ4QQ9+1+ap/cuxT3ZLFYGDHiIxITfwM6AOuA\n48Bu4ElsBRWgAxpNAnPnTrN9/Oor6NoVnVKMpQ8v8QiK7sBkNJpGuLuXZuTI8aSmpgLwyy+/0Lnz\n01y6NAuzOYldu4Jo27a7PY7hw0fh5uZJqVI+1K4dxZUrV/D29ub48b2sWTOFzZvnMXfudLRaI+Cc\nu5cOJyd3zGYz+/btw2p9AqgAgFIvcfz4XvnRKIRweFLoxT0NGTKCefPisVh+BH4AXgKeBprnfjYB\nCphD48YNCQ4OhqlToU8fsFqZXq4ig6kNbASqA+NRSs+NGz+wZIkTLVq0RynFtm3bgDZAU8ATi2Us\ne/ZswWw28/jjbRgxYhrZ2afIzk7j0KHq9OzZDwAnJyfq169PZGQkISEhlC9fAr3+dWAPOt0QSpe2\nUr16dSpUqIBWuxPIyM1sM2XK+N9ziF0hhHAEUujFPS1duhaTaSRQF9gGfAs8CrgDQUAAEIhe/znf\nfPM5fPQRvPyybedPPqHR+hUULzGSYsXaA19g+2EQB9TGbJ7O0aPxXLx4kZIlS+Lk9Cu2d/IBTuDq\nWowpUz5j06ZDwPNAOcAJi+VNdu/exaOPRmMwuGM0ejJ16nR0Oh3btq2hbdurBAb2p1Wrs+zcuREX\nFxfatGlDTEw4bm7V8fBojbt7bxYs+CK/TqMQQhQYeUYv7ujKlSssXbqUUaMmc+bMm0AvIAnbVfkJ\noH7uv3XodCvZuGElTTZtgpEjURoN8S+/TNVPP0Wr1XLt2jWGDRvG55/vJDs7GziI7TfmTZydy3Hh\nQgIeHh40avQ4R49aMZsj0Onm0759c/bu/YWTJ6sDF4FVufstwGh8HYulIxbLBCABo7EZq1Z9TVRU\n1F1zUkqxe/duUlJSiIyMvOugPkII8bCRzngiTyUmJlKz5qOYTA3IyUklK2s7tiv649hmizsKlAHm\noNePYP63M+i0YwdMmEA20M+lLt/pzdSu7cuMGZ8ycOC77Nu3h6tXG2C1JgFeQDNgJr161eLrr2cA\nts52CxcuJCEhgalTv+TGjXpkZp7G1gHwJHADKItO9xM6HWRmnshtC5ycBtOqVTyNGzcmJiaG0NDQ\nfD1nQgjxIEmhF3lGKUXr1p1Yt64KVmts7tJ2aDRxKPU9ts54U4EmODsfonePVszUmmHWLLKArgxj\nKSOAbNzcGqPVniQ9fRA5OaFAb+Bd4CRa7Sbq1XuEbds23vY++5gxH/HBB8cwm+cAl4HaQHlcXbPR\n639j3boVdOv2PGfPjgVaAVY0mih0OhPQEL3+G5YvX0CzZs3y45QJIcQDJ73uRZ5QStG9+7OsW7cT\nq/Wvk7yYUCoWaIRtdLzReHruYd3KGczISoVZs8BgoKPWmaX8Md2rjqysWmRleZKT8x7QDtiORvMR\nYWEnGDr0ebZsWX/HQWuuXUvFbP7j/faywFKKFTvBl18OIiHhV+rXr8+XX07GaHwaN7deODvXRamz\nWCw7sFgmYDLN5qWXBj+4EyWEEIWIFHpht27dOlas2IPVOhj4BLgApKDVnsz99x9cqV09gqipU9F8\n+y24u8PatVyNbIRWOwZbL/zf0GoXodXqcz8DVESns7Bt2wqGD3+Po0ePMn/+fPbt23dLHE88EYPR\n+DmwCziPwfABnTt3oWvXrpQqVQqApk2bcvjwbiZPfozoaF/gOf581S+I69evPZiTJIQQhY0qZAph\nyIXG559/rozGvgqsCoYoKKZArzp16qbc3csojeZtBR+oUoZS6lqdOkqBUiVKKBUXp5RSKikpSVWv\nXl/pdK7K2dlNTZ48VYWG1lUuLj0UzFRGY0PVq9cLSimlxo79VBmNPqpYsc7KaPRTw4ePviWWefO+\nUV5egcrDw0v16vWCysjIuGvcGzduVEajn4K9Ci4qg6Gd6tv3pQd3ooQQIp/dT+2TZ/TCbt++fTRq\n1IaMjG1AJWAilSp9xa5dG+jb9yV2744joGRxNrgoPA8ftk0vu2EDVK9+Szvp6em4urqi1Wq5efMm\nY8Z8zIkTZ2nUKJKXXupPSkoKFSoEk5W1H5iObaKcVCZPHsXLL7/0n2KfPftL3nnnAzIy0mnfvgOz\nZk3GYDDc5xkRQoiHg3TGE3li4cLv6dnzmdxX4PR4eXmxadNyOnbsxZkzDXE3N2Wd5gUi1RWUnx+a\njRuhSpV/fZyDBw/SuHEP0tLCsD0SmAEk4+LSlbVrF9zzFTkhhCiKpDOeuG9nz56lT5/+ZGfvxPYa\n21QyM03cuHGDCxeyKGF+ly0MI1Jd4bRGx+mvvvpPRR7Ax8eH9PTz2EbLmwwEA1FkZb3GkiUr8iol\nIYQQSKEXueLj49HrawHh2Dq1PY3FYhvsxs9qYhtNCOMoxwimhUsprP7+/+k4V69e5Z13BuPk9BgQ\nCCTa1+l0iXh6uudBNkIIIf4g89ELACpUqEB29hEgBdtgOEewWm/SxNeXH7Mv4kMW+wmgnUsAJSp7\nYjab/1G7WVlZ6PV6nJyciI+Pp1Gjlty86UJ29kBsV/LPAP2A83h6bmDAgD0PKEMhhCia5IpeAFCt\nWjVef70/RmM4Hh4xGAyPsWjEe7jHxOBjzuJsOT9eqeZNcs5Ozp51p3bt5gwfPvqu7V27do2GDaNx\nc/PAYCjGJ59M5JlnBpKaOgyLZRTwJVAL28Q4S9FolgCQkZFx1zaFEEL8e9IZT9ziyJEjnDlzhppK\n4du3L1y9Sk5UFGtffJEOvfpisWwC6gGXMBgi2Lt3EyEhIbe107p1FzZuLI3ZPAk4j9H4GHq9md9/\n/xGoDAwDxuZuHQV8h5PT50RF7WDTpmX5k6wQQhQS0hlP5JmwsDDalCyJb69ecPUq5pYtCTt7haee\n/RSLpQq2KWovAl7o9WGcOXPmlv1TUlI4fvw4O3b8hNn8LranQwGYTL0oU6Y0ev00bAPoDEKrDQA6\nYxtW1xOrtQWnTiXkY7ZCCOH4pNALAC5cuMCkSZNYMmAA1hYt4MYN6NyZNwKqcCqpIenpu4D92Iay\nHQocxmLZT1BQkL2NESNiKV++EnXrtiMtLQP4OXeNFYNhLy+80IOQkJ9xcSmDXu9PkyaBGAyngTTA\nirPzDGrXrpnPmQshhGOTW/eCU6dOERnZiKY3Q5ifvRkXrPzeoQOe339P8+jObNrUDduVN8A6NJqe\naLUmnJy0ZGdnUKtWI4YOHUS3bq9gMu0GvIF30WgmYzS2RaM5S8WKOUREhJOQkESdOqG8997bWCwW\ngoJqcuPGNcAZd3c3TpzYh4+PT4GdCyGEeBjJrXtxX4YOHc3jvzdiYfZWXLAyhQY8k+MKWi2NG9fG\nYJgFmIAsDIYZtG7dBL3eE7P5J6zW0fz8cwo9e/bDam2IrcgD/A+lTEye3IIZM14mNTWVBQvc+Omn\nZ/nss4O88MKrDBz4DhkZT2F7xe4Q2dm1+OKLOQV1GoQQwiFJoRfUOLifb9T36MkmlsEMpBFLl6/H\n3b08ZcuWICamDHq9F87OZWnUyErDhrXJyekMfA6sAN4nLa0TWVnL+fO9+FX4+DxCnz59KFasGKmp\nPlgs44EOZGQsYcmS7/jxx5+wWDoDpYEAMjM7sm/fsYI5CUII4aDkPfoiJjk5mVGjxpGUlEKbNs14\n5kYqb/9yEIAhvEEs5YHhwFTS0zPo3/8VVq6cz6xZk7FarZQqVYpvvvkGnW4lZvMebPPFewJd0Oni\n0WiqYzCEYLX+xvTpM0lJScm93aT5SxQalNJy/Xo2Gs23KFUPyMZgWEKtWo/m7wkRQggHJ8/oi5Br\n164REhLJ1avtyM4OY5h+CCMslwBY2Tyap3buxWTKwfaOe/vcvabSuPFKtm5dY2/HYrHQpEkrdu3a\nAvwOGAFwd2/D8OFRBAcH8/77Yzh+/Fes1izatGnL7t17SE5uQ05OFLaJbDyAMUAobm4+KJVB3brV\nWbNmMS4uLgghhPiTPKMX/8iSJUtIS6tFdvZ4RvEbIyyXsAJq5kye2LCWs2d/QaPRANa/7GXF2dn5\nlnb0ej3btq2hQYMmODu3B9ah1X6IwXCYPn36MH/+Mo4dCyYz8yJm8wWWLfuNMmVKEBq6A632RSAS\n+Aooh4uLnqVLp7J37zo2blwuRV4IIfKYFHoHdPbsWb766iuWLFlCVlaWfbnFYgGrGxN5lSHEko2W\np7XO8OyzAJQuXZrWraOAF4Cvgc9xchrK8OFv33YMnU7H5s2ref31+kRGjqN9+9/4+edtlCxZkri4\n/WRlPQdoATeys/ty8KCOEyeS8PDQoNOZgR24uj5NnTp1aNasGVWrVsXJSb6OQgiR1+TWvYP57rvv\n6NHjeZRqjk6XRHCwll27NmIwGEg8c4YtlavSKzuTLPT0cg7BrXt9vvzyM/v+SimGDh3KggWrKVbM\njYkTR9GkSZN/FUNMTGc2bKhOTs772O4OdANCgccpVepJmjaN4sSJBOrXr8nHH4/E3V0mshFCiHuR\n+egFYBv0pnz5alits4BOgEKni+HTT5/g5X79oFcvWLiQDCctA/2qUPKpjowaNQy9Xp+ncZw7d456\n9R7j2rWSZGXdwDZJzjogmeLFG3H9elKeHk8IIRydPKMv4qxWKzNnzqRjx6ewWsH2DBxAQ3Z2PX45\neBg6dYKFC8HDA8PWLUw/dQiNRkPlyrUIDW3A+vXr8ywef39/fv31AJMnP4+LSzK22emOYjQ+S48e\nXfPsOEIIIf6eXNE7gF69XmDx4iNkZHgDx4EmwBQgCSN12eSWSb30G1CyJKxfD7Vq8dprg5kxYxcm\n03ggEaPxBbZuXU1kZOQ9j/Vvbdu2jUGDhpGa+judOrUmNnY4Op281SmEEP+G3LovwpKTkylfPojs\n7AvANWzPwgOAX/AAVuFKQ9LA2xs2bIDQUADKln2ElJRVQNXcloYxeLCV2NiRBZCFEEKIe5Fb90XY\nwYMHyc7WA26AP/A2cIVS1OFHytKQNM476ehbKZxt167Z9zMYjECK/bNOdxk3N0M+Ry+EEOJBk0Jf\niMXFxbFs2TI0GmfgFeAIoMObLLayk1okcRItDazj+fKnJ4mJeZKdO3cCEBv7HgZDd+ATtNpX8PRc\nRd++fVi+fDkTJ05k27ZtzJkzl9Kl/TEaS/DUU30wmUwFmK0QQoj/Qm7dF1LDh49m3LjpKBVKRsYu\noBoQjz9l2UQSlUjnpIuBxllTSaZP7l6T6Nr1EPPnz+bKlStERNTj8uV0IIcqVSoSHFyFNWsOk53d\nEFiE1QoWy0rAH1fXAXTuXIqvv/68oFIWQogiS57RFzHnz5+ncuVwMjOPAV7AEGAy1V29WJF5Gn8U\nlurVidF4sunQG9g6580GNtCsmY6NG1fSo8dzfP+9OxbLp4DC2TkGpeKxWE5gG9L2FaAEMCL3qKdw\nc3uUmzeT8z9hIYQo4uQZfRGzf/9+rNay2Io8wGjqGMqwyzkFfxQ8+ij6bdt4YchAXF37ARWBnUAk\n27btYeHC7/j558NYLG2xTTbjhNkcjlIV+GPcetvz/qN/OeoJ0tOzWLVqVT5lKYQQIi/IFX0hc/r0\naSIi6pGWZgbmAm2oxXjWa96kpFLQvDksXQpubmRkZFCqlC8ZGVGNMUnHAAARyUlEQVTAktwWduDm\n1onMTAs5OTGAH/ADcB2NxoRS84EWwKfAqNx/BwDfAB0pU2YDSUm/5PkgO0IIIe5OruiLkPHjp5Ce\n/jywBhhAQ5z5kTcoqRQp9euTk1vkATp37k1GRioQ+JcWKpCefoOcnG3YrvI3A4uAeSiVCbwGFAOW\nYpt+tjRQDtgIOHP9umLevHn5lK0QQoj7JYW+kElLM2G1egH1acEs1mGb8HWRrhxBh9N5rFVnzGYz\nb745hFWrlgDuwBxgA3Aa24Q1Ltg67+mBWUAY0DJ32x8AM7AbF5fywHzgCjAJWIrV2ooLFy7kZ8pC\nCCHugxT6QqZHj44YjWNpx4esoA1GLMyiKU9lnyM1fR87d6YxcOBAPvtsOeAMjARygD5ATeAAtufw\nCwAFXPxL6+FoNM2Akbi4dKN8+QwiIsLRaLYDQcAiXF1X8Oijj+ZnykIIIe6DPKMvhHYNHEjtKVPQ\nARPR8RoJKPxy13bH2XktZvO7wA1gBRCN7db7MWy3/H8BPsQ2YE4x4HXgQu62FwgOrk737h0ZNGgQ\nmZmZtGrVhQMHdqHVahk3biyvvPJS/iYshBBFnLxeV5TMnAn9+oFSxDq5McRqBHoD44CVQA+gA7bh\ncJcC84AvgTNABrY54gOAg0AMtiv6hthG1msFPIZe34OqVQ+zf/92tFotABkZGbi4uMic8UIIUQCk\nM15RMWECvPACKMUQJyNDrNOxzVS3DCgOdAWGAtOB34Ha2Ir8YeAZoCzwG7ZOeDGAN5CK7UdBKaAz\n8B4WyzR+++08p0+fth/aYDBIkRdCiEJI/nIXBkrByJHw2msAvOpkINZaEbgJTARM2Ap+CWy36w3A\nJqAD3t7nqF07HGfnj4HG/Pme/AhsPwJaYrttPxRoCwwGLFitWTg7O+dXhkIIIR6QB1ro+/bti5eX\nF2FhYfZl165do0WLFgQFBdGyZUtSU1Pt62JjY6lcuTLBwcF5Oj96oWexwIYNWDUaXtBVYJK1N9AM\neB9YDvQHdvLqq0/i7j4DjWYkMAuDYTqTJo1lz57NrFixBNu79JdyG90EVAE+o0cPX4KCKuDqegH4\nEoOhHU2bNsLf3z//cxVCCJGnHmih79OnD2vXrr1l2ZgxY2jRogUnTpygWbNmjBkzBoBjx46xcOFC\njh07xtq1axkwYABWq/VBhld4ODszvFYD2mpcmZndE2iH7fn7WGAfWu1sund/igkTJhAXt4U+fS7y\n1FN7+eGHL+jc+UkArly5hu0WfQBQAZgGdMDLqzzz5s3k4MHdvP12OO3b/8j77zdj2bL5aDSaAklX\nCCFEHlIPWEJCggoNDbV/rlKlikpOTlZKKXXx4kVVpUoVpZRSo0ePVmPGjLFvFx0drXbt2nVbe/kQ\n8kPnyJEjymDwUTBTQYSC3xV8ocBHabUe6qWXXldms/mu+1+6dEkZDCUVPKPAT4GbAj+l0birHTt2\n5GMmQggh/ov7qX26/P5hcenSJby8bGO0e3l5cemS7VbyhQsXqFevnn07Pz8/kpKS8ju8h9K5c+dw\ndg4jI+NZ4BDwCOBM8eJWPv10It26dbttSNrt27fz2Wdz0GqdaNasAc7Oj5CRMRvblfw6dLo4Fi/+\nhgYNGuR/QkIIIfJNvhf6v9JoNPe8PXy3dcOHD7f/OyoqiqioqDyO7OESGhqKxbIf2A9MBrzRaGLJ\nyanLK69M56OPphAX9yMeHh4AbNiwgXbtepKRMRTIYvHiN3Ifg/wKvAxEodc3loFvhBDiIbVlyxa2\nbNmSJ23le6H38vIiOTkZb29vLl68SNmyZQHw9fUlMTHRvt358+fx9fW9Yxt/LfRFgb+/P3PnzqBn\nz+YopScnx0pOzmDS0oYCioSEPowePY7Y2A+ZO3ceb701koyM8djeqYeMDD21ay/h6NGGODtXwmz+\njVmzplGqVKkCzUsIIcSd/f+L2BEjRtx947+R76/XtW3bljlz5gAwZ84c2rdvb1++YMECzGYzCQkJ\nnDx5kjp16uR3eA+tjh07kJR0mlGjBlOiREms1qa5azRkZTXmxImzvPPO+wwY8AmXLxuwjVv/B3d8\nfPw4deooq1d/yunT8XTv3rUAshBCCJHfHugVfbdu3di6dStXrlyhfPnyfPjhhwwePJguXbowe/Zs\nAgIC+O677wAICQmhS5cuhISEoNPpmDZtmvT6/oukpCRq147i+vXKmM3uwHigDpCJ0fgVjz7akcGD\nB5OdfQ7bBDavYZu0JgujcRj9+8/Gx8cHHx+fAsxCCCFEfpMhcAuBM2fOEBZWk5s3G2N7re4m0Bw4\njF6voWXLGIKDH2H8+AkolYZtdrq5ODkNpUKFkowf/4H9zokQQojCR4bAdXAvvvgmN2+GAzVyl7gD\n8ylevATLly9m8+atjB/vjFKB2IbB3YdGc5Nixczs3LlGirwQQhRhckVfCFSqVItTp54FYrHNMFcB\nJ6fn6dLFkzNnzrN7dy+gJ5AONKNYsSSqVw9l+vRxhIaGFmToQggh8oBc0Tu4Bg0icXHZCwzHNhmN\nD6GhF5g5cyJpaTfBPkWtG9CHmJgW/PTTGinyQgghpNAXBpMnj6VGjXO4uLyNTvc7tWpFMGDA0wB0\n794eo/Ft4AiwE6Mxlh495Fa9EEIIG7l1X0gopVi0aBFPPz2AnJyn0OkS8fY+zb592/nkk0nMnDkX\nZ2dnhg17g+ee61vQ4QohhMhD91P7pNAXIpUq1eDUqf8BTwDg4tKNUaMieeONNwo2MCGEEA+UPKMv\nIlJTrwFV7Z+zsqpy+fLVggtICCHEQ08KfSESHd0CV9ch2KabPYjROJPHH29R0GEJIYR4iEmhL0Rm\nzJhIq1bOuLgEULx4KyZN+pCmTZv+/Y5CCCGKLHlGL4QQQjzk5Bm9EEIIIe5ICr0QQgjhwKTQCyGE\nEA5MCr0QQgjhwKTQCyGEEA5MCr0QQgjhwKTQCyGEEA5MCr0QQgjhwKTQCyGEEA5MCr0QQgjhwKTQ\nCyGEEA5MCr0QQgjhwKTQCyGEEA5MCr0QQgjhwKTQCyGEEA5MCr0QQgjhwKTQCyGEEA5MCr0QQgjh\nwKTQCyGEEA5MCr0QQgjhwKTQCyGEEA5MCr0QQgjhwKTQCyGEEA5MCr0QQgjhwKTQCyGEEA5MCr0Q\nQgjhwKTQCyGEEA5MCr0QQgjhwKTQCyGEEA5MCr0QQgjhwKTQCyGEEA5MCr0QQgjhwKTQCyGEEA5M\nCr0QQgjhwKTQCyGEEA5MCr0QQgjhwKTQCyGEEA5MCr0QQgjhwKTQCyGEEA5MCr0QQgjhwKTQCyGE\nEA5MCr0QQgjhwKTQCyGEEA5MCr0QQgjhwKTQCyGEEA7soSv0a9euJTg4mMqVK/PRRx8VdDgPnS1b\nthR0CAWqKOdflHMHyV/y31LQIRRaD1Whz8nJ4eWXX2bt2rUcO3aM+fPnc/z48YIO66FS1L/sRTn/\nopw7SP6S/5aCDqHQeqgK/Z49e6hUqRIBAQHo9Xq6du3KsmXLCjosIYQQotB6qAp9UlIS5cuXt3/2\n8/MjKSmpACMSQgghCjeNUkoVdBB/WLx4MWvXrmXmzJkAzJs3j7i4OCZPnmzfplKlSpw6daqgQhRC\nCCHyXWBgIL/99tt/2leXx7HcF19fXxITE+2fExMT8fPzu2Wb/5qoEEIIURQ9VLfuIyMjOXnyJGfO\nnMFsNrNw4ULatm1b0GEJIYQQhdZDdUWv0+mYMmUK0dHR5OTk8Oyzz1K1atWCDksIIYQotB6qZ/RC\nCCGEyFsP1a37v/r++++pVq0aWq2W/fv337IuNjaWypUrExwczPr16+3L9+3bR1hYGJUrV+bVV1/N\n75AfqKIwkFDfvn3x8vIiLCzMvuzatWu0aNGCoKAgWrZsSWpqqn3d3b4HhVViYiJNmzalWrVqhIaG\nMmnSJKBonIPMzEzq1q1LREQEISEhvPvuu0DRyP2vcnJyqFGjBm3atAGKVv4BAQFUr16dGjVqUKdO\nHaBo5Z+amsqTTz5J1apVCQkJIS4uLu/yVw+p48ePq19//VVFRUWpffv22ZfHx8er8PBwZTabVUJC\nggoMDFRWq1UppVTt2rVVXFycUkqpmJgYtWbNmgKJPa9lZ2erwMBAlZCQoMxmswoPD1fHjh0r6LDy\n3LZt29T+/ftVaGiofdlbb72lPvroI6WUUmPGjFHvvPOOUurO34OcnJwCiTuvXLx4UR04cEAppVRa\nWpoKCgpSx44dKzLnID09XSmllMViUXXr1lXbt28vMrn/4ZNPPlHdu3dXbdq0UUoVre9/QECAunr1\n6i3LilL+vXv3VrNnz1ZK2f4fSE1NzbP8H9pC/4f/X+hHjx6txowZY/8cHR2tdu3apS5cuKCCg4Pt\ny+fPn6/69euXr7E+KDt37lTR0dH2z7GxsSo2NrYAI3pwEhISbin0VapUUcnJyUopWyGsUqWKUuru\n3wNH0q5dO7Vhw4Yidw7S09NVZGSkOnr0aJHKPTExUTVr1kz9+OOP6oknnlBKFa3vf0BAgLpy5cot\ny4pK/qmpqapixYq3Lc+r/B/aW/d3c+HChVteuftjUJ3/v9zX19dhBtspygMJXbp0CS8vLwC8vLy4\ndOkScPfvgaM4c+YMBw4coG7dukXmHFitViIiIvDy8rI/wigquQO89tprjBs3DienP/8sF6X8NRoN\nzZs3JzIy0j6WSlHJPyEhgTJlytCnTx9q1qzJ888/T3p6ep7lX6C97lu0aEFycvJty0ePHm1/RiVs\n/wMI23m417lwlPN08+ZNOnXqxMSJEylWrNgt6xz5HDg5OXHw4EF+//13oqOj2bx58y3rHTn3lStX\nUrZsWWrUqHHXMd0dOX+AHTt24OPjQ0pKCi1atCA4OPiW9Y6cf3Z2Nvv372fKlCnUrl2bQYMGMWbM\nmFu2uZ/8C7TQb9iw4V/v8/8H1Tl//jx+fn74+vpy/vz5W5b7+vrmSZwF7Z8MJOSovLy8SE5Oxtvb\nm4sXL1K2bFngzt8DR/jvbbFY6NSpE7169aJ9+/ZA0TsHnp6etG7dmn379hWZ3Hfu3Mny5ctZvXo1\nmZmZ3Lhxg169ehWZ/AF8fHwAKFOmDB06dGDPnj1FJn8/Pz/8/PyoXbs2AE8++SSxsbF4e3vnSf6F\n4ta9+ssbgG3btmXBggWYzWYSEhI4efIkderUwdvbGw8PD+Li4lBKMXfuXPsfysKuKA8k1LZtW+bM\nmQPAnDlz7P9N7/Y9KMyUUjz77LOEhIQwaNAg+/KicA6uXLli71GckZHBhg0bqFGjRpHIHWx3MRMT\nE0lISGDBggU89thjzJ07t8jkbzKZSEtLAyA9PZ3169cTFhZWZPL39vamfPnynDhxAoCNGzdSrVo1\n2rRpkzf552WHgry0ZMkS5efnp1xdXZWXl5d6/PHH7etGjRqlAgMDVZUqVdTatWvty/fu3atCQ0NV\nYGCgGjhwYEGE/cCsXr1aBQUFqcDAQDV69OiCDueB6Nq1q/Lx8VF6vV75+fmpL774Ql29elU1a9ZM\nVa5cWbVo0UJdv37dvv3dvgeF1fbt25VGo1Hh4eEqIiJCRUREqDVr1hSJc3D48GFVo0YNFR4ersLC\nwtTYsWOVUqpI5P7/bdmyxd7rvqjkf/r0aRUeHq7Cw8NVtWrV7H/jikr+Sil18OBBFRkZqapXr646\ndOigUlNT8yx/GTBHCCGEcGCF4ta9EEIIIf4bKfRCCCGEA5NCL4QQQjgwKfRCCCGEA5NCL4QQQjgw\nKfRCCCGEA5NCL4QQQjgwKfRCCCGEA5NCL4S4p59//pnw8HCysrJIT08nNDSUY8eOFXRYQoh/SEbG\nE0L8rffff5/MzEwyMjIoX74877zzTkGHJIT4h6TQCyH+lsViITIyEoPBwK5duwr1lKBCFDVy614I\n8beuXLlCeno6N2/eJCMjo6DDEUL8C3JFL4T4W23btqV79+6cPn2aixcvMnny5IIOSQjxD+kKOgAh\nxMPt66+/xsXFha5du2K1WmnQoAFbtmwhKiqqoEMTQvwDckUvhBBCODB5Ri+EEEI4MCn0QgghhAOT\nQi+EEEI4MCn0QgghhAOTQi+EEEI4MCn0QgghhAOTQi+EEEI4sP8Diwf1C+duoqkAAAAASUVORK5C\nYII=\n", - "text": [ - "" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "#### Comparing the results from the different implementations" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As mentioned above, let us now confirm that the different implementations computed the same parameters (i.e., slope and y-axis intercept) as solution of the linear equation." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import prettytable\n", - "\n", - "params = [appr(x,y) for appr in [lin_lstsqr_mat, classic_lstsqr, numpy_lstsqr, scipy_lstsqr]]\n", - "\n", - "print(params)\n", - "\n", - "fit_table = prettytable.PrettyTable([\"\", \"slope\", \"y-intercept\"])\n", - "fit_table.add_row([\"matrix approach\", params[0][0], params[0][1]])\n", - "fit_table.add_row([\"classic approach\", params[1][0], params[1][1]])\n", - "fit_table.add_row([\"numpy function\", params[2][0], params[2][1]])\n", - "fit_table.add_row([\"scipy function\", params[3][0], params[3][1]])\n", - "\n", - "print(fit_table)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[array([ 0.95181895, 107.01399744]), (0.95181895319126741, 107.01399744459181), array([ 0.95181895, 107.01399744]), (0.95181895319126764, 107.01399744459175)]\n", - "+------------------+----------------+---------------+\n", - "| | slope | y-intercept |\n", - "+------------------+----------------+---------------+\n", - "| matrix approach | 0.951818953191 | 107.013997445 |\n", - "| classic approach | 0.951818953191 | 107.013997445 |\n", - "| numpy function | 0.951818953191 | 107.013997445 |\n", - "| scipy function | 0.951818953191 | 107.013997445 |\n", - "+------------------+----------------+---------------+\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "#### Initial performance comparison" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To get an initial impression of how the performances of the different least squares implementations compare against each other, let us do a quick benchmark using the `timeit` module via IPython's `%timeit` magic." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "for lab,appr in zip([\"matrix approach\",\"classic approach\",\n", - " \"numpy function\",\"scipy function\"],\n", - " [lin_lstsqr_mat, classic_lstsqr, \n", - " numpy_lstsqr, scipy_lstsqr]):\n", - " print(\"\\n{}: \".format(lab), end=\"\")\n", - " %timeit appr(x, y)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "matrix approach: 10000 loops, best of 3: 158 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "classic approach: 1000 loops, best of 3: 1.6 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "numpy function: 1000 loops, best of 3: 217 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "scipy function: 1000 loops, best of 3: 366 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "The timing above indicates that the \"classic\" approach (Python's standard library functions only) is significantly worse in performance than the other implemenations - roughly by a magnitude of 10. However, we should keep in mind that this experiment was done for a fixed sample size n=500." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Compiling the Python code via Cython in the IPython notebook" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Maybe we can speed things up a little bit via [Cython's C-extensions for Python](http://cython.org). Cython is basically a hybrid between C and Python and can be pictured as compiled Python code with type declarations. \n", - "Since we are working in an IPython notebook here, we can make use of the very convenient *IPython magic*: It will take care of the conversion to C code, the compilation, and eventually the loading of the function. \n", - "Let us also compile the functions for the other 3 least squares approaches - those already use numpy objects and therefore we don't expect any performance gain here, but it is good to be thorough.\n", - "\n", - "**Note** \n", - "Of course Cython has much more horsepower under its hood - more than I am showing in this section of this article (for example, I am not using Cython's type definitions via `cdef` here, but we will get to it [in a later section - Appendix II](#type_declarations)). \n", - "The focus of this section should be on how to speed up existing Python code by making only minimal changes to it. " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%load_ext cythonmagic" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 11 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%cython\n", - "import numpy as np\n", - "import scipy.stats\n", - "cimport numpy as np\n", - "\n", - "def cy_lin_lstsqr_mat(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " X = np.vstack([x, np.ones(len(x))]).T\n", - " return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)\n", - "\n", - "def cy_classic_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)\n", - "\n", - "def cy_numpy_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " X = np.vstack([x, np.ones(len(x))]).T\n", - " return np.linalg.lstsq(X,y)[0]\n", - "\n", - "def cy_scipy_lstsqr(x,y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " return scipy.stats.linregress(x, y)[0:2]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 12 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Comparing the compiled Cython code to the original Python code" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "for lab,appr in zip([\"matrix approach\",\"classic approach\",\n", - " \"numpy function\",\"scipy function\"],\n", - " [(lin_lstsqr_mat, cy_lin_lstsqr_mat), \n", - " (classic_lstsqr, cy_classic_lstsqr),\n", - " (numpy_lstsqr, cy_numpy_lstsqr),\n", - " (scipy_lstsqr, cy_scipy_lstsqr)]):\n", - " print(\"\\n\\n{}: \".format(lab))\n", - " %timeit appr[0](x, y)\n", - " %timeit appr[1](x, y)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "matrix approach: \n", - "10000 loops, best of 3: 159 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "10000 loops, best of 3: 159 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "\n", - "classic approach: \n", - "1000 loops, best of 3: 1.62 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "10000 loops, best of 3: 126 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "\n", - "numpy function: \n", - "1000 loops, best of 3: 218 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1000 loops, best of 3: 220 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "\n", - "scipy function: \n", - "1000 loops, best of 3: 372 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1000 loops, best of 3: 354 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 13 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "As we've seen before, our \"classic\" implementation of the least square method is pretty slow compared to the other approaches which use Numpy objects. This is not surprising, since Numpy is highly optimized and uses compiled C/C++ and Fortran code already. This explains why there is no significant difference if we used Cython to compile the numpy-objects-containing functions. \n", - "However, we were able to speed up the \"classic approach\" quite significantly via Cython, roughly by 1500%.\n", - "\n", - "The following 2 code blocks are just to visualize our results in a bar plot." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "funcs = ['classic_lstsqr', 'cy_classic_lstsqr', \n", - " 'lin_lstsqr_mat', 'numpy_lstsqr', 'scipy_lstsqr']\n", - "labels = ['classic approach','classic approach (cython)', \n", - " 'matrix approach', 'numpy function', 'scipy function']\n", - "\n", - "times = [timeit.Timer('%s(x,y)' %f, \n", - " 'from __main__ import %s, x, y' %f).timeit(1000)\n", - " for f in funcs]\n", - "\n", - "times_rel = [times[0]/times[i+1] for i in range(len(times[1:]))]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 14 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import matplotlib.pyplot as plt\n", - "\n", - "x_pos = np.arange(len(funcs))\n", - "plt.bar(x_pos, times, align='center', alpha=0.5)\n", - "plt.xticks(x_pos, labels, rotation=45)\n", - "plt.ylabel('time in ms')\n", - "plt.title('Performance of different least square fit implementations')\n", - "plt.grid()\n", - "plt.show()\n", - "\n", - "x_pos = np.arange(len(funcs[1:]))\n", - "plt.bar(x_pos, times_rel, align='center', alpha=0.5, color=\"green\")\n", - "plt.xticks(x_pos, labels[1:], rotation=45)\n", - "plt.ylabel('relative performance gain')\n", - "plt.title('Performance gain compared to the classic least square implementation')\n", - "plt.grid()\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\n", - "text": [ - "" - ] - }, - { - "metadata": {}, - "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAbwAAAFhCAYAAAALEB8uAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdYFOfaBvB7qALSqyBFNEZQFKyIDWOJXYMaJZagJpZE\nj8YUOcYoJ8YWNZZoTEyixJ5jjI0gNkQ9KvZOBNtiBbtUhV2e7w+/nbCAqDjMLMvzuy6vZJadmXfu\n3Zln531ndgUiIjDGGGMGzkjpBjDGGGNy4ILHGGOsUuCCxxhjrFLggscYY6xS4ILHGGOsUuCCxxhj\nrFKQteClp6ejdevWsLGxweeffy7nqiukLl26YOXKlUo3Q2/5+Phg9+7dsq3PyMgIV65cKdd1RERE\n4Kuvviq35VtbW0OlUr3SPAkJCfD09CyfBhm4evXqYd++fZIvV6VSwcjICAUFBZIvW2mjRo3CN998\nUy7LNnnRE3x8fHDnzh0YGxvDysoKnTt3xqJFi2BlZfXKK1u6dClcXFyQkZFRpsZWNrGxsUo3Qa8J\nggBBEEr8W0REBDw9PTF16tQyLTs0NBSDBg3CsGHDXqeJr6y0bZJCZmZmuS37dbzu66Wvzp07p3QT\nZPWqr2N0dDR+/fVX7N+/X3xsyZIl5dW8F5/hCYKAmJgYZGZm4sSJEzh27NgrV18iQkFBAVJTU+Hn\n51emhqrV6jLNxyoGfXt9y7PovAh/F4R+0rf3KCsDegEfHx/avXu3OP3ZZ59Rt27diIjo0KFD1Lx5\nc7Kzs6MGDRpQQkKC+Lw2bdrQl19+SS1atCALCwsaOHAgmZqakpmZGVWtWpV2795NT58+pbFjx5K7\nuzu5u7vTuHHj6OnTp0REtGfPHvLw8KBZs2aRm5sbDRo0iKKioqhPnz40cOBAsra2poCAAEpJSaHp\n06eTi4sLeXl50Y4dO8Q2LFu2jPz8/Mja2pp8fX3pp59+Ev+mXf7cuXPJxcWFqlWrRsuXLxf/npOT\nQ+PHjydvb2+ytbWlli1bUm5u7gu3u6jjx49TYGAgWVtbU9++fendd9+lSZMmERHRgwcPqGvXruTs\n7Ez29vbUrVs3unHjhk6Gv/zyCxERLV++nFq0aEGfffYZ2dvbU40aNWjbtm3PXe+1a9fonXfeIWdn\nZ3J0dKTRo0cTEZFGo6GpU6eSt7c3ubi40ODBg+nx48dERHT16lUSBIGWL19Onp6e5ODgQEuWLKEj\nR45QQEAA2dnZicvRtikkJIRGjx5Ntra2VKdOHZ33ysvkr319Bw8eTAUFBTRjxgyqWbMmOTo60rvv\nvksPHjwQ51mxYgV5eXmRo6MjTZs2rdh7U+unn37Sea/16NGDiIiSkpKoTZs2ZGdnR3Xr1qUtW7aU\nmN3EiRPJ2NiYqlSpQlWrVqUxY8YQEZEgCPTjjz/SG2+8QXZ2dvTxxx/rzPfrr7+Sn58f2dvb09tv\nv02pqanPfX32798vvoc8PT3pt99+IyKiiIiIl35/LF++nHx9fcna2ppq1KhBq1evJiKiixcvUuvW\nrcnW1pacnJyoX79+4jyCINDly5eJqPT3eGF79uyh6tWri9M3b96ksLAwcnZ2pho1atDChQvFvx0+\nfJiCg4PJzs6OqlWrRqNHj6a8vDzx7+PGjSMXFxeysbGhgIAAOnfu3HNfr6JKmpeI6N69e9S9e3ey\nsbGhpk2b0qRJk6hly5ZE9M97WqPRiMspvF9dunSJ2rZtS46OjuTk5EQDBgygR48eic/19vamWbNm\nUUBAAFWpUoU0Gs0r7f/e3t7ie3TKlCmvdPxq06YNRUZGUtOmTcnGxoZ69uwp7g9Ft+vRo0c0dOhQ\nqlatGnl4eNCkSZPEv2n3008++YTs7OyoZs2adODAAVq2bBl5enqSi4uL+P4jInry5Al9+umn5OXl\nRa6urjRy5EjxfVHacfN5r6N2n7a2tiZ/f3/auHEjET3bH6tUqULGxsZUtWpVsre3JyKi999/X9wH\niIiWLl1KtWrVIgcHB+rRowfdunVL/NuL9smiXqrg7dq1i4ieHUTr1q1LkydPphs3bpCjo6N40N25\ncyc5OjrSvXv3xBfL29ubkpKSSKPRUH5+PkVERNBXX30lLvurr76i5s2b0927d+nu3bsUEhIi/n3P\nnj1kYmJCkZGRlJeXR7m5uTRlyhSqUqUK7dixg9RqNQ0ePJi8vb1p+vTppFar6eeff6YaNWqIy//r\nr7/oypUrRES0d+9esrS0pBMnTugsf8qUKaRWqyk2NpYsLS3FN/tHH31Ebdu2pVu3bolv8qdPnz53\nu+/evVssu6dPn5KXlxctXLiQ1Go1/fnnn2RmZiZu4/379+nPP/+k3NxcyszMpL59+1KvXr3E+UND\nQ+nXX38lomdvWlNTU/rll1+ooKCAlixZQu7u7iW+Zmq1murXr0/jx4+nnJwcevLkCR04cICInh2U\n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\n", - "text": [ - "" - ] - } - ], - "prompt_number": 16 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Performance growth rates for different sample sizes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the previous section, we have seen how the different implemantations perform for a fixed sample size n=500. Now, let us take a look at the effect of different sample sizes on the relative performances for each approach. We will consider the sample sizes 10, 100, 1000, 10000, 100000, and 1000000." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "import random\n", - "random.seed(12345)\n", - "\n", - "funcs = ['cy_classic_lstsqr', \n", - " 'lin_lstsqr_mat', 'numpy_lstsqr', 'scipy_lstsqr']\n", - "\n", - "orders_n = [10**n for n in range(1, 7)]\n", - "times_n = {f:[] for f in funcs}\n", - "\n", - "for n in orders_n:\n", - " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", - " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", - " for f in funcs:\n", - " times_n[f].append(timeit.Timer('%s(x,y)' %f, \n", - " 'from __main__ import %s, x, y' %f).timeit(1000))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 17 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import matplotlib.pyplot as plt\n", - "\n", - "labels = [('cy_classic_lstsqr', 'Cython implementation'), \n", - " ('lin_lstsqr_mat', 'numpy matrix equation'),\n", - " ('numpy_lstsqr', 'numpy.linalg.lstsq()'), \n", - " ('scipy_lstsqr', 'scipy.stats.linregress()')] \n", - "\n", - "matplotlib.rcParams.update({'font.size': 12})\n", - "\n", - "fig = plt.figure(figsize=(10,8))\n", - "for lb in labels:\n", - " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", - "plt.xlabel('sample size n')\n", - "plt.ylabel('performance gain relative to the slowest approach')\n", - "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", - "plt.legend(loc=2)\n", - "plt.grid()\n", - "plt.xscale('log')\n", - "plt.yscale('log')\n", - "plt.title('Performance of least square fit implementations for different sample sizes')\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\n0/EX3NkAAAAASUVORK5CYII=\n", - "text": [ - "" - ] - } - ], - "prompt_number": 19 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "In this performance comparison using different sample sizes, we can see that our Cython approach is actually not so fast anymore. However, this is just the simplest approach to using Cython. \n", - "There are a lot of improvements that can be made. In a [later section](#showdown) we will come back to this comparison and see how the Cython version of our simple least squares implementation holds up against the other approaches, after we tweaked it a little bit.\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Bonus: How to use Cython without the IPython magic" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "IPython's notebook is really great for explanatory analysis and documentation, but what if we want to compile our Python code via Cython without letting IPython's magic doing all the work? \n", - "These are the steps you would need." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 1. Creating a .pyx file containing the the desired code or function." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%file ccy_classic_lstsqr.pyx\n", - "\n", - "def ccy_classic_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Writing ccy_classic_lstsqr.pyx\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 2. Creating a simple setup file" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%file setup.py\n", - "\n", - "from distutils.core import setup\n", - "from distutils.extension import Extension\n", - "from Cython.Distutils import build_ext\n", - "\n", - "setup(\n", - " cmdclass = {'build_ext': build_ext},\n", - " ext_modules = [Extension(\"ccy_classic_lstsqr\", [\"ccy_classic_lstsqr.pyx\"])]\n", - ")" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Writing setup.py\n" - ] - } - ], - "prompt_number": 12 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "####3. Building and Compiling" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "!python3 setup.py build_ext --inplace" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "running build_ext\r\n" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "cythoning ccy_classic_lstsqr.pyx to ccy_classic_lstsqr.c\r\n" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "building 'ccy_classic_lstsqr' extension\r\n", - "creating build\r\n", - "creating build/temp.macosx-10.6-intel-3.4\r\n", - "/usr/bin/clang -fno-strict-aliasing -Werror=declaration-after-statement -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -arch i386 -arch x86_64 -g -I/Library/Frameworks/Python.framework/Versions/3.4/include/python3.4m -c ccy_classic_lstsqr.c -o build/temp.macosx-10.6-intel-3.4/ccy_classic_lstsqr.o\r\n" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\u001b[1mccy_classic_lstsqr.c:2040:28: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyObject_AsString'\r\n", - " [-Wunused-function]\u001b[0m\r\n", - "static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {\r\n", - "\u001b[0;1;32m ^\r\n", - "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2037:32: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function\r\n", - " '__Pyx_PyUnicode_FromString' [-Wunused-function]\u001b[0m\r\n", - "static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) {\r\n", - "\u001b[0;1;32m ^\r\n", - "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2104:26: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyObject_IsTrue'\r\n", - " [-Wunused-function]\u001b[0m\r\n", - "static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {\r\n", - "\u001b[0;1;32m ^\r\n", - "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2159:33: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyIndex_AsSsize_t'\r\n", - " [-Wunused-function]\u001b[0m\r\n", - "static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {\r\n", - "\u001b[0;1;32m ^\r\n", - "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2188:33: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyInt_FromSize_t'\r\n", - " [-Wunused-function]\u001b[0m\r\n", - "static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {\r\n", - "\u001b[0;1;32m ^\r\n", - "\u001b[0m\u001b[1mccy_classic_lstsqr.c:1584:32: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyInt_From_long'\r\n", - " [-Wunused-function]\u001b[0m\r\n", - "static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {\r\n", - "\u001b[0;1;32m ^\r\n", - "\u001b[0m\u001b[1mccy_classic_lstsqr.c:1631:27: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1mfunction '__Pyx_PyInt_As_long' is not\r\n", - " needed and will not be emitted [-Wunneeded-internal-declaration]\u001b[0m\r\n", - "static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {\r\n", - "\u001b[0;1;32m ^\r\n", - "\u001b[0m\u001b[1mccy_classic_lstsqr.c:1731:26: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1mfunction '__Pyx_PyInt_As_int' is not\r\n", - " needed and will not be emitted [-Wunneeded-internal-declaration]\u001b[0m\r\n", - "static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {\r\n", - "\u001b[0;1;32m ^\r\n", - "\u001b[0m" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "8 warnings generated.\r\n" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\u001b[1mccy_classic_lstsqr.c:2040:28: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyObject_AsString'\r\n", - " [-Wunused-function]\u001b[0m\r\n", - "static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {\r\n", - "\u001b[0;1;32m ^\r\n", - "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2037:32: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function\r\n", - " '__Pyx_PyUnicode_FromString' [-Wunused-function]\u001b[0m\r\n", - "static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) {\r\n", - "\u001b[0;1;32m ^\r\n", - "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2104:26: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyObject_IsTrue'\r\n", - " [-Wunused-function]\u001b[0m\r\n", - "static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {\r\n", - "\u001b[0;1;32m ^\r\n", - "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2159:33: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyIndex_AsSsize_t'\r\n", - " [-Wunused-function]\u001b[0m\r\n", - "static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {\r\n", - "\u001b[0;1;32m ^\r\n", - "\u001b[0m\u001b[1mccy_classic_lstsqr.c:2188:33: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyInt_FromSize_t'\r\n", - " [-Wunused-function]\u001b[0m\r\n", - "static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {\r\n", - "\u001b[0;1;32m ^\r\n", - "\u001b[0m\u001b[1mccy_classic_lstsqr.c:1584:32: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function '__Pyx_PyInt_From_long'\r\n", - " [-Wunused-function]\u001b[0m\r\n", - "static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {\r\n", - "\u001b[0;1;32m ^\r\n", - "\u001b[0m\u001b[1mccy_classic_lstsqr.c:1631:27: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1mfunction '__Pyx_PyInt_As_long' is not\r\n", - " needed and will not be emitted [-Wunneeded-internal-declaration]\u001b[0m\r\n", - "static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {\r\n", - "\u001b[0;1;32m ^\r\n", - "\u001b[0m\u001b[1mccy_classic_lstsqr.c:1731:26: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1mfunction '__Pyx_PyInt_As_int' is not\r\n", - " needed and will not be emitted [-Wunneeded-internal-declaration]\u001b[0m\r\n", - "static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {\r\n", - "\u001b[0;1;32m ^\r\n", - "\u001b[0m" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "8" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - " warnings generated.\r\n", - "/usr/bin/clang -bundle -undefined dynamic_lookup -arch i386 -arch x86_64 -g build/temp.macosx-10.6-intel-3.4/ccy_classic_lstsqr.o -o /Users/sebastian/Github/python_reference/benchmarks/ccy_classic_lstsqr.so\r\n" - ] - } - ], - "prompt_number": 13 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 4. Importing and running the code" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import ccy_classic_lstsqr\n", - "\n", - "%timeit classic_lstsqr(x, y)\n", - "%timeit cy_classic_lstsqr(x, y)\n", - "%timeit ccy_classic_lstsqr.ccy_classic_lstsqr(x, y)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "100 loops, best of 3: 2.9 ms per loop\n", - "1000 loops, best of 3: 212 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1000 loops, best of 3: 207 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 20 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Appendix I: Cython vs. Numba" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Like we did with Cython before, we will use the minimalist approach to Numba and see how the two - Cython and Numba - compare against each other. \n", - "\n", - "Numba is using the [LLVM compiler infrastructure](http://llvm.org) for compiling Python code to machine code. Its strength is to work with NumPy arrays to speed-up the code. If you want to read more about Numba, please see refer to the original [website and documentation](http://numba.pydata.org/numba-doc/0.13/index.html)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "Here is our \"classic\" approach in Python, where I removed the list comprehensions, since they caused errors in the Numba compilation." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = 0\n", - " for x_i in x:\n", - " var_x += (x_i - x_avg)**2\n", - " cov_xy = 0\n", - " for x_i, y_i in zip(x,y):\n", - " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 22 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The Cython-compiled version of it:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%load_ext cythonmagic" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%cython\n", - "\n", - "def cy_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = 0\n", - " for x_i in x:\n", - " var_x += (x_i - x_avg)**2\n", - " cov_xy = 0\n", - " for x_i, y_i in zip(x,y):\n", - " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 26 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And now the Numba-compiled version:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from numba import jit\n", - "\n", - "@jit\n", - "def nmb_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = 0\n", - " for x_i in x:\n", - " var_x += (x_i - x_avg)**2\n", - " cov_xy = 0\n", - " for x_i, y_i in zip(x,y):\n", - " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", - " \n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 27 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "Now, let us see how the different approaches compare against each other for different sample sizes." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "import random\n", - "random.seed(12345)\n", - "\n", - "funcs = ['lstsqr', 'cy_lstsqr', 'nmb_lstsqr'] \n", - "orders_n = [10**n for n in range(1, 7)]\n", - "times_n = {f:[] for f in funcs}\n", - "\n", - "for n in orders_n:\n", - " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", - " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", - " for f in funcs:\n", - " times_n[f].append(timeit.Timer('%s(x,y)' %f, \n", - " 'from __main__ import %s, x, y' %f).timeit(1000))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 28 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%pylab inline" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.figure(figsize=(10,8))\n", - "\n", - "for f in times_n.keys():\n", - " plt.plot(orders_n, times_n[f], alpha=0.5, label=f, marker='o', lw=2)\n", - "\n", - "plt.xlabel('sample size n')\n", - "plt.ylabel('time in ms')\n", - "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", - "plt.legend(loc=2)\n", - "plt.grid()\n", - "\n", - "plt.title('Performance of a simple least square fit implementation')\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAH4CAYAAAACdDpdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl4k2XW+PFv0n1vKV2A0gUKhULZBRSQQhFwYRlBliKL\nivO6jCvzc3RUFp0RxhnfcfB1m2GpClhABWRHliqiUtmkUKC00AJtKS2lQOmSNrl/fzxDpFCgSNts\n53Ndva4+SZ7kJCdPcnLfd050SimFEEIIIYRoVHpLByCEEEII4YikCBNCCCGEsAApwoQQQgghLECK\nMCGEEEIIC5AiTAghhBDCAqQIE0IIIYSwACnChM0pKCjg7rvvxtfXl//3//6fpcOxuPLycoYNG4a/\nvz9jx45tsNu57777+OyzzxrkuvV6PceOHbvl/ZKSkujXr18DRGT/duzYQZs2bfD19WXVqlXcd999\nfPrpp3Xe3xqfD9Zu9uzZPP7445YOQ1gRZ0sHIBxDZGQkZ86cwcnJCS8vL+69917+7//+Dy8vr1u+\nrn//+98EBwdz4cKFBojU9nzxxRecOXOG4uJi9PqG+1y1bt26BrtuaxYfH8/EiRN57LHHLB1KvZo+\nfTrPPvsszzzzDAAjRowwn5eUlMT8+fPZvn37dfd3tOfDzJkzycrKqnPhmZKSwsSJEzl58qT5tFde\neaWhwhM2SkbCRKPQ6XSsWbOGixcvsmfPHnbt2sVf/vKXW7oOpRQmk4mcnBzat2//m+Korq7+TftZ\ns5ycHNq2bdugBZgj0+l0lg7hpn7L8/rEiRPExsY2QDRCiDpTQjSCyMhItWXLFvP2H//4R/XAAw8o\npZT68ccf1Z133qn8/f1V586dVUpKivly/fv3V6+++qrq06eP8vDwUA8//LBycXFRrq6uytvbW23Z\nskVVVlaq5557TjVv3lw1b95cPf/886qyslIppdS2bdtUixYt1N/+9jcVGhqqJk6cqGbOnKlGjx6t\nHn74YeXj46Pi4uJURkaGeuutt1RwcLAKDw9XmzZtMsewYMEC1b59e+Xj46NatWqlPv74Y/N5l6//\nnXfeUcHBwapZs2Zq4cKF5vPLysrUiy++qCIiIpSfn5/q27evKi8vv+n9vlp6errq37+/8vf3Vx06\ndFBff/21Ukqp6dOnK1dXV+Xi4qK8vb3VggULrtl3586dqnfv3srf3181a9ZM/eEPf1AGg6HW2ykv\nL1cTJkxQgYGByt/fX91xxx3qzJkz5lzMmzdPKaXUwoUL1V133aVeeOEF5e/vr1q3bq127NihFixY\noFq2bKmCg4PVJ598Yr7eyZMnq//5n/9R99xzj/Lx8VH9+/dXOTk55vN1Op3KyspSSilVUVGhpk2b\npsLDw1VISIh64oknzI/Z1RYuXKj69u1r3j506JAaNGiQatKkiYqJiVHLli0zn7dmzRrVpUsX5evr\nq1q2bKlmzpx5w/tdUFCg/vznPysnJyfl7u6uvL291TPPPFOnx6ygoEAppdSxY8fU3XffrXx8fNQ9\n99yjnn76afXwww8rpbTnTlhYWI3rioiIMB8nN8ubTqdT77//voqOjlatWrVSSim1evVq1blzZ+Xv\n76/uuusutX///loft1atWim9Xq88PDyUj4+PqqysNOf30KFDys3NTTk5OSlvb28VEBBQ63VYw/Ph\n8vH39ttvq6CgINWsWTO1YsUKtXbtWtWmTRvVpEkTNXv2bPP1mkwmNXv2bNW6dWsVGBioxowZo4qL\ni5VSSh0/flzpdDr1ySefqPDwcNW0aVP117/+VSml1Pr162scZ126dFFKXf+1obS0VLm7uyu9Xq+8\nvb2Vj4+PysvLUzNmzDDnXymlVq1apWJjY5W/v7+Kj49Xhw4dqvFc+Mc//qE6deqk/Pz81NixY1VF\nRUWtuRC2S4ow0SgiIyPV5s2blVJKnThxQnXo0EFNnz5dnTp1SgUGBqr169crpZT65ptvVGBgoCoq\nKlJKaS/0ERERKj09XRmNRlVVVaWmTJmiXn/9dfN1v/766+rOO+9UhYWFqrCwUN11113m87dt26ac\nnZ3Vyy+/rAwGgyovL1czZsxQ7u7uatOmTaq6ulpNmjRJRUREqLfeektVV1er//znPyoqKsp8/WvX\nrlXHjh1TSin17bffKk9PT7Vnz54a1z9jxgxVXV2t1q1bpzw9PVVJSYlSSqmnnnpKDRgwQOXl5Smj\n0ah+/PFHVVlZed37XVhYeM1jZzAYVOvWrdXs2bNVVVWV2rp1q/Lx8VFHjhxRSik1c+ZMNXHixOs+\n9rt371Y7d+5URqNRZWdnq/bt26t333231st+9NFHatiwYaq8vFyZTCa1Z88edeHCBaWUUvHx8Wr+\n/PlKKe1N19nZWSUlJSmTyaRee+011aJFC3OhsGnTJuXj46MuXbqklNLedH18fNT27dvNRfOVxdOV\nb7rPP/+8GjFihDp37py6ePGiGjZsmHrllVdqjffKIqy0tFSFhYWppKQkZTQa1d69e1XTpk1Venq6\nUkqplJQUdeDAAaWUUvv371chISFq5cqVt3S/b/Ux6927t5o2bZoyGAzqu+++Uz4+PuZc1VaEXflh\n5WZ50+l0avDgwercuXOqoqJC7dmzRwUHB6vU1FRlMpnUJ598oiIjI80fSK529QejK+9nUlJSjfzU\nxhqeD5ePvzfffNN87AYGBqrExERVWlqqDh48qDw8PFR2drZSSql3331X3XnnnSo3N1cZDAb1P//z\nP2r8+PFKqV+LsN///veqoqJC/fLLL8rNzU0dPnxYKVX7cXaj14aUlJRr8jtz5kxzEXbkyBHl5eWl\nNm/erKqrq9Xbb7+toqOjVVVVlTk/vXr1Uvn5+aq4uFi1b99effTRRzfMibA9UoSJRhEREaG8vb2V\nv7+/ioiIUE8//bQqLy9Xc+bMueaFbciQIeZPzfHx8WrGjBk1zp8yZYp67bXXzNutW7c2FzNKKbVx\n40YVGRmplNJepF1dXWu8Ec2YMUMNHjzYvP31118rb29vZTKZlFJKXbhwQel0OnX+/Pla78vIkSPV\nv/71L/P1e3h4KKPRaD4/ODjY/Obp4eFR62jEze73lb777jsVGhpa47Tx48ebR3Ku/nR9M//85z/V\n7373u1rPW7BgwXVHUK5+023Tpo35vP379yudTmceNVNKqcDAQPXLL78opbQ33ctvdkppBZOTk5M6\ndeqUUurXN12TyaS8vLzMb8BKKfXDDz/UKIqvdGURlpycrPr161fj/N///vdq1qxZte773HPPqRde\neKFO9/vyiE9trrdvTk6OcnZ2VmVlZebTEhMT61yEXe3qvOl0OrVt2zbz9hNPPFHjw4lSSsXExKhv\nv/221uu7URF29Qhjbazh+XD5+Lv62E1NTTVfvnv37mrVqlVKKaXatWtX4z7n5eUpFxcXZTQazUVY\nbm6u+fyePXuqpUuXKqXqdpxd/dpwdX6vvI433nhDjR071nyeyWRSLVq0MOcrMjJSLV682Hz+Sy+9\npJ544okb3r6wPbIwXzQKnU7HqlWrGDhwYI3Tc3JyWL58OatXrzafVl1dXeNyLVu2vOF15+XlERER\nYd4ODw8nLy/PvB0UFISrq2uNfYKDg83/e3h40LRpU/PaHw8PDwBKS0vx9fVl/fr1zJo1i6NHj2Iy\nmSgrK6NTp07m/QMDA2usx/L09KS0tJSioiIqKipo3br1NTHX5X5fef+ufgwiIiLIzc294eNyWUZG\nBi+++CK7d++mrKyM6upqevToUetlLy8kHjduHCUlJTz88MP89a9/xdn52peKkJAQ8/+XH7OgoKAa\np5WWlgJa/sPCwszneXl50aRJE/Ly8mjRooX59MLCQsrKyujevbv5NPXftYA3k5OTw86dOwkICDCf\nVl1dzaRJkwDYuXMnL7/8MgcPHsRgMFBZWcmYMWPqdL9vtC7sevvm5eUREBBgfmxAy9uVC7VvpC55\nu/J5kZOTw6effsp7771nPq2qqor8/Pw63d7tstTzITAw8Jpj9+pYLt9uTk4Ov/vd72ocr87OzhQU\nFJi3Q0NDzf9fPpav52avDTeSl5dHeHi4eVun09GyZcsax/WVsXh4eNR4XRP2QVbyCosKDw9n4sSJ\nnDt3zvx38eJFXnrpJfNlbrYwunnz5mRnZ5u3T5w4QfPmza+7/60stK6srGTUqFG89NJLnDlzhnPn\nznHfffehlLrpvk2bNsXd3Z3MzMxrzqvL/b7y/p08ebLGbebk5NR4E7uRJ598ktjYWDIzMzl//jx/\n/etfr1vUODs7M336dA4ePMgPP/zAmjVrbqltwfUopWoUH6WlpRQXF9fIE2iPmYeHB+np6ebHpaSk\npE7fhA0PD6d///7XPKbvv/8+AImJiYwcOZJTp05RUlLCE088YX4cbnS/b/Z8ud6+zZs359y5c5SV\nlZkvm5OTY74+Ly+vGucZjUYKCwvN23XJ25WxhYeH8+qrr9a4/6Wlpb+pbUlDfxmhMZ4PtQkPD2fD\nhg01HqOysjKaNWt2032vfkxu9tpws8ewRYsW5OTkmLcvPyZXFqE3un1hH6QIExb18MMPs3r1ajZt\n2oTRaKSiooKUlJQanwavLniu3h4/fjx/+ctfKCoqoqioiDfeeIOJEyde9zbrUkBdZjAYMBgMNG3a\nFL1ez/r169m0aVOd9tXr9Tz66KO8+OKL5OfnYzQa+fHHHzEYDHW635f17t0bT09P3n77baqqqkhJ\nSWHNmjWMGzeuTnGUlpbi4+ODp6cnhw8f5sMPP7zuZVNSUkhLS8NoNOLj44OLiwtOTk51up2bWbdu\nHTt27MBgMPD6669z5513XvOGo9frefzxx3n++efNBUlubm6dHvP777+fjIwMFi1aRFVVFVVVVfz8\n888cPnwY0B6HgIAAXF1dSU1NZcmSJeY3thvd75CQELKysq57u9fbNzw8nB49ejBjxgyqqqr4/vvv\nWbNmjXm/tm3bUlFRwbp166iqquIvf/kLlZWV5vNvJW8Ajz/+OB999BGpqakopbh06RJr16694UjO\n9YSEhHDq1Cmqqqpued+6aujnQ22eeOIJ/vznP3PixAlAG2n7+uuv67RvaGgo2dnZ5tePm702hISE\ncPbs2esWjA899BBr165l69atVFVV8c477+Du7s5dd91V6+Vv5XVL2A4pwoRFhYWFsWrVKt566y2C\ng4MJDw/nnXfeqfGCU9tI1pWnvfbaa/To0YNOnTrRqVMnevTowWuvvVbn/a93GQAfHx/mzp3LmDFj\naNKkCZ9//nmNfkq17Xulf/zjH8TFxXHHHXcQGBjIK6+8gslkuu79rm2EysXFhdWrV7N+/XqCgoL4\nwx/+wGeffUbbtm2ve3+ujmHJkiX4+vry+9//nnHjxl338qdPn+ahhx7Cz8+P2NhYc4+sq9XlMbz6\nvMTERGbNmkVgYCB79+5l0aJFte77t7/9jejoaHr37o2fnx/33HMPGRkZ173eK3O1adMmkpOTadGi\nBc2aNeOVV17BYDAA8MEHHzB9+nR8fX158803a4wQ3eh+P/fcc3zxxRc0adKE559//pYesyVLlrBz\n506aNGnCG2+8waRJk8zPbT8/Pz744AOmTp1KWFgY3t7eNaYXb5a3qx/v7t2785///Ic//OEPNGnS\nhDZt2vzmUcyEhAQ6dOhAaGhojan767Hk8+FWbve5555j+PDhDB48GF9fX+68805SU1PrtO9DDz0E\naNOfPXr0uOlrQ7t27Rg/fjytWrWiSZMm5Ofn13icYmJiWLRoEc888wxBQUGsXbuW1atX1zr1fzk2\nGQ2zPzrVwOW10WikR48ehIWFsXr1aoqLixk7diw5OTlERkaybNky/P39Aa2b8IIFC3BycmLu3LkM\nHjy4IUMTQjSSRx55hLCwMN58801Lh2JRs2bNIjMzs8E6zdsKeT4IoWnwkbB//etfxMbGmiv4OXPm\nmD/JJCQkMGfOHADS09NZunQp6enpbNiwgaeeeqpOi3GFENZPplI08jho5HEQQtOgRdipU6dYt24d\nU6dONR90X3/9NZMnTwZg8uTJrFy5EoBVq1Yxfvx4XFxciIyMJDo6usYwsRDCdslUikYeB408DkJo\n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\nSUVORK5CYII=\n", - "text": [ - "" - ] - } - ], - "prompt_number": 32 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Without making any modifications to the original Python code - thereby we are not accounting for the particular strengths of Numba (Numpy) and Cython (static type declarations), we see that Cython performs significantly better than Numba." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Appendix II: Cython with and without type declarations" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the sections above, we have been using the simplest approach to Cython without using static type declarations and thereby neglecting one of its major strengths. \n", - "Now, let us see how and if we can further improve the Cython implementation of our \"classic least squares approach\" by adding those type declarations." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here is our \"classic\" approach in Python:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 21 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The Cython-compiled version of it:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%load_ext cythonmagic" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 23 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%cython\n", - "def cy_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 24 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And now, the same code with static type declarations:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%cython\n", - "def static_type_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " cdef double x_avg, y_avg, var_x, cov_xy, slope, y_interc, x_i, y_i\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 25 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "Now, let us see how the two functions (with and without static type declarations) compare against each other for different sample sizes." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "import random\n", - "random.seed(12345)\n", - "\n", - "funcs = ['cy_lstsqr', 'static_type_lstsqr'] \n", - "labels = ['simple Cython', 'Cython w. type declarations']\n", - "orders_n = [10**n for n in range(1, 7)]\n", - "times_n = {f:[] for f in funcs}\n", - "\n", - "for n in orders_n:\n", - " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", - " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", - " for f in funcs:\n", - " times_n[f].append(timeit.Timer('%s(x,y)' %f, \n", - " 'from __main__ import %s, x, y' %f).timeit(1000))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 26 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%pylab inline" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.figure(figsize=(10,8))\n", - "\n", - "for f in times_n.keys():\n", - " plt.plot(orders_n, times_n[f], alpha=0.5, label=f, marker='o', lw=2)\n", - "\n", - "plt.xlabel('sample size n')\n", - "plt.ylabel('time in ms')\n", - "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", - "plt.legend(loc=2)\n", - "plt.grid()\n", - "\n", - "plt.title('Performance of a simple least square fit implementation')\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\nBf2Ep79PRkYGHo+HRYsW0dbWxne+8x2+9rWv8eabbwLQ09NDSkpK4OuTk5M/kbUmInIuHR3wzDPQ\n2goJCWbj8unT7a5KROTMzro4W79+fWBx9vTTT4/Z4uz0K2cJCQks/mgn4czMTB555BFycnLo7e0l\nISGBxMREurq6Al/f2dlJYmLiGd977dq15OXlAZCamsqiRYsCq+uTT3foWMfhfnzdddc5qp7xPj5y\nBH72s3IGB6Gs7Dq++lXYubOcgwedUd+pxyc5pR4d69iJxyfPOaWeC/l8l5eXU19fz6eZ8I3Pf/jD\nH3Ls2LHAAwGna25uJicnh87OTpKSkrj66qu56667AjNvTzzxBE888QTvvffeqO/TAwEicrrqanjl\nFfD5ID8fvvIViIuzuyoRkTHIORsLPp+PgYEBRkZG8Pl8DA4OMjIywt/+9jdqa2vx+/20t7fzve99\nj6VLl5KUlATAN77xDX7xi1/g9XppaGjgF7/4xZjOwMn4Ov2KgNgvHHpiWWYbpo0bzcLsiivM5uVO\nXpiFQ1+CjXriTOHQlwvaW/NS/PSnP+UnP/lJ4Pg///M/efjhhykoKOB//I//QUtLC8nJyXz+859n\n/fr1ga+79957OXjwIAsWLADgm9/8Jt/61rcmqmwRCTLDw/Dyy2YD88hIuPFGszgTEQkWE35bc7zo\ntqaIdHfDs89CQwPExsJtt5nbmSIiTnPJOWciIk7X1GSeyOzqgtRUcxszM9PuqkRELtx5z5zt3buX\nn/zkJ3znO98BYN++fVRXV49bYRIawmE2INiEYk9qa+HJJ83CbPp0sxVTsC3MQrEvwU49caZw6Mt5\nLc5eeOEFrr32WhoaGvh//+//AdDd3c0PfvCDcS1ORORcLAvee8/cyhwaMqGy3/iGyTITEQlW5zVz\nNnfuXJ599lkWLVrElClT6OjoYHh4mJycHNra2iaizk+lmTOR8OLzwR//CFVV5njZMrjmGm3FJCLB\n4ZJnzlpbW1l4hn1OIiMnLIlDRCSgvx+efx4OHYJJk2DlSrOBuYhIKDiv1dXixYt5+umnR5177rnn\nuELPp8unCIfZgGAT7D1pb4fHHzcLs8REuOuu0FiYBXtfQpF64kzh0JfzunL2m9/8huXLl/PEE0/Q\n19fH5z//efbv38/bb7893vWJiAQcOmSumPX3Q3Y2rFkDp2y9KyISEs4756y3t5fXXnuNw4cPM336\n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\n9cRGU6ZM4bLLLjvja+qLPdra2qisrOS73/0u0dHRTJ06lbVr1/L666+rJzY4/cqZU3tQVFREdXX1\nqFqrq6sD720rG+fdxsTq1autNWvWWL29vdaWLVuslJQUa8+ePXaXFZTuvfde68orrxw1eGlZHz9p\ns2HDBqu/v9964IEHrCVLlgRef/TRR6158+ZZDQ0N1rFjx6zCwkLrscceC7x+5ZVXWvfff7/V3///\nt3dvIVF1bRzA/6P16ngYdTLGEx7CSoJCkoJKUhEJyUqi0qnsrJIpEVQqkholIhnphdnhpiJmTC/T\nCyXF8CIzQSEys4KsqDR1sDFrGvH5Ll7aNKl8vt/X24z2/8EGF3ud9lo3j2vN2vuLctJmaGhIRESe\nPHkiGo1GOWmj1+tFr9crZfPy8iQmJkZMJpP09PSIn5+fNDY2/ssj4RjGx8dlYGBABgYG5MOHD3Ly\n5EnZsWOHDA0NcU7srLCwUNasWSODg4MyMjIi0dHRUlhYyHmxk8nJSQkICJCysjKZmJgQk8kkycnJ\nsmfPHs7JbzQxMSFfvnyRvLw8SUtLk69fv8rExITDzoHFYpGQkBCprKyUr1+/SmVlpYSGhorVav1N\nIzazOR+cjYyMSHJysri7u0tISIgYjUZ7d2lOevXqlahUKlGr1eLh4aFcBoNBRETu3bsnERERolar\nJS4uTnnlxnenT58WrVYrWq1WcnNzp9QdGxsrarVaIiIipLm52ea+wWCQ4OBgcXd3l+TkZDGZTMo9\ni8Uihw4dEo1GIzqdTi5duvQvjYDjKy4uVl6lIcI5sSer1SpZWVni7e0tfn5+cvz4cbFYLCLCebGX\n9vZ2iY6OFm9vb/H19ZWUlBQZHBwUEc7J71JUVCQqlcrmOnv2rIg47hx0dXVJVFSUqNVqiYqKku7u\n7l85JP8zfr6JiIiIyIHM6d+cEREREc03DM6IiIiIHAiDMyIiIiIHwuCMiIiIyIEwOCMiIiJyIAzO\niIiIiBwIgzMiIiIiB8LgjIj+eAcOHMCZM2d+aZ1Hjx7F+fPnf2mdRPRnWGDvDhAR2ZtKpZryPcD/\nV3V19S+tj4j+HFw5IyICwI+lEJGjYHBGRHZVVlaGoKAgaDQaREREoKWlBQDQ0dGBdevWwcfHBwEB\nAcjJyYHValXKOTk5obq6GkuXLoVGo0FhYSFevnyJdevWwdvbG6mpqUr+1tZWBAUFobS0FIsXL0ZY\nWBgMBsOMfaqvr0dkZCR8fHywYcMGPH78eMa8J06cgE6ng5eXF1atWoWenh4AtlulW7Zsgaenp3I5\nOzvj1q1bAIDe3l4kJCRg0aJFiIiIQF1d3YxtxcbGorCwENHR0dBoNNi0aROGh4dnOdJENFcwOCMi\nu3n27BmqqqrQ2dmJT58+oampCaGhoQCABQsWoLKyEsPDw3jw4AGam5tx+fJlm/JNTU3o6upCe3s7\nysrKkJ6eDqPRiNevX+Px48cwGo1K3oGBAQwPD+Pdu3e4efMmMjIy8Pz58yl96urqwuHDh3H9+nWM\njIwgMzMTW7duxbdv36bkbWxsRFtbG54/f47R0VHU1dVBq9UCsN0qvXv3LsxmM8xmM2pra+Hv74/4\n+Hh8/vwZCQkJ2Lt3Lz5+/IiamhpkZWXh6dOnM46Z0WjEjRs3MDg4iG/fvqG8vPwfjzsROTYGZ0Rk\nN87OzrBYLHjy5AmsViuCg4OxZMkSAMDq1auxdu1aODk5ISQkBBkZGbh//75N+dOnT8PDwwMrVqzA\nypUrkZiYiNDQUGg0GiQmJqKrq8sm/7lz57Bw4UJs3LgRmzdvxp07d5R73wOpa9euITMzE2vWrIFK\npcK+ffvg4uKC9vb2Kf3/66+/YDab8fTpU0xOTmL58uXw8/NT7v+8VdrX14cDBw6gtrYWgYGBqK+v\nR1hYGPbv3w8nJydERkZi+/btM66eqVQqHDx4EOHh4XB1dcWuXbvQ3d39D0aciOYCBmdEZDfh4eGo\nqKhAcXExdDod9Ho93r9/D+DvQCYpKQn+/v7w8vJCQUHBlC08nU6n/K1Wq23Srq6uGBsbU9I+Pj5Q\nq9VKOiQkRGnrR/39/bh48SJ8fHyU6+3bt9PmjYuLQ3Z2No4dOwadTofMzEyYzeZpn3V0dBTbtm1D\nSUkJ1q9fr7T18OFDm7YMBgMGBgZmHLMfgz+1Wm3zjEQ0PzA4IyK70uv1aGtrQ39/P1QqFXJzcwH8\n/SqKFStW4MWLFxgdHUVJSQkmJydnXe/Ppy9NJhPGx8eVdH9/PwICAqaUCw4ORkFBAUwmk3KNjY0h\nJSVl2nZycnLQ2dmJnp4e9PX14cKFC1PyTE5OYvfu3YiPj8eRI0ds2oqJibFpy2w2o6qqatbPSUTz\nD4MzIrKbvr4+tLS0wGKxwMXFBa6urnB2dgYAjI2NwdPTE25ubujt7Z3Vqyl+3Eac7vRlUVERrFYr\n2tra0NDQgJ07dyp5v+dPT0/HlStX0NHRARHB58+f0dDQMO0KVWdnJx4+fAir1Qo3Nzeb/v/YfkFB\nAcbHx1FRUWFTPikpCX19fbh9+zasViusVisePXqE3t7eWT0jEc1PDM6IyG4sFgvy8/OxePFi+Pv7\nY2hoCKWlpQCA8vJyGAwGaDQaZGRkIDU11WY1bLr3kv18/8e0n5+fcvIzLS0NV69exbJly6bkjYqK\nwvXr15GdnQ2tVoulS5cqJyt/9unTJ2RkZECr1SI0NBS+vr44derUlDpramqU7cvvJzaNRiM8PDzQ\n1NSEmpoaBAYGwt/fH/n5+dMePpjNMxLR/KAS/htGRPNca2sr0tLS8ObNG3t3hYjov+LKGREREZED\nYXBGRH8Ebv8R0VzBbU0iIiIiB8KVMyIiIiIHwuCMiIiIyIEwOCMiIiJyIAzOiIiIiBwIgzMiIiIi\nB/IfaLkgtnNsZy4AAAAASUVORK5CYII=\n", - "text": [ - "" - ] - } - ], - "prompt_number": 27 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "The improvement is pretty significant when static type declarations are used. \n", - "One more experiment to see by how much we could improve our \"classic least squares\" code via Cython compared to the initial Python implementation:\n", - "
\n", - "
" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import random\n", - "random.seed(12345)\n", - "\n", - "x = [x_i*random.randrange(8,12)/10 for x_i in range(500)]\n", - "y = [y_i*random.randrange(8,12)/10 for y_i in range(100,600)]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 30 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "funcs = ['classic_lstsqr', 'cy_lstsqr', 'static_type_lstsqr', \n", - " 'lin_lstsqr_mat', 'numpy_lstsqr', 'scipy_lstsqr']\n", - "labels = ['classic approach','classic approach (cython)', \n", - " 'classic approach (cython + type decl.)',\n", - " 'matrix approach', 'numpy function', 'scipy function']\n", - "\n", - "times = [timeit.Timer('%s(x,y)' %f, \n", - " 'from __main__ import %s, x, y' %f).timeit(1000)\n", - " for f in funcs]\n", - "\n", - "times_rel = [times[0]/times[i+1] for i in range(len(times[1:]))]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 31 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%pylab inline" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import matplotlib.pyplot as plt\n", - "\n", - "x_pos = np.arange(len(funcs[1:]))\n", - "plt.bar(x_pos, times_rel, align='center', alpha=0.5, color=\"green\")\n", - "plt.xticks(x_pos, labels[1:], rotation=90)\n", - "plt.ylabel('rel. performance gain')\n", - "plt.title('Performance gain compared to the classic least square'\\\n", - " '(n={})'.format(len(x)))\n", - "plt.grid()\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAdUAAAHnCAYAAADuC8dRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdUFPcWB/DvIEhHepGuIGAJaNBn1NhiLyHYY8WWRJNn\nNM0WItanSSwxaiwxYkQxsUejGGM3MZYoJCoqlgUsoKCiokjxvj88zDICiro4uz/u5xzOYX87O3vv\nlrk7c6dIRERgjDHG2AszUjsAxhhjTBRcVBljjDEd4aLKGGOM6QgXVcYYY0xHuKgyxhhjOsJFlTHG\nGNMRVYtqfn4+Bg0aBEdHRxgZGWHfvn1qhiOsPXv2wMjICFeuXFE7FKFERESgdevWqsYQFRUFf39/\nVZ7bx8cHU6dOfWnP17x5c7zzzjvP/XiNRgMjIyP8+eefOoyKPY6I8Oqrr2LNmjVqh6IzMTExaNiw\nYZmmfWpRjYiIgJGREYyMjGBiYgIfHx8MGzYMN27ceOFA161bh9jYWGzZsgVpaWl47bXXXnierLjG\njRsjLS0Nbm5uaociHEmSSr3v0qVLOvuxqMt56YokSU/MX9c2btyIWbNmvbTn0xU/Pz9MnDhR7TBe\nmlWrVuHBgwfo3r17uT5P0dpU+FepUiU8fPhQMd3WrVsREhICMzMz+Pr6Yvbs2cXmdejQITRq1Ajm\n5uaoWrUqxo0bp5hP7969cfPmTaxbt+6pcZVpTbVp06ZIS0tDcnIy5s6di/Xr16N///5leWiJcnNz\nAQBJSUlwd3dHw4YN4ezsDBMTkxeaHyuZiYkJnJ2dX+oC0FDk5+e/0OPLcu4UXZ5fpSKfq8XW1hZW\nVlZqh/HMRPjePcsyds6cORg8eHA5RvOIJElybSr8u3r1KoyMtGXt6NGjCAsLQ8eOHZGQkICoqCiM\nGzcOixYtkqdJTU1F69atERQUhGPHjuG7777DokWLMH78eHkaIyMjDBgwAHPnzn16YPQUAwYMoFat\nWinGpk6dSpUqVaKcnBwiIoqNjaXg4GAyMzMjHx8f+uijjyg7O1uevlmzZjR48GD6/PPPyc3NjVxd\nXal58+YkSZL85+vrS0REubm5NHr0aHJ3d6fKlStTzZo1adWqVYrnlySJ5s6dS2+//TZVqVKFevbs\nScuWLSNjY2PavXs31a5dm8zNzalFixZ09epV2rVrFwUHB5OlpSW1atWKLl++LM/rwoULFB4eTlWr\nViULCwuqU6cOrVixQvF8zZo1oyFDhtCkSZPI1dWV7O3tqX///nT37l3FdKtXr6Z69eqRmZkZOTg4\nUPv27enmzZvy/XPnzqWAgAAyMzMjf39/mjp1KuXn5z/x9f/999+pdu3aZGZmRiEhIbRv3z6SJIli\nYmLkacaNG0dBQUFkYWFBnp6e9N5771FWVpZ8/+7du0mSJDnvwts7duyg119/nSwsLKhmzZq0bdu2\nJ8ZCRLRjxw5q0qQJWVhYUJUqVahZs2Z0/vx5+f6vvvqKfH19qXLlylS9enWaM2eO4vHe3t4UGRlJ\n7733HlWpUoVcXFxowYIFdP/+fRo+fDjZ2dmRu7s7zZs3T/E4SZLom2++oS5dupClpSW5u7vTN998\no5hmzpw5FBISQlZWVuTq6kq9evWiq1evFnsdfv31V2rcuDGZmZnRwoULy/TeZGZmUo8ePcjS0pJc\nXFzo888/p/79+xf7bjwec0mfcSKi6OhoCgoKosqVK5OHhwd9/vnnT/wslDavCRMmkJ+fH23atIkC\nAgLI0tKSmjdvTklJSYrHHz16lFq3bk1WVlbk5OREXbp0oeTk5FKfj4goLy+PoqKiqFq1amRqakru\n7u703//+V77fx8eHpk6dKt9euXIlNWjQgKpUqUKOjo7UsWNHOnv2rGKeU6dOlefn5OREbdu2pfv3\n7xMRUWpqKnXp0oUcHR3JzMyMqlWrRl999ZX82MLvYVHz5s2joKAgMjU1JWdnZ+ratWup+Vy8eJEk\nSaI//vhDHktLS6MBAwaQk5MTWVtbU+PGjWnfvn2Kxw0ZMoSqV69O5ubmVK1aNRo3bhw9ePBAvv9J\ncTdr1qzYe1fa637ixAlq06YN2drakqWlJQUFBSmWRRqNhtq2bUvm5ubk6elJc+fOLfaaeHt705Qp\nUxTzHTx4MDVv3ly+/dtvv1GzZs3I3t5e/g4fPnxY8ZjHl7G9evWSH9uoUSMyNzcnd3d3GjhwIGVm\nZsqPO3PmDEmSRBcvXiw2vwULFlDfvn3J2tqaPDw86H//+1+Jr0NZlVSbHvf2229T48aNFWOffvop\n+fj4yLfHjh1Lnp6eimnmz59PlpaWdO/ePXns5MmTJEkSpaSkPPE5y1RUW7durRibOXMmSZJEd+/e\npWXLlpGdnR3FxMTQxYsXad++ffTKK69Qv3795OmbNWtG1tbWNGzYMEpMTKQTJ07QjRs36JNPPiFf\nX19KT0+njIwMIiL65JNPyMHBgdauXUtJSUk0bdo0MjIyop07d8rzkySJHBwcaP78+XThwgVKSkqi\nZcuWkZGREbVo0YIOHz5Mx44dI39/f2rSpAk1bdqUDh06RPHx8RQYGEg9e/aU5/Xvv//S/Pnz6Z9/\n/qELFy7Qt99+KxfnovHb2trSRx99RGfOnKHffvuN7O3tKTIyUp7mhx9+IBMTE5oyZYqc47x58+S8\nJkyYQN7e3rRx40bSaDS0detW8vLyUszjcZcuXSJzc3MaOnQoJSYm0s6dO6levXokSRKtXLlSnm7K\nlCl04MABSk5Opp07d1JgYCANGDBAvr+0ohocHEzbt2+nc+fO0cCBA8nGxkbxI+BxO3bsoEqVKtGo\nUaPon3/+oTNnzlB0dDSdOXOGiB4t4MzNzWnJkiV07tw5WrhwIZmZmdHSpUvleXh7e5OtrS3Nnj2b\nzp8/T1OmTCEjIyNq27atPPa///2PjIyM6NSpU4r33N7enubNm0dJSUn0zTffkLGxMW3atEme5ptv\nvqGdO3eSRqOhgwcPUqNGjahZs2bFXofAwEDasmULaTQaunTpUpnem7feeov8/f1p9+7ddPLkSerb\nty/Z2NgU+24Udfz4cZIkiTZs2KD4jG/ZsoUqVapE06dPp6SkJPrpp5/Izs7uiZ+F0uY1YcIEsrS0\npPbt29OxY8coISGBXn31VXr99dflx548eZKsrKwoKiqKzpw5QydOnKDu3btTjRo15B/GJenfvz85\nOztTTEwMXbhwgY4cOaL4IfN4UV22bBlt2bKFLly4QPHx8fTmm2+Sv78/5ebmEhHRunXryMbGhrZs\n2UKpqakUHx9P33zzjVxUO3fuTK1bt6aEhARKTk6m3bt3U2xsrDz/5s2b09ChQ+XbX3zxBVlZWdH8\n+fMpKSmJ4uPjn7igfryo3rt3j4KCgqhbt270999/0/nz52nq1KlkampKiYmJRET08OFDGj9+PB0+\nfJiSk5Ppl19+ITc3N5owYYI83yfFfePGDfL19aVPP/2U0tPTKT09nQoKCkqMr06dOtSnTx9KTEyk\nixcv0rZt22jLli1yHHXr1qUGDRrQ4cOHKT4+nlq3bk02NjaK1+Tx94ToUVFt0aKFfHvDhg20Zs0a\nOnv2LJ06dYqGDBlC9vb2iuL4+DL23LlztHPnTrKwsKB58+bRuXPn6MiRI9SiRQvFd2zRokXk5ORU\nLDdJksjFxYW+//57unDhAs2fP58kSVIs1999912ysrJ64l/RFayIiAiysbEhV1dX8vX1pa5du9LJ\nkycVz+vl5UWTJ09WjP3++++K5WHTpk1p8ODBimnOnTtX7AfYw4cPydbWlqKjo4vlV9Qzr6mePHmS\nqlWrRq+99hoRPVpILlq0SPGYvXv3kiRJdOvWLSJ6VJQCAgKKzbvwV3ah7OxsMjU1pe+++04xXXh4\nOLVs2VK+LUlSsV+sy5YtI0mSKCEhQR776quvSJIkOnbsmDw2e/ZscnR0fGLOYWFhig9qs2bNKCQk\nRDHNsGHD5NeAiMjT01PxK76o7OxssrCwoO3btyvGly9fTra2tqXGMW7cOPL19aWHDx/KY3FxccWK\n6uPWr19Ppqam8u3SiuqGDRvkadLT00mSJPrtt99KnW+TJk2oc+fOpd7v4eFBo0ePVoyNGjWKqlWr\nJt/29vam8PBw+fbDhw/JxsaG3nzzTcWYnZ2dYm1VkiTq37+/Yt69e/dWFI/HHTt2jCRJoitXrhCR\nNu+ia/lleW+SkpJIkiT6/fff5ftzc3PJ3d39iUU1NTWVJEmivXv3KsabNGmi+GFH9OgHgbm5OeXl\n5T3TvCZMmEDGxsZykSUi+umnn8jIyEhemxowYIC8plEoJyeHLCwsaOPGjSU+X2HO69atKzW/khbg\nRWVmZpIkSfTnn38SEdGsWbOoRo0apeYYHBxMUVFRpc6vaFG9e/cumZmZ0cyZM0ud/nGPF9Vly5aR\nh4dHsS0ELVu2pJEjR5Y6n1mzZpG/v3+Z4/bz86OJEyc+Nb4qVaqUusDesWMHSZKk2AJx/fp1+Ud3\nodKKatE11ccVFBSQnZ2dYplS0jK2WbNmNHbsWMVYcnKyYrn78ccfU2hoaLHnkCSJPvzwQ8VYUFCQ\nYn7Xrl2j8+fPP/Hvzp078vSxsbG0ceNGOnHiBP3+++/Url07srCwoBMnTsjTVK5cmZYsWaJ43hMn\nTpAkSXT06FEiIqpRowaNHz9eMc3du3dJkiRau3atYvyVV14pNu3jytRT3bNnD6ytrWFhYYE6derA\nz88PK1euxPXr15GSkoJRo0bB2tpa/uvQoQMkScK5c+fkebz66qtPfZ5z584hNzcXTZs2VYw3bdoU\nJ0+eVIw1aNCg2OMlSUKdOnXk2y4uLgCAV155RTGWmZkp96bu3buHMWPGoHbt2nBwcIC1tTW2bt2K\nlJQUxXyDg4MVz+Xm5ob09HQAwLVr13Dp0iW0adOmxLxOnjyJ+/fvo0uXLorX6b333sPt27eRmZlZ\n4uNOnTqF+vXrK3oyJe2Btn79ejRt2hTu7u6wtrZG3759kZeXh7S0tBLnWygkJET+39nZGZUqVZJz\nKsmxY8dKzfH27du4fPlyie+dRqNBTk4OgOKvpSRJcHJyUrxHkiTB2dkZ169fV8zr8R3ZGjVqpPhc\n7NmzB23btoWXlxdsbGzw+uuvAwCSk5MVjyv62SnLe3Pq1Cn5+QqZmJigfv36pbxST3bq1KkSX6ec\nnBycP3/+medXtWpVODg4yLfd3NxARLh27RoA4MiRI9iwYYMiP0dHRzx48EDxHS3q2LFjAFDq+12S\n+Ph4hIeHo1q1arCxsYG3tzcA7evfs2dP5OXlwdvbGwMHDkRMTAzu3r0rP37kyJGYNm0aGjZsiDFj\nxmD//v2lPtfJkyfx4MGDZ4rvcUeOHEFaWhpsbW0Vr83+/fsVr8uSJUvwn//8B66urrC2tsa4ceMU\ny4dniftJPvnkEwwZMgQtWrTAxIkTcfz4cfm+U6dOwdHREX5+fvKYo6MjAgICnvl5Ll68iH79+sHf\n3x9VqlRBlSpVkJWVpcgJKL6MPXLkCGbPnq14rWrVqgVJkpCUlAQAyMrKKrXvXXR5Azz63BZ+RgHA\nyckJ1apVe+Jf0Xn36tULYWFhqFWrFt544w388ssv8PDwKFvf8znZ2Njg1q1bT5zGuCwzatiwIZYv\nXw5jY2NUrVoVxsaPHla4AJ47dy5atGhR7HHu7u4AHi0kLS0tnyn4pylpfkZGRooCVPh/pUqVio0R\nESRJwqeffopffvkFs2fPRkBAACwsLPDxxx8jKytLMe/KlSsrbkuSVGwvs9IUTrd27VrUqFGj2P12\ndnYlPq4sOzgcOnQIPXr0wLhx4zBz5kzY2dnh4MGDGDBgwFN3Lng8p6KxlqfHd0iTJKnEsWeJJSUl\nBR06dMCAAQMQFRUFR0dHpKamolWrVsVeh6Kfned9bwD92WmopM8moM2NiNC/f3+MGTOm2GPt7e11\nEsO9e/fQpk0bNG3aFNHR0XBxcQERoVatWvLrX7VqVZw+fRq7d+/Grl27MHnyZIwePRqHDh2Ch4cH\nIiIi0K5dO8TFxWH37t1o3749wsPDsWLFCp3E+LiHDx8iKCgIGzduLHafhYUFAGDNmjX44IMPMGPG\nDDRr1gw2Njb4+eefFTux6Cruzz//HH369EFcXBx27dqFadOm4bPPPsPkyZNLfczjn0EjI6NiY3l5\neYrbnTp1grOzMxYsWABPT0+YmJigSZMmT/yeFD7XmDFj0K9fv2JxFK7A2Nra4s6dOyXG+rRl6Hvv\nvYeVK1eW+NhCixcvxttvv13ifSYmJqhbty40Go085ubmhqtXryqmK6xbhUdDlGWaQllZWbC1tX1i\njGVaUzUzM0O1atXg5eUlF1Tg0Qvp6emJ06dPl/irwtTUtCyzl/n5+cHU1BR79+5VjO/du1exBqpL\n+/fvR9++fdGtWzfUqVMHvr6+OHPmzDPtsefs7AwPDw9s3769xPtr1aoFMzMznD9/vsTXqejeakXV\nrFkTR44cUXzw/vrrL8U0Bw4cgKOjIyZNmoT69evDz88PqampZY79Wbz66qul5mhjYwMPD48S37tq\n1arBzMzshZ//4MGDitt//vknatWqBeDRr+icnBzMmTMHr732Gvz9/Z+6pg6U7b2pWbMmAOCPP/6Q\nH5ebm4sjR448cd6FC5GCgoJiz1nS62RhYYHq1as/07zKIjQ0FAkJCSXmV9oCol69egBQ6vv9uMTE\nRGRkZGDq1Klo2rQpAgICcOPGjWIL+MqVK6Nt27aYMWMG/v33X9y7dw+bNm2S73d1dUVERASWL1+O\n77//HitXrlSszRaqWbMmzMzMyhxfSerXr48LFy7A2tq62Ovi6uoKANi3bx/q1q2LkSNHom7duqhe\nvTouXrxYbPnwpLgrV65c5vfN19cXw4YNw5o1azBx4kR89913cr4ZGRmKNeiMjAycOXNG8XhnZ2dc\nvnxZMXb8+HE53szMTCQmJmLMmDFo3bo1AgMDYWpqqlhjLE1oaChOnDhR4ueosAD7+/sX2zJUVpMn\nT0ZCQsIT/zp37lzq4wsKCvDPP//Ay8tLHmvcuHGxz0hcXBx8fHxQtWpVeZodO3YoPqtxcXGwtLRE\n3bp15TEiQmpqaok/vosq05rqk0ydOhWDBw+GnZ0d3nzzTZiYmCAxMRFxcXFYuHChHExZftVbWFhg\nxIgRiIyMlDcJrl27Fr/88gt+//33Fw21RAEBAdi4cSO6dOkCS0tLzJo1C1evXpW/VGWNf8KECRg2\nbBhcXFzQtWtXPHz4ELt378bbb78NBwcHjBs3DuPGjYMkSXjjjTeQn5+Pf//9F/Hx8Zg+fXqJ8xw+\nfDhmz56NYcOGYeTIkUhLS5N/IRd+SQIDA3H9+nX88MMPaN68OQ4cOCB/EXUtMjIS7du3x6hRozBw\n4ECYmpri4MGDaNSoEWrUqIGxY8fi448/hr+/P5o1a4Zdu3Zh4cKFWLBggTyPkl7Hso79+uuvmD9/\nPtq0aYO4uDj8/PPPWLt2LYBHX2ZJkvD111+jd+/eSEhIeOIv/EJWVlZPfW/8/Pzw5ptv4v3338ei\nRYvg7OyM6dOnl7iwL8rR0RFWVlbYvn07goKCYGpqCjs7O4wdOxadO3fGjBkzEB4ejvj4eEycOBEf\nf/yx4kdrWeZVFuPGjUODBg3Qt29ffPjhh3B0dIRGo8GmTZvw4YcfwtfXt9hj/Pz80KdPHwwfPhw5\nOTlo2LAhbty4gYMHD2LEiBEAlO+Rt7c3TE1NMXfuXHz00UfQaDQYM2aMovgsXboURIT69evD1tYW\nO3fuxJ07d+QfLR988AE6duyIGjVqICcnB+vXr4eXl5e8ya/o99DKygoff/wxoqKiYG5ujlatWuH+\n/fvYtm1biWvkJenTpw9mz56Njh07YurUqfD390d6ejp27dqFmjVrIiwsDIGBgfjhhx/wyy+/oFat\nWtiyZQs2bNigyP1pcfv6+uLAgQNITU2Fubk5HBwcihXl7OxsfPbZZ+jWrRt8fHxw69YtxMXFyT8a\nW7VqheDgYPTt2xfffvstTExMMHr06GJrf61atcKCBQsQHh4OLy8vLFy4ECkpKXJ7wM7ODk5OTli8\neDGqVauGjIwMfPbZZzA3N3/q6zVp0iS0adMGH3/8Mfr16wdra2skJSVh7dq1mDdvHszMzNCsWTNk\nZmZCo9HAx8fnifN7fLnq5OQEJyenp8ZR+HpFRkaiW7du8mbkr776ChqNBqtWrZKnGzVqFBo1aoTP\nP/8cffv2xaFDhzBv3jzMmTNHnmbYsGGYN28ehg4dilGjRuH8+fP44osv8N///lfxuiQmJiIrKwvN\nmzd/cnBP7LjSoz2snrQzBhHRxo0b6bXXXiMLCwuysbGhkJAQxR5Xj++1VygqKkrR8Cd6tBv/mDFj\n5ENqatWqpdgDkIhK3FFn2bJlZGJiohhbsWIFGRkZKcZiY2PJyMhI3gMvNTWV2rZtS5aWluTm5kZR\nUVHF9pYrKf4pU6YoDpEgenRIQXBwMJmampKDgwN16tRJ3lmLiOj777+nkJAQMjMzIzs7O2rYsKF8\nSEdpCg+pMTU1peDgYNq2bRtJkkTr16+Xp4mMjCQXFxeytLSkjh07yjkW7rq/e/duMjIyUuyoVPR2\nIWNjY1q+fPkT49m+fTu99tprZG5uTlWqVKGWLVsqdp8vPKTGxMSEqlevXuywl5J2pChpR47AwEDF\n3rCFh9S89dZbZGFhQVWrVqXZs2crHjN//nzy9PQkc3Nzev311ykuLo6MjIzknXtKy5vo6e9N0UNq\nnJycaNy4cSXuGf+4H3/8kXx9fcnY2FjxeVm+fLl8SI27uzt9/vnnpe4V+qR5lfQd2r9/v+L9J3q0\nl3tYWBjZ2dmRubk5+fn50bvvvks3btwo9fny8vIoMjKSfHx85EN/Ro0aJd//+Hu5du1a8vf3JzMz\nM6pXrx7t3btX8Zlav349NWrUiOzs7OTD13744Qf58e+//z7VqFGDzM3N5e9P0T3AS/oefvPNNxQQ\nEECVK1cmFxcX6tGjR6n5XLx4kYyMjBR7dGZmZtKwYcPk5Y27uzt16dKF4uPj5dfg3XffJXt7e7Kx\nsaE+ffrQvHnzFMuVp8V99OhRqlevHpmbmxd7Xwrl5ORQ7969ydfXl8zMzMjZ2Zl69epFly5dkqfR\naDTUpk0bMjMzkw+pefw1uXPnDvXr14/s7OzI2dmZJk6cSEOGDFEsz/bu3SsfAhkYGEjr1q0r9h0s\nbWfI/fv3U6tWrcja2lo+7GfUqFGKnb3q169fbAeykubXqlUrGjhwYAnv1NPdv3+f2rVrR66urvL7\nFhYWRsePHy827a+//iovl318fIotN4iI/vrrL2rUqBGZmZmRq6srjRs3TrGDKNGjZf6Tdows9NSi\nakj69OlDrq6uZG1tTb6+vorjtX7//XcKCAggCwsLatGixVOP0dNXhXtWF93DrSJ42h7PjFVEpa2w\nqGnlypVUs2ZNtcPQqYKCAvL396c1a9Y8dVqhTqg/duxYXLx4Ebdv38a2bdvw7bffYvv27cjIyECX\nLl0wdepU3Lx5E6GhoejZs6fa4ZbJd999hz///BMajQZbt27F0KFD0bBhQ3mzEGOs4qIyttZept69\ne8Pc3Fyoc/+uWrUKDg4O6Nat21OnfeGeqj55vNCYmJjAyckJ69evR506ddC1a1cAkPcOPXv27FOb\nzmpLSUnB9OnTkZ6eDldXV7Rp0wYzZsxQOyzGmB542edfLqujR4+qHYJO9e3bF3379i3TtBLp28+c\nFzR8+HAsX74cDx48wLx58/Dee+/hww8/RH5+PubPny9P98orryAqKgpdunRRMVrGGGMiEWpNFQAW\nLFiA+fPnY+/evejWrRvq1auH7OzsYnuV2djYFNt708/P77kOvmeMsYosODgY8fHxaoehF4TqqRaS\nJAnNmzdH9+7dERsbCysrK9y+fVsxTVZWFqytrRVj58+fl3sUIv5NmDBB9Rg4P86vouVWEfJLSEh4\nmYt4vSZkUS2Ul5cHS0tL1KpVS/GmZ2dn4/z58xVuZ5+iZxoREednuETODRA/P6YlTFG9fv06Vq9e\njezsbBQUFGD79u1Ys2YNwsLCEB4ejhMnTmD9+vXIycnBxIkTERISovc7KTHGGDMswhRVSZKwcOFC\neHh4wMHBAZGRkVixYgXq168PR0dHrFu3DuPHj4e9vT2OHj2K1atXqx3ySxcREaF2COWK8zNcIucG\niJ8f0xJu798XIUkS+OVgjLFnw8tOLWHWVNnT7dmzR+0QyhXnZ7hEzg0QPz+mxUWVMcYY0xHe/FsE\nb8JgjLFnx8tOLV5TZYwxxnREuDMqsdLt2bPn6dcCLGdjosYg7dbTLx7+PNIupcHVw/XpEz4jV1tX\nTI8q+Zq3L5M+vH/lReTcAPHzY1pcVNlLlXYrDT5v+ZTPzOMBnxDdz1uzUaPzeTLGxMSbfysQ0X8p\nl0dB1Sciv38i5waInx/T4qLKGGOM6QgX1QpE9GPlNPEatUMoVyK/fyLnBoifH9PiosoYY4zpCBfV\nCkT0vg73VA2XyLkB4ufHtLioMsYYYzrCRbUCEb2vwz1VwyVyboD4+TEtLqqMMcaYjnBRrUBE7+tw\nT9VwiZwbIH5+TIuLKmOMMaYjXFQrENH7OtxTNVwi5waInx/T4qLKGGOM6QgX1QpE9L4O91QNl8i5\nAeLnx7S4qDLGGGM6wkW1AhG9r8M9VcMlcm6A+PkxLS6qjDHGmI5wUa1ARO/rcE/VcImcGyB+fkyL\niypjjDGmI1xUKxDR+zrcUzVcIucGiJ8f0+KiyhhjjOkIF9UKRPS+DvdUDZfIuQHi58e0hCmqubm5\nGDx4MHx8fGBjY4O6desiLi4OAKDRaGBkZARra2v5b+rUqSpHzBhjTDTCFNX8/Hx4eXlh3759uH37\nNqZMmYIePXogJSVFnub27du4c+cO7ty5g/Hjx6sYrTpE7+twT9VwiZwbIH5+TEuYomphYYEJEybA\ny8sLANCxY0f4+vri77//lqd5+PChWuExxhirAIQpqo9LT0/H2bNnUatWLXnM29sbnp6eGDRoEDIz\nM1WMTh13NaWwAAAgAElEQVSi93W4p2q4RM4NED8/pmWsdgDlIS8vD3369EFERARq1KiB7OxsHD16\nFCEhIcjIyMD777+PPn36yD3XoiIiIuDj4wMAsLW1RUhIiPyFKNyEw7ef/3bapTT4wAeAdnNtYTHU\n19uF9OH149t8Wx9u79mzB9HR0QAgLy/ZIxIRkdpB6NLDhw/Ru3dv3L17F5s2bUKlSpWKTZOeng43\nNzfcuXMHlpaW8rgkSRDs5VDYs2eP/AVRS8TICPi85VMu89bEa8plbVWzUYPoOdE6n++z0of3r7yI\nnBsgfn6iLzufhVBrqkSEwYMH4/r169i6dWuJBbUo7rEyxhjTJaGK6rBhw3D69Gn8/vvvMDU1lccP\nHz6MKlWqwN/fHzdv3sSIESPQokULWFtbqxjtyyfyL2WAe6qGTOTcAPHzY1rC7KiUnJyMxYsXIyEh\nAa6urvLxqKtWrcKFCxfQvn172NjYoE6dOjA3N0dsbKzaITPGGBOMMGuq3t7eT9yc26tXr5cYjX4S\nva9TXj1VfSHy+ydyboD4+TEtYdZUGWOMMbVxUa1ARP+lLPJaKiD2+ydyboD4+TEtLqqMMcaYjnBR\nrUAKD94WFZ/713CJnBsgfn5Mi4sqY4wxpiN6t/fvtWvXcPfuXcVYtWrVVIpGLKL3dbinarhEzg0Q\nPz+mpTdFNS4uDoMHD8bVq1cV45IkoaCgQKWoGGOMsbLTm82/w4cPR2RkJO7evYuHDx/Kf1xQdUf0\nvg73VA2XyLkB4ufHtPRmTfXWrVt49913IUmS2qEwxhhjz0Vv1lQHDx6MH374Qe0whCZ6X4d7qoZL\n5NwA8fNjWnqzpnrw4EF88803mD59OlxdXeVxSZKwb98+FSNjjDHGykZviuqQIUMwZMiQYuO8OVh3\nRD//KJ/713CJnBsgfn5MS2+KakREhNohMMYYYy9E1aK6YsUK9OvXDwCwdOnSUtdKBw0a9DLDEpbo\nv5RFXksFxH7/RM4NED8/pqVqUY2NjZWL6ooVK7ioMsYYM2iqFtWtW7fK//NxXOVP9L4O91QNl8i5\nAeLnx7T0pqdaFBGBiOTbRkZ6c+QPY4wxViq9qVaXL19GeHg47O3tYWxsLP+ZmJioHZowRP+lLPJa\nKiD2+ydyboD4+TEtvSmq7733HkxMTLBr1y5YWVnh2LFjCAsLw3fffad2aIwxxliZ6E1R/eOPP/DD\nDz8gJCQEABASEoKlS5di1qxZKkcmDtH71nzuX8Mlcm6A+PkxLb0pqoWbewHAzs4O165dg6WlJS5f\nvqxyZIwxxljZ6E1RbdCgAbZt2wYAaNu2LXr27Inw8HCEhoaqHJk4RO/rcE/VcImcGyB+fkxLb/b+\nXbFihbzH7+zZszFz5kzcvXsXI0eOVDkyxhhjrGz0Zk3Vzs4O9vb2AAALCwtERkZixowZcHNzUzky\ncYje1+GequESOTdA/PyYlt6sqUZGRspnVCIi+f/KlSvD09MT7dq1g4uLi5ohMsYYY08kUdGzLKio\nZ8+e2LhxIxo0aABPT0+kpKTgyJEj6NSpEy5duoQTJ05g7dq1aN++fbnFIEkS9OTlEFbEyAj4vOWj\ndhjPRLNRg+g50WqHwZje4mWnlt5s/iUirF69Gvv378eqVatw4MAB/Pzzz6hUqRIOHTqEBQsWYOzY\nsWqHyRhjjJVKb4pqXFwc3nzzTcVYx44d5T2C+/Tpg/Pnz5f6+NzcXAwePBg+Pj6wsbFB3bp1ERcX\nJ9+/c+dOBAYGwtLSEi1btkRKSkr5JKLHRO/rcE/VcImcGyB+fkxLb4pq9erVsWDBAsXYwoUL4efn\nBwDIyMiApaVlqY/Pz8+Hl5cX9u3bh9u3b2PKlCno0aMHUlJSkJGRgS5dumDq1Km4efMmQkND0bNn\nz3LNhzHGWMWjNz3VY8eOITw8HAUFBXB3d8fly5dRqVIlrF+/Hq+++ir27duHM2fOYOjQoWWeZ3Bw\nMCZMmICMjAz8+OOPOHDgAADg3r17cHR0RHx8PGrUqCFPz32B8sc9VcbEw8tOLb3Z+7devXpISkrC\nX3/9hStXrsDNzQ2NGjWST6jftGlTNG3atMzzS09Px9mzZ1G7dm3Mnz8fwcHB8n0WFhbw8/PDiRMn\nFEWVMcYYexF6s/kXeHT4TNOmTdGrVy80a9bsua9Qk5eXhz59+iAiIgI1atRAdnY2bGxsFNPY2Njg\n7t27ugjbYIje1+GequESOTdA/PyYlt6sqerKw4cP0a9fP5iZmWHevHkAACsrK9y+fVsxXVZWFqyt\nrYs9PiIiAj4+PgAAW1tbhISEyKcYK/xiGOrt+Ph41eNJu5QGH/gA0BbBwtMLvujttHNpOp3f40Wa\n3z++zbcf3d6zZw+io6MBQF5eskf0pqeqC0SEQYMGISUlBVu3boWpqSkAYMmSJVi+fLncU83OzoaT\nkxP3VFXAPVXGxMPLTi292vz7ooYNG4bTp0/jl19+kQsqAISHh+PEiRNYv349cnJyMHHiRISEhHA/\nlTHGmE7pVVEt3Ev3yy+/BABcvnwZqampZXpscnIyFi9ejISEBLi6usLa2hrW1taIjY2Fo6Mj1q1b\nh/Hjx8Pe3h5Hjx7F6tWryzMVvVS4+UZU3FM1XCLnBoifH9PSm57q3r170bVrV4SGhuKPP/7AZ599\nhqSkJMycORObN29+6uO9vb3x8OHDUu9/4403kJiYqMuQGWOMMQW96amGhITg66+/RqtWrWBnZ4eb\nN28iJycHXl5euHbt2kuJgfsC5Y97qoyJh5edWnqz+Tc5ORmtWrVSjJmYmKCgoECliBhjjLFnozdF\nNSgoSHGuXuDR+Xrr1KmjUkTiEb2vwz1VwyVyboD4+TEtvempzpo1C506dUKHDh2Qk5ODd955B5s3\nb8amTZvUDo0xxhgrE73pqQKP9vaNiYlBcnIyvLy80LdvX3h4eLy05+e+QPnjnipj4uFlp5berKnm\n5OTAyckJo0ePlsdyc3ORk5MDMzMzFSNjjDHGykZveqqtW7fGsWPHFGN///032rVrp1JE4hG9r8M9\nVcMlcm6A+PkxLb0pqv/++y8aNGigGGvQoIF8vlPGGGNM3+lNUbW1tUV6erpi7Nq1a7CyslIpIvEU\nnhhbVIUnwheVyO+fyLkB4ufHtPSmqHbt2hV9+vTBv//+i3v37uGff/5Bv3790L17d7VDY4wxxspE\nb4rqlClTEBQUhP/85z+wsrJCw4YNERgYiP/9739qhyYM0fs63FM1XCLnBoifH9PSm71/zc3NMX/+\nfHz77bfIyMiAo6MjjIz0puYzxhhjT6U3RRV4dOHwM2fO4O7du4rxli1bqhSRWETv63BP1XCJnBsg\nfn5MS2+KanR0NN5//31YWVnBwsJCcd/FixdViooxxhgrO73Zvjpu3DisXbsW6enpuHjxouKP6Ybo\nfR3uqRoukXMDxM+PaelNUS0oKECbNm3UDoMxxhh7bnpTVEePHo3Jkyc/8ULj7MWI3tfhnqrhEjk3\nQPz8mJbe9FRnzZqF9PR0fPnll3BwcJDHJUlCSkqKipExxhhjZaM3RTUmJkbtEIS3Z88eoX8xa+I1\nQq+tivz+iZwbIH5+TEtviip/4BhjjBk6vSmqAHD8+HHs378fmZmZimvzTZo0ScWoxCH6DxeR11IB\nsd8/kXMDxM+PaenNjkqLFy9GkyZNsHv3bkyfPh3//vsvZs6ciXPnzqkdGmOMMVYmelNUZ8yYgW3b\ntmHDhg2wsLDAhg0bsHbtWhgb69XKtEET/Vg5Pk7VcImcGyB+fkxLb4rq9evX0bRpUwCAkZERCgoK\n0K5dO2zevFnlyBhjjLGy0ZvVQA8PD1y8eBG+vr7w9/fHpk2b4OjoCFNTU7VDE4bofR3uqRoukXMD\nxM+PaelNUf3000+RmJgIX19fTJgwAV27dkVubi7mzp2rdmiMMcZYmejN5t+BAweiQ4cOAID27dvj\n5s2buHnzJoYPH65yZOIQva/DPVXDJXJugPj5MS29KaqFbt++jStXriAzMxN37tzBlStXyvS4efPm\nITQ0FGZmZhg4cKA8rtFoYGRkBGtra/lv6tSp5RU+Y4yxCkxvNv/u2LED7777LjQajWJckiQUFBQ8\n9fHu7u6IjIzE9u3bcf/+/WL33759G5Ik6SpcgyR6X4d7qoZL5NwA8fNjWnqzpjpkyBCMGzcOWVlZ\nyM3Nlf8ePHhQpseHh4cjLCxMcd7govhE/Ywxxsqb3hTVnJwcDBw4ENbW1jA2Nlb8PYuiZ2Iqytvb\nG56enhg0aBAyMzN1EbLBEb2vwz1VwyVyboD4+TEtvSmqI0eOxJdffllqUSyrxzfxOjk54ejRo0hJ\nScHff/+NO3fuoE+fPi/0HIwxxlhJ9Kan2q1bN7Ru3RrTpk2Do6OjPC5JEi5cuFDm+TxelC0tLVGv\nXj0AgLOzM+bNmwc3NzdkZ2fD0tKy2OMjIiLg4+MDALC1tUVISIjcDyn8tWmotwvH1Iwn7VIafOAD\nQLtmWdgLfdHbhWO6mt/ja778/pXf7ebNm+tVPJzfk2/v2bMH0dHRACAvL9kjEr3oqqGOvPLKK6hb\nty66desGc3NzxX2tWrUq83wiIyNx6dIlLFu2rMT709PT4ebmhqysLFhbWyvukyTphdeU2ZNFjIyA\nz1s+aofxTDQbNYieE612GIzpLV52aunNmqpGo8Hx48dRqVKl53p8QUEB8vLykJ+fj4KCAjx48ACV\nKlXCsWPHUKVKFfj7++PmzZsYMWIEWrRoUaygVgRF13JExNdTNVwi5waInx/T0puealhYGHbt2vXc\nj588eTIsLCwwY8YMxMTEwNzcHNOmTcOFCxfQvn172NjYoE6dOjA3N0dsbKwOI2eMMcYe0ZvNv927\nd8eWLVvQtGlTODs7y+OSJOHHH398KTHwJozyx5t/GRMPLzu19Gbzb+3atVGrVi35duGbVNFP2MAY\nY8xw6EVRzc/Px/nz57F48WKYmZmpHY6wRO/rcE/VcImcGyB+fkxLL3qqxsbG2LFjx3PvpMQYY4zp\nA70oqgAwatQofPHFF8jNzVU7FGGJ/ktZ5LVUQOz3T+TcAPHzY1p6sfkXAObOnYv09HTMmjULTk5O\nci9VkiSkpKSoHB1jjDH2dHpTVGNiYtQOQXii93W4p2q4RM4NED8/pqU3RZU/cIwxxgyd3vRUc3Nz\n8cUXX8DX1xempqbw9fXlHquOif7DReS1VEDs90/k3ADx82NaerOmOnr0aBw+fBiLFi2Cl5cXUlJS\nMGnSJNy+fRtz5sxROzzGGGPsqfRmTfXnn3/Gpk2b0KZNGwQGBqJNmzbYuHEjfv75Z7VDE0bhVSZE\nxddTNVwi5waInx/T0puiyhhjjBk6vSmq3bt3x5tvvom4uDgkJiZi27ZtCAsLQ/fu3dUOTRii93W4\np2q4RM4NED8/pqU3PdUvv/wSU6ZMwQcffIArV66gatWqePvtt/H555+rHRpjjDFWJqquqX766afy\n/wcOHMCkSZNw7tw53Lt3D+fOncPkyZNhamqqYoRiEb2vwz1VwyVyboD4+TEtVYvqokWL5P/DwsJU\njIQxxhh7capu/g0JCUG3bt0QFBQkH6f6+DX5JEnCpEmTVIpQLKL3dbinarhEzg0QPz+mpWpRXbNm\nDRYvXozk5GQQEVJTUxX3V9TrqY6JGoO0W2lqh1FmrraumB41Xe0wGGNMdaoWVRcXF0RGRuLhw4d4\n8OABlixZAmNjvdl3SjVpt9Lg85aPzudbXufG1WzU6Hyez4PP/Wu4RM4NED8/pqUXh9RIkoR169bB\nyEgvwmGMMcaei15UMUmSUK9ePZw5c0btUIQm8locIH5+Iq/piJwbIH5+TEtvtrU2b94c7du3R0RE\nBDw9PSFJktxTHTRokNrhMcYYY0+lN0X1wIED8PHxwd69e4vdx0VVN0TvOYqen8h9OZFzA8TPj2np\nTVHlg6MZY4wZOr3oqRbKzMzEjz/+iC+//BIAcPnyZVy6dEnlqMQh8locIH5+Iq/piJwbIH5+TEtv\niurevXsREBCAVatWYfLkyQCApKQkDBs2TOXIGGOMsbLRm6L64YcfYvXq1YiLi5OPVW3YsCEOHTqk\ncmTiEP3cuKLnJ3KLROTcAPHzY1p6U1STk5PRqlUrxZiJiQkKCgpUiogxxhh7NnpTVIOCghAXF6cY\n27lzJ+rUqVOmx8+bNw+hoaEwMzPDwIEDi80nMDAQlpaWaNmyJVJSUnQWtyERvecoen4i9+VEzg0Q\nPz+mpTdFddasWejbty/69++PnJwcvPPOOxgwYIC809LTuLu7IzIystjhNxkZGejatSumTp2Kmzdv\nIjQ0FD179iyPFBhjjFVwelNUGzZsiISEBNSqVQsDBw5EtWrVcOTIETRo0KBMjw8PD0dYWBgcHBwU\n4+vXr0ft2rXRtWtXVK5cGVFRUUhISMDZs2fLIw29JnrPUfT8RO7LiZwbIH5+TEtvjlMFHq1tfvrp\np8jIyICTk9NzXaHm8UvHnTx5EsHBwfJtCwsL+Pn54cSJE6hRo8YLx8xYUeV5haG0S2mI3hit8/ny\nVYYY0x29Kao3b97EiBEj8PPPPyMvLw8mJibo3r075s6dC3t7+zLP5/FCnJ2dDScnJ8WYjY0N7t69\nq5O4DYnoPUd9yK+8rjAEAD4on/nqw1WGRO85ip4f09Kbojpw4EAYGxsjPj4eXl5eSElJwRdffIGB\nAwdi06ZNZZ7P42uqVlZWuH37tmIsKysL1tbWJT4+IiICPj4+AABbW1uEhITIX4jCTTjlfbtQ4ebM\nwmKhr7cLlSW/tEtpcnHQl/g5v7Lnx7f5dvPmzbFnzx5ER0cDgLy8ZI9I9HgVUkmVKlVw9epVWFhY\nyGP37t2Dm5sbsrKyyjyfyMhIXLp0CcuWLQMALFmyBMuXL8eBAwcAaNdc4+Pji23+LTyJv9oiRkYY\n3PVUo+dEl2na8soN4Pyee77PkF95Ef3cuKLnpy/LTn2gNzsqBQYGQqPRKMaSk5MRGBhYpscXFBQg\nJycH+fn5KCgowIMHD1BQUIDw8HCcOHEC69evR05ODiZOnIiQkBDupzLGGNM5vdn827JlS7Rp0wb9\n+/eHp6cnUlJSEBMTg379+uGHH3546mXgJk+ejEmTJsm3Y2JiEBUVhS+++ALr1q3DBx98gL59+6Jh\nw4ZYvXr1y0pLr+hDz7E8cX6GS+S1OED8/JiW3hTVgwcPws/PDwcPHsTBgwcBANWrV1fcBkq/DFxU\nVBSioqJKvO+NN95AYmKizmNmjDHGitKbosrHcZU/0a83yvkZLtF7jqLnx7T0pqfKGGOMGTouqhWI\nqGs5hTg/wyX6Wpzo+TEtLqqMMcaYjnBRrUBEPzcu52e4RN+nQvT8mBYXVcYYY0xH9L6olnY6Qfbs\nRO7JAZyfIRO95yh6fkxL74vq1q1b1Q6BMcYYKxO9L6qvv/662iEIQ+SeHMD5GTLRe46i58e0VD35\nw9KlS594zdSnnZqQMcYY0yeqFtUVK1aU6ULkXFR1Q+SeHMD5GTLRe46i58e0VC2qvEmEMcaYSPSq\np5qZmYkff/wRX375JQDg8uXLuHTpkspRiUPknhzA+Rky0X9gi54f09Kborp3714EBARg1apVmDx5\nMgAgKSkJw4YNUzkyxhhjrGz0pqh++OGHWL16NeLi4mBs/GirdMOGDXHo0CGVIxOHyD05gPMzZKL3\nHEXPj2npzaXfkpOT0apVK8WYiYkJCgoKVIqIMfa4MVFjkHYrTe0wnomrrSumR01XOwxWQehNUQ0K\nCkJcXBzatWsnj+3cuRN16tRRMSqxiHw9ToDzexnSbqXB5y3dx1CeuWk2asplvs+Cr6dacehNUZ01\naxY6deqEDh06ICcnB++88w42b96MTZs2qR0aY4wxViZ6U1QbNGiAhIQExMTEwMrKCl5eXjhy5Ag8\nPDzUDk0Yaq/llDfOz3CJnBvAPdWKRC+Kan5+PqytrXHr1i2MHj1a7XAYY4yx56IXe/8aGxvD398f\nGRkZaociNJGPcwQ4P0Mmcm4AH6dakejFmioA9O3bF507d8aIESPg6empOH1hy5YtVYyMMcYYKxu9\nKaoLFiwAAEycOLHYfRcvXnzZ4QhJ9L4V52e4RM4N4J5qRaI3RVWj0agdAmOMMfZC9KKnyl4O0ftW\nnJ/hEjk3gHuqFQkXVcYYY0xHuKhWIKL3rTg/wyVybgD3VCsSLqqMMcaYjlSYotq8eXOYm5vD2toa\n1tbWCAoKUjukl070vhXnZ7hEzg3gnmpFUmGKqiRJmD9/Pu7cuYM7d+4gMTFR7ZAYY4wJpsIUVQAg\nIrVDUJXofSvOz3CJnBvAPdWKpEIV1bFjx8LJyQlNmjTB3r171Q6HMcaYYPTm5A/lbcaMGahVqxYq\nV66M2NhYdO7cGfHx8ahWrZpiuoiICPj4+AAAbG1tERISIv/KLOyLlPftQoV9psJf8S96+6+1f8HV\nz1Vn83u8D1aW/NIupcEHun1+zs/w8ysai5r5ldftot9tNZ6/PPKJjo4GAHl5yR6RqIJuE23fvj06\nduyIDz74QB6TJEkvNhFHjIwwqAtBazZqED0nukzTllduAOf33PPVg/zK+yLlZc2vvIh+kXJ9WXbq\ngwq1+beiE71vxfkZLpFzA7inWpFUiKKalZWF7du3IycnB/n5+Vi5ciX279+Pdu3aqR0aY4wxgVSI\nnmpeXh4iIyNx+vRpVKpUCUFBQdi0aRP8/PzUDu2lKs9NbPqA8zNc+pLbmKgxSLuVpvP5pl1Kg6uH\nq87n62rriulR03U+X/b8KkRRdXR0xOHDh9UOgzGm59JupZVPTzy+fDZxazZqdD5P9mIqxOZf9og+\nrAmUJ87PcImcGyB+fkyLiypjjDGmI1xUKxDRz6/K+RkukXMDxM+PaXFRZYwxxnSEi2oFInpfh/Mz\nXCLnBoifH9PiosoYY4zpCBfVCkT0vg7nZ7hEzg0QPz+mxUWVMcYY0xEuqhWI6H0dzs9wiZwbIH5+\nTIuLKmOMMaYjXFQrENH7Opyf4RI5N0D8/JgWF1XGGGNMR7ioViCi93U4P8Mlcm6A+PkxLS6qjDHG\nmI5wUa1ARO/rcH6GS+TcAPHzY1pcVBljjDEd4aJagYje1+H8DJfIuQHi58e0uKgyxhhjOsJFtQIR\nva/D+RkukXMDxM+PaXFRZYwxxnSEi2oFInpfh/MzXCLnBoifH9PiosoYY4zpCBfVCkT0vg7nZ7hE\nzg0QPz+mxUWVMcYY0xEuqhWI6H0dzs9wiZwbIH5+TIuLKmOMMaYjXFQrENH7Opyf4RI5N0D8/JhW\nhSmqN27cQHh4OKysrODj44PY2Fi1Q3rp0s6lqR1CueL8DJfIuQHi58e0jNUO4GV5//33YWZmhmvX\nruH48ePo2LEjgoODUbNmTbVDe2ly7uaoHUK54vwMl8i5AeLnx7QqxJpqdnY21q9fj8mTJ8PCwgKN\nGzdGWFgYVqxYoXZojDHGBFIhiurZs2dhbGwMPz8/eSw4OBgnT55UMaqX71baLbVDKFecn+ESOTdA\n/PyYlkREpHYQ5W3//v3o0aMHrl69Ko8tWbIEq1atwu7du+WxkJAQJCQkqBEiY4wZrODgYMTHx6sd\nhl6oED1VKysr3L59WzGWlZUFa2trxRh/KBhjjL2ICrH5t0aNGsjPz8e5c+fksYSEBNSuXVvFqBhj\njImmQmz+BYC3334bkiTh+++/x7Fjx9CpUyccPHgQQUFBaofGGGNMEBViTRUAFixYgPv378PZ2Rl9\n+/bFwoULuaAyxhjTqQqzpsoYY4yVtwqxo1JFlJeXhzNnzuDWrVuwtbVFQEAATExM1A5LZ1JTUxEf\nH4+srCzY2toiODgYnp6eaoelM5mZmfj6668RHx+Pu3fvyuOSJGHfvn0qRqYbDx48QHR0dIn5/fjj\njypGphsXLlzA+PHjS8wvJSVFxchYeeOiKpgtW7Zg0aJF2LlzJ0xMTGBtbY07d+4gNzcXb7zxBt57\n7z106tRJ7TCfS25uLhYvXoxFixbhwoUL8PPzk/M7d+4cfHx8MGzYMLzzzjuoXLmy2uG+kN69eyM3\nNxc9evSAubm5PC5JkopR6c6AAQPwzz//oHPnznBxcYEkSSAiYfLr3bs3/Pz8MGvWLMX7x8THm38F\n0rhxY9ja2qJPnz5o1qwZ3N3d5fsuX76MvXv3YuXKlbh16xb++OMPFSN9PjVr1kSLFi3Qp08fNGjQ\nAMbG2t+E+fn5OHz4MFauXIndu3fj1KlTKkb64mxsbHDt2jWYmZmpHUq5sLW1xcWLF2FnZ6d2KOXC\nxsYGN2/eRKVKldQOhb1kXFQF8s8//+CVV17R2XT6Jj09HS4uLk+d7tq1a3B2dn4JEZWfJk2aIDo6\nWnEWMJEEBwdj+/btcHV1VTuUctGpUydERUUhNDRU7VDYS8ZFlTE9sXTpUnnzp0ajwapVqzBo0CC5\n8BRuHh00aJCaYerEzJkzsWbNGowYMaJYYW3ZsqVKUenO+++/j59++gldunRR/BCUJAmTJk1SMTJW\n3rioCkr0HUFKM336dIwZM0btMJ5L8+bNFT3F0nqMRU+taah8fHxK7Z9evHjxJUejexEREfL/hXkW\nvp/Lli1TKSr2MnBRFVSvXr3kHUHMzc0VO4JMmDBB7fDKTYcOHbB161a1w2CMVVBcVAUl+o4govvt\nt9/g7e2NgIAAeezMmTNISUlB69atVYxMd/Lz8/Hnn3/i8uXLcHd3R6NGjRQ7nxm6s2fPIjY2Fleu\nXIG7uzt69eqFGjVqqB0WK2cV5oxKFY23tzcePHigdhjsOQ0fPrzYBR+srKwwfPhwlSLSrdOnTyMo\nKAi9e/fG3Llz0bt3bwQGBiIxMVHt0HRi8+bNCA0NxZkzZ2Bvb4/Tp08jNDQUmzZtUjs0Vs54TVVQ\nIu4IUpaTO4hycH2VKlWQlZWlGHv48CFsbW2LXXHJELVo0QIdOnTAJ598IrcmZs6ciV9//VWInnHt\n2jqvgUsAACAASURBVLXx7bffokWLFvLYnj178MEHH+DEiRMqRsbKGxdVQYm4I8iePXvKNF3z5s3L\nNY6XISQkBDNnzsQbb7whj+3atQujRo0S4pq/dnZ2yMjIUBzHmZeXBycnJ9y6ZfgX9Lazs8P169cV\nm7NFyo+VTpwGBlPQaDRqh6BzIhTLspo4cSK6du2KwYMHo3r16jh37hyWLVsmzJ6jVatWxZ49exQ/\nGvbv3684YYkhCw4Oxtdffy3viU5EmDVrFkJCQlSOjJU3XlMVmMg7goSHh+Ojjz7C66+/Lo/t27cP\nc+fOxdq1a1WMTHcOHz6MpUuX4tKlS/D09MTgwYNRv359tcPSiV9++QW9e/dGp06d4OXlheTkZPz6\n66+IiYnBW2+9pXZ4LywxMRGdO3dGdnY2PD09kZqaCgsLC2zevBk1a9ZUOzxWjrioCur06dPo3Lkz\n7t+/L3+pzczMsHnzZiEueWdvb49r164V27zm4uKCGzduqBgZK6uzZ8/ip59+kveO7d69u2JvZ0OX\nl5eHv/76C1euXEHVqlXxn//8x+DPSc2ejouqoETfEcTd3R2nTp1ClSpV5LFbt24hMDAQaWlpKkam\nO8ePH8f+/fuRmZmJol9TPiMPY/qLi6qgRN8RZODAgcjJycHChQvlPWWHDx8OExMTREdHqx3eC1u8\neDFGjRqFNm3aYOvWrejQoQN+++03hIWFYdWqVWqH91yGDh2KJUuWAAD69etX4jSGfMavwMBAnD59\nGkDpe6qLsnc6K50YDTZWjOg7gsycORP9+vWDvb097O3tcePGDbRv3x4rVqxQOzSdmDFjBrZt24am\nTZvCzs4OGzZswLZt2xAbG6t2aM+tWrVq8v/Vq1eXt6AUZciXfiv8wQCg1M+hIefHyobXVAUl+o4g\nha5evYrU1FR4enrCzc1N7XB0xsbGRj4e1cHBAdeuXYORkRHs7e1x8+ZNlaN7cVevXi3x/Spt3NCs\nWbMG3bt3Lza+du1adOvWTYWI2MvCZ1QS1Jtvvoljx46hVq1auHPnDurUqYO///5bqIKamZmJHTt2\nYM+ePXBzc8Ply5eRmpqqdlg64eHhIR9P7O/vj02bNmH//v0wNTVVOTLdKG2HpFq1ar3kSMpHaVcS\nGjp06EuOhL1svPlXYDVq1EBkZKTaYZSLvXv3omvXrggNDcUff/yBzz77DElJSZg5cyY2b96sdngv\n7NNPP0ViYiJ8fX0xYcIEdO3aFbm5uZg7d67aoelESRvIbt++DSMjw/6df+HCBRARiAgXLlxQ3Hf+\n/HmYm5urFBl7WXjzr6AyMzPx9ddfl3jpt3379qkYmW6EhITg66+/RqtWrWBnZ4ebN28iJycHXl5e\nuHbtmtrh6dyDBw+Qm5tb7HzAhqZwB57Cw0yKyszMxNtvv42lS5eqEZpOPOlHgYuLC6KiovDuu+++\nxIjYy8ZrqoLq3bs3cnNz0aNHD8WvY1F2lEhOTkarVq0UYyYmJigoKFApIt27ceMGNm/eLB/H2alT\nJ7VDemGFO/C0b98eMTEx8hqrJElwcXFBYGCgmuG9sIcPHwIAmjZtKsSPV/bseE1VUDY2Nrh27RrM\nzMzUDqVcNGrUCF988QXatWsnr6n+9ttvmDZtWpnPEazPDh48iI4dOyIwMBDe3t5ITk7G6dOnsWXL\nFjRq1Ejt8F7YvXv3YGFhoXYY5ebSpUuwsLCAvb29PHbjxg3k5OQUW0NngiEmpMaNG1NSUpLaYZSb\ngwcPkoODA/Xr14/MzMxo6NCh5OrqSocOHVI7NJ2oX78+xcbGKsZWr15NoaGhKkWkW+Hh4bRv3z7F\n2N69e6lr164qRaRboaGhlJCQoBhLSEigBg0aqBQRe1l4TVUgS5culTfvajQarFq1CoMGDZIv/UZE\nkCSp1D0TDc3ly5cRExOD5ORkeHl5oW/fvvDw8FA7LJ2wtbXFjRs3FD26/Px8ODo6CnHyDtFPM1n0\nkKhCRIQqVaoIcek+VjruqQpkxYoVip6ph4cHduzYUWw6UYqqu7s7Ro8erXYY5cLf3x+xsbHo06eP\nPLZmzRr4+fmpGJXumJubIzs7W3GayezsbGHOjevs7IykpCT4+/vLY+fPn4ejo6OKUbGXgddUmcF4\n/NR2hT8gCtfACxnqae6K+vPPP9GxY0cEBATIJ+84e/YstmzZgsaNG6sd3gsT/TST06ZNw+rVqzF1\n6lT50n2RkZHo0aMHxo8fr3Z4rBwZ9kFhrFR169YtcTw0NPQlR6I71atXh5+fH/z8/GBra4uNGzei\noKAAnp6eKCgowKZNm2Bra6t2mC+MiODq6orTp0/j/fffx6uvvor//ve/OH/+vBAFFXh0msnbt2/D\n3t4eTk5OsLe3R1ZWFmbPnq12aDoxZswY9OvXD5988gnq16+Pzz77DP369cPYsWPVDo2VM15TFZS1\ntTXu3LmjGCMiODg4CNGzatOmDSIjIxXXUz1w4AAmTZqE3377TcXIXhwRwdLSEnfv3jX4kyE8jain\nmWQVFxdVwRRuIv3pp5/Qq1cvxZlrNBoNgEcn1jd0NjY2yMzMhImJiTyWl5cHe3v7Yj8mDFHjxo3x\n/fffC3Ht2ye5du2a4uQkgPLE+4bszJkzSEhIKJafKPs0sJLxjkqCqV69OoBH/cbq1avLRdXIyAhN\nmjQp8STfhqhu3boYO3YsJk+eDHNzc9y7dw8TJkwodbO3oWnRogXat2+PiIgIeHp6yld0EWXv7bi4\nOAwePBhXr15VjEuSJMQJPKZNm4ZJkyYhODi42PG4Irx/rHS8piqo7du3o23btmqHUW4uXryI3r17\n4+jRo/LJH0JDQ7Fq1Sr4+vqqHd4La968OYCSz4AlwkXmq1Wrhs8++wz9+/cX8iQQTk5O2LlzJ155\n5RW1Q2EvGRdVQYWEhGDAgAHo3bs3XFxc1A6n3KSkpODKlStwc3ODt7e32uGwMrK3t0dmZqYwp818\nnLe3N86ePSvMVYVY2VWKioqKUjsIpnvOzs7YvHkzRowYgQMHDsDIyAj+/v6Kg+1FUKVKFXh4eAix\n1+/jbt26hbVr12L79u3QaDTw9PQU5ionGRkZSE1NRb169dQOpVw4ODhg8eLFePXVV2FpaSlfuebx\nw7+YeHhNVXA3btzAzz//jJiYGJw4cQLh4eHo168fWrZsqXZo7Al27dqFLl26ICAgQHHu33Xr1hW7\nkIAhatKkCQ4fPgxvb2/5jF+AOFdRKm2vbVF6xqx0XFQrgHv37mH9+vX4f3v3HlRltb8B/NkgChps\n2KLIZSOJlqh5z9Q0OZaKZCocURMBD5QTpgV2oV8iqUdPZWqOnuw4ZV62t8JjeQm1Kc1rZygjLQxR\nUTdXBTd3hM3t94fDe9ypeSY2rN61n8+MM7HYfzyMyfdd613ru959910YjUZ07twZGo0GH3zwAcaM\nGSM6Ht1FQEAAFi9ejKlTpypjycnJWLhwITIyMgQms457NXjQaDSIiopq3TAtoGmn/d34+fm1Wg5q\nfSyqkmpsbMShQ4ewdetW7Nu3D0OHDkVkZCRCQ0Ph5OSE3bt3Y86cOSgoKBAdle7C1dUVN27cgL29\nvTJWW1uLTp06SdH7l0hWLKqS6tKlCzp27IjIyEiEh4fftdF8YGCgqq9J+/XXX5GcnIxr167hgw8+\nQEZGBsxmsxQ7LufNm4fu3bvj5ZdfVsbWrFmDCxcuYO3atQKTWcftlz/8lgxHTn7bUhP4705uGdpo\n0r2xqErq+++/x6OPPio6RotJTk7GnDlzEBoaiu3bt6O8vBzff/89/u///g9ff/216HjN9vjjjyM1\nNRWdO3eGt7c3cnNzcf36dTz22GPKL2c1v38MDAy0KKoFBQVKG0YZjgwtWrRIOVsM3Pr5/v3vfyM8\nPByrV68WnI5aEouqpDZv3owBAwZYzNrOnDmDs2fP3vUpWm169uyJnTt3on///so51draWnh6eqKo\nqEh0vGb7X5rKy/L+scknn3yCc+fOYcWKFaKjtIgffvgBixYtwv79+0VHoRbEoiopX19f/PTTT9Dp\ndMrYjRs3MGDAABiNRoHJrKNjx44oLCyEnZ2dRVH19vbG9evXRcejP6C+vh7u7u4oLi4WHaVF1NXV\nwc3NTYo2mnRvch1aJEV5ebnFXZUAlCu2ZDBw4EAYDAaLmdqnn36KIUOGCExlPY2Njfjkk0+wY8cO\n5OXlwdvbG9OmTUNMTIwU5xwbGhosvq6qqoLBYICbm5ugRNb1zTffWPw9VVZWYufOnejdu7fAVNQa\nWFQlFRAQgF27dmHatGnK2Oeffy5Ng/a1a9dizJgx2LBhA6qqqjB27FhkZmaq/oaaJgkJCdizZw/i\n4uLg6+sLo9GIlStX4vz583jvvfdEx2u2uzUh8fb2xkcffSQgjfX99uGnQ4cO6N+/P3bs2CEwFbUG\nLv9K6sSJEwgODsaYMWPQrVs3XLp0CV9//TVSUlIwYsQI0fGsorKyEvv378fVq1fh6+uLp59+Gs7O\nzqJjWUWnTp3w448/Qq/XK2PZ2dkYMGCAat8ZFxcXKzPRq1evWtyg1KFDB3Tq1ElUNKvYu3cvJk6c\nCAAwm81o27at4EQkAouqxK5evYrt27cjJycHer0e4eHhFr+kZZCTk6Msj3p7e4uOYzX+/v44ffq0\nRfvFkpISDBo0CJcuXRKY7I9zcXFBWVkZAOCpp56SYpf27W6/w/j2n5VsC4sqqZLRaER4eDi+++47\n6HQ6mEwmDBs2DFu3bpWisf7atWvxxRdfICEhAXq9HkajEStWrMCkSZMQHBysfE5Nd496eHjgm2++\nQUBAAFxdXe/5fl+tF7P36NEDL730Enr16oVnnnnmnrt82SJUbiyqEomPj8frr78OT0/Pe34mPz8f\ny5cvx/vvv9+KyawvMDAQ/fv3x7Jly9ChQwdUVFRg4cKFSEtLU3VDiyb/S2FRWx/ZDz/8EK+88gqq\nq6vv+Rm1/Uy3O3nyJJKSkmA0GpGVlQVfX9+7fu7y5cutnIxaE4uqRNavX49ly5YhICAAo0aNwsMP\nPwxnZ2eUlZUhMzMTR48eRUZGBhITE/H888+LjtssLi4uKCoqsnhvZTab0bFjRx5Z+BOrra1FQUEB\nAgICkJ6ejrv9+pGhN66/v79ql+mpeVhUJWM2m7Fnzx4cOHAAv/zyC0pKSuDm5oa+ffsiODgYEyZM\ngIODg+iYzTZ27FgkJSVZbLo6efIkFi9eLM0OYJllZmbioYceEh2DyOpYVEmVXnjhBWzfvh0TJkyA\nj48PsrOzkZKSghkzZsDd3R3AraXEJUuWCE76x9TW1mLdunU4evQobty4oZzrVHNrQiJboM4dAWTz\nqqurERoairZt26KwsBDt2rVDSEgIqqurkZOTg+zsbGRnZ4uO+YfNnz8f69evxxNPPIEffvgBf/3r\nX3H9+nX85S9/ER2NiH4HZ6pEf0JeXl747rvv0LVrV6UTVkZGBmbPns2ZKtGfGGeqpEqTJ0/G559/\njtraWtFRWsTNmzeVM8Xt27dHZWUlHn74YaSlpQlOZh1nzpwRHaFFrV69GoWFhaJjkAAsqqRKTzzx\nBJYsWQIPDw/Exsbi1KlToiNZVc+ePfHDDz8AAAYNGoTFixdj6dKld70XV42efPJJ9OvXDytWrEB+\nfr7oOFZ3+PBh+Pn5YcKECfj0009RU1MjOhK1Ei7/Sqy0tBTnz59HRUWFxbhMh8/T09NhMBiwY8cO\ntG3bFjNnzsTMmTPh7+8vOlqzpKamok2bNhg4cCAyMzMRGxuLiooKrFixAiNHjhQdr9lqa2uRkpIC\ng8GAgwcPYvjw4YiMjERoaCjat28vOp5VFBUVYefOndi6dSsyMjIwZcoUREREYNSoUaKjUQtiUZXU\npk2b8OKLL+KBBx6445eUjIfPjx07hrlz5yI9PR0dOnTAkCFDsHLlSvTr1090NLqPkpISJCcnY82a\nNbhy5QpCQkIwe/ZsaXpUA7eWuyMjI/Hzzz9Dr9fj+eefR1xcHB544AHR0cjKuPwrqTfffBO7du3C\ntWvXcPnyZYs/smhqZNGtWzfMnj0b06ZNw+XLl3Ht2jUEBwdj8uTJoiPSfVRUVOCLL77Ap59+itzc\nXEybNg09evRAREQE5syZIzpeszQ2NuLrr7/GrFmzEBgYiM6dO2PLli3YunUr0tLSEBQUJDoitQDO\nVCXl4eGBvLw82Nvbi47SIgYPHozLly9j6tSpiIqKwtChQ+/4jJ+fH65cudL64ei+9u/fj61bt+LL\nL7/E448/jqioKISEhMDR0REAYDKZ4Ovre8erC7V49dVXsWPHDmi1WkRGRmLmzJkW78Nra2vh5uam\n2p+P7o1FVVKrVq1CWVkZkpKSVNug/Pfs2rULEydO5PVaKtWnTx9ERUUhPDwcXl5ed/3MRx99pNp2\nmi+++CJmzZqFRx999J6f+fXXX6W535j+i0VVIr+91q2goAAODg7o2LGjMqbRaGA0Gls7mtUNGDDg\nrsdLBg8erOyaJRItNzcXeXl58PLykupqQrq3NqIDkPUYDAbREVrNxYsX7xhrbGxEVlaWgDTWFxMT\ngzVr1qBDhw7KWF5eHqKjo3Hw4EGByayjpqYGS5cuxY4dO5SiM336dCQmJipLwGom+9WEdG8sqhIJ\nDAwUHaHFRUREALj1SzkyMtLilpMrV66gd+/eoqJZVWVlJfr164ctW7Zg+PDh2LlzJ+bNm4eYmBjR\n0awiNjYWmZmZWLt2LXx9fWE0GrFs2TLk5uZi48aNouM1W2RkJAYNGoSDBw9aXE0YFRUlxdWEdG9c\n/pVUSEgI5s+fb3Gm8dixY1izZg127dolMFnzLFq0CADw9ttv480331SKqp2dHTw8PBAWFgadTicw\nofVs27YNcXFx6NmzJ/Lz87Fp0yZpjpnodDpcunQJbm5uypjJZIK/vz+Ki4sFJrMOXk1ouzhTldTR\no0eRnJxsMTZs2DDVHzNpKqpDhw6V/kiCl5cXHB0dcenSJfTq1Uv1DS1u5+npiaqqKouievPmzXtu\nWlKboUOHIjU11eIh6Pvvv8ewYcMEpqLWwKIqKScnJ1RWVkKr1SpjlZWV0uyWlb2gvvrqqzAYDPjw\nww8xYcIELFiwAH379sUHH3yAqVOnio7XbBERERg/fjzmzp0LvV4Po9GIdevWITIyEocPH1Y+p9bu\nX926dVPuL/7t1YQLFy4EoO6rCeneuPwrqb/97W+orq7Gv/71L+WWkzlz5sDBwQGbNm0SHY/uIzg4\nGBs3boSHh4cyduzYMURFRUnRwMPPzw/ArcLSpLGx0eJrQL3dv2bNmqX8t0ajUV5TNP18TT+rDO+P\nyRKLqqRMJhMiIiJw8OBBZffh+PHjYTAYLJbcSF3Kysrg4uIiOgYR3QOLquTy8/ORnZ0NvV4PT09P\n0XHodxw7dgxPPPEEAFgsgf6WWpdEZXflyhVlBv57R7u6devWSolIBBZVG9DY2Ghx9ES2DkunTp3C\n8OHDRcdotj59+uCXX34BcGt59LdLoU3UuiR6u59++gnz589HWlqaRas+jUYDs9ksMNkf5+zsrOzs\nvde/MY1Gg/r6+taMRa2MRVVSubm5mDt3Lo4ePYrS0lKLdzqy/aN2c3OT4hjG7err66Xt2wwAAQEB\nmDJlCqZOnQonJyeL73Xv3l1QKqLm4+5fSb3wwgtwcnLC4cOHMWrUKBw9ehSLFy/G+PHjRUej+6ir\nq4OzszNKSkrQrl070XFaREFBAZYsWXLP2bja5ebmwsnJyeLMtMlkQnV1tTTHhuju5FoHJMXJkyfx\nySefoH///gCA/v37Y8OGDVi1apXgZHQ/bdq0QY8ePVBUVCQ6SouJjIzEtm3bRMdoMZMmTUJOTo7F\nWE5ODkJCQgQlotbC5V9Jde7cGUajEY6OjvDz80Nqaiq0Wi3c3d1V39Hl994Jy7K8vXz5cuzcuRMv\nvfQS9Hq9xYxOho1KBQUFGDp0KDp06IDOnTsr4xqN5nc3aamFi4sLysrKLMYaGxuh1WrvGCe5cPlX\nUkOGDMGBAwcQEhKCcePGYdq0aXBycsLgwYNFR2u2hoYG5b8bGxuh0+mke6e6bt06AMDixYvv+J4M\nG5XCwsLg7+9vcYcqAGmWgzt37owLFy6gR48eytilS5fg7u4uMBW1Bs5UJVVSUoKGhgbodDpUVVVh\n5cqVqKioQFxcnHRHa2TcqCQ7Z2dnFBUVSfvO+B//+Ad27tyJZcuWwd/fHxcvXsTChQsxdepULFiw\nQHQ8akEsqqR6MhbVSZMmYc+ePXeMh4aGYvfu3QISWVdwcDCWLVuGAQMGiI7SIurr67Fq1Sps2LBB\nOSf+3HPPYf78+dIdaSNLLKqSMpvNWLp0KQwGA/Ly8uDt7Y2ZM2ciMTFRmv6/TU6cOCHN7S1Nbj/z\neDtZHiDmzJmD5ORkhIaG3vFOlf1wSc34TlVSCQkJSE1Nxfr165X7KpcsWYKysjKsXr1adDyrkqmg\nNjVbN5vNSEpKsmjakZWVpXTsUbuqqio8/fTTMJvNyi7Zu/X+VavDhw/Dz88P3bp1Q35+PhISEmBv\nb4+3334bXbp0ER2PWhBnqpLy9vbGmTNnLDZGFBUVoW/fvsjLyxOYjH5PUyP27du3Izw8XBnXaDTw\n8PBATEwMmyOoQM+ePfHVV1/B19cXzz77LDQaDRwdHVFUVIS9e/eKjkctiDNVoj+RphuEhg8fjtmz\nZ4sN04Jk742bl5cHX19f1NbW4tChQ7h69SratWsn3SZBuhOLqqTCwsIwceJEJCUloWvXrrhy5QqW\nLl2KsLAw0dHof9BUUMvLy1FUVGSxDCxD0bnXbFuWc8YuLi4oKChAeno6evfuDWdnZ9TU1KC2tlZ0\nNGphLKqSWr58OZYuXYq5c+ciLy8PXl5eePbZZ5GYmCg6Gv0Pzp07h/DwcJw5c8ZiXJaic/tZY+BW\nM4hFixZh5MiRghJZ17x58zBkyBDU1NQoexhOnjyJgIAAwcmopfGdqoTq6uoQExOD9evXWxysl0lN\nTQ02bdqEn3766Y5bTrZs2SIwmXWMGjUKAwcOxFtvvYUHH3wQly9fxptvvolhw4YhIiJCdLwWUV1d\njYcffhhXr14VHcUqzp8/D3t7e2VWnpmZiZqaGjzyyCOCk1FLYlGVlKenJ4xGIxwcHERHaRHTp0/H\n2bNn8cwzz8DJyQkajUbZPfrWW2+Jjtdsrq6uKCwshIODA7RaLUpLS1FZWYk+ffpI0VHpbs6cOYOn\nnnoKhYWFoqMQ/WFc/pVUfHw8kpKSsHjxYunOpQLAwYMHcfnyZbi5uYmO0iKcnJxgNpvh4OCATp06\n4erVq9DpdLhx44boaFbx22XeqqoqpKenIykpSVAiIutgUZXUmjVrcO3aNaxatQqdOnVSzv9pNBoY\njUbB6Zqva9euqKmpER2jxYwYMQLJycmYNWsWpkyZgvHjx6Ndu3ZSNNMHgJiYGIuvO3TogH79+uGh\nhx4SlIjIOrj8K6lvv/32nt8LDAxstRwtZeXKlUhOTsZLL710x2F6WQpPk/r6emzfvh0VFRWIjIxE\nhw4dREciontgUSVV8vPzu2f3HVnfOcpE9o1mZLu4/CupmpoaLF26FDt27FCO1EyfPh2JiYlS7Ai+\ncuWK6AgtqqSkBGvWrEFaWtodReerr74SmMw6oqKilI1mHh4eyrgsbQrJdrGoSio2NhaZmZlYu3at\n0vt32bJlyM3NxcaNG0XHs4q6ujqcOnUKubm58Pb2xvDhw9GmjRz/S4eFhaGhoUHa+0Zl32hGtovL\nv5LS6XS4dOmSxS8tk8kEf39/KW45ycjIwDPPPIObN29Cr9cjOzsbjo6O2LdvnxQH7LVaLa5fvy7t\nfaP9+vXDoUOH2FyepCPHYz3dwdPTE1VVVRZF9ebNm/Dy8hKYynpiY2Mxe/ZsvPrqq8oZ1ZUrV2LO\nnDk4cuSI6HjNNnz4cGRkZKBfv36io7SIyMhITJ482SY2mpFt4UxVUu+88w62b9+OuXPnQq/Xw2g0\nYt26dZgxYwYeffRR5XNq/QXm5uaGoqIi2NvbK2O1tbXo1KkTSkpKBCazjmvXrmH8+PEYNmwYPDw8\nlN6/Go1GirOc3GhGsmJRlVTTvZu3/+K6232Vav0F1rt3b6xZswZPPvmkMnb48GHMmzcP6enpApNZ\nR0xMDPbv34+RI0fCycnJ4nsGg0FQKiK6HxZVUqW9e/dixowZmDBhAnx9fXH16lV8+eWX2Lp1KyZP\nniw6XrM5Ozvj/Pnz0izXE9kKO9EBqOXU19fj5MmTSE5OxsmTJ6W43aTJxIkT8eOPP6J3794oLy/H\nI488gtOnT0tRUAHgwQcflLZvM5HMOFOV1NmzZzF58mRUV1fDx8cHOTk5cHR0xO7du9G/f3/R8eg+\nVqxYgd27d2PevHkW5zgB9b4HJ7IFLKqSGjRoEGbMmIH58+dDo9GgoaEBq1evxrZt23D69GnR8Zrt\nxo0bWLFixV078hw7dkxgMuvgRh4idWJRlZSLiwuKi4stdsfW1dVBp9OhrKxMYDLrGDduHMxmM6ZO\nnWqxkUej0SAqKkpgMiKyZTynKqng4GDs2bMHoaGhyti+ffsQHBwsMJX1fPfdd7h+/boULReJSB4s\nqpKqq6vD9OnTMXjwYPj4+CA7OxunT5/GpEmTEBERAUDdzcv79u2LnJwcdO/eXXQUIiIFi6qk+vTp\ngz59+ihf9+rVC+PGjVPe093tzOqf3YYNG5TMo0ePRlBQEKKjo5WOPE0/U3R0tMiYRGTD+E6VVCMw\nMPC+zSwASNGmkIjUiUVVYmazGefPn0dRURFu/2vmkQwiopbB5V9JnThxAmFhYaipqUFpaSm0Wi3K\nysrg6+uLrKws0fGabcCAAUhLS7tjfPDgwfjhhx8EJCIiYkclacXFxeG1116DyWSCi4sLTCYTkpKS\nEBsbKzqaVVy8ePGOscbGRikeGIhIvbj8KymtVovi4mLY2dnB1dUVJSUlMJvN8PPzQ15enuh4zSIG\nfQAAEA1JREFUf1jTzuVPP/0U06dPt1jWvnLlCgDg+PHjIqIREXH5V1ZarRalpaVwc3ODl5cX0tPT\n4e7ujsrKStHRmsXf3x/AreNA/v7+SlG1s7PDiBEjEBYWJjIeEdk4FlVJhYSEICUlBeHh4YiOjsbo\n0aPRpk0bTJkyRXS0Zlm0aBEAYNiwYRg3bpzYMEREv8HlXxtx/PhxlJeXIygoCHZ26n+V3r9/f0RF\nRWHGjBl3NJwnIhKFRZVUaffu3TAYDPjqq6/wxBNPICIiAqGhoWxbSERCsaiSqplMJnz22WfYunUr\nfvnlF4SEhCAiIoJncYlICBZVUr2qqirs3r0b7777LoxGIzp37gyNRoMPPvgAY8aMER2PiGyI+l+u\nkU1qbGzEwYMHMXPmTHh6esJgMOCNN95AQUEBLly4gHfeeUc5fkNE1Fo4U5VUWloaOnbsCF9fX2XM\naDSiuLgY/fr1E5jMOrp06YKOHTsiMjIS4eHh8PHxueMzgYGB+Pbbb1s/HBHZLBZVSfXu3Rv79u1D\nt27dlLGLFy8iNDQUZ8+eFZjMOr7//ns8+uijomMQEVng8q+ksrOzLQoqcKtxwuXLlwUlsq5z587d\n8XBw5swZGAwGQYmIiFhUpeXj44PTp09bjKWlpcHb21tQIutauHDhHUu+Pj4+WLBggaBERETsqCSt\n+Ph4TJo0CQkJCfD398fFixexYsUKaYpOeXk5tFqtxVhTa0YiIlFYVCX1/PPPw9XVFR9//DFycnKg\n1+uxatUq1bcpbBIQEIBdu3Zh2rRpytjnn3+OgIAAgamIyNZxoxKp0okTJxAcHIwxY8agW7duuHTp\nEr7++mukpKRgxIgRouMRkY1iUZWIwWBQzmZu2LABGo3mrp+Ljo5uzVgt5urVq9i+fbsyEw8PD4de\nrxcdi4hsGIuqRIKDg5GSkgLg1hnNexXVI0eOtGYsIiKbwaJKqhEfH4/XX38dnp6e9/xMfn4+li9f\njvfff78VkxER3cKNSpIqLCyEo6MjnJ2dUVdXhy1btsDe3h4RERGqvfqtZ8+eeOyxxxAQEIBRo0bh\n4YcfhrOzM8rKypCZmYmjR48iIyMDiYmJoqMSkY3iTFVSQ4YMwfr16zFgwAAkJCRg//79cHBwQGBg\nIFavXi063h9mNpuxZ88eHDhwAL/88gtKSkrg5uaGvn37Ijg4GBMmTICDg4PomERko1hUJeXm5gaT\nyQSNRgNvb2+cOnUKzs7O6NWrFwoKCkTHIyKSEpd/JWVvb4+amhpcuHABrq6u6Nq1K+rr61FRUSE6\nGhGRtFhUJRUUFISpU6fixo0bSoOEc+fO3fU2FyIisg4u/0qquroamzdvRtu2bREREYE2bdrgyJEj\nuHbtGqZPny46HhGRlFhUbcTNmzdhZ2eHdu3aiY5CRCQtdZ6toPt65ZVXkJqaCgD48ssvodPp4Obm\nhr179wpOZj2lpaVITU3F4cOHLf4QEYnCmaqkunTpgqysLLRv3x5DhgxBQkICtFot4uPj8fPPP4uO\n12ybNm3Ciy++iAceeADt27e3+J4sd8YSkfqwqEqq6Rq0oqIiBAQEoLCwEADg7OyM8vJywemaz8vL\nCxs2bMD48eNFRyEiUnD3r6R69OiBbdu24cKFCxgzZgyAW12WfjurU6v6+nqMHTtWdAwiIgt8pyqp\ndevW4Z///CeOHDmCJUuWAAAOHTokTSFKSEjA3//+dzQ0NIiOQkSk4PIvqcZvr3UrKCiAg4MDOnbs\nqIxpNBoYjcbWjkZEBIDLv1Izm804f/48ioqKcPuz0+jRowWm+uMMBoPoCEREv4szVUmdOHECYWFh\nqKmpQWlpKbRaLcrKyuDr64usrCzR8YiIpMR3qpKKi4vDa6+9BpPJBBcXF5hMJiQlJSE2NlZ0NKsI\nCQnB8ePHLcaOHTuGKVOmCEpERMSZqrS0Wi2Ki4thZ2cHV1dXlJSUwGw2w8/PD3l5eaLjNZtOp8P1\n69fRps1/32DU1tbCw8MDJpNJYDIismWcqUqq6ZwqcOtMZ3p6OoqLi1FZWSk4mXU4OTnd8bNUVlai\nbdu2ghIREbGoSiskJAQpKSkAgOjoaIwePRoDBw6UZnl07NixeOGFF5QHh9LSUrz44osICgoSnIyI\nbBmXf23E8ePHUV5ejqCgINjZqf9ZymQyISIiAgcPHoROp4PJZML48eNhMBjg5uYmOh4R2SgWVVK1\n/Px8ZGdnQ6/Xw9PTU3QcIrJxLKoSGTly5H0/o9FocOzYsVZI03oaGxstzuHKMBMnInVi8weJxMTE\n3PczGo2mFZK0vNzcXMydOxdHjx5FaWmpUlQ1Gg3q6+sFpyMiW8WiKpFZs2aJjtBqXnjhBTg5OeHw\n4cMYNWoUjh49isWLF/PWGiISisu/kpo3bx6effZZDB8+XBk7deoUPvvsM6xevVpgMuvQ6XQwGo14\n4IEHlONDJpMJw4cPR0ZGhuh4RGSjWFQl5e7ujtzcXLRr104Zq66uhl6vV+5WVbPOnTvDaDTC0dER\nfn5+SE1NhVarhbu7uxT3xRKROnFHh6Ts7OzuuBatoaEBsjxDDRkyBAcOHAAAjBs3DtOmTUNISAgG\nDx4sOBkR2TLOVCUVGhqKBx98EO+99x7s7OxQX1+PN954AxcvXsTnn38uOl6zlZSUoKGhATqdDlVV\nVVi5ciUqKioQFxfHozVEJAyLqqSys7MxYcIE5Ofno2vXrjAajfD09MS+ffvuuJeUiIisg0VVYvX1\n9UhNTVWaIzz22GPSnOE0m81YunQpDAYD8vLy4O3tjZkzZyIxMZH9f4lIGBZVUqX4+Hikpqbirbfe\ngq+vL4xGI5YsWYLBgwdLsbuZiNSJRZVUydvbG2fOnIG7u7syVlRUhL59+0pxtR0RqZMca4FERER/\nAiyqpEphYWGYOHEiDh48iF9//RUHDhzApEmTEBYWJjoaEdkwLv+SKjVtVNq+fTvy8vLg5eWFZ599\nFomJiRYNL4iIWhOLKqlOXV0dYmJisH79ejg6OoqOQ0SkYFElVfL09ITRaISDg4PoKERECr5TJVWK\nj49HUlISzGaz6ChERArOVEmVfHx8cO3aNdjZ2aFTp07KPbEajQZGo1FwOiKyVbxPlVRp69atoiMQ\nEd2BM1UiIiIr4TtVUqWamhosXLgQ3bt3R/v27dG9e3ckJiaiurpadDQismFc/iVVio2NRWZmJtau\nXav0/l22bBlyc3OxceNG0fGIyEZx+ZdUSafT4dKlS3Bzc1PGTCYT/P39UVxcLDAZEdkyLv+SKnl6\neqKqqspi7ObNm/Dy8hKUiIiIy7+kUhERERg/fjzmzp0LvV4Po9GIdevWITIyEocPH1Y+N3r0aIEp\nicjWcPmXVMnPzw8AlPOpANDY2GjxNQBcvny5NWMRkY1jUSUiIrISLv+SatXX1+M///mPckvN0KFD\nYW9vLzoWEdkwFlVSpbNnz2Ly5Mmorq6Gj48PcnJy4OjoiN27d6N///6i4xGRjeLyL6nSoEGDMGPG\nDMyfPx8ajQYNDQ1YvXo1tm3bhtOnT4uOR0Q2ikWVVMnFxQXFxcUWy711dXXQ6XQoKysTmIyIbBnP\nqZIqBQcHY8+ePRZj+/btQ3BwsKBEREScqZJKTZkyBXv37sXgwYPh4+OD7OxsnD59GpMmTYKjoyOA\nW8dttmzZIjgpEdkSblQiVerTpw/69OmjfN2rVy+MGzdOOad6tzOrREQtjTNVIiIiK+FMlVTLbDbj\n/PnzKCoqwu3PhmxNSESisKiSKp04cQJhYWGoqalBaWkptFotysrK4Ovri6ysLNHxiMhGcfcvqVJc\nXBxee+01mEwmuLi4wGQyISkpCbGxsaKjEZEN4ztVUiWtVovi4mLY2dnB1dUVJSUlMJvN8PPzQ15e\nnuh4RGSjOFMlVdJqtSgtLQUAeHl5IT09HcXFxaisrBScjIhsGYsqqVJISAhSUlIAANHR0Rg9ejQG\nDhyIKVOmCE5GRLaMy78khePHj6O8vBxBQUGws+OzIhGJwaJKRERkJXykJyIishIWVSIiIithUSUi\nIrISFlVSpbS0NBiNRosxo9GIM2fOCEpERMSiSio1c+ZM1NXVWYyZzWZEREQISkRExN2/pFIuLi4o\nKyuzGGtsbISLiwvKy8sFpSIiW8eZKqmSj48PTp8+bTGWlpYGb29vQYmIiHhLDalUfHw8Jk2ahISE\nBPj7++PixYtYsWIFFixYIDoaEdkwLv+SaiUnJ+Pjjz9GTk4O9Ho9nnvuObYpJCKhWFSJiIishMu/\npBoGg0HZ3bthwwZoNJq7fi46Oro1YxERKThTJdUIDg5WbqYJDAy8Z1E9cuRIa8YiIlKwqBIREVkJ\nj9SQKhUWFirnUevq6vDJJ59g8+bNaGhoEJyMiGwZiyqp0tNPP42LFy8CABYsWICVK1fi/fffx/z5\n8wUnIyJbxuVfUiU3NzeYTCZoNBp4e3vj1KlTcHZ2Rq9evVBQUCA6HhHZKO7+JVWyt7dHTU0NLly4\nAFdXV3Tt2hX19fWoqKgQHY2IbBiLKqlSUFAQpk6dihs3bmDatGkAgHPnzsHHx0dwMiKyZVz+JVWq\nrq7G5s2b0bZtW0RERKBNmzY4cuQIrl27hunTp4uOR0Q2ikWVpHDz5k3Y2dmhXbt2oqMQkQ3j7l9S\npVdeeQWpqakAgC+//BI6nQ5ubm7Yu3ev4GREZMs4UyVV6tKlC7KystC+fXsMGTIECQkJ0Gq1iI+P\nx88//yw6HhHZKBZVUiWtVovS0lIUFRUhICAAhYWFAABnZ2deUk5EwnD3L6lSjx49sG3bNly4cAFj\nxowBcKvLUvv27QUnIyJbxqJKqrRu3Tq8/PLLaNu2LTZs2AAAOHToEMaOHSs4GRHZMi7/EhERWQln\nqqRaZrMZ58+fR1FREW5/Nhw9erTAVERky1hUSZVOnDiBsLAw1NTUoLS0FFqtFmVlZfD19UVWVpbo\neERko3hOlVQpLi4Or732GkwmE1xcXGAymZCUlITY2FjR0YjIhvGdKqmSVqtFcXEx7Ozs4OrqipKS\nEpjNZvj5+SEvL090PCKyUZypkio1nVMFAC8vL6Snp6O4uBiVlZWCkxGRLWNRJVUKCQlBSkoKACA6\nOhqjR4/GwIEDMWXKFMHJiMiWcfmXpHD8+HGUl5cjKCgIdnZ8ViQiMVhUiYiIrIRHakg1Ro4ced/P\naDQaHDt2rBXSEBHdiUWVVCMmJua+n9FoNK2QhIjo7rj8S0REZCXc0UGqNG/ePJw6dcpi7NSpU4iL\nixOUiIiIM1VSKXd3d+Tm5qJdu3bKWHV1NfR6vXK3KhFRa+NMlVTJzs4ODQ0NFmMNDQ3gMyIRicSi\nSqo0YsQIJCYmKoW1vr4eb7311v+0Q5iIqKVw+ZdUKTs7GxMmTEB+fj66du0Ko9EIT09P7Nu3D3q9\nXnQ8IrJRLKqkWvX19UhNTUV2djb0ej0ee+wxdlMiIqFYVImIiKyEj/VERERWwqJKRERkJSyqRERE\nVsKiSkREZCX/D2lbGZgZrg2GAAAAAElFTkSuQmCC\n", - "text": [ - "" - ] - } - ], - "prompt_number": 35 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is a pretty significant performance gain. The \"Cython + type declarations\" approach sped up our initial Python code 25 times." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Appendix III: Cython performance after replacing list comprehensions by explicit for loops" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In Python, we have those wonderful list, set, and dictionary comprehensions, which do not only look prettier and are easier to read (at least most of the time) than nested loop structures, but they also additionally come with some small performance benefits. \n", - "Does this also apply in Cython? Let's check it out." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "This is the code for our \"classic\" least squares approach that we have been using in the previous sections:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def lstsqr_comprehensions(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 46 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "And here is a version where I replaced the list comprehensions by for-loops:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def lstsqr_loops(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = 0\n", - " for x_i in x:\n", - " var_x += (x_i - x_avg)**2\n", - " cov_xy = 0\n", - " for x_i, y_i in zip(x,y):\n", - " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 48 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "Finally, the Cython versions of the two functions (with and without using list comprehensions) that we have defined above:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%load_ext cythonmagic" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%cython\n", - "\n", - "def cy_lstsqr_comprehensions(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " cdef double x_avg, y_avg, var_x, cov_xy, slope, y_interc, x_i, y_i\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 49 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%cython\n", - "\n", - "def cy_lstsqr_loops(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " cdef double x_avg, y_avg, var_x, cov_xy, slope, y_interc, x_i, y_i\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = 0\n", - " for x_i in x:\n", - " var_x += (x_i - x_avg)**2\n", - " cov_xy = 0\n", - " for x_i, y_i in zip(x,y):\n", - " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 50 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "We will generate some sample data for different sample sizes and take a look at the results for the regular Python functions, and the Cython code separately." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "import random\n", - "random.seed(12345)\n", - "\n", - "funcs = ['lstsqr_comprehensions', 'lstsqr_loops',\n", - " 'cy_lstsqr_comprehensions', 'cy_lstsqr_loops'] \n", - "\n", - "orders_n = [10**n for n in range(1, 6)]\n", - "times_n = {f:[] for f in funcs}\n", - "\n", - "for n in orders_n:\n", - " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", - " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", - " for f in funcs:\n", - " times_n[f].append(timeit.Timer('%s(x,y)' %f, \n", - " 'from __main__ import %s, x, y' %f).timeit(1000))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 52 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "plt.figure(figsize=(8,6))\n", - "plt.plot(orders_n, times_n['lstsqr_comprehensions'], alpha=0.5, \n", - " label='list comprehensions', marker='o', lw=2)\n", - "plt.plot(orders_n, times_n['lstsqr_loops'], alpha=0.5, \n", - " label='for-loops', marker='o', lw=2)\n", - "plt.xlabel('sample size n')\n", - "plt.ylabel('time in ms')\n", - "plt.legend(loc=2)\n", - "plt.grid()\n", - "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", - "plt.title('Performance comparison list comprehensions and for-loops')\n", - "plt.show()\n", - "\n", - "plt.figure(figsize=(8,6))\n", - "plt.plot(orders_n, times_n['cy_lstsqr_comprehensions'], alpha=0.5, \n", - " label='list comprehensions (Cython', marker='o', lw=2)\n", - "plt.plot(orders_n, times_n['cy_lstsqr_loops'], alpha=0.5, \n", - " label='for-loops (Cython)', marker='o', lw=2)\n", - "plt.xlabel('sample size n')\n", - "plt.ylabel('time in ms')\n", - "plt.legend(loc=2)\n", - "plt.grid()\n", - "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", - "plt.title('Performance comparison list comprehensions and for-loops in Cython')\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\nURKDPTGQxwAAAABJRU5ErkJggg==\n", - "text": [ - "" - ] - }, - { - "metadata": {}, - "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAGJCAYAAABFDXDOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8TXf++PFXQoJE9kgiO0ntgtZSFLG2lNYoKtagqr/B\nTKtT7bSKKqodVBedfnVUSmyli30pGqNUaRGqxJpYEksESSSyfn5/nMltQja5N7n3JO/n4+Eh5957\nznmf9z03n5zz/tzPx0oppRBCCCGERbI2dwBCCCGEKJo01EIIIYQFk4ZaCCGEsGDSUAshhBAWTBpq\nIYQQwoJJQy2EEEJYMGmoi3Ht2jU6d+6Mo6Mjr732mrnDEUXYu3cvjRo1qtB9hoaGsmTJEgBWrFjB\nk08+WaH7tyT5c1FR+vTpw/Llyyt0n6YUGBjIrl27Cn0uPT2dfv364ezszPPPP2/0vmbMmMGIESOM\n3o6pWNJ7Fx4ezttvv23uMEpU6RrqwMBA7OzscHBwwMvLi9GjR3P37t0ybWvx4sV4eHiQnJzMv/71\nLxNHKkylU6dOnDp1qkL3aWVlhZWVFQDDhg1j+/btJa6jl18KDyt/LirKli1bLKrxeVjF5WzdunVc\nv36dpKQk1qxZY5J9WRJj37uVK1fSunVrHBwc8Pb2pk+fPuzbt6/E9SIiIujUqVOBx8xx7pZFpWuo\nrays2LRpEykpKRw+fJhff/2VWbNmPdQ2lFLk5uYSFxdH48aNyxRHdnZ2mdYTD0fyXL4kvxUvLi6O\nBg0aYG398L+eC3u/KtOYVgsWLOCVV15h6tSpXL9+nUuXLjFhwgQ2bNhg7tDKVaVrqPPz9vbmqaee\n4vfffwfgwIEDdOjQARcXF1q2bMmePXsMrw0NDWXq1Kk88cQT2NvbM2rUKJYtW8YHH3yAg4MDu3fv\nJjMzk5dffhkfHx98fHx45ZVXyMzMBCAqKgpfX18++OAD6taty5gxY3jnnXcYNGgQI0aMwNHRkZCQ\nEM6cOcN7772Hp6cnAQEB/PDDD4YYli5dSpMmTXB0dCQoKIjFixcbnsvb/oIFC/D09MTb25uIiAjD\n8+np6bz66qsEBgbi7OxMp06duHfvXonHfb9Lly4xYMAAPDw8cHd3Z9KkSQDk5uYya9YsAgMD8fT0\nZNSoUSQnJwMQGxuLtbU1ERER+Pv74+bmxueff86hQ4cICQnBxcXFsB3Q/rLt2LEjkyZNwtnZmcaN\nG7N79+6HykNenseOHUtUVBR+fn6G17z//vv4+vri6OhIo0aNDNvOyMgo8f0rKr/Fyf+XulKKV155\nBU9PT5ycnAgJCeHEiRMsXryYlStXGs6nZ599ttBtnThxgp49e+Lm5oaXlxfvvfdeqWP/17/+hYeH\nB97e3nz//fds2bKFBg0a4Obmxty5cw37mDFjBgMHDmTIkCE4Ojry2GOPcezYMcPzgYGBfPDBB4SE\nhODg4EBubm6J51BsbCxPPPEEjo6OPPnkk9y8edPwXEmfu2nTphW67r179xg+fDju7u64uLjQtm1b\nbty4YVgv73a7UqrEc3PZsmUEBARQp04d5syZY9j/wYMHad26NU5OTnh5efHqq68W+r7cvn2bvn37\n4uHhgaurK/369ePKlSulOg6A5cuXExAQgLu7e4H932/69Om8++67rFmzBgcHB5YuXVqq4/vyyy8J\nCAigR48eRW47z4YNG2jatCkuLi507dq1wN2okydPEhoaiouLC82aNWPjxo2G58LDw3nppZfo1asX\njo6OhIaGcvHiRcPzhZ33hcn/3kVERPDEE0/w2muv4erqSv369dm2bVuh6925c4fp06fz2Wef0b9/\nf2rVqkW1atV4+umnef/997l69Sr29vYkJSUZ1jl8+DAeHh78/vvvvPTSS/z88884ODjg6upqeE1S\nUhJ9+/bF0dGRxx9/nPPnzxue279/P23atMHZ2Zm2bdvy888/FziO4t5zk1KVTGBgoNq5c6dSSqmL\nFy+qpk2bqmnTpqnLly8rNzc3tXXrVqWUUj/88INyc3NTiYmJSimlunTpogICAtQff/yhcnJyVFZW\nlgoPD1dvv/22Ydtvv/22at++vbpx44a6ceOG6tChg+H5H3/8UVWvXl298cYbKjMzU6Wnp6vp06er\nmjVrqh07dqjs7Gw1cuRIFRAQoObMmaOys7PVF198oerVq2fY/ubNm9X58+eVUkrt2bNH2dnZqcOH\nDxfY/vTp01V2drbasmWLsrOzU7dv31ZKKfXXv/5Vde3aVcXHx6ucnBz1888/q4yMjCKP+8aNGw/k\nLjs7W4WEhKjJkyertLQ0de/ePbVv3z6llFJLlixRwcHB6sKFCyo1NVUNGDBAjRgxQiml1IULF5SV\nlZX6f//v/6mMjAy1Y8cOZWtrq/r3769u3Lihrly5ojw8PNSePXuUUkotXbpUVa9eXS1cuFBlZ2er\nNWvWKCcnJ5WUlFTqPOTP848//qh8fX2VUkqdOnVK+fn5qYSEBKWUUnFxcercuXOlfv+Kyu/9QkND\n1ZIlSwzH88QTTyillNq2bZt67LHH1J07dwzx5MVy//l0v+TkZOXl5aUWLFigMjIyVEpKivrll19K\nHfu7775rOK/c3NzU0KFDVWpqqjpx4oSqVauWio2NVUopNX36dGVjY6O++eYblZ2drebNm6fq1aun\nsrOzlVJKBQQEqFatWqnLly+re/fuleqzExQUpM6cOaPS09NVaGioeuONN5RSqlTrBgcHF7ru559/\nrvr166fS09NVbm6uOnz4sEpOTn4g/6U5N1988UV17949FR0drWrUqKFOnTqllFLq8ccfV5GRkUop\npe7evasOHDhQ6Htz8+ZN9e2336r09HSVkpKiBg0apPr37294vrjjOHHihKpdu7bau3evysjIUJMn\nT1bVq1dXu3btKnRfM2bMMMRf2uMbNWqU4TN7v+nTp6vhw4crpZSKiYlR9vb2aufOnSo7O1t98MEH\nKjg4WGVlZanMzEwVFBSk3nvvPZWVlaV2796tHBwcVExMjFJKqVGjRikHBwfDcfz9738v1Xl/v/s/\nOzY2Nuo///mPys3NVf/+97+Vt7d3oett3bpVVa9eXeXk5BT6vFJK9enTR/373/82LL/88svqb3/7\nm1JKqYiICEO8eUaNGqXc3NzUoUOHVHZ2tho2bJgaMmSIUkp7z52dnVVkZKTKyclRq1atUi4uLobf\nU8W956ZW6RrqgIAAVbt2beXs7KwCAgLUhAkTVHp6upo7d26Bk18ppZ588kn11VdfKaW0k2f69OkF\nng8PD1dTp041LAcFBRl+4Sil1Pbt21VgYKBSSvtlaWtrqzIyMgzPT58+XfXq1cuwvGHDBlW7dm2V\nm5urlNJ+MVtZWRlO7vv1799fffTRR4bt16pVq8BJ6uHhoX755ReVk5OjatWqpY4dO/bANko67vz2\n79+v6tSpU+gHoVu3bgU+ADExMcrGxkbl5OQYflnEx8cbnndzc1Nff/21Yfm5555TCxcuVEppH877\nP4xt27ZVy5cvL1Ue7s9z/ob6zJkzysPDQ+3cuVNlZmYW2E5J719R+S1MUQ31rl27VIMGDdSBAwce\nyOP959P9Vq5cqR599NFCnytN7PefVwcPHjS8/rHHHlPr169XSmnnZfv27Q3P5ebmqrp166qffvpJ\n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\nL1HPoRhem1SIm6wStV6vh91u58d2uz3qL5pUFAqFsHbtWtx///1Ys2YNAPEvyP7+fgBAX18fiouL\nAVwav+7ubhgMBuj1enR3d1/y+IXXdHV1ARB/IY+MjECr1cbls8XDkSNHsHv3blRWVmLTpk04ePAg\n7r//forhBBgMBhgMBixaJN4RcN26dThx4gRKS0sphuP00UcfYdmyZdDpdFCpVLjnnnvw/vvvUwyv\n0VT//9XpdLLKR7JK1AsXLkR7eztsNhuCwSBeeOEFrF69WuppSYYxhq985SuYPXs2tm3bxh9fvXo1\n/vSnPwEQuxIvJPDVq1dj586dCAaDsFqtaG9vx+LFi1FaWor8/HwcO3YMjDH8+c9/xl133XXJ93rp\npZfQ1NQU5085tR5//HHY7XZYrVbs3LkTt9xyC/785z9TDCegtLQU5eXlOHv2LABg//79mDNnDlat\nWkUxHKeZM2fi6NGj8Pl8YIxh//79mD17NsXwGsXj/++tt96Kffv2weVyYXh4GG+//TZWrlwpwaeF\nvLq+GWPszTffZDU1NcxkMrHHH39c6ulI6t1332UKhYLNnz+f1dfXs/r6evbWW28xh8PBmpqamNls\nZitWrIjqRHzssceYyWRitbW1bO/evfzxjz76iNXV1TGTycQeffRR/rjf72fr169n1dXVbMmSJcxq\ntcbzI8ZVS0sL7/qmGE5MW1sbW7hwIZs3bx67++67mcvlohhO0BNPPMFmz57N6urq2AMPPMCCwSDF\ncBw2btzIysrKmFqtZgaDgT3zzDNxi9szzzzDqqurWXV1NWtubo7L570cuuEJIYQQImOyOvVNCCGE\nkGiUqAkhhBAZo0RNCCGEyBglakIIIUTGKFETQgghMkaJmhBCCJExStSEpKjGxkYcP348pu+xZ8+e\nlN+OlpCpppJ6AoQQaUzGPZJXrVrF9/gmhEwNWlETIhNerxd33HEH6uvrMXfuXLz44osAgJ/97GdY\nvHgx5s6di4cffpg/v7GxEd/5znewaNEizJo1Cx9++CHuvvtu1NTU4Cc/+QkAcde1mTNn4r777sPs\n2bOxfv16+Hy+S9573759WLZsGRYsWIB7770XXq/3kuc89dRTmDNnDubPn4/NmzcDAJqbm/Hoo48C\nAOrr69HQ0ICGhgZkZ2fj3XffhdfrxdatW7FkyRJcd9112L179yXft6WlBY2NjVi/fj1mzZqF++67\nL/ZgEpJMJLsnGiEkyksvvcQeeughfjwyMsIYY8zpdPLH7r//frZnzx7GGGONjY3shz/8IWOMsSef\nfJKVlZWx/v5+FggEmMFgYE6nk1mtVqZQKNiRI0cYY4xt3bqV/eIXv+CvP378OBsaGmI33XQTGxsb\nY4wxtmPHDvazn/3skvlNnz6dBYPBqLk1Nzezb3zjG1HP2717N7vppptYKBRi//mf/8n+8pe/MMYY\nGx4eZjU1Nczr9UY9/9ChQ6ygoID19PQwQRDY9ddfz1pbW68lhIQkJVpREyIT8+bNw9tvv40f/vCH\naG1tRX5+PgDg4MGDWLp0KebNm4eDBw/i9OnT/DUXNq2pq6tDXV0dSkpKkJ6ejqqqKr7zT3l5Oa6/\n/noAwH333YfW1lb+esYYjh49itOnT2PZsmVoaGjAs88+y3cT+uz8Nm/ejL/+9a9IS0u77Gdob2/H\n97//fezatQsqlQr79u3Djh070NDQgOXLlyMQCETtSHTB4sWLMX36dCgUCtTX18Nms11bEAlJQlSj\nJkQmzGYzTp48iTfeeAM//vGP0dTUhO9///v4+te/juPHj0Ov1+O//uu/4Pf7+WsyMjIAAEqlkn99\n4TgcDgOI3uedMXbZuvSKFSvw3HPPXXV+b7zxBg4fPow9e/bgsccew6lTp6L2+PZ4PNiwYQP+8Ic/\noKSkhD/+yiuvwGw2X/V7f3ruaWlpfO6EEKpREyIbfX19yMzMxJe+9CX8x3/8B06ePMmTsk6ng8fj\n4XXriejq6sLRo0cBAM899xxuvPFGPqZQKLB06VK89957sFgsAMRaeXt7e9T3YIyhq6sLjY2N2LFj\nB0ZGRuDxeKKes3XrVjz44IO44YYb+GMrV67EU089xY9Pnjw54fkTkupoRU2ITJw6dQrf+973oFQq\noVar8bvf/Q4FBQV46KGHUFdXh9LSUixZsuSyr71aB3dtbS2efvppbN26FXPmzMEjjzwSNV5UVITm\n5mZs2rQJgUAAAPDYY49FrYIjkQjuv/9+jIyMgDGGb33rWygoKODv29XVhZdffhnt7e145plnAAB/\n/OMf8ZOf/ATbtm3DvHnzIAgCqqqqLmkou9zcY+1GJySZ0DaXhCQxm82GVatW4dSpU1JPhRByjejU\nNyFJjlanhCQ2WlETQgghMkYrakIIIUTGKFETQgghMkaJmhBCCJExStSEEEKIjFGiJoQQQmSMEjUh\nhBAiY/8fzj2UNX7XML4AAAAASUVORK5CYII=\n", - "text": [ - "" - ] - } - ], - "prompt_number": 71 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "As we can see in the first plot, the list comprehensions lead to a slightly increased performance in regular Python code. \n", - "But the second plot is quite interesting: List comprehensions in Cython are significantly slower than the regular for-loop structures.\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "Let us do a quick comparison by how much we were able to improve the performance of the simple least square implementation using Cython so far:\n", - "
" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import random\n", - "random.seed(12345)\n", - "\n", - "x = [x_i*random.randrange(8,12)/10 for x_i in range(500)]\n", - "y = [y_i*random.randrange(8,12)/10 for y_i in range(100,600)]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 72 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "funcs = ['lstsqr_comprehensions', 'cy_lstsqr_comprehensions', \n", - " 'cy_lstsqr_loops'] \n", - "labels = ['list comprehensions', 'list comprehensions (Cython)', \n", - " 'for-loops (Cython)']\n", - "\n", - "times = [timeit.Timer('%s(x,y)' %f, \n", - " 'from __main__ import %s, x, y' %f).timeit(1000)\n", - " for f in funcs]\n", - "\n", - "times_rel = [times[0]/times[i+1] for i in range(len(times[1:]))]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 73 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "#%pylab inline\n", - "#import matplotlib.pyplot as plt\n", - "\n", - "plt.figure(figsize=(8,6))\n", - "x_pos = np.arange(len(funcs[1:]))\n", - "plt.bar(x_pos, times_rel, align='center', alpha=0.5, color=\"green\")\n", - "plt.xticks(x_pos, labels[1:], rotation=90)\n", - "plt.ylabel('relative performance gain')\n", - "plt.title('Performance gain compared to the classic least square implementation')\n", - "ftext = 'For-loops in Cython are {:.2f}x faster then list comprehensions'\\\n", - " .format(times[1]/times[2],1)\n", - "plt.figtext(.15,.8, ftext, fontsize=11, ha='left')\n", - "plt.xlim([-1,len(funcs[1:])])\n", - "plt.ylim([0,max(times_rel)*1.2])\n", - "plt.grid()\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\nxoyR1NRUSUtLk3379olIVkKpXr26nD9/XpKTk6V79+4yYMAAEfnfCeDtt9+Whw8fytatW8XR0VG6\ndesmN27ckCtXroi3t7fs3r1bialEiRIyd+5cMRgMsmrVKnF1dVVOKEXZ/jn379y5c+X555+XK1eu\nSHp6ugwbNkz69u0rIiInT54UZ2dn2bt3rzx8+FDGjBkjJUqUyDdZi0ietpaeni7VqlWT6dOnS0ZG\nhuzYsUNcXFwkNjY23+lzbvtsOp1OXnrpJbl7965cvHhRvLy8ZMuWLSIisn79eqlevbrExMSI0WiU\nTz/9VJo3b57vvOPj48XFxUVWrlwpBoNBbt26Jf/8848Sd/aJqrD2kZycLGXLlpW4uDgREUlISJCT\nJ0+KiEifPn1k2rRpIpLVBrP3ffY6ZCfrgtp4bjmTtdFolIYNG8rUqVMlIyNDzp07J1WrVpXffvtN\nRLK+nB48eFCMRqPEx8dL7dq1Ze7cuSIismXLFmnUqJHy5TAmJkauXbuW7/7KrbBpe/fuLb1795bU\n1FQ5ceKEVKxYUVq2bCki+SfrnPv2zJkzsm3bNklPT5cbN25Iq1atZPTo0cpn/f39JSgoSC5fvixp\naWmPdPyLmHZ2HvX8FRwcLBUrVpSTJ09KSkqK9OjRQ/r375/venXr1k3eeustSU1NlevXr0uTJk2U\nL8fZx2lkZKRkZmbKpEmTpGLFisoXqa1bt4qLi4ukpKSISNaXopdfflnu3Lkj9+/fl5deekk+/PBD\npS0Udt7Mbz+uWbNG2VerVq0SJycnSUhIEBGRyMhI5YtVtpzz2L59u3h6esrRo0fl4cOH8u6770qr\nVq2UzxZ2TD6OpzpZ+/v7i7Ozs7i5uYm/v7+888478uDBA5kxY4Zyks/WoUMH5RtaSEiITJkyxWR8\nzhORiEi1atVMeoe//fab6PV6EclqFI6OjiYnjylTpkj79u2V4aioKHF2dpbMzEwREbl3757odDrl\ngM6tW7du8tVXXynzL126tMlB7O3trZxoSpcuLcePH88zD3PrndPu3bulYsWKJn9r0aJFgSelo0eP\nKt8uRfIm6+rVqyvjUlJSRKfTSWJiYp75/Pnnn+Ll5WWybtlat24t3377rTIcGxsrDg4OYjQalRNA\nzm+uHh4esnr1amW4R48eysl38eLFeb4wNGnSRJYtW5bv+uXe/rn3b+3atU2S79WrV8XBwUEMBoN8\n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\nZ2dnh+nTp+fZH6mpqejZsyfq1q2LBg0aoHfv3gCyzmM5v9gsXboU9erVQ/369dG9e3fcuHEDQOHn\nj/z2BVkJsVJPEpq/v7/UqlVLGjRoIA0aNJCtW7dKYmKieHl5yalTp0REZNGiRdK0aVMREdm5c6fY\n29vLgQMH8p3f4sWL5dVXXxURkc2bN0tAQIDcv39fREQGDhwo48ePFxGRDz74QMLCwkRE5N69e1K3\nbl359ddfRUQkODhYOnToIEajUZKTkyUwMFA2bdokt27dEjc3N0lLSxMRkeTkZDEYDHliCA8Pl7Fj\nxyrxuLu7y+XLl0VE5M0335SPPvoozzQHDx4UNze3ArfTli1bJDQ0VBlu3bq1REVFiYhISEiI/PLL\nLybboKBlfvPNN9K2bVvJyMiQ9PR0adOmjXz77bciIjJo0CBp2bKlPHz4UNLT06Vu3bry+++/5xvP\nrVu3REQkMzNTBg4cKN99952ybGdnZzl37pyIiNy5c0eCgoLk2rVrIiJy9epVqVSpkiQlJRW4riIi\n48ePl0aNGuU7zmg0SnBwsBw7dkzOnz8vnp6eyrgdO3ZIzZo15ebNm5KRkSG9e/eWsmXLKuNff/11\nef/99+WTTz6R3r17F7h8nU4nKSkpIiKSlpYmycnJIiKSnp4urVu3li1btoiISP369ZW2mJmZKffu\n3RORvPtk2bJlMnToUMnMzBSRrP3Qr18/ERGZMmWK+Pn5Kds0t8jISKVN54xv/vz5IiKyb98+qVix\noogUvL3v3r0r58+fF51Op8S1YsUKeeGFF/JdZlhYmDL/8PBwGTdunIiIdO3aVX766Sflc9n7Mefn\n8xMSEiKzZ89Whm/evCkiIr169ZKPP/5YRESuXbsmvr6+cvLkSRER0ev18sEHH4iIyF9//SWlS5eW\nb775RkREVq9eLS1atBARUdZr2bJlIiKya9cuqVSpkqSnpyvjpkyZoiy7bdu2smfPHhERefjwobRo\n0UJp53q9XlnX+Ph4cXZ2lpSUFMnIyJCGDRtKTEyMiGSdM2rWrCmxsbGF7o+ff/5ZOnTokGd77dy5\nUxo3biwiIv/++6/4+vpKQkKCiIhMnjxZaZuFHcsvv/xyvvuCtFFY3rOZy+AbN25E/fr1UatWLQBZ\nPb7hw4crveIaNWqgadOmZue9bds29O3bF87OzgCAoUOHYtSoUQCA7du3IyIiAgDg4uKCvn37Ytu2\n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\nRkSqmRA+AQlJCcUdBlmAj5sPZoTzUVtLKizv2cyvbhGR5SUkJUDfTV/cYZAFxK+PL+4QbBpfN0o2\ngzVGUlP8P/HFHQLZECZrIiIiK8dkTTYj+xlHIjXoG+iLOwSyIUzWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUsl\nzH0gNjYWs2fPRnx8PAwGAwBAp9Nhx44dFg+OiIiIipCse/bsibfffhtvvPEG7O3tAWQla6Knza5d\nu9i7JtXE/xPP3jVpxmyydnBwwNtvv61FLERERJQPszXrl156CfPnz8e1a9dw+/Zt5R/R04a9alIT\ne9WkJbM968jISOh0OsyePdvk7+fPn7dYUERERPQ/ZpN1fHy8BmEQWR5r1qQm1qxJSwUm6+3bt6NN\nmzZYu3ZtvjeUde/e3aKBERERUZYCk/WePXvQpk0bbNy4kcmangnsVZOa2KsmLRWYrD/55BMAWTVr\nIiIiKj5ma9YAsGnTJkRHRyMtLU3528cff2yxoIgsgTVrUhNr1qQls49uDRs2DKtXr0ZERAREBKtX\nr8aFCxe0iI2IiIhQhGT9559/YunSpShXrhymTJmCAwcOIDY2VovYiFTFXjWpib1q0pLZZF26dGkA\nQJkyZXDlyhWUKFECCQkJFg+MiIiIsphN1l26dMGdO3cwbtw4NGrUCHq9Hn379i3yApKSkvDqq6+i\n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\nYiLKly8PAChfvjwSExO1CoOIiOipU0KLhSQnJ6NHjx746quv4OLiYjJOp9NBp9PlO11YWBj0ej0A\nwM6JhrcAABkuSURBVM3NDQ0aNEBISAgAYNeuXQDA4ScYTricAD30AP7XS8iuwz2rw9msJR5LDSdc\nTsCuXbs0b1/Zinv92Z7UH064nKCsrzWcv56F4ez/x8fHwxydiIjZTz2BjIwMdOnSBZ06dcLo0aMB\nALVq1cKuXbvg4+ODa9euITQ0FDExMaaB6XSwcGg2L2x0GPTd9MUdBllA/Pp4RM6N1Hy5bFPPruJq\nU7aksLxn0cvgIoLXX38dderUURI1AHTt2hVLliwBACxZsgTdunWzZBhEAFhjJHWxPZGWLHoZfN++\nfVi+fDnq1auHoKAgAMD06dMxYcIE9OrVC4sWLYJer8fq1astGQYREdFTzaLJukWLFsjMzMx33LZt\n2yy5aKI8+FwsqYntibTEN5gRERFZOSZrshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRER\nkZVjsiabwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWRERE\nVo7JmmwGa4ykJrYn0hKTNRERkZVjsiabwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZ\nOSZrshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRERkZVjsiabwRojqYntibTEZE1ERGTl\nmKzJZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRERkZVj\nsiabwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWREREVo7J\nmmwGa4ykJrYn0hKTNRERkZVjsiabwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZOSZr\nshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRERkZVjsiabwRojqYntibTEZE1ERGTlmKzJ\nZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRERkZVjsiab\nwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWREREVo7JmmwG\n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\n", - "text": [ - "" - ] - } - ], - "prompt_number": 88 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Final Comparison: Cython vs. NumPy vs. SciPy for least squares fitting" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To wrap it up, let us compare the Cython code of our simple least squares fit implementation to the Numpy and Scipy functions - after we made some improvements by adding static type declarations and explicit for loops." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%load_ext cythonmagic" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 1 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%cython\n", - "\n", - "def cy_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " cdef double x_avg, y_avg, temp, var_x, cov_xy, slope, y_interc, x_i, y_i\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = 0\n", - " for x_i, y_i in zip(x,y):\n", - " temp = (x_i - x_avg)\n", - " var_x += temp**2\n", - " cov_xy += temp*(y_i - y_avg)\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 2 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import numpy as np\n", - "import scipy.stats" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 3 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def lin_lstsqr_mat(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " X = np.vstack([x, np.ones(len(x))]).T\n", - " return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 4 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def numpy_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " X = np.vstack([x, np.ones(len(x))]).T\n", - " return np.linalg.lstsq(X,y)[0]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 5 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def scipy_lstsqr(x,y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " return scipy.stats.linregress(x, y)[0:2]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 6 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "import random\n", - "random.seed(12345)\n", - "\n", - "funcs = ['cy_lstsqr', 'lin_lstsqr_mat',\n", - " 'numpy_lstsqr', 'scipy_lstsqr'] \n", - "\n", - "orders_n = [10**n for n in range(1, 6)]\n", - "times_n = {f:[] for f in funcs}\n", - "\n", - "for n in orders_n:\n", - " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", - " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", - " for f in funcs:\n", - " times_n[f].append(min(timeit.Timer('%s(x,y)' %f, \n", - " 'from __main__ import %s, x, y' %f)\n", - " .repeat(repeat=3, number=1000)))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 26 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%pylab inline" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import matplotlib.pyplot as plt\n", - "\n", - "labels = [('cy_lstsqr', 'Cython implementation'), \n", - " ('lin_lstsqr_mat', 'numpy matrix equation'),\n", - " ('numpy_lstsqr', 'numpy.linalg.lstsq()'), \n", - " ('scipy_lstsqr', 'scipy.stats.linregress()')] \n", - "\n", - "matplotlib.rcParams.update({'font.size': 12})\n", - "\n", - "fig = plt.figure(figsize=(10,8))\n", - "for lb in labels:\n", - " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", - "plt.xlabel('sample size n')\n", - "plt.ylabel('performance gain relative to the slowest approach')\n", - "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", - "plt.legend(loc=2)\n", - "plt.grid()\n", - "plt.xscale('log')\n", - "plt.yscale('log')\n", - "plt.title('Performance of least square fit implementations for different sample sizes')\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\n44cFB3d5aZCuuOaFCxf49NNPuffee/H39ycvL4+9e/cSHR3N3Llzefvtt7n33nt5++23CQ4OJj09\nneLiYh544IHrXvPLL78kPDycoUOHsnbtWg4dOsRHH32k85zHH3+c+fPno1areeSRRwDYsmULL7/8\nMvHx8fj4+PDFF18gSRLDhg3DxcWFXbt2UVlZqZ3DGBQUREFBAYcOHSI0NBR7e3sCAgKwtrbmX//6\nF88++yyZmZksWbJE5/+ru7s7Dg4O/Prrr0RERGBtbY1SqeTPf/4z99xzD3379qWuro7NmzfTu3dv\nbZmMl19+mSNHjrBz585OxVyfXs5Vq1Zx11138dxzz7FgwQIcHR05f/48mzZt4sMPP8TGxobnnnuO\n5cuXEx4ezrBhw/jpp5/YsWPHTf8YGj9+PBMnTmTmzJm8/fbbDBgwgNLSUn7//XdsbW155JFHbhr7\nm8VqzJgx11yFLEkShw8f5u233+5A5ATh1pRWksY3Sd+0SuIuMy3XgTpbR9Z4eVHi4QH9+4OFBZNd\nXRnh7GziFgvdnqSHffv2Sd7e3pJSqZTkcrmkVColCwsLKSgoSJ9vv6bNmzdLP/zwg/Q///M/Umxs\nrM5jc+bMkebMmSNVV1dL+/fvl5ydnaXk5GSd58TGxkpJSUnXvf6NXpqeL9vs5OfnSzNnzpT8/f0l\na2trydfXV3rsscekiooKSZIkqaCgQHrooYckd3d3ycbGRoqIiJC+/vprSZIkKSMjQ5LL5dKBAwe0\nxzKZTFq7dq00duxYycbGRgoODpY2bNhw1X0bGxslT09PaerUqdpzX331lSSXy6WsrCxJkjT/P0eN\nGiUplUrJzs5OGjBggPTll1/qXGPevHmSq6urJJPJpJUrV0qSJEmbNm2S+vTpI9nY2EhRUVHSnj17\nJIVCoW23JEnS6tWrpaCgIEmhUGjfc0899ZTUt29fydbWVnJzc5OmTp0qpaSkaL8nNjZW5/0ZHx8v\nyeVyKTc397rxaH3cLDQ0VNtWSZIkmUwmrVu37qoY7du3T5o4caLk6Ogo2dvbSxEREdIzzzwjNTU1\nSZIkSWq1Wnr55Zcld3d3ycHBQZo7d670xhtvSI6OjtprrFixQurTp89V166trZWWLFkiBQUFSVZW\nVpK3t7c0ZcoUKT4+Xq/Y3yxWRUVFko2NjXTs2DGd++7fv1+yt7eXKisrr2pTe3XXnzlBaI9zReek\n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\n", - "text": [ - "" - ] - } - ], - "prompt_number": 70 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "So, using a few tweaks, such as static type declarations and explicit for-loops instead of list comprehensions, we managed to increase the performance of our least squares fit implementation quite significantly - it outperforms the alternative functions in Numpy and Scipy now." - ] - } - ], - "metadata": {} - } - ] -} \ No newline at end of file From 3ef96e3874ab214f009a8b3f21f1e20b015847d6 Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 6 May 2014 16:13:21 -0400 Subject: [PATCH 024/248] print fixes --- README.md | 2 +- benchmarks/palindrome_timeit.ipynb | 24 +- benchmarks/timeit_tests.ipynb | 2 +- not_so_obvious_python_stuff.ipynb | 30 +- python_true_false.html | 2297 ----------------- .../python_true_false.ipynb | 14 +- 6 files changed, 40 insertions(+), 2329 deletions(-) delete mode 100644 python_true_false.html rename python_true_false.ipynb => tutorials/python_true_false.ipynb (96%) diff --git a/README.md b/README.md index 1305f53..c970e0e 100755 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Useful functions, tutorials, and other Python-related things ###Links to view the IPython Notebooks - [Python benchmarks via `timeit`](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/timeit_tests.ipynb?create=1) -- [Implementing the least squares fit method for linear regression and speeding it up via Cythonook](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb?create=1) +- [Implementing the least squares fit method for linear regression and speeding it up via Cython](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb?create=1) - [Benchmarks of different palindrome functions](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/palindrome_timeit.ipynb?create=1) - [A collection of not so obvious Python stuff you should know!](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb?create=1) - [Python's scope resolution for variable names and the LEGB rule](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb?create=1) diff --git a/benchmarks/palindrome_timeit.ipynb b/benchmarks/palindrome_timeit.ipynb index ef0e33f..f1df349 100644 --- a/benchmarks/palindrome_timeit.ipynb +++ b/benchmarks/palindrome_timeit.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:6ea19109869c82ee989c8ea0599ec49401e74246a542ad0b7b05f6ef464bda19" + "signature": "sha256:3d878b64b4503fd987496df562af53903ad85d4cce103ea0a2e6c456519c03c7" }, "nbformat": 3, "nbformat_minor": 0, @@ -12,8 +12,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Sebastian Raschka 04/2014\n", + "[Sebastian Raschka](http://sebastianraschka.com) \n", + "last updated: 05/03/2014\n", "\n", + "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/benchmarks/palindrome_timeit.ipynb) \n", + "- [Link to the GitHub repository](https://github.com/rasbt/python_reference) \n", + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "#Timing different Implementations of palindrome functions" ] }, @@ -178,14 +190,6 @@ } ], "prompt_number": 11 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [] } ], "metadata": {} diff --git a/benchmarks/timeit_tests.ipynb b/benchmarks/timeit_tests.ipynb index d1bc680..bbd8c17 100644 --- a/benchmarks/timeit_tests.ipynb +++ b/benchmarks/timeit_tests.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:75d807f509bd9f76b2e14a5a048cb44852a3318bcd0d95afc95d1c9b2904c078" + "signature": "sha256:132d5623e27eb721587599809f9870d397887ec873bbbdc95b25a05e710d160e" }, "nbformat": 3, "nbformat_minor": 0, diff --git a/not_so_obvious_python_stuff.ipynb b/not_so_obvious_python_stuff.ipynb index 1e0ef3c..0a9632c 100644 --- a/not_so_obvious_python_stuff.ipynb +++ b/not_so_obvious_python_stuff.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:0e1c6e74b301e23ea4146d660afb3f07765686c6c7fa4752f3a4495da7949787" + "signature": "sha256:7a22f6c91e4aab51a325c721dd7674622d1acc5b4a3a038ff512c736d83bbe4a" }, "nbformat": 3, "nbformat_minor": 0, @@ -12,11 +12,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Sebastian Raschka \n", + "[Sebastian Raschka](http://sebastianraschka.com) \n", "last updated: 05/03/2014 ([Changelog](#changelog))\n", "\n", - "[Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb)\n", - "\n", + "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb) \n", + "- [Link to the GitHub repository](https://github.com/rasbt/python_reference) \n", "\n" ] }, @@ -307,14 +307,6 @@ ], "prompt_number": 6 }, - { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [] - }, { "cell_type": "markdown", "metadata": {}, @@ -684,13 +676,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "** Logical `or`: ** \n", + "**Logical `or`:** \n", "\n", "`a or b == a if a else b` \n", "- If both values in `or` expressions are `True`, Python will select the first value (e.g., select `\"a\"` in `\"a\" or \"b\"`), and the second one in `and` expressions. \n", "This is also called **short-circuiting** - we already know that the logical `or` must be `True` if the first value is `True` and therefore can omit the evaluation of the second value.\n", "\n", - "** Logical `and`: ** \n", + "**Logical `and`:** \n", "\n", "`a and b == b if a else a` \n", "- If both values in `and` expressions are `True`, Python will select the second value, since for a logical `and`, both values must be true.\n" @@ -3448,8 +3440,14 @@ "metadata": {}, "source": [ "I would claim that the conditional \"else\" is every programmer's daily bread and butter. However, there is a second flavor of \"else\"-clauses in Python, which I will call \"completion else\" (for reason that will become clear later). \n", - "But first, let us take a look at our \"traditional\" conditional else that we all are familiar with. \n", - "### Conditional else:" + "But first, let us take a look at our \"traditional\" conditional else that we all are familiar with. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###Conditional else:" ] }, { diff --git a/python_true_false.html b/python_true_false.html deleted file mode 100644 index 079d7cb..0000000 --- a/python_true_false.html +++ /dev/null @@ -1,2297 +0,0 @@ - - - - -[] - - - - - - - - - - - - - - -
-

Sebastian Raschka, 03/2014
Code was executed in Python 3.4.0

-
-
-

True and False in the datetime module

-

Pointed out in a nice article "A false midnight" at http://lwn.net/SubscriberLink/590299/bf73fe823974acea/:

-

"it often comes as a big surprise for programmers to find (sometimes by way of a hard-to-reproduce bug) that,
unlike any other time value, midnight (i.e. datetime.time(0,0,0)) is False.
A long discussion on the python-ideas mailing list shows that, while surprising,
that behavior is desirable—at least in some quarters."

-
-
-
-
-In [17]: -
-
-
import datetime
-
-print('"datetime.time(0,0,0)" (Midnight) evaluates to', bool(datetime.time(0,0,0)))
-
-print('"datetime.time(1,0,0)" (1 am) evaluates to', bool(datetime.time(1,0,0)))
-
- -
-
- -
-
- - -
-
-
-"datetime.time(0,0,0)" (Midnight) evaluates to False
-"datetime.time(1,0,0)" (1 am) evaluates to True
-
-
-
-
- -
-
- -
-
-

Boolean True

-
-
-
-
-In [83]: -
-
-
my_true_val = True
-
-
-print('my_true_val == True:', my_true_val == True)
-print('my_true_val is True:', my_true_val is True)
-
-print('my_true_val == None:', my_true_val == None)
-print('my_true_val is None:', my_true_val is None)
-
-print('my_true_val == False:', my_true_val == False)
-print('my_true_val is False:', my_true_val is False)
-
-print(my_true_val
-if my_true_val:
-    print('"if my_true_val:" is True')
-else:
-    print('"if my_true_val:" is False')
-    
-if not my_true_val:
-    print('"if not my_true_val:" is True')
-else:
-    print('"if not my_true_val:" is False')
-
- -
-
- -
-
- - -
-
-
-my_true_val == True: True
-my_true_val is True: True
-my_true_val == None: False
-my_true_val is None: False
-my_true_val == False: False
-my_true_val is False: False
-"if my_true_val:" is True
-"if not my_true_val:" is False
-
-
-
-
- -
-
- -
-
-

Boolean False

-
-
-
-
-In [76]: -
-
-
my_false_val = False
-
-
-print('my_false_val == True:', my_false_val == True)
-print('my_false_val is True:', my_false_val is True)
-
-print('my_false_val == None:', my_false_val == None)
-print('my_false_val is None:', my_false_val is None)
-
-print('my_false_val == False:', my_false_val == False)
-print('my_false_val is False:', my_false_val is False)
-
-
-if my_false_val:
-    print('"if my_false_val:" is True')
-else:
-    print('"if my_false_val:" is False')
-    
-if not my_false_val:
-    print('"if not my_false_val:" is True')
-else:
-    print('"if not my_false_val:" is False')
-
- -
-
- -
-
- - -
-
-
-my_false_val == True: False
-my_false_val is True: False
-my_false_val == None: False
-my_false_val is None: False
-my_false_val == False: True
-my_false_val is False: True
-"if my_false_val:" is False
-"if not my_false_val:" is True
-
-
-
-
- -
-
- -
-
-

None 'value'

-
-
-
-
-In [62]: -
-
-
my_none_var = None
-
-print('my_none_var == True:', my_none_var == True)
-print('my_none_var is True:', my_none_var is True)
-
-print('my_none_var == None:', my_none_var == None)
-print('my_none_var is None:', my_none_var is None)
-
-print('my_none_var == False:', my_none_var == False)
-print('my_none_var is False:', my_none_var is False)
-
-
-if my_none_var:
-    print('"if my_none_var:" is True')
-else:
-    print('"if my_none_var:" is False')
-
-if not my_none_var:
-    print('"if not my_none_var:" is True')
-else:
-    print('"if not my_none_var:" is False')
-
- -
-
- -
-
- - -
-
-
-my_none_var == True: False
-my_none_var is True: False
-my_none_var == None: True
-my_none_var is None: True
-my_none_var == False: False
-my_none_var is False: False
-"if my_none_var:" is False
-"if not my_none_var:" is True
-
-
-
-
- -
-
- -
-
-

Empty String

-
-
-
-
-In [61]: -
-
-
my_empty_string = ""
-
-print('my_empty_string == True:', my_empty_string == True)
-print('my_empty_string is True:', my_empty_string is True)
-
-print('my_empty_string == None:', my_empty_string == None)
-print('my_empty_string is None:', my_empty_string is None)
-
-print('my_empty_string == False:', my_empty_string == False)
-print('my_empty_string is False:', my_empty_string is False)
-
-
-if my_empty_string:
-    print('"if my_empty_string:" is True')
-else:
-    print('"if my_empty_string:" is False')
-    
-if not my_empty_string:
-    print('"if not my_empty_string:" is True')
-else:
-    print('"if not my_empty_string:" is False')
-
- -
-
- -
-
- - -
-
-
-my_empty_string == True: False
-my_empty_string is True: False
-my_empty_string == None: False
-my_empty_string is None: False
-my_empty_string == False: False
-my_empty_string is False: False
-"if my_empty_string:" is False
-"if my_empty_string:" is True
-
-
-
-
- -
-
- -
-
-

Empty List

-

It is generally not a good idea to use the == to check for empty lists...

-
-
-
-
-In [67]: -
-
-
my_empty_list = []
-
-
-print('my_empty_list == True:', my_empty_list == True)
-print('my_empty_list is True:', my_empty_list is True)
-
-print('my_empty_list == None:', my_empty_list == None)
-print('my_empty_list is None:', my_empty_list is None)
-
-print('my_empty_list == False:', my_empty_list == False)
-print('my_empty_list is False:', my_empty_list is False)
-
-
-if my_empty_list:
-    print('"if my_empty_list:" is True')
-else:
-    print('"if my_empty_list:" is False')
-    
-if not my_empty_list:
-    print('"if not my_empty_list:" is True')
-else:
-    print('"if not my_empty_list:" is False')
-
-
-    
-
- -
-
- -
-
- - -
-
-
-my_empty_list == True: False
-my_empty_list is True: False
-my_empty_list == None: False
-my_empty_list is None: False
-my_empty_list == False: False
-my_empty_list is False: False
-"if my_empty_list:" is False
-"if not my_empty_list:" is True
-
-
-
-
- -
-
- -
-
-

[0]-List

-
-
-
-
-In [70]: -
-
-
my_zero_list = [0]
-
-
-print('my_zero_list == True:', my_zero_list == True)
-print('my_zero_list is True:', my_zero_list is True)
-
-print('my_zero_list == None:', my_zero_list == None)
-print('my_zero_list is None:', my_zero_list is None)
-
-print('my_zero_list == False:', my_zero_list == False)
-print('my_zero_list is False:', my_zero_list is False)
-
-
-if my_zero_list:
-    print('"if my_zero_list:" is True')
-else:
-    print('"if my_zero_list:" is False')
-    
-if not my_zero_list:
-    print('"if not my_zero_list:" is True')
-else:
-    print('"if not my_zero_list:" is False')
-
- -
-
- -
-
- - -
-
-
-my_zero_list == True: False
-my_zero_list is True: False
-my_zero_list == None: False
-my_zero_list is None: False
-my_zero_list == False: False
-my_zero_list is False: False
-"if my_zero_list:" is True
-"if not my_zero_list:" is False
-
-
-
-
- -
-
- -
-
-

List comparison

-

List comparisons are a handy way to show the difference between == and is.
While == is rather evaluating the equality of the value, is is checking if two objects are equal. The examples below show that we can assign a pointer to the same list object by using =, e.g., list1 = list2.
a) If we want to make a shallow copy of the list values, we have to make a little tweak: list1 = list2[:], or
b) a deepcopy via list1 = copy.deepcopy(list2)

-

Possibly the best explanation of shallow vs. deep copies I've read so far:

-

*** "Shallow copies duplicate as little as possible. A shallow copy of a collection is a copy of the collection structure, not the elements. With a shallow copy, two collections now share the individual elements. Deep copies duplicate everything. A deep copy of a collection is two collections with all of the elements in the original collection duplicated."***

-

(via S.Lott on StackOverflow)

-
-
-

a) Shallow vs. deep copies for simple elements

-

List modification of the original list doesn't affect
shallow copies or deep copies if the list contains literals.

-
-
-
-
-In [11]: -
-
-
from copy import deepcopy
-
-my_first_list = [1]
-my_second_list = [1]
-print('my_first_list == my_second_list:', my_first_list == my_second_list)
-print('my_first_list is my_second_list:', my_first_list is my_second_list)
-
-my_third_list = my_first_list
-print('my_first_list == my_third_list:', my_first_list == my_third_list)
-print('my_first_list is my_third_list:', my_first_list is my_third_list)
-
-my_shallow_copy = my_first_list[:]
-print('my_first_list == my_shallow_copy:', my_first_list == my_shallow_copy)
-print('my_first_list is my_shallow_copy:', my_first_list is my_shallow_copy)
-
-my_deep_copy = deepcopy(my_first_list)
-print('my_first_list == my_deep_copy:', my_first_list == my_deep_copy)
-print('my_first_list is my_deep_copy:', my_first_list is my_deep_copy)
-
-print('\nmy_third_list:', my_third_list)
-print('my_shallow_copy:', my_shallow_copy)
-print('my_deep_copy:', my_deep_copy)
-
-my_first_list[0] = 2
-print('after setting "my_first_list[0] = 2"')
-print('my_third_list:', my_third_list)
-print('my_shallow_copy:', my_shallow_copy)
-print('my_deep_copy:', my_deep_copy)
-
- -
-
- -
-
- - -
-
-
-my_first_list == my_second_list: True
-my_first_list is my_second_list: False
-my_first_list == my_third_list: True
-my_first_list is my_third_list: True
-my_first_list == my_shallow_copy: True
-my_first_list is my_shallow_copy: False
-my_first_list == my_deep_copy: True
-my_first_list is my_deep_copy: False
-
-my_third_list: [1]
-my_shallow_copy: [1]
-my_deep_copy: [1]
-after setting "my_first_list[0] = 2"
-my_third_list: [2]
-my_shallow_copy: [1]
-my_deep_copy: [1]
-
-
-
-
- -
-
- -
-
-

b) Shallow vs. deep copies if list contains other structures and objects

-

List modification of the original list does affect
shallow copies, but not deep copies if the list contains compound objects.

-
-
-
-
-In [13]: -
-
-
my_first_list = [[1],[2]]
-my_second_list = [[1],[2]]
-print('my_first_list == my_second_list:', my_first_list == my_second_list)
-print('my_first_list is my_second_list:', my_first_list is my_second_list)
-
-my_third_list = my_first_list
-print('my_first_list == my_third_list:', my_first_list == my_third_list)
-print('my_first_list is my_third_list:', my_first_list is my_third_list)
-
-my_shallow_copy = my_first_list[:]
-print('my_first_list == my_shallow_copy:', my_first_list == my_shallow_copy)
-print('my_first_list is my_shallow_copy:', my_first_list is my_shallow_copy)
-
-my_deep_copy = deepcopy(my_first_list)
-print('my_first_list == my_deep_copy:', my_first_list == my_deep_copy)
-print('my_first_list is my_deep_copy:', my_first_list is my_deep_copy)
-
-print('\nmy_third_list:', my_third_list)
-print('my_shallow_copy:', my_shallow_copy)
-print('my_deep_copy:', my_deep_copy)
-
-my_first_list[0][0] = 2
-print('after setting "my_first_list[0][0] = 2"')
-print('my_third_list:', my_third_list)
-print('my_shallow_copy:', my_shallow_copy)
-print('my_deep_copy:', my_deep_copy)
-
- -
-
- -
-
- - -
-
-
-my_first_list == my_second_list: True
-my_first_list is my_second_list: False
-my_first_list == my_third_list: True
-my_first_list is my_third_list: True
-my_first_list == my_shallow_copy: True
-my_first_list is my_shallow_copy: False
-my_first_list == my_deep_copy: True
-my_first_list is my_deep_copy: False
-
-my_third_list: [[1], [2]]
-my_shallow_copy: [[1], [2]]
-my_deep_copy: [[1], [2]]
-after setting "my_first_list[0][0] = 2"
-my_third_list: [[2], [2]]
-my_shallow_copy: [[2], [2]]
-my_deep_copy: [[1], [2]]
-
-
-
-
- -
-
- -
-
-

Some Python oddity:

-
- -
-
-
-In [1]: -
-
-
a = 1
-b = 1
-print('a is b', bool(a is b))
-True
-
-a = 999
-b = 999
-print('a is b', bool(a is b))
-
- -
-
- -
-
- - -
-
-
-a is b True
-a is b False
-
-
-
-
- -
-
- -
- - diff --git a/python_true_false.ipynb b/tutorials/python_true_false.ipynb similarity index 96% rename from python_true_false.ipynb rename to tutorials/python_true_false.ipynb index b2786a2..fa8c446 100644 --- a/python_true_false.ipynb +++ b/tutorials/python_true_false.ipynb @@ -1,6 +1,7 @@ { "metadata": { - "name": "" + "name": "", + "signature": "sha256:f6d59feb844af096c0581919fa052e8f29f4fa0aaa81752f5e50241ab084a0e9" }, "nbformat": 3, "nbformat_minor": 0, @@ -11,7 +12,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Sebastian Raschka, 03/2014 \n", + "[Sebastian Raschka](http://sebastianraschka.com) \n", + "last updated: 05/03/2014\n", + "\n", + "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/benchmarks/python_true_false.ipynb) \n", + "- [Link to the GitHub repository](https://github.com/rasbt/python_reference) \n", + "\n", "Code was executed in Python 3.4.0" ] }, @@ -392,8 +398,8 @@ "\n", "Possibly the best explanation of shallow vs. deep copies I've read so far:\n", "\n", - "*** \"Shallow copies duplicate as little as possible. A shallow copy of a collection is a copy of the collection structure, not the elements. With a shallow copy, two collections now share the individual elements.\n", - "Deep copies duplicate everything. A deep copy of a collection is two collections with all of the elements in the original collection duplicated.\"***\n", + "***\"Shallow copies duplicate as little as possible. A shallow copy of a collection is a copy of the collection structure, not the elements. With a shallow copy, two collections now share the individual elements.\n", + "Deep copies duplicate everything. A deep copy of a collection is two collections with all of the elements in the original collection duplicated.\"*** \n", "\n", "(via [S.Lott](http://stackoverflow.com/users/10661/s-lott) on [StackOverflow](http://stackoverflow.com/questions/184710/what-is-the-difference-between-a-deep-copy-and-a-shallow-copy))" ] From 2bd3c300f4604a6f3302488e977027aee9b8fde4 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 7 May 2014 03:04:41 -0400 Subject: [PATCH 025/248] plot fixes --- Images/cython_final_leastsqr.png | Bin 53922 -> 53131 bytes benchmarks/cython_least_squares.ipynb | 19 +- benchmarks/palindrome_timeit.ipynb | 150 ++++++-- benchmarks/timeit_tests.ipynb | 502 +++++++++++++++++++++++--- 4 files changed, 600 insertions(+), 71 deletions(-) diff --git a/Images/cython_final_leastsqr.png b/Images/cython_final_leastsqr.png index 9ae7432ba6ea289adee7bdc337873ddd33461256..036c5079074b2eef5d069a02d02f1204110181d0 100644 GIT binary patch literal 53131 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

(`6dWPC(a3D4QZt`<~i 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 literal 53922 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�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 LM=MRk`qcjb_~k5? diff --git a/benchmarks/cython_least_squares.ipynb b/benchmarks/cython_least_squares.ipynb index f1c57d5..59ab236 100644 --- a/benchmarks/cython_least_squares.ipynb +++ b/benchmarks/cython_least_squares.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:bbbdc8e390979922204161079c12c6b2020e8457991ef30ddd3766fb3c4503e6" + "signature": "sha256:12829b0c696b932be7039bcfd54490f1918f4155c72cd73b7fcfe1b46387decb" }, "nbformat": 3, "nbformat_minor": 0, @@ -2182,7 +2182,8 @@ "source": [ "
\n", "As we can see in the first plot, the list comprehensions lead to a slightly increased performance in regular Python code. \n", - "But the second plot is quite interesting: List comprehensions in Cython are significantly slower than the regular for-loop structures.\n", + "But the second plot is quite interesting: List comprehensions in Cython are significantly slower than the regular for-loop structures. \n", + "Apparently, Cython has no difficulties turning the explicit for-loop into for-loop in C with basic float arithmetic. However, the list comprehension version is constantly writing to memory while it is iterating and appending new values.\n", "
" ] }, @@ -2314,6 +2315,7 @@ " x_avg = sum(x)/len(x)\n", " y_avg = sum(y)/len(y)\n", " var_x = 0\n", + " cov_xy = 0\n", " for x_i, y_i in zip(x,y):\n", " temp = (x_i - x_avg)\n", " var_x += temp**2\n", @@ -2405,7 +2407,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 26 + "prompt_number": 7 }, { "cell_type": "code", @@ -2415,7 +2417,8 @@ ], "language": "python", "metadata": {}, - "outputs": [] + "outputs": [], + "prompt_number": 9 }, { "cell_type": "code", @@ -2434,7 +2437,7 @@ "for lb in labels:\n", " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", "plt.xlabel('sample size n')\n", - "plt.ylabel('performance gain relative to the slowest approach')\n", + "plt.ylabel('time per computation in milliseconds [ms]')\n", "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", "plt.legend(loc=2)\n", "plt.grid()\n", @@ -2449,13 +2452,13 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\n44cFB3d5aZCuuOaFCxf49NNPuffee/H39ycvL4+9e/cSHR3N3Llzefvtt7n33nt5++23CQ4OJj09\nneLiYh544IHrXvPLL78kPDycoUOHsnbtWg4dOsRHH32k85zHH3+c+fPno1areeSRRwDYsmULL7/8\nMvHx8fj4+PDFF18gSRLDhg3DxcWFXbt2UVlZqZ3DGBQUREFBAYcOHSI0NBR7e3sCAgKwtrbmX//6\nF88++yyZmZksWbJE5/+ru7s7Dg4O/Prrr0RERGBtbY1SqeTPf/4z99xzD3379qWuro7NmzfTu3dv\nbZmMl19+mSNHjrBz585OxVyfXs5Vq1Zx11138dxzz7FgwQIcHR05f/48mzZt4sMPP8TGxobnnnuO\n5cuXEx4ezrBhw/jpp5/YsWPHTf8YGj9+PBMnTmTmzJm8/fbbDBgwgNLSUn7//XdsbW155JFHbhr7\nm8VqzJgx11yFLEkShw8f5u233+5A5ATh1pRWksY3Sd+0SuIuMy3XgTpbR9Z4eVHi4QH9+4OFBZNd\nXRnh7GziFgvdnqSHffv2Sd7e3pJSqZTkcrmkVColCwsLKSgoSJ9vv6bNmzdLP/zwg/Q///M/Umxs\nrM5jc+bMkebMmSNVV1dL+/fvl5ydnaXk5GSd58TGxkpJSUnXvf6NXpqeL9vs5OfnSzNnzpT8/f0l\na2trydfXV3rsscekiooKSZIkqaCgQHrooYckd3d3ycbGRoqIiJC+/vprSZIkKSMjQ5LL5dKBAwe0\nxzKZTFq7dq00duxYycbGRgoODpY2bNhw1X0bGxslT09PaerUqdpzX331lSSXy6WsrCxJkjT/P0eN\nGiUplUrJzs5OGjBggPTll1/qXGPevHmSq6urJJPJpJUrV0qSJEmbNm2S+vTpI9nY2EhRUVHSnj17\nJIVCoW23JEnS6tWrpaCgIEmhUGjfc0899ZTUt29fydbWVnJzc5OmTp0qpaSkaL8nNjZW5/0ZHx8v\nyeVyKTc397rxaH3cLDQ0VNtWSZIkmUwmrVu37qoY7du3T5o4caLk6Ogo2dvbSxEREdIzzzwjNTU1\nSZIkSWq1Wnr55Zcld3d3ycHBQZo7d670xhtvSI6OjtprrFixQurTp89V166trZWWLFkiBQUFSVZW\nVpK3t7c0ZcoUKT4+Xq/Y3yxWRUVFko2NjXTs2DGd++7fv1+yt7eXKisrr2pTe3XXnzlBaI9zReek\n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\n", + "png": "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\nhIWFoVGjRlBTU4Oenp5c9dvS0hLh4eG4c+cOtLW1oaurW6r97NatG9q0aYOhQ4fC398f2traWLhw\nIXJyckQOUEVUVNblobrbybLqV0WUVdaKh79L3amud4uVlRX27NmDGzduQCqVQltbW2av1Zw5c9Cq\nVSs4ODiA53mEhIRAS0sLDRo0gEQiqbA9fFc2bdoEe3t7tGzZEiEhITh37hz8/f1lxu3WrVuV7PrN\nN9+gd+/eaNiwId68eYO9e/eiQYMGghNX3J4xMTEYPnw4fH190bBhQ6SkpAAoHOEyMjLCN998g40b\nN6Jfv36YO3cu6tWrh/v37+Pff/9Fnz590L59+3JtWuMoZipe9fHo0SNhK5BZs2bRnj17qk22l5dX\nqVWrJQkNDaX27duTpqYmaWtrU7NmzWjhwoXC9bImUPr6+oommhMR5ebm0syZM4Vl9Y6OjqJVNUSl\nl2ETFU6aVlFREYUFBwcTz/OisO3btxPP85Sfn09EhZOke/bsSRKJhExNTcnX15fGjh0r2gZClv6L\nFi0StgIoYuvWreTk5ERqampkYGBAffr0ES0c+OOPP6hZs2akrq5Oenp61K5dO9qwYUMpuxTn3Llz\n5OzsTBoaGqSrq0vDhg0TVgQRFU6U5Xm+wsUOsp5jRc8tMjJSWPpvb29Pf/75J9nY2JCfnx8REZ04\ncYK6du1KRkZGpK6uTg0bNqTly5eL7jFlyhSSSqXlbj+yd+9e6tChA+np6QlbRGzatEkUZ82aNWRm\nZkYaGhrUvXv3UtsjEBEdPHiQGjVqRBoaGtSpUycKCwsjnueFCfC5ubk0YcIE0tfXJ21tbRo2bBit\nW7dOVEZklUmiwlWoM2fOJEtLS1JVVSUTExNyd3cXrW4uiaxnEx4eLloNSES0YsUKMjMzIyUlpXK3\nHyk5uVzWZPPiz6cIe3t70eroou1HvvjiC9LU1KS6devS6tWry71Xfn4+rVixguzt7UlVVZUMDQ3J\nxcVF1NbIqpfKysqltntQV1cXrXZ98uQJTZw4UajzZmZmNGDAALpy5UqZNpMlOygoiCwtLUlZWVmo\nm/LU7zt37pCzszPVqVOn3O1HHj16RB4eHqLtR6Kjo4Xr8ugpT1kvSXW2k2Uhq36VXLVaMm/yLHYg\nqrjulNeGVeXdUrJtfvr0KfXq1Yt0dHTK3X5k4cKF1LhxY6pTpw7p6OiQi4uLSKeK2kOiqtWB4tuP\n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\n86c//YkDBw7g5eXF119/jSRJDB48GCcnJ/bv309xcbG+hrF79+7cvHmTEydOEBwcjK2tLf7+/lha\nWvKPf/yDV155hZSUFN544416/19dXV2xs7Njz5499OrVC0tLS9RqNX/4wx+YPHkyPXv2pKKigm3b\ntuHn56ffJuNPf/oTp0+fZt++fa2KeVNGOVevXs0jjzzCq6++ysKFC7G3t+fatWts3bqVzz77DCsr\nK1599VVWrFhBaGgogwcP5pdffmHv3r0P3Fpk/PjxPPTQQ8yYMYMPP/yQPn36kJ+fz7Fjx7C2tmbp\n0qUPjP2DYjV27Nh7rkKWJIlTp07x4YcftiBygtD1lFeXs/7CejKK5X9QWxeWMetMOUEqN6oVCra6\nu5MwcCC4uQHQ29aWGeLcVKGVjPbT4+Pjw/Lly1m8ePFdX3vxxRexsrIiOzubDRs28F//9V9cunTp\nru/ramc32trakpiYyNy5cwkJCWHWrFmMGjWKzz77DGtraw4ePEh4eDhz586ld+/eLFu2TL8FBdw7\n8f3rX//KF198QUREBBs2bGDDhg316sQAnnjiCZycnJg0aZJ+w9jCwkKuXbtGdbW8PMTZ2Zlvv/2W\ncePG0bt3b/73f/+XL7/8Ul9EP336dJ588kkmT56Mu7s7//M//4Orqyvr169n7969hIeH89prr/HR\nRx/VS26USiX//Oc/2bJlC926dWNgnenpl19+mT59+jB27FjKy8vZvXu3/ms3b94kucH2Lg3f/4Ou\nG2trKDIykqioKC5cuMCYMWOIiIjglVdewcHBQb+9yMsvv8wf/vAHXnrpJQYMGMCpU6d49dVXsayz\nMk2hUNzzeT///DMzZszgj3/8I7169WLKlCns3r2b4DtbFTwo9g+K1cyZM8nOzubcuXP1nnvs2DFK\nSkqYMWPGA2PQFYj6IcPrTDEvrSplTcwafRJnU1DK3NPlBKlcqFAqWe/lRcLgwfokboC9PbPc3DpU\nEteZ4m0K2ireCsnI2dDy5ctJT0/Xj8iVlpbi7OxMfHy8/i+qZ555Bm9vb95//30AHnvsMWJjY/H3\n9+f555/X7+VV1/1qxsQB3vK+aYGBgRw5coQRI0bc93tzc3Pp1q0bmzdvZurUqQbqoelbvHgxFy9e\n5PTp08buCs899xwqlYp//etf+rYlS5ZgbW3NZ5991ur7iz9zgikrqixibexacsrk7Z7s8kqYe64K\n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\nRU5ErkJggg==\n", "text": [ - "" + "" ] } ], - "prompt_number": 70 + "prompt_number": 10 }, { "cell_type": "markdown", diff --git a/benchmarks/palindrome_timeit.ipynb b/benchmarks/palindrome_timeit.ipynb index f1df349..afe4a0a 100644 --- a/benchmarks/palindrome_timeit.ipynb +++ b/benchmarks/palindrome_timeit.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:3d878b64b4503fd987496df562af53903ad85d4cce103ea0a2e6c456519c03c7" + "signature": "sha256:ab859015961b19530bb3c16fe1edf4e7f9baca715bdf8187c724e8c0c4cfc8ad" }, "nbformat": 3, "nbformat_minor": 0, @@ -13,7 +13,7 @@ "metadata": {}, "source": [ "[Sebastian Raschka](http://sebastianraschka.com) \n", - "last updated: 05/03/2014\n", + "last updated: 05/06/2014\n", "\n", "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/benchmarks/palindrome_timeit.ipynb) \n", "- [Link to the GitHub repository](https://github.com/rasbt/python_reference) \n", @@ -39,11 +39,9 @@ "\n", "# All functions return True if an input string is a palindrome. Else returns False.\n", "\n", - "\n", - "\n", - "####\n", + "#############################################################\n", "#### case-insensitive ignoring punctuation characters\n", - "####\n", + "############################################################\n", "\n", "def palindrome_short(my_str):\n", " stripped_str = \"\".join(l.lower() for l in my_str if l.isalpha())\n", @@ -68,9 +66,9 @@ "\n", "\n", "\n", - "####\n", + "############################################################\n", "#### functions considering all characters (case-sensitive)\n", - "####\n", + "############################################################\n", "\n", "def palindrome_reverse1(my_str):\n", " return my_str == my_str[::-1]\n", @@ -83,15 +81,12 @@ " return True\n", " if my_str[0] != my_str[-1]:\n", " return False\n", - " return palindrome(my_str[1:-1])\n", - "\n", - "\n", - "\n" + " return palindrome(my_str[1:-1])" ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 10 + "prompt_number": 1 }, { "cell_type": "code", @@ -119,7 +114,7 @@ "stream": "stdout", "text": [ "case-insensitive functions ignoring punctuation characters\n", - "100000 loops, best of 3: 15.3 \u00b5s per loop" + "10000 loops, best of 3: 15.5 \u00b5s per loop" ] }, { @@ -127,7 +122,7 @@ "stream": "stdout", "text": [ "\n", - "100000 loops, best of 3: 19.9 \u00b5s per loop" + "10000 loops, best of 3: 19.5 \u00b5s per loop" ] }, { @@ -135,7 +130,7 @@ "stream": "stdout", "text": [ "\n", - "100000 loops, best of 3: 13.5 \u00b5s per loop" + "100000 loops, best of 3: 11.7 \u00b5s per loop" ] }, { @@ -143,7 +138,7 @@ "stream": "stdout", "text": [ "\n", - "100000 loops, best of 3: 8.58 \u00b5s per loop" + "100000 loops, best of 3: 8.24 \u00b5s per loop" ] }, { @@ -151,7 +146,7 @@ "stream": "stdout", "text": [ "\n", - "100000 loops, best of 3: 9.42 \u00b5s per loop" + "100000 loops, best of 3: 9.38 \u00b5s per loop" ] }, { @@ -162,7 +157,7 @@ "\n", "\n", "functions considering all characters (case-sensitive)\n", - "1000000 loops, best of 3: 508 ns per loop" + "1000000 loops, best of 3: 507 ns per loop" ] }, { @@ -178,7 +173,7 @@ "stream": "stdout", "text": [ "\n", - "1000000 loops, best of 3: 480 ns per loop" + "1000000 loops, best of 3: 581 ns per loop" ] }, { @@ -189,7 +184,120 @@ ] } ], - "prompt_number": 11 + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "\n", + "funcs_s = ['palindrome_short', 'palindrome_regex', 'palindrome_stringlib', \n", + " 'palindrome_stringlib2', 'palindrome_isalpha'] \n", + "\n", + "funcs_ins = ['palindrome_reverse1', 'palindrome_reverse2', 'palindrome_recurs']\n", + "\n", + "times_s, times_ins = [], []\n", + "\n", + "for f in funcs_s:\n", + " times_s.append(min(timeit.Timer('%s(test_str)' %f, \n", + " 'from __main__ import %s, test_str' %f)\n", + " .repeat(repeat=3, number=1000)))\n", + " \n", + "for f in funcs_ins:\n", + " times_ins.append(min(timeit.Timer('%s(test_str)' %f, \n", + " 'from __main__ import %s, test_str' %f)\n", + " .repeat(repeat=3, number=1000)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 13 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 8 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", + "\n", + "labels = [('cy_lstsqr', 'Cython implementation'), \n", + " ('lin_lstsqr_mat', 'numpy matrix equation'),\n", + " ('numpy_lstsqr', 'numpy.linalg.lstsq()'), \n", + " ('scipy_lstsqr', 'scipy.stats.linregress()')] \n", + "\n", + "matplotlib.rcParams.update({'font.size': 12})\n", + "\n", + "fig = plt.figure(figsize=(10,8))\n", + "for f in funcs_s:\n", + " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time per computation in milliseconds [ms]')\n", + "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "plt.title('Performance of least square fit implementations for different sample sizes')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", + "\n", + "x_pos = np.arange(len(times_s))\n", + "plt.bar(x_pos, times_s, align='center', alpha=0.5, color=\"green\")\n", + "plt.xticks(x_pos, funcs_s, rotation=90)\n", + "plt.ylabel('time per computation in ms')\n", + "plt.title('Performance of different case-sensitive palindrome functions')\n", + "plt.grid()\n", + "plt.show()\n", + "\n", + "x_pos = np.arange(len(times_ins))\n", + "plt.bar(x_pos, times_ins, align='center', alpha=0.5, color=\"blue\")\n", + "plt.xticks(x_pos, funcs_ins, rotation=90)\n", + "plt.ylabel('time per computation in ms')\n", + "plt.title('Performance of different case-insensitive palindrome functions')\n", + "plt.grid()\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nxYsXmZGRkdrY1ImKimIxMTHVXl9Z5edt7ty5bMiQISwjI0NlH03xPuvbb79lL7/8cpXnOC8vjzVr\n1kzlnfDWrVtZ3759GWPlj7O7u7tw3ePHj5lMJmO3b99mhYWFzNLSkv3000/C2FmFuhQbxhjr3bs3\n27x5M2Os/CzBzc2tVvE9a968eczPz0/YLisrY/b29uz3339Xu7+Pjw/bvXu3xpgjIyPZxIkTheuS\nkpJY+/btGWOMbdq0SeU+GWPM0dFRpXhUfq4UCgVr2rQpu3z5snDZunXrWGBgoLB/27ZthesuXLjA\nZDIZu3PnjnCZlZUV+/PPP1lZWRkzMTFReWyPHz+u8ia0smcf99oUm+r+7o8fP85sbGzUnmWqG7Op\nXGzGjRvHZs+eLVxXWFjIDAwMWFZWFmOs/LGvXESGDx/Oli5dyhhjbMyYMSwqKoplZ2erzfFZDXrM\nZvfu3Xj48CHkcjni4+NhaGiIrKws7NixA82bNxd+jh07hry8POG2lWdOqXPr1i04OzsL205OTrh1\n65awbWNjg6ZNm6rcpmXLlsLvRkZGsLa2hkwmE7YBoLCwEACwf/9+9OzZE1ZWVmjevDmSkpJw//59\n4fZWVlYq4yXGxsYoLCzEvXv3UFxcDDc3tyox1ybvyvk9+xg4OzsjJyenxseluts7OTnV6nbqZGVl\n4eTJkypxb926Fbdv3wZQ/jw7Ojqq7H/r1i2V/RcvXow7d+4I+9ja2gq/Gxsbo7i4uNZjPdnZ2Wof\nX6Dm5+3dd9+Fu7s7BgwYADc3NyxdurRW8ZqamsLMzAzm5ubIzs7G6NGjMXDgQISFhaFVq1aYPXs2\nFAoFsrKy8PTpU9jb2wvHmTRpEu7evSvEZ2dnp5I3UP43Z2Jigm3btuGrr76Cg4MDBg8ejKtXr9bq\n8XjWyJEjkZiYCADYunUrRo0aJeSpKb5nVX5eK57n3NxcAMDmzZvRuXNn4Vh///23yv9ITSo//0ZG\nRsL/3a1bt1TuE6j6WlB5+969e3j69GmV14LK/yfP3hdQ/vrw7P3fvXsXRUVF8PX1FXIKCgrCvXv3\napVTbVT3d3/z5k04Ozs/1xhsbm6uSv4mJiawsrJSeQye/bsrKCgAACxbtgyMMXTv3h0vvfQSEhIS\naryvJnWOTsecnJwwevRorF+/vtp9KopAdRwcHCCXy4VB7Bs3bqhMP3z29pqOV1lJSQmGDh2K77//\n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\nDzH9gT2pJYOrAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n8/8AVRvie0rr9RMAAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 29 } ], "metadata": {} diff --git a/benchmarks/timeit_tests.ipynb b/benchmarks/timeit_tests.ipynb index bbd8c17..199d744 100644 --- a/benchmarks/timeit_tests.ipynb +++ b/benchmarks/timeit_tests.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:132d5623e27eb721587599809f9870d397887ec873bbbdc95b25a05e710d160e" + "signature": "sha256:a2b1ea908157604888db3edc69f70ebb7f6f25d46bbb813b419c0879633a8962" }, "nbformat": 3, "nbformat_minor": 0, @@ -67,7 +67,8 @@ "- [Comprehensions vs. for-loops](#comprehensions)\n", "- [Copying files by searching directory trees](#find_copy)\n", "- [Returning column vectors slicing through a numpy array](#row_vectors)\n", - "- [Speed of numpy functions vs Python built-ins and std. lib.](#numpy)" + "- [Speed of numpy functions vs Python built-ins and std. lib.](#numpy)\n", + "- [Cython vs. regular (C)Python](#cython)" ] }, { @@ -119,7 +120,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We expect the string .format() method to perform slower than %, because it is doing the formatting for each object itself, where formatting via the binary % is hard-coded for known types. But let's see how big the difference really is..." + "We expect the string `.format()` method to perform slower than %, because it is doing the formatting for each object itself, where formatting via the binary % is hard-coded for known types. But let's see how big the difference really is..." ] }, { @@ -128,21 +129,16 @@ "input": [ "import timeit\n", "\n", - "def test_format():\n", - " return ['{}'.format(i) for i in range(1000000)]\n", + "n = 10000\n", "\n", - "def test_binaryop():\n", - " return ['%s' %i for i in range(1000000)]\n", + "def test_format(n):\n", + " return ['{}'.format(i) for i in range(n)]\n", "\n", - "%timeit test_format()\n", - "%timeit test_binaryop()\n", + "def test_binaryop(n):\n", + " return ['%s' %i for i in range(n)]\n", "\n", - "#\n", - "# Python 3.4.0\n", - "# MacOS X 10.9.2\n", - "# 2.5 GHz Intel Core i5\n", - "# 4 GB 1600 Mhz DDR3\n", - "#" + "%timeit test_format(n)\n", + "%timeit test_binaryop(n)" ], "language": "python", "metadata": {}, @@ -151,8 +147,8 @@ "output_type": "stream", "stream": "stdout", "text": [ - "1 loops, best of 3: 400 ms per loop\n", - "1 loops, best of 3: 241 ms per loop" + "100 loops, best of 3: 5.67 ms per loop\n", + "100 loops, best of 3: 3.9 ms per loop" ] }, { @@ -165,6 +161,79 @@ ], "prompt_number": 3 }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "funcs = ['test_format', 'test_binaryop']\n", + "\n", + "orders_n = [10**n for n in range(1, 6)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " for f in funcs:\n", + " times_n[f].append(min(timeit.Timer('%s(n)' %f, \n", + " 'from __main__ import %s, n' %f)\n", + " .repeat(repeat=3, number=1000)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 55 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 7 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", + "\n", + "labels = [('test_format', '.format() method'), \n", + " ('test_binaryop', 'binary operator %')] \n", + "\n", + "matplotlib.rcParams.update({'font.size': 12})\n", + "\n", + "fig = plt.figure(figsize=(10,8))\n", + "for lb in labels:\n", + " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time per computation in milliseconds [ms]')\n", + "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "plt.title('Performance of different string formatting methods')\n", + "ftext = 'binary op. % is {:.2f}x faster than .format()'\\\n", + " .format(times_n['test_format'][-1]\\\n", + " /times_n['test_binaryop'][-1])\n", + "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nsXfzzc3N1RdffKGhQ4e6eyg+zWbz1/nzFf985oxVLVtKPXtKYWGuf7VsZTatObBG67LXOYu44IBg\nPdjxQQ1NGkoR9/+455NZ5G0emZtF3mbVVd5GC7mFCxeqZ8+eCgkJ0fjx4ys9V1BQoBEjRigsLEzx\n8fFKT093Pvfqq69qwIABeuWVVyRJRUVFGjt2rJYtW8YZOTdr3rxc7dpJ/v4Vtxbp1Kliya3g4Ouv\nBvJLTpSc0FvfvaW9+Xud26KbRGtSj0m6JfqWuho2AABewehaqx999JH8/f21YcMGnT9/Xm+//bbz\nudGjR0uS/v73v2v37t26//779a9//UudOnWq9B5lZWUaNmyYnn76aQ0cOPC6x6JHzoysrFy9806O\nyssHKTS0YpvN9pXGjUtQUlL1p1YdDof+ffzf+jznc6ZSAQA+p17vI1fXZsyYoaNHjzoLubNnz6pZ\ns2bat2+fEhISJEmPPvqoYmNj9dJLL1V67bvvvqunnnpKt9xScXZmypQpGjVqVJVjUMiZk5WVq6++\nOqyLF/0VHFyuQYPa1aiIs5XZtC57XaWzcMEBwRqSOES3Rt9aH0MGAKBBqdeLHera1QPNzs5WYGCg\ns4iTpK5du15z/jg1NVWpqanVOs64ceMUHx8vSWratKm6devmvGfLpffmce0fJyW11fHj/9WePXs0\ndeq0Gr2+Y8+OWrVvlb7b/p0kKb5bvKKaRCnuVJwKDhRI0XL752uoj/fs2aNp02qWN49df0ze5h9f\n2tZQxuPtjy9tayjj8fbHe/bs0ZkzZ/Tjjz+qNhrEGbktW7Zo1KhROn78uHOfJUuWaOXKldq0aZNL\nx+CMnHlWq9X5Rb0Rh8Oh3Sd2a/2h9ZWmUru36q7khGSmUquhJnmj9sjbPDI3i7zNujpvjz4jFxYW\npqKiokrbCgsLFR4ebnJYqKXq/gBctF/Uuux1+j7ve+c2plJrjh9cs8jbPDI3i7zNqqu83VLI+V11\nh9jExESVlZUpJyfHOb2amZmpLl24a7+3ySvJ0+r9q3Xy3EnntqgmURrVeZRaNG7hxpEBAOB5/E0e\nzG6368KFCyorK5PdbpfNZpPdbleTJk2UkpKimTNn6ty5c9q6davWrl1b7V6460lLS6s094/69UtZ\nX7oqdcm/l1Qq4rq36q6J3SdSxLmA77ZZ5G0emZtF3mZdyttqtSotLc3l9zFayM2ZM0eNGzfW/Pnz\n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\nIR8Y8ZXlAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 56 + }, { "cell_type": "markdown", "metadata": {}, @@ -201,20 +270,15 @@ "def reverse_slizing(my_str):\n", " return my_str[::-1]\n", "\n", + "test_str = 'abcdefg'\n", "\n", "# Test to show that both work\n", - "a = reverse_join('abcd')\n", - "b = reverse_slizing('abcd')\n", - "assert(a == b and a == 'dcba')\n", - "\n", - "%timeit reverse_join('abcd')\n", - "%timeit reverse_slizing('abcd')\n", + "a = reverse_join(test_str)\n", + "b = reverse_slizing(test_str)\n", + "assert(a == b and a == 'gfedcba')\n", "\n", - "# Python 3.4.0\n", - "# MacOS X 10.9.2\n", - "# 2.4 GHz Intel Core Duo\n", - "# 8 GB 1067 Mhz DDR3\n", - "#" + "%timeit reverse_join(test_str)\n", + "%timeit reverse_slizing(test_str)" ], "language": "python", "metadata": {}, @@ -223,8 +287,8 @@ "output_type": "stream", "stream": "stdout", "text": [ - "1000000 loops, best of 3: 1.28 \u00b5s per loop\n", - "1000000 loops, best of 3: 337 ns per loop" + "100000 loops, best of 3: 1.56 \u00b5s per loop\n", + "1000000 loops, best of 3: 362 ns per loop" ] }, { @@ -235,7 +299,84 @@ ] } ], - "prompt_number": 13 + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "funcs = ['reverse_join', 'reverse_slizing']\n", + "\n", + "orders_n = [10**n for n in range(1, 6)]\n", + "test_strings = (test_str*n for n in orders_n)\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for st,n in zip(test_strings, orders_n):\n", + " for f in funcs:\n", + " times_n[f].append(min(timeit.Timer('%s(st)' %f, \n", + " 'from __main__ import %s, st' %f)\n", + " .repeat(repeat=3, number=1000)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 4 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", + "\n", + "labels = [('reverse_join', '\"\".join(reversed(my_str))'), \n", + " ('reverse_slizing', 'my_str[::-1]')] \n", + "\n", + "matplotlib.rcParams.update({'font.size': 12})\n", + "\n", + "fig = plt.figure(figsize=(10,8))\n", + "for lb in labels:\n", + " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time per computation in milliseconds [ms]')\n", + "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "plt.title('Performance of different string reversing methods')\n", + "max_perf = max( [times_n['reverse_join'][i]/times_n['reverse_slizing'][i]\n", + " for i in range(len(times_n['reverse_join']))] )\n", + "min_perf = min( [times_n['reverse_join'][i]/times_n['reverse_slizing'][i]\n", + " for i in range(len(times_n['reverse_join']))] )\n", + "ftext = 'my_str[::-1] is {:.2f}x to {:.2f}x faster than \"\".join(reversed(my_str))'\\\n", + " .format(min_perf, max_perf)\n", + "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 5 }, { "cell_type": "markdown", @@ -286,14 +427,7 @@ "test_chars = ['a', 'b', 'c', 'd', 'e', 'f']\n", "\n", "%timeit string_add(test_chars)\n", - "%timeit string_join(test_chars)\n", - "\n", - "#\n", - "# Python 3.4.0\n", - "# MacOS X 10.9.2\n", - "# 2.5 GHz Intel Core i5\n", - "# 4 GB 1600 Mhz DDR3\n", - "#" + "%timeit string_join(test_chars)" ], "language": "python", "metadata": {}, @@ -302,8 +436,8 @@ "output_type": "stream", "stream": "stdout", "text": [ - "1000000 loops, best of 3: 595 ns per loop\n", - "1000000 loops, best of 3: 269 ns per loop" + "1000000 loops, best of 3: 1.15 \u00b5s per loop\n", + "1000000 loops, best of 3: 436 ns per loop" ] }, { @@ -314,7 +448,79 @@ ] } ], - "prompt_number": 16 + "prompt_number": 70 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "funcs = ['string_add', 'string_join']\n", + "\n", + "orders_n = [10**n for n in range(1, 9)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " for f in funcs:\n", + " times_n[f].append(min(timeit.Timer('%s(test_chars)' %f, \n", + " 'from __main__ import %s, test_chars' %f)\n", + " .repeat(repeat=10, number=1000)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 71 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", + "\n", + "labels = [('string_add', 'new_str += char'), \n", + " ('string_join', '\"\".join(chars)')] \n", + "\n", + "matplotlib.rcParams.update({'font.size': 12})\n", + "\n", + "fig = plt.figure(figsize=(10,8))\n", + "for lb in labels:\n", + " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time per computation in milliseconds [ms]')\n", + "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "plt.title('Performance of different string reversing methods')\n", + "ftext = 'new_str += char is {:.2f}x faster than \"\".join(chars)'\\\n", + " .format(times_n['string_add'][-1]\\\n", + " /times_n['string_join'][-1])\n", + "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAnMAAAIECAYAAAByl6h3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdYFNfXB/DvLB0EQRAUEEGQ3hVBUFywl6hRk1hQrFGM\nNZZYMIBGY0xsMUZjxYI9GktiBbGBXVARkGJHFCMYBUWE+/7By/xcacsufc7nefaRnXLvPbPDcpx7\nZpdjjDEQQgghhJA6SVTTAyCEEEIIIbKjZI4QQgghpA6jZI4QQgghpA6jZI4QQgghpA6jZI4QQggh\npA6jZI4QQgghpA6jZI7UeR8+fMDIkSOhp6cHkUiEs2fP1vSQ6qS9e/fC3NwcioqKGDlypNT7BQcH\no2XLlqU+L63tyMhI2NvbQ1lZGb6+vpUTRB0UGhoKJSWlmh5GrXX//n2IRCJERUXV9FCqhKmpKRYu\nXFglbYvFYowZM6ZK2ia1CyVzpFoMHz4cIpEIIpEISkpKMDU1RUBAAF6+fCl323/++Sd27tyJI0eO\nID09HW3btq2EEQtLfn4+Ro4ciYEDB+LRo0dYuXKlzG3NmDEDly5dKrftgIAAtG7dGvfu3cP+/fvl\njqEyWFhYICQkRO52FBUVsXXrVqm2HThwINLS0uTus74yMTFBeno62rRpU9NDkcsPP/wAMzOzYss5\njgPHcVXSZ1W2TWoXxZoeABEOb29v7NmzBx8+fMDVq1cxZswYPHr0CEeOHJGpvffv30NZWRlJSUkw\nMjKCh4eHXOMrak+I0tLSkJ2dje7du6Np06ZytaWhoQENDY0y22aMITk5GXPnzoWRkZHMfTHGkJ+f\nD0XFynkrq6w/fBzHobzPYy8au6qqKlRVVSul34oqKCgAAIhENfP/eml+50QiEfT19atpRITUTXRl\njlQbJSUl6Ovrw9DQEL1798bkyZNx7Ngx5ObmAgB27doFZ2dnqKmpwczMDNOmTUNOTg6/v1gsxujR\nozFv3jwYGhqiefPm8PHxwffff4/U1FSIRCK0aNECAJCXl4dZs2bB2NgYKioqsLOzw86dOyXGIxKJ\nsGrVKgwePBja2toYNmwYP+UVGRkJBwcHqKurw9fXF+np6Th9+jScnZ3RoEEDdO7cWeJqyr1799Cv\nXz8YGRlBQ0MDjo6O2L59u0R/RVMeCxYsQNOmTaGrqwt/f39kZ2dLbLd79260atUKampq0NPTQ48e\nPZCVlcWvX7VqFaytraGmpgZLS0ssWrQI+fn5ZR77ixcvwtvbG+rq6mjUqBGGDBmCjIwMAIXTfM2b\nNwdQmHCXNVX97t07BAQEQFtbG40aNcL48eP516/Ix9Osn7atoKCAM2fOQEFBAfn5+Rg2bBhEIhF/\nFSs5ORn9+/eHjo4OGjVqhK5du+L27dt82x+/Pi4uLlBVVUV4eDjy8vIQHByMFi1aQE1NDfb29li3\nbl2x13vNmjUYOnQotLS00KxZMyxevFji9UlJSUFISAh/Ffnhw4clHoe4uDh07doVOjo6aNCgAWxt\nbfnX29TUFPn5+RgxYgREIhEUFBRKHfupU6eKTbMWPY+KioKrqys0NDTQunVrXL16VWIM4eHhcHBw\ngJqaGlxcXHDu3DmIRCKEhYWVOOaPX5s9e/bA2toaKioqSEpKwps3bzB58mQYGxtDQ0MDrq6uOHDg\nAL+fl5cXxo4dW6w9GxsbfP/99/zzivwON23aFKampgCAgwcPwsXFBRoaGtDR0YG7uztiYmIAFJ9m\nLXq+d+9e9OrVCxoaGjA3N8eWLVskxnbv3j106dIFampqMDU1xR9//FHutGNkZCREIhGOHj2Ktm3b\nQl1dHW5uboiPj8fNmzfh5eUFDQ0NuLu7Iz4+XmLfa9euoUuXLtDU1IS+vj769+/Pnz+hoaH4/vvv\n8eDBA/7cmj9/Pr9vbm4uJk+eDF1dXTRp0gTffvutxO+0NO9nDx48QLdu3aCurg4TExOsWrWqWHxl\nHWdSxzFCqoG/vz/r3LmzxLKlS5cyjuPYmzdv2ObNm5mOjg7bvn07u3fvHjt79ixzdHRkQ4cO5bfv\n0KED09TUZAEBASw+Pp7dvn2bvXz5kk2fPp2ZmZmxZ8+esRcvXjDGGJs+fTrT1dVl+/btY0lJSWzR\nokVMJBKx8PBwvj2O45iuri5bvXo1S01NZUlJSWzz5s1MJBIxHx8fdvnyZXb9+nXWsmVL1q5dO+bt\n7c0uXbrEYmJimLW1Nfvqq6/4tm7dusVWr17Nbt68yVJTU9mqVauYoqIiO336tMT4tbW12bfffssS\nExPZiRMnWKNGjdi8efP4bTZt2sSUlJTYDz/8wMf422+/8XEFBQWx5s2bs7/++ovdv3+f/fPPP8zE\nxESijU89ffqUaWpqsiFDhrDbt2+z8+fPM0dHR+bt7c0YY+zt27fsypUrjOM4dvjwYfbs2TP2/v37\n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\ntvpct7br1ee6/qy/c9dOvbPiHTXrduq0UGU7yjQ8dbi6XdDN9/zxyut7PlQ9r8728Zm38/c+QnW7\nb7/9Vh+v/liRKZG+RqxsR5nSf5Gujl061toslbvr3uvlTzMVbl9+8aVOnHuixvaYvTG64uorQlaH\nQw5fU9dQDWLVNqfDWWujyOHlSkE9zOr1evXtt98qKSlJkZH22ZFnUjO3LW+b5ubOrfYD/8ftP+qu\n1LuUnJyssooynXSf1En3SZW5T3180n2yzq+dvv2k+6TKPeVhTFi7+vyCbypMzCw1nl90oWbq490U\nczsdTkVGRNZ5ceW4VHpuqSIcEXI4HHJ73HJ73Wqxt4X6X9Nf5e7yRv3z2B9VR3hOb/B+2P+DVv9r\ntZp1ayanw6nWsa3V6kArI2e+g36Y9aKLLlJpaWlACyD4eqT00CiNUva6bG3+38268KILlX5teoN+\nI3i8np9sAOvTHJ50n7T8l7JHp859WDUrKEluueu6ie2ZkLm2PWuxzlh5nB5FOCJUuKVQiT0T5ZVX\nsc5YNXM2q7a3sCkx4fGuTTByV+1xOltD1dCXqIjK9ar2tp7NVfFX+f4oz9+Qr+Q+ySrbUaZRt9Zs\narxer8o95TUaPN/H/789kG0VnoqA/49/ildelbnLVOYu821b801l415yvERHth7Rz/v9XO27tVf2\numxjmrmGmBX8yWbO4XDokksu0bZt29SrVy9LiyF4eqT0UI+UHnKdE5wB0ghHhGIiYxQTGSM1++nr\n/5SqH0ZWmsOW0S3ldXrl9rp9f/VKUrOIZpV1/j+Hzj7/cbb5kLPd9qfmSgK97dluFxcZ5/uujXZG\nKzYyVg6HQ/HR8eoQ1+Gsh+/8PaRY53VDdL+1HobpcGrvc/4P+Uru8v+/6G6r/RddbYeAazvUa+V6\nwbjPM6/XwtlCHmflCdqdDqeiIqIkSbHOWMVHx/ueSw45fP9vtX1c9ZwK5LrhWOO7lt/paPzRygas\neZQ6teykCEeEWp9orV92+2VAjVVjn6U8/Y/yHwp/0DmHzlH6wNr/KHc4Ts0wt1CLBq3D4/XUaPJq\naxoDaSRr+2Pr9MZdkpwRTknSSc/JBs3V1Pk1M/f0009rwYIFGjVqlLp06eLbFehwOJSZmRmKOuvN\npMOspqrt8HLZjrImvXvexMxVtuVtU/a6bJ30nFR0RLTSL23Yvc+NkamPt6m5mzq3x12jGXzjgzf0\n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\n97//XRdccIFycnLUs2dPffjhh2e9vlHN3KpVq3TDDTdIkm688UatXLkyzBWFRmRkpDE/5E/XoUMH\nNWvWTJIUFRV11r9qmoqIiFPf0kePHlViYmIYqwmtrKwsI9/qb+XKlUpNTdXEiRPDXUrIrFq1SrGx\nsbr55ps1bNgwHTx4MNwlhczJkye1Zs0aDRgwINylhERiYqJKS0slVb7tZ7t27cJcUWjs2rVLvXv3\nliRdcsklWr58+Vmvb1QzV1RU5DvdSUJCggoLC8NcEUKhoKBA//znP3XzzTeHu5SQ2Lhxoy6//HK9\n/PLLuuuuu8JdTkhU7ZW74447wl1KSHXq1Ek7d+7U8uXLdejQoZ/8672pOHjwoPLy8rRkyRKNGTNG\nU6dODXdJIfP5559r0KBB4S4jZJKSktShQwf17NlTDz30kO6///5wlxQSF154oXJyciRVPuZFRUVn\nvb4tm7mXX35Zl112mWJiYjR69OhqXyssLNTQoUMVFxen5ORkZWVl+b7WqlUr3/nsiouL1bp165DW\nbVWguU9nx70WVnIfPXpUI0eO1N/+9jdb7Zmzkrl3795avXq1nn32WU2fPj2UZVsWaO4FCxbYeq9c\noLmjo6MVGxsrSRo2bJg2btwY0rqtCjR3YmKi+vfvr8jISF177bXatGlTqEsPmNWf44sWLdJtt90W\nqnIbTKC5V6xYoYqKCm3dulXvv/++HnvssVCXbkmguYcMGaKYmBilp6fr+PHj6tix41nXseU0eOfO\nnTVp0iQtXbpUP/74Y7WvjRs3TjExMTp06JDWr1+vm266Sb1799aFF16oq666SrNmzVJGRoaWLl2q\nq6++OkwJAhNo7tPZcWYu0NwVFRW68847NWXKFHXr1i1M1Qcm0Mzl5eWKioqSVLn3uaysLBzlByzQ\n3Fu2bNH69eu1YMEC7dixQw8//HBI3re5oQSau7S0VHFxcZKk5cuX62c/+1k4yg9YoLn79u2rF154\nQZK0YcMGXXDBBeEoPyBWfo6Xl5dr7dq1vrfCtJNAcxcXF/texNWmTRsVFxeHo/yAWXm8Z86cKUma\nNm2a0tPTz76Q18aefvpp76hRo3yfl5aWeqOjo707duzwbRs5cqT3P/7jP3yfP/74494BAwZ4R4wY\n4S0vLw9pvQ0lkNyDBw/2durUyXvllVd6586dG9J6G0p9c8+bN8/bpk0bb1pamjctLc377rvvhrxm\nq+qbefXq1d7U1FTvwIEDvddff713z549Ia+5IQTyHK/St2/fkNQYDPXN/cknn3h/8YtfeAcMGOC9\n5557vG63O+Q1N4RAHu9XXnnFm5qa6k1LS/Pu2rUrpPU2hEAyf/rpp96HHnoopHU2tPrmLi8v9/76\n17/2pqameq+44grvqlWrQl5zQ6hv7gMHDngHDhzoTU9P986YMeMn79+We+aqeM/Yy7R9+3ZFRkYq\nJSXFt613795yuVy+z//zP/8zVOUFTSC5P/nkk1CVFzT1zZ2RkWH7E0/XN3O/fv20bNmyUJYYFIE8\nx6usWbMm2OUFTX1zDx48WIMHDw5liUERyOP9wAMP6IEHHghViQ0ukMw33nijbrzxxlCVGBT1zR0Z\nGalFixaFssSgqG/uDh06+Gbm/GHLmbkqZ87HlJaWKiEhodq2+Ph4lZSUhLKsoCN3JRNym5hZIncV\ncp/S1HKbmFkid5WGzm3rZu7MTjcuLs73AocqxcXFvlewNhXkrmRCbhMzS+SuQu5TmlpuEzNL5K7S\n0Llt3cyd2el2795dFRUVysvL823buHGjLrroolCXFlTkrmRCbhMzS+SuQu6mm9vEzBK5qzR0bls2\nc263WydOnFBFRYXcbrfKysrkdrvVokULDRs2TJMnT9bx48f1xRdfaPHixbafm6pCbnNym5hZIje5\nm35uEzNL5A56bmuvzwiPKVOmeB0OR7XLtGnTvF6v11tYWOi99dZbvS1atPB27drVm5WVFeZqGw65\nzcltYmavl9zkbvq5Tczs9ZI72LkdXq8NTzwGAAAASTY9zAoAAIBKNHMAAAA2RjMHAABgYzRzAAAA\nNkYzBwAAYGM0cwAAADZGMwcAAGBjNHMAAAA2RjMHAGcYNWqUJk2a1KD3ef/99+vZZ59t0PsEAEmK\nDHcBANDYOByOGm+MbdWrr77aoPcHAFXYMwcAteCdDgHYBc0cgEbl+eef17nnnquEhAT17NlTOTk5\nkqQ1a9boyiuvVGJiojp16qTx48ervLzcd7uIiAi9+uqr6tatmxISEjR58mTt3LlTV155pVq1aqU7\n77zTd32Xy6Vzzz1XM2bMULt27XTeeedp4cKFdda0ZMkS9enTR4mJierfv7/+9a9/1XndRx55RO3b\nt1fLli118cUXa/PmzZKqH7q9+eabFR8f77s4nU7NmzdPkrR161Zdd911atOmjXr27KlFixbVuVZa\nWpomT56sq6++WgkJCbrhhht0+PBhP/+nATQVNHMAGo1t27bplVde0dq1a3X06FF99tlnSk5OliRF\nRkbqxRdf1OHDh7Vq1SplZ2frL3/5S7Xbf/bZZ1q/fr2+/PJLPf/88xozZoyysrK0e/du/etf/1JW\nVpbvugcPHtThw4e1f/9+/e1vf9PYsWO1Y8eOGjWtX79e9957r+bMmaPCwkLdd999+tWvfqWTJ0/W\nuO7SpUu1YsUK7dixQ8XFxVq0aJFat24tqfqh28WLF6ukpEQlJSV677331LFjR6Wnp+vYsWO67rrr\nNGLECH3//fd655139MADD2jLli11/p9lZWVp7ty5OnTokE6ePKmZM2fW+/8dgL3RzAFoNJxOp8rK\nyrRp0yaVl5crKSlJ559/viTp0ksvVb9+/RQREaGuXbtq7NixWrZsWbXb/+53v1NcXJwuvPBC/fzn\nP9fgwYOVnJyshIQEDR48WOvXr692/enTpysqKkqpqam66aab9O677/q+VtV4vf7667rvvvvUt29f\nORwOjRw5Us2aNdOXX35Zo/7o6GiVlJRoy5Yt8ng86tGjhzp06OD7+pmHbrdv365Ro0bpvffeU+fO\nnbVkyRKdd955uueeexQREaE+ffpo2LBhde6dczgcGj16tFJSUhQTE6Pbb79dGzZsqMf/OICmgGYO\nQKORkpKi2bNna+rUqWrfvr3uuusuHThwQFJl4zNkyBB17NhRLVu21MSJE2scUmzfvr3v49jY2Gqf\nx8TEqLS01Pd5YmKiYmNjfZ937drVt9bpCgoK9MILLygxMdF32bt3b63XHThwoB588EGNGzdO7du3\n13333aeSkpJasxYXF+uWW27Rc889p6uuusq31urVq6uttXDhQh08eLDO/7PTm8XY2NhqGQGYgWYO\nQKNy1113acWKFSooKJDD4dATTzwhqfLUHhdeeKHy8vJUXFys5557Th6Px+/7PfPVqUVFRTp+/Ljv\n84KCAnXq1KnG7ZKSkjRx4kQVFRX5LqWlpbrjjjtqXWf8+PFau3atNm/erO3bt+uPf/xjjet4PB4N\nHz5c6enp+s1vflNtrWuuuabaWiUlJXrllVf8zgnAPDRzABqN7du3KycnR2VlZWrWrJliYmLkdDol\nSaWlpYqPj1fz5s21detWv071cfphzdpenTplyhSVl5drxYoV+vjjj3Xbbbf5rlt1/TFjxui1117T\nmjVr5PV6dezYMX388ce17gFbu3atVq9erfLycjVv3rxa/aevP3HiRB0/flyzZ8+udvshQ4Zo+/bt\nWrBggcrLy1VeXq6vvvpKW7du9SsjADPRzAFoNMrKyvTkk0+qXbt26tixo3744QfNmDFDkjRz5kwt\nXLhQCQkJGjt2rO68885qe9tqOy/cmV8//fMOHTr4XhmbkZGh//qv/1L37t1rXPcXv/iF5syZowcf\nfFCtW7dWt27dfK88PdPRo0c1duxYtW7dWsnJyWrbtq0ef/zxGvf5zjvv+A6nVr2iNSsrS3Fxcfrs\ns8/0zjvvqHPnzurYsaOefPLJWl9s4U9GAGZwePmzDoBhXC6XMjIytGfPnnCXAgCWsWcOAADAxmjm\nABiJw5EAmgoOswIAANgYe+YAAABsjGYOAADAxmjmAAAAbIxmDgAAwMZo5gAAAGzs/wDxreAXv8Yx\nVAAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 73 }, { "cell_type": "markdown", @@ -1092,6 +1298,13 @@ "# Comprehesions vs. for-loops" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1126,6 +1339,13 @@ "## Set comprehensions" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, { "cell_type": "code", "collapsed": false, @@ -1189,6 +1409,13 @@ "## List comprehensions" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, { "cell_type": "code", "collapsed": false, @@ -1252,6 +1479,13 @@ "## Dictionary comprehensions" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, { "cell_type": "code", "collapsed": false, @@ -1324,6 +1558,13 @@ "# Copying files by searching directory trees" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1500,6 +1741,13 @@ "# Returning column vectors slicing through a numpy array" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1774,6 +2022,13 @@ "# Speed of numpy functions vs Python built-ins and std. lib." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, { "cell_type": "code", "collapsed": false, @@ -1868,6 +2123,169 @@ ], "prompt_number": 14 }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Cython vs regular (C)Python" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def py_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + "\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = 0\n", + " cov_xy = 0\n", + " for x_i, y_i in zip(x,y):\n", + " temp = (x_i - x_avg)\n", + " var_x += temp**2\n", + " cov_xy += temp*(y_i - y_avg)\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 62 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%load_ext cythonmagic" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 58 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "\n", + "def cy_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " cdef double x_avg, y_avg, temp, var_x, cov_xy, slope, y_interc, x_i, y_i\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = 0\n", + " cov_xy = 0\n", + " for x_i, y_i in zip(x,y):\n", + " temp = (x_i - x_avg)\n", + " var_x += temp**2\n", + " cov_xy += temp*(y_i - y_avg)\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 63 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "import random\n", + "random.seed(12345)\n", + "\n", + "funcs = ['py_lstsqr', 'cy_lstsqr']\n", + "\n", + "orders_n = [10**n for n in range(1, 6)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", + " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", + " for f in funcs:\n", + " times_n[f].append(min(timeit.Timer('%s(x,y)' %f, \n", + " 'from __main__ import %s, x, y' %f)\n", + " .repeat(repeat=3, number=1000)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 64 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", + "\n", + "labels = [('py_lstsqr', 'regular Python (CPython)'), \n", + " ('cy_lstsqr', 'Cython implementation')]\n", + "\n", + "\n", + "matplotlib.rcParams.update({'font.size': 12})\n", + "\n", + "fig = plt.figure(figsize=(10,8))\n", + "for lb in labels:\n", + " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time per computation in milliseconds [ms]')\n", + "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "ftext = 'Cython % is {:.2f}x faster than (C)Python'\\\n", + " .format(times_n['py_lstsqr'][-1]\\\n", + " /times_n['cy_lstsqr'][-1])\n", + "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", + "plt.title('Performance of least square fit implementations in Cython and (C)Python')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 67 + }, { "cell_type": "code", "collapsed": false, From 89761fa16876ea5dbd5a696c18bc267209a1fbdc Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 7 May 2014 10:54:53 -0400 Subject: [PATCH 026/248] legb image --- Images/scope_resolution_1.png | Bin 0 -> 44577 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Images/scope_resolution_1.png diff --git a/Images/scope_resolution_1.png b/Images/scope_resolution_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6bf48b0f7d730f96409da902141ccb23cc319ace GIT binary patch literal 44577 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 M*D=;^(8R|4AKrzIApigX literal 0 HcmV?d00001 From 15995ac8098a5ab31c4d6e1df7064269bf911626 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 7 May 2014 10:57:27 -0400 Subject: [PATCH 027/248] legb figure --- tutorials/scope_resolution_legb_rule.ipynb | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tutorials/scope_resolution_legb_rule.ipynb b/tutorials/scope_resolution_legb_rule.ipynb index 70cbf9d..cea54a9 100644 --- a/tutorials/scope_resolution_legb_rule.ipynb +++ b/tutorials/scope_resolution_legb_rule.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:eb9ececefb4c35b16d0496c7f613e4a64bb35b2e9f79b7e049c5b434bd2e6654" + "signature": "sha256:9cd21a4de985d02fd65a6682bfb5690a15932533ed143e684fc8403043dfbde2" }, "nbformat": 3, "nbformat_minor": 0, @@ -306,6 +306,17 @@ "(This is also why we have to be careful if we import modules via \"`from a_module import *`\", since it loads the variable names into the global namespace and could potentially overwrite already existing variable names)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "![LEGB figure](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/scope_resolution_1.png)\n", + "
\n", + "
" + ] + }, { "cell_type": "markdown", "metadata": {}, From 142318dca09b4840c903cbfadf0376cac9052ce7 Mon Sep 17 00:00:00 2001 From: Sebastian Raschka Date: Wed, 7 May 2014 18:38:42 -0400 Subject: [PATCH 028/248] benchmark updates --- benchmarks/timeit_tests.ipynb | 1064 ++++++++++++++++++++++++++------- 1 file changed, 844 insertions(+), 220 deletions(-) diff --git a/benchmarks/timeit_tests.ipynb b/benchmarks/timeit_tests.ipynb index 199d744..40434a8 100644 --- a/benchmarks/timeit_tests.ipynb +++ b/benchmarks/timeit_tests.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:a2b1ea908157604888db3edc69f70ebb7f6f25d46bbb813b419c0879633a8962" + "signature": "sha256:a6e11ece22a848e8c3b728870bda775773780d2fa909fb330ad64e4febec9f2a" }, "nbformat": 3, "nbformat_minor": 0, @@ -12,10 +12,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Sebastian Raschka \n", - "last updated: 04/14/2014 \n", + "[Sebastian Raschka](http://sebastianraschka.com)\n", + "last updated: 05/07/2014 \n", "\n", - "[Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/benchmarks/timeit_tests.ipynb)" + "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/benchmarks/timeit_tests.ipynb) \n", + "- [Link to the GitHub repository](https://github.com/rasbt/python_reference/blob/master/benchmarks/timeit_tests.ipynb) \n" ] }, { @@ -33,11 +34,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", "# Python benchmarks via `timeit`" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Code was executed in Python 3.4.0" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -68,6 +74,9 @@ "- [Copying files by searching directory trees](#find_copy)\n", "- [Returning column vectors slicing through a numpy array](#row_vectors)\n", "- [Speed of numpy functions vs Python built-ins and std. lib.](#numpy)\n", + " - [`sum()` vs. `numpy.sum()`](#np_sum)\n", + " - [`range()` vs. `numpy.arange()`](#np_arange)\n", + " - [`statistics.mean()` vs. `numpy.mean()`](#np_mean)\n", "- [Cython vs. regular (C)Python](#cython)" ] }, @@ -147,8 +156,8 @@ "output_type": "stream", "stream": "stdout", "text": [ - "100 loops, best of 3: 5.67 ms per loop\n", - "100 loops, best of 3: 3.9 ms per loop" + "100 loops, best of 3: 4.01 ms per loop\n", + "1000 loops, best of 3: 1.82 ms per loop" ] }, { @@ -159,7 +168,7 @@ ] } ], - "prompt_number": 3 + "prompt_number": 131 }, { "cell_type": "code", @@ -179,7 +188,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 55 + "prompt_number": 132 }, { "cell_type": "code", @@ -214,10 +223,16 @@ "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.title('Performance of different string formatting methods')\n", - "ftext = 'binary op. % is {:.2f}x faster than .format()'\\\n", - " .format(times_n['test_format'][-1]\\\n", - " /times_n['test_binaryop'][-1])\n", + "max_perf = max( f/b for f,b in zip(times_n['test_format'],\n", + " times_n['test_binaryop']) )\n", + "min_perf = min( f/b for f,b in zip(times_n['test_format'],\n", + " times_n['test_binaryop']) )\n", + " \n", + "ftext = 'The binary op. % is {:.2f}x to {:.2f}x faster than .format()'\\\n", + " .format(min_perf, max_perf) \n", "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", + "\n", + "\n", "plt.show()" ], "language": "python", @@ -226,13 +241,13 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\nsXfzzc3N1RdffKGhQ4e6eyg+zWbz1/nzFf985oxVLVtKPXtKYWGuf7VsZTatObBG67LXOYu44IBg\nPdjxQQ1NGkoR9/+455NZ5G0emZtF3mbVVd5GC7mFCxeqZ8+eCgkJ0fjx4ys9V1BQoBEjRigsLEzx\n8fFKT093Pvfqq69qwIABeuWVVyRJRUVFGjt2rJYtW8YZOTdr3rxc7dpJ/v4Vtxbp1Kliya3g4Ouv\nBvJLTpSc0FvfvaW9+Xud26KbRGtSj0m6JfqWuho2AABewehaqx999JH8/f21YcMGnT9/Xm+//bbz\nudGjR0uS/v73v2v37t26//779a9//UudOnWq9B5lZWUaNmyYnn76aQ0cOPC6x6JHzoysrFy9806O\nyssHKTS0YpvN9pXGjUtQUlL1p1YdDof+ffzf+jznc6ZSAQA+p17vI1fXZsyYoaNHjzoLubNnz6pZ\ns2bat2+fEhISJEmPPvqoYmNj9dJLL1V67bvvvqunnnpKt9xScXZmypQpGjVqVJVjUMiZk5WVq6++\nOqyLF/0VHFyuQYPa1aiIs5XZtC57XaWzcMEBwRqSOES3Rt9aH0MGAKBBqdeLHera1QPNzs5WYGCg\ns4iTpK5du15z/jg1NVWpqanVOs64ceMUHx8vSWratKm6devmvGfLpffmce0fJyW11fHj/9WePXs0\ndeq0Gr2+Y8+OWrVvlb7b/p0kKb5bvKKaRCnuVJwKDhRI0XL752uoj/fs2aNp02qWN49df0ze5h9f\n2tZQxuPtjy9tayjj8fbHe/bs0ZkzZ/Tjjz+qNhrEGbktW7Zo1KhROn78uHOfJUuWaOXKldq0aZNL\nx+CMnHlWq9X5Rb0Rh8Oh3Sd2a/2h9ZWmUru36q7khGSmUquhJnmj9sjbPDI3i7zNujpvjz4jFxYW\npqKiokrbCgsLFR4ebnJYqKXq/gBctF/Uuux1+j7ve+c2plJrjh9cs8jbPDI3i7zNqqu83VLI+V11\nh9jExESVlZUpJyfHOb2amZmpLl24a7+3ySvJ0+r9q3Xy3EnntqgmURrVeZRaNG7hxpEBAOB5/E0e\nzG6368KFCyorK5PdbpfNZpPdbleTJk2UkpKimTNn6ty5c9q6davWrl1b7V6460lLS6s094/69UtZ\nX7oqdcm/l1Qq4rq36q6J3SdSxLmA77ZZ5G0emZtF3mZdyttqtSotLc3l9zFayM2ZM0eNGzfW/Pnz\ntWLFCoWGhmrevHmSpNdff13nz59XVFSUxowZo8WLF6tjx461Ol5aWhqnihuAi/aL+ujgR/o061Nn\nP1yQf5BGdBihYUnD6IcDAPgsi8VSq0LOLRc7mMDFDg1D/tl8rdq3qspU6shOI9WySUs3jgwAgIbD\noy52gPdzOBzac2KP1h9ar9LyUuf222Ju06/b/5qzcAAA1AGjU6um0SNn1qWsL9ov6uODH+uTrE+c\nRVyQf5Ae6PCAhncYThFXR/hum0Xe5pG5WeRtVl31yHn1GbnaBAPX5J/N1+p9q/XzuZ+d21o2bqlR\nnUcxlQoAwFUsFossFotmz57t0uvpkUOtZeVk6cvvvtR/z/xXWT9nqe2v2qpFbMVVqN1iuunX7X+t\n4IBgN48SAICGy6PWWjWBQs6MrJwsLf1qqXKb5+pEyQlJUllOmXp27qlxA8apW0w3N48QAICGz9W6\nxat75FD/Ptr+kfaG7dWJkhM6c/CMJCmiY4RiymIo4uoZ/Sxmkbd5ZG4WeZtVV3l7fY/cpbln1I+L\n5Rd1ofyC83F0k2glNk9USH6IG0cFAIBnsFqttSrqmFpFrSz6YJG+b/y9DhUcUmLzRMWExUiSovKj\nNHXUVDePDgAAz8DUKtzi7h53q9mJZuod19tZxNkO2TSo+yA3jwwAAO9HIYdaSUpI0rgB49SmoI1O\nZpxUVH6Uxg0Yp6SEJHcPzevRz2IWeZtH5maRt1n0yKHBSEpIUlJCkqxRVvoRAQAwiB45AAAAN6NH\n7hpYogsAADRktV2iy+sLOab6zKFoNou8zSJv88jcLPI261LeFouFQg4AAMAX0SMHAADgZvTIAQAA\n+BgKOdQZ+ivMIm+zyNs8MjeLvM2qq7wp5AAAADyUV/fIzZo1SxaLhStXAQBAg2S1WmW1WjV79myX\neuS8upDz0o8GAAC8DBc7wO3orzCLvM0ib/PI3CzyNoseOQAAAB/H1CoAAICbMbUKAADgYyjkUGfo\nrzCLvM0ib/PI3CzyNoseOQAAAB9HjxwAAICb0SN3DWlpaZwqBgAADZbValVaWprLr/f6Qo5VHcyh\naDaLvM0ib/PI3CzyNutS3haLhUIOAADAF9EjBwAA4Gb0yAEAAPgYCjnUGforzCJvs8jbPDI3i7zN\n4j5yAAAAPo4eOQAAADejRw4AAMDHUMihztBfYRZ5m0Xe5pG5WeRtFj1yAAAAPs6re+RmzZoli8XC\n6g4AAKBBslqtslqtmj17tks9cl5dyHnpRwMAAF6Gix3gdvRXmEXeZpG3eWRuFnmbRY8cAACAj2Nq\nFQAAwM2YWgUAAPAxFHKoM/RXmEXeZpG3eWRuFnmbRY8cAACAj6NHDgAAwM3okQMAAPAxFHKoM/RX\nmEXeZpG3eWRuFnmbRY8cAACAj6NHDgAAwM3okQMAAPAxFHKoM/RXmEXeZpG3eWRuFnmbRY8cAACA\nj/PqHrlZs2bJYrHIYrG4ezgAAABVWK1WWa1WzZ4926UeOa8u5Lz0owEAAC/DxQ5wO/orzCJvs8jb\nPDI3i7zNokcOAADAxzG1CgAA4GZMrQIAAPgYCjnUGforzCJvs8jbPDI3i7zNokcOAADAx9EjBwAA\n4Gb0yAEAAPgYCjnUGforzCJvs8jbPDI3i7zNokcOAADAx9EjBwAA4Gb0yAEAAPgYCjnUGforzCJv\ns8jbPDI3i7zNokcOAADAx9EjBwAA4Gb0yAEAAPgYCjnUGforzCJvs8jbPDI3i7zNokcOAADAx3lc\nj1xeXp5SUlIUHBys4OBgrVy5Us2bN6+yHz1yAADAU7hat3hcIVdeXi5//4oTicuWLdPx48f1/PPP\nV9mPQg4AAHgKn7nY4VIRJ0lFRUWKjIx042hwJforzCJvs8jbPDI3i7zN8ukeuczMTN1+++1auHCh\nRo8e7e7h4P/t2bPH3UPwKeRtFnmbR+ZmkbdZdZW30UJu4cKF6tmzp0JCQjR+/PhKzxUUFGjEiBEK\nCwtTfHy80tPTnc+9+uqrGjBggF555RVJUteuXbVjxw7NnTtXc+bMMfkR8AvOnDnj7iH4FPI2i7zN\nI3OzyNususrbaCEXFxenGTNmaMKECVWee/zxxxUSEqL8/Hy99957mjJlivbv3y9Jeuqpp7Rp0yb9\n8Y9/VGlpqfM1ERERstlsxsb/S2p7irSmr6/O/r+0z/Weq+52d5+Cr4vj1+Q96ivv6z1X3W0mNbTv\nuKvPk7fr+/ObUnfvwW+Kd3/HTeZttJAbMWKEhg8fXuUq07Nnz2rNmjWaM2eOGjdurL59+2r48OF6\n9913q7zHnj17dNddd2ngwIFasGCBnn32WVPD/0Xe/IW81vZr7ffjjz/ecEx1hR9ds3lf6/j1/fqG\nVsj5et432offFH5Tasqbv+Mm83bLVasvvviifvrpJ7399tuSpN27d6tfv346e/asc58FCxbIarXq\n008/dekYCQkJOnz4cJ2MFwAAoD517drVpb65wHoYyw35+flVelxSUqKIiIhK2+lfGzMAAAxASURB\nVMLDw1VcXOzyMXJyclx+LQAAgCdwy1WrV58EDAsLU1FRUaVthYWFCg8PNzksAAAAj+KWQu7qM3KJ\niYkqKyurdBYtMzNTXbp0MT00AAAAj2G0kLPb7bpw4YLKyspkt9tls9lkt9vVpEkTpaSkaObMmTp3\n7py2bt2qtWvXKjU11eTwAAAAPIrRQu7SVanz58/XihUrFBoaqnnz5kmSXn/9dZ0/f15RUVEaM2aM\nFi9erI4dO5ocHgAAgEfxuLVWa+u5557T9u3bFR8fr6VLlyow0C3Xe/iMoqIi3X333Tpw4IB27Nih\nTp06uXtIXm3nzp2aNm2agoKCFBcXp+XLl/Mdr0d5eXlKSUlRcHCwgoODtXLlyiq3V0L9SE9P1+9/\n/3vl5+e7eyhe7ccff1SvXr3UpUsX+fn5adWqVWrRooW7h+XVrFar5s6dq/Lycv3ud7/TAw888Iv7\ne+QSXa7KzMzUsWPH9PXXX6tDhw768MMP3T0kr9e4cWOtX79ev/nNb1xaDBg106ZNG23atEmbN29W\nfHy8PvnkE3cPyau1bNlS27Zt06ZNm/TII49oyZIl7h6ST7Db7Vq9erXatGnj7qH4BIvFok2bNikj\nI4Mirp6dP39eCxYs0Oeff66MjIwbFnGSjxVy27dv1+DBgyVJ9913n7Zt2+bmEXm/wMBA/o9vUExM\njBo1aiRJCgoKUkBAgJtH5N38/S//hBYVFSkyMtKNo/Ed6enpGjVqVJUL51A/tm3bpv79+2v69Onu\nHorX2759u0JDQzV06FClpKQoLy/vhq/xqULu9OnTzluaREREqKCgwM0jAupHbm6uvvjiCw0dOtTd\nQ/F6mZmZuv3227Vw4UKNHj3a3cPxepfOxj300EPuHopPiI2N1eHDh/X1118rPz9fa9ascfeQvFpe\nXp5ycnK0bt06TZw4UWlpaTd8jUcWcgsXLlTPnj0VEhKi8ePHV3quoKBAI0aMUFhYmOLj45Wenu58\nrmnTps771RUWFqpZs2ZGx+3JXM38SvzXc/XVJu+ioiKNHTtWy5Yt44xcNdUm765du2rHjh2aO3eu\n5syZY3LYHs3VzFesWMHZOBe4mndwcLBCQ0MlSSkpKcrMzDQ6bk/lat6RkZHq27evAgMDNXDgQO3b\nt++Gx/LIQi4uLk4zZszQhAkTqjz3+OOPKyQkRPn5+Xrvvfc0ZcoU7d+/X5J0xx136Msvv5Qkbdiw\nQf369TM6bk/mauZXokeu+lzNu6ysTA8//LBmzZql9u3bmx62x3I179LSUud+ERERstlsxsbs6VzN\n/MCBA1q+fLmSk5N16NAhTZs2zfTQPZKreZeUlDj3+/rrr/ldqSZX8+7Vq5cOHDggqWJt+Xbt2t34\nYA4P9uKLLzrGjRvnfFxSUuIIDg52HDp0yLlt7Nixjueff975+JlnnnHceeedjjFjxjhKS0uNjtcb\nuJJ5cnKyIzY21tGnTx/HO++8Y3S8nq6meS9fvtzRvHlzh8VicVgsFscHH3xgfMyerKZ579ixw9G/\nf3/HgAEDHPfee6/jyJEjxsfs6Vz5TbmkV69eRsboTWqa9/r16x09evRw3HnnnY5HH33UYbfbjY/Z\nk7ny/V60aJGjf//+DovF4vjhhx9ueAyPvi+B46ozPNnZ2QoMDFRCQoJzW9euXWW1Wp2P//znP5sa\nnldyJfP169ebGp7XqWneqamp3Ei7Fmqad+/evbV582aTQ/Q6rvymXLJz5876Hp7XqWneycnJSk5O\nNjlEr+LK93vq1KmaOnVqtY/hkVOrl1zdI1FSUqKIiIhK28LDw1VcXGxyWF6NzM0ib7PI2zwyN4u8\nzTKRt0cXcldXumFhYc6LGS4pLCx0XqmK2iNzs8jbLPI2j8zNIm+zTOTt0YXc1ZVuYmKiysrKlJOT\n49yWmZmpLl26mB6a1yJzs8jbLPI2j8zNIm+zTOTtkYWc3W7XhQsXVFZWJrvdLpvNJrvdriZNmigl\nJUUzZ87UuXPntHXrVq1du5aeoTpA5maRt1nkbR6Zm0XeZhnNu7ZXZLjDrFmzHH5+fpX+Zs+e7XA4\nHI6CggLHAw884GjSpImjbdu2jvT0dDeP1juQuVnkbRZ5m0fmZpG3WSbz9nM4uLkXAACAJ/LIqVUA\nAABQyAEAAHgsCjkAAAAPRSEHAADgoSjkAAAAPBSFHAAAgIeikAMAAPBQFHIAAAAeikIOAK4ybtw4\nzZgxo07fc8qUKZo7d26dvicABLp7AADQ0Pj5+VVZ7Lq23njjjTp9PwCQOCMHANfE6oUAPAGFHIAG\nZf78+WrdurUiIiLUoUMHZWRkSJJ27typPn36KDIyUrGxsXryySdVWlrqfJ2/v7/eeOMNtW/fXhER\nEZo5c6YOHz6sPn36qGnTpnr44Yed+1utVrVu3VovvfSSWrZsqZtvvlkrV6687pjWrVunbt26KTIy\nUn379tXevXuvu+9TTz2l6Oho3XTTTbr11lu1f/9+SZWna4cOHarw8HDnX0BAgJYvXy5JOnjwoO65\n5x41b95cHTp00OrVq697LIvFopkzZ6pfv36KiIjQ4MGDderUqWomDcAbUMgBaDCysrK0aNEi7dq1\nS0VFRdq4caPi4+MlSYGBgfrrX/+qU6dOafv27frqq6/0+uuvV3r9xo0btXv3bn3zzTeaP3++Jk6c\nqPT0dP3vf//T3r17lZ6e7tw3Ly9Pp06d0rFjx7Rs2TJNmjRJhw4dqjKm3bt367HHHtOSJUtUUFCg\nyZMna9iwYbp48WKVfTds2KAtW7bo0KFDKiws1OrVq9WsWTNJladr165dq+LiYhUXF2vVqlVq1aqV\nBg0apLNnz+qee+7RmDFj9PPPP+v999/X1KlTdeDAgetmlp6ernfeeUf5+fm6ePGiXn755RrnDsBz\nUcgBaDACAgJks9m0b98+lZaWqk2bNvrVr34lSerevbt69+4tf39/tW3bVpMmTdLmzZsrvf7ZZ59V\nWFiYOnXqpFtuuUXJycmKj49XRESEkpOTtXv37kr7z5kzR0FBQerfv7/uv/9+ffDBB87nLhVdb731\nliZPnqxevXrJz89PY8eOVaNGjfTNN99UGX9wcLCKi4t14MABlZeXKykpSTExMc7nr56uzc7O1rhx\n47Rq1SrFxcVp3bp1uvnmm/Xoo4/K399f3bp1U0pKynXPyvn5+Wn8+PFKSEhQSEiIRo0apT179tQg\ncQCejkIOQIORkJCg1157TWlpaYqOjtbo0aN1/PhxSRVFz5AhQ9SqVSvddNNNmj59epVpxOjoaOc/\nh4aGVnocEhKikpIS5+PIyEiFhoY6H7dt29Z5rCvl5ubqlVdeUWRkpPPv6NGj19x3wIABeuKJJ/T4\n448rOjpakydPVnFx8TU/a2FhoYYPH6558+bpjjvucB5rx44dlY61cuVK5eXlXTezKwvF0NDQSp8R\ngPejkAPQoIwePVpbtmxRbm6u/Pz89Nxzz0mquH1Hp06dlJOTo8LCQs2bN0/l5eXVft+rr0I9ffq0\nzp0753ycm5ur2NjYKq9r06aNpk+frtOnTzv/SkpK9NBDD13zOE8++aR27dql/fv3Kzs7W3/5y1+q\n7FNeXq5HHnlEgwYN0m9/+9tKx7rrrrsqHau4uFiLFi2q9ucE4Fso5AA0GNnZ2crIyJDNZlOjRo0U\nEhKigIAASVJJSYnCw8PVuHFjHTx4sFq387hyKvNaV6HOmjVLpaWl2rJliz777DONHDnSue+l/SdO\nnKjFixdr586dcjgcOnv2rD777LNrnvnatWuXduzYodLSUjVu3LjS+K88/vTp03Xu3Dm99tprlV4/\nZMgQZWdna8WKFSotLVVpaam+/fZbHTx4sFqfEYDvoZAD0GDYbDa98MILatmypVq1aqWTJ0/qpZde\nkiS9/PLLWrlypSIiIjRp0iQ9/PDDlc6yXeu+b1c/f+XjmJgY5xWwqampevPNN5WYmFhl3x49emjJ\nkiV64okn1KxZM7Vv3955henVioqKNGnSJDVr1kzx8fFq0aKFnnnmmSrv+f777zunUC9duZqenq6w\nsDBt3LhR77//vuLi4tSqVSu98MIL17ywojqfEYD383Pwn3MAfIzValVqaqqOHDni7qEAQK1wRg4A\nAMBDUcgB8ElMQQLwBkytAgAAeCjOyAEAAHgoCjkAAAAPRSEHAADgoSjkAAAAPBSFHAAAgIf6P1gi\nIR8Y8ZXlAAAAAElFTkSuQmCC\n", + "png": "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\nxMQQj8ejf//9lzIyMkgoFEqU9c0335Cenh4dO3aMEhISyN/fnzQ1NalTp05cnYCAAO64Ktnp6enc\nj21GRga9efOG0tPTSV9fn7744gu6e/cuJSYm0syZM0lHR4cyMzOJiLjr06NHDwoLC6NHjx5RZmYm\neXl5kb29PZ07d45SUlLo77//Ji0tLfrrr7/Erre+vj79+eef9PDhQ9q4cSPxeDxuTuTk5JCJiQnN\nmTOHMjIyKCMjg0QikUQ72Nra0sSJE+nevXv06NEjOnXqFB0/fpyIiDIzM0leXp7Wr1/PyalOd0mO\nHJ/Pp/79+1NUVBTdv3+fhgwZQiYmJpzD/uTJE1JRUSFfX1+6d+8ehYSEUNeuXYnH49Hu3bsl6lzV\ntYiNjSU5OTluXp46dYo6duwo9t3z8vIiTU1NGjVqFN2+fZvu3r1LxcXFxOPxqG3btrRjxw5KTk6m\nL774gtTU1Mjd3Z2Cg4MpOTmZZs6cSWpqapSdnc3J++mnnygqKopSU1MpJCSEunTpQl5eXkRU+p+w\nsmtTZr/8/HzKy8sjFxcXGjduHFdeNk8rjruma01ENHz4cLKwsKCwsDCKi4sjHx8f0tLSqnSfKk+Z\nI2dmZkZHjx6lxMRE8vDwoPbt25NAIKAjR45QYmIijR49mjp06EBFRUVERDXO7arGTFS7+8aGDRtI\nRUWFtm7dSklJSbR582ZSVlYWm/8jR46kTp06UWhoKMXFxZGnpydpampy4y0qKiJtbW367rvvKCkp\niZKSkujIkSOVHFJG04c5cgypUPF/unFxcWRqakq9evUiotIoRsUISnh4OPF4PMrNzSWi0huahYVF\nJdnlI0BERK9fvyYlJSXatGmTWD0PDw8aMGAAd8zj8WjatGlidcqiFrGxsVzZypUricfj0Y0bN7iy\nNWvWkK6ubrVjHjFiBPn6+nLH/fv3JwcHB7E6M2bM4GxARNShQweaOXOmRHmvX78mVVXVSv9DDg4O\nJi0trSr1WLhwodiPChFRbGws8Xg8ioiIIKL3P1AXL16sUk5BQQEpKyvTn3/+KVbu5ORUyZErfz2q\nkl3xxzcgIIB69uwpVqekpEQsulB2faKiorg6Dx8+JD6fTwkJCWJtAwMDxezN4/Ho66+/FqtjaWlJ\n33//PXdsbm5OgYGBVdqgjFatWlFQUFCV5+Xl5bkoYxmSdC8rr+jI8Xg8unnzJld25coV4vF4lJiY\n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\nrkJggg==\n", "text": [ - "" + "" ] } ], - "prompt_number": 56 + "prompt_number": 135 }, { "cell_type": "markdown", @@ -287,8 +302,8 @@ "output_type": "stream", "stream": "stdout", "text": [ - "100000 loops, best of 3: 1.56 \u00b5s per loop\n", - "1000000 loops, best of 3: 362 ns per loop" + "1000000 loops, best of 3: 1.33 \u00b5s per loop\n", + "1000000 loops, best of 3: 268 ns per loop" ] }, { @@ -299,7 +314,7 @@ ] } ], - "prompt_number": 1 + "prompt_number": 10 }, { "cell_type": "code", @@ -320,7 +335,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 2 + "prompt_number": 11 }, { "cell_type": "code", @@ -346,7 +361,8 @@ "\n", "fig = plt.figure(figsize=(10,8))\n", "for lb in labels:\n", - " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", + " plt.plot([n*len(test_str) for n in orders_n], \n", + " times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", "plt.xlabel('sample size n')\n", "plt.ylabel('time per computation in milliseconds [ms]')\n", "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", @@ -355,10 +371,11 @@ "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.title('Performance of different string reversing methods')\n", - "max_perf = max( [times_n['reverse_join'][i]/times_n['reverse_slizing'][i]\n", - " for i in range(len(times_n['reverse_join']))] )\n", - "min_perf = min( [times_n['reverse_join'][i]/times_n['reverse_slizing'][i]\n", - " for i in range(len(times_n['reverse_join']))] )\n", + "max_perf = max( j/s for j,s in zip(times_n['reverse_join'],\n", + " times_n['reverse_slizing']) )\n", + "min_perf = min( j/s for j,s in zip(times_n['reverse_join'],\n", + " times_n['reverse_slizing']) )\n", + " \n", "ftext = 'my_str[::-1] is {:.2f}x to {:.2f}x faster than \"\".join(reversed(my_str))'\\\n", " .format(min_perf, max_perf)\n", "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", @@ -370,13 +387,13 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\n", + "png": "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\ne/HiBcvNzRWb17Rp05i2tjY7cuQIS0xMZLNmzWKqqqqsXbt2/DIBAQH8dFl5p6WlMY7j2MaNG9mL\nFy9YdnY2S0tLYzo6OmzSpEnszp077N69e+x///sf09TUZK9evWKMMf776dSpE4uMjGQpKSns1atX\nzNvbm1laWrIzZ86whw8fsr///pupq6uzLVu2iHzfOjo6bPPmzSw5OZlt2LCBcRzHHxNv375l+vr6\nbPbs2ezFixfsxYsXrKCgQGwcLCws2KhRo1h8fDxLSUlhJ06cYMeOHWOMMfbq1SsmKyvL1q5dy+dT\nXtm3bt3KZGVl+byFyzk4OLCLFy+yhIQE5u7uzvT19Vl+fj5jjLEnT54wRUVF5uvry+Lj49nZs2eZ\njY0N4ziO7dq1q8xjISAggCkpKTFHR0d27do1lpSUxDIyMpijoyPr2bMnu3TpEktJSWGbNm1i8vLy\nfGw2bdrENDQ0WE5ODp/X1atXGcdxLCkpiS93Vc7h58+fMzk5ObZixQr28OFDlpCQwP766y92+/Zt\nxhhjKSkpjOM4dunSJZFpAwMDtnfvXvbgwQPm7+/PZGVl2b179xhjjBUWFjJLS0vWuXNnFh0dzW7e\nvMn69OnD1NTUmK+vb5nxiYiIYBzHMRsbGxYREcHu3r3LunTpwjp06MC6devGwsPDWXx8PPvqq69Y\np06d+PXi4uKYiooKCwwMZImJiezOnTts6NChzMjIiH369IllZ2ezefPmsdatW/PHRFZWFmOMsTZt\n2jANDQ32888/s/v377PQ0FAmJycncuxWdD0rLCxk1tbWzN7enl27do3dvHmT9erVi6mqqvL7W1Gc\nSf1FFTkiFd7e3szFxYWfjouLYwYGBqxLly6MsaKL2R9//CGyzrlz5xjHcSw9PZ0xVvQjYGxsXCrv\ngIAAZmhoyE9nZWWxRo0asd9++01kuUGDBjEnJyd+muM4Nn78eJFltm7dyjiOY7GxsXzaihUrGMdx\n7MaNG3za6tWrmZaWVrn7PGDAAJEfDQcHB2ZlZSWyjJ+fHx8Dxhhr3bo1+9///ic2v6ysLKakpMRO\nnTolkr5t2zamrq5eZjnmz5/PWrduzfLy8vi02NhYxnEcO3/+PGOs9I+lOJmZmUxBQYFt3rxZJN3W\n1rZURa7491FW3iUrHQEBAaxz584iyxQWFrK2bduyX3/9lTH23/dz8eJFfpnk5GQmEAhYYmKiyLpB\nQUEi8eY4jk2dOlVkGVNTU/b999/z04aGhiwoKKjMGAipqamxkJCQMufLysqybdu2iaSJK7swvWRF\njuM4FhMTw6cJK03Cioq/vz/T19dnhYWF/DInT56UqCInEAjY48eP+bSIiAimoKDA3r9/L7LsmDFj\n2MCBAxljjL17944pKiqyvXv38vMnT57Munbtyk9X9Ry+ceMG4ziOPXz4UGyZy6rIrV69ml+moKCA\nNW7cmG3atIkxxtjp06cZx3HswYMH/DJv375lSkpKElXkDh8+zKft3buXcRzHDhw4wKcdPHiQcRzH\nV8a8vb3ZiBEjRPL69OkTU1JSYocOHWKMMbZo0SKmp6dXaptt2rRhAwYMEElzd3dnI0eOZIxJdj07\nc+aMSKWasaJ/KISVfcYqjjOpv+jWKpGayMhING7cGEpKSrCwsIChoSF27dqFV69e4dGjR5g+fToa\nN27Mf/r06QOO43D//n0+j44dO1a4nfv37yM3Nxc9evQQSe/Rowfi4uJE0sR1oOY4DhYWFvy0jo4O\nAKBDhw4iaW/evOH7QX38+BHz5s1D+/btoampicaNG+P48eMit+Y4joOlpaXItpo3b44XL14AAF6+\nfIknT57A1dVV7H7FxcUhOzsbgwcPFonTxIkT8eHDB7x586bM9Tp37izSj6xDhw5QU1PD3bt3xa4j\nzoMHD5CTk4OuXbuKpHfr1q3C/mCSiI6OxvXr10X2TVVVFampqSLHAADY2dnxf//7779gjKFjx44i\n6/7000+l1rOyshKZbtGiBV6+fFnpss6aNQvjx49Hz549ERQUhJiYGInXLV72spQ8VoR9C4XHyt27\nd2FnZyfSp0/SPqI6Ojpo1aoVPx0dHY3c3Fy0bNlSJH67du3i46euro7+/ftjx44dAIpu9e3Zswde\nXl4AUK1z2NLSEm5ubmjfvj0GDx6MtWvX4smTJxXuR/HvUtiPrnh8tLS0+K4WAKChoQFjY2OJYlQ8\n9mWd/wD4Yyc6OhoHDx4U2XctLS3k5OSUOgZL4jiu1HFZ/LogyfVMuL+Ghob8fC0tLZH9rWqcSd1H\nDzsQqencuTO2bdsGWVlZtGjRgq9YCC9Ya9euRc+ePUutJ+wMz3GcSCf6miAuP4FAIPIDKfxb2Nep\neBpjDBzHYfbs2Thy5AhWr14NY2NjKCkpYebMmXj//r1I3iU7dnMcx3c4r4hwuX379sHIyKjUfA0N\nDbHrSdLxvi5gjMHFxQXr168vNU9NTY3/W0ZGRiSOwrhERUVBSUlJZL2SDy9UJ/7FzZ8/H6NGjcLJ\nkycRHh6OpUuXYs6cOVi0aFG565Use1nKOgaFZa3OQxklj/nCwkKoqamV6oMHiMbLy8sLgwYNwuvX\nr3Hx4kVkZWVhxIgRIuWqyjks7JMWHR2NsLAw7N+/H/PmzcPevXvh4eFR5n5U9F2Ki5Gk50HxPovC\nfMSlCbfHGIOXlxfmzZtXKq8mTZpUuL2aOi5LKr6/VY0zqfuoIkekRkFBQeQ/ZCEdHR20bt0aCQkJ\nGDduXLW3Y2hoiEaNGuHcuXMwMzPj08+dOyfS0laTLly4AE9PTwwZMgRA0QU+MTGxUk+Aamtro1Wr\nVjh16hT69u1bar65uTkUFBTw4MED9O7dW+J8zc3NsXXrVuTl5fE/RrGxsXj//j3at28vcT5t27aF\nvLw8Ll26BFNTUz790qVLNfK0p62tLUJCQtCyZUs0atRI4vWELTypqanV/kGSl5ev8MERIX19ffj5\n+cHPzw/Lli3DypUr+YpcZfKpCjMzM+zevRuFhYX8E6dXrlypUl52dnZIT09HdnY2zM3Ny1zO1dUV\nTZo0wZ49exAeHo5+/frxFeyaOIft7OxgZ2eH77//Hu7u7ti6dWuVv08zMzO8evUKycnJ/DXn3bt3\nuHfvnkQtopVla2uL2NhYsdc3oaoeE5Jcz8zMzPD69Wvcv3+fb5V7/fo17t27V+quQ03GmdQN9bIi\nd+3aNUybNg1ycnJo2bIltm/fXmPDD5DasWTJEowbNw4aGhro378/5OTkEB8fj5MnT+L3338HUPTf\npST/USspKWHKlClYsGABmjZtig4dOmDfvn04cuQIwsLCPkv5jY2NcejQIQwePBjKyspYtWoVnj9/\njmbNmvHLSFL+gIAA+Pn5QUdHB19//TUKCwsRERGBkSNHQlNTE/7+/vD39wfHcXB2dkZ+fj5u376N\nmzdvijyBWdx3332HNWvWwMfHB/7+/nj37h0mTZqEHj16oFu3bhLvo7KyMiZOnIj58+dDR0cHRkZG\n2LJlC+7du1cjw0N899132LJlCwYMGID58+ejVatWePLkCU6cOIG+ffuWOT6goaEhxo4dC19fXyxf\nvhydO3dGVlYWrl+/jtevX2POnDllbrPkd6Kvr4+LFy/i8ePHUFRUhKamZqlKalZWFubMmYMhQ4ZA\nT08P6enpOHnypEglSF9fH+Hh4ejduzfk5OSgpaVVzeiImjRpElavXg0/Pz9MmzYNaWlp+OGHHwBU\nvrXOyckJLi4uGDx4MJYvXw4LCwu8e/cOly9fhqKiIsaPHw+gaGy8b775Bhs3bkRycjL2798vkk9V\nz+GoqCiEhYXBzc0NzZo1Q1JSEm7dusVvV1LF8+3VqxcsLS0xevRorFmzBnJycvjhhx8gJyf3WcZV\n8/f3h729PTw9PTF16lRoaWnh4cOHOHz4MKZOnQp9fX0YGBggLS0NV65cgaGhIZSVlaGoqFjhNUGS\n65mLiwssLS3h6emJdevWQU5ODnPnzhVpRbx8+TLOnj1b7TiTuqde9pHT1dVFREQEzp07Bz09PRw+\nfLi2i0QqUNHAlJ6enggNDcWxY8fQqVMn2NvbIygoSKQvT1l5iEtfsmQJfH19MW3aNFhYWGD37t3Y\ntWuX2Ns+4vKrbNrq1av54VBcXFzQunVrDBkypNTtsZL5lEwbN24cQkJCsG/fPlhbW8PBwQGnTp3i\n/1GZP38+Vq1aheDgYFhZWaF79+5Ys2aN2IFGhbS1tXH69Gk8efIEdnZ26NevH/9jUNE+lrRs2TIM\nHDgQo0ePRqdOnfDhwwdMnjxZov2siLa2NqKioqClpYXBgwfDxMQEnp6eePz4MVq0aFFuXps2bcL0\n6dOxZMkSmJubw8XFBTt27EDbtm3L3WbJsgYFBSE9PR3GxsbQ0dHB48ePS60jKyuL9PR0jBs3DmZm\nZujduzeaN2+O3bt388v88ssvuH79OvT09Pj+VOXFQZJ4FU9r0aIFjhw5gsuXL8Pa2hrTp0/H4sWL\nAaDcMenKOoeOHDmCwYMHY/r06TA1NUXfvn1x4sQJkT5XAODt7Y2EhASoq6vD3d1dZF5Vz2E1NTVc\nuXIFAwYMgJGREcaNGwdPT08sWLCgyvEBgIMHD0JZWRndu3dH//794eHhAWNj4wrH7KvK+W9iYoLL\nly8jMzMTbm5uMDc3x4QJE/Dp0yeoq6sDAAYOHIihQ4fCw8MD2traWLFiRbl5F0+X5Hp26NAhqKmp\noUePHujfvz/69u0LGxsbfr66unqFcSb1E8fqQ+eZcgQEBMDa2hoDBw6s7aIQQkitOX/+PBwdHXH7\n9u1yb5F+qTIyMtCqVSssXboUkydPru3iEFJj6nVFLjU1FSNHjsSFCxdEOqITQkhD99tvv8HS0hIt\nWrTA3bt3MX36dGhqajbYd5JW1tGjRyEjIwNTU1O8fPkSQUFBuHLlChITE9G0adPaLh4hNaZWb62u\nX78etra2UFBQwJgxY0TmvX37FoMGDYKKigr09PRKjWL94cMHeHl5Ydu2bVSJI4R8cR49eoSRI0fC\nxMQEkyZNgoODA/7555/aLlad8fHjR8yePRvt27dHv379AAAXL16kShxpcGq1Re7gwYMQCAQ4deoU\nsrOzsXXrVn7eyJEjAQBbtmxBTEwMPDw8cPnyZZiZmSE/Px/9+/fHrFmz4OTkVFvFJ4QQQgipXVIb\nergc8+fPZz4+Pvx0ZmYmk5eXFxml2svLi82bN48xxtj27duZpqYmc3R0ZI6Ojuzvv/8ulWeLFi0Y\nAPrQhz70oQ996EOfOv+xtLSsUh2qTjy1yko0Ct67dw+ysrIiT0xZWlryo1iPHj0ar1+/RkREBCIi\nIjBs2LBSeT579ox/1F0an4CAAKmuL8ny5S1T1jxJ08UtV90YSDPelc2juvGubMwlSZNmvGtie3X5\nGKd41/415UuLOV1TvrxjvKLp2NjYKtWh6kRFruTj15mZmVBVVRVJa9y4MTIyMqRZrEpxdHSU6vqS\nLF/eMmXNkzRd3HIPHz6ssEw1pbrxrmwe1Y13efPFpUuSJs14i9v+515fmsc4xbv2ryni0hpyzOma\n8uUd458r3nXiqdX58+fj6dOnfB+5mJgYfPXVV8jKyuKXWblyJc6fP48jR45IlGd9eS1RQ+Lj44OQ\nkJDaLsYXg+ItXRRv6aOYSxfFW7pKxruq9ZY62SJnZGSE/Px8kZcNx8bGVup1QgAQGBiIyMjImigi\nkYCPj09tF+GLQvGWLoq39FHMpYviLV3CeEdGRiIwMLDK+dRqi1xBQQHy8vIQFBSEp0+fIjg4GLKy\nspCRkcHIkSPBcRw2b96MGzduoG/fvoiKihJ5x2N5qEWOEEIIIfVFvWyRW7RoEZSUlPDzzz9j586d\nUFRUxJIlSwAAGzduRHZ2NrS1teHp6Ynff/9d4kocqR3U+ildFG/ponhLH8Vcuije0lVT8a7VN80H\nBgaW2ZyooaGBgwcPSrdAhBBCCCH1SJ142OFz4DgOAQEBcHR0LPWkSJMmTfDu3bvaKRghRISGhgbe\nvn1b28UghJBaERkZicjISAQFBVXp1mqDrsiVtWvUf46QuoPOR0IIqad95AghpL6g/kPSRzGXLoq3\ndNVUvKkiRwghhBBSTzXoW6tl9ZGjWzmE1B10PhJCvmTUR64M1EeOkPqBzkdCCKE+coQQ8llR/yHp\no5hLF8VbuqiPHKkyfX19LF26tFLrCAQC7N69u9LbevbsGTQ1NfH06dNKr9sQ6Onp8YNcC8XExKBZ\ns2b4+PFjLZWq5i1evBjDhw8XSSsoKICpqSlOnDhRS6UihJCGj26tliExMRVhYQ+QlyeAnFwhXFza\nwti4TZXLU1P5+fj4gOM4bN26FQKBAJGRkejRowcEAgEiIiKQkpKCoKAgpKSklJnHmzdvoKSkBEVF\nRYm3+/LlS6ipqaFRo0aVKq+vry/k5OSwcePGSq3XUOjr68PX1xf+/v58Wq9evdCrVy/MmTOnFktW\nvidPnkBXV5c/viqSmZkJXV1dnD59Gra2tnz6zp07sXz5cty6davMdenWKiGE0K1VsQIDA6vUdJmY\nmIqQkPt49coJ6emOePXKCSEh95GYmFqlctRkfhzHgeO4MudJQlNTs1KVOADQ1taudCXu7du32Llz\nJ3x9fctdLj8/v1L51qTCwkIUFhZKbXtxcXE4d+4cxowZI7VtVkdFFxVh/FRUVDBkyBCsW7dOZP7X\nX3+N1NRUREREfM5iEkJIvRUZGVnmW64k0eArciWfWJVEWNgDNGrkjMhI8J+oKGfMmPEAgYGo9Gf6\n9AeIihLNr1EjZ5w9+6DSZauJlouSt/syMjLw7bffQltbGwoKCrCzs8OZM2dE1hEIBNi1a5fI9G+/\n/YbRo0dDVVUVrVu3xrJly0TW2bt3L3R0dGBtbc2nRUZGQiAQ4Pjx4/jqq6+gqKiILVu2AADWrVsH\nExMTKCoqwsjICEuXLkVBQQEA4IcffoCJiUmpffHz80P37t356evXr8PV1RWNGzeGtrY2vv76azx6\n9IifHxgYiHbt2iE0NBQmJiZo1KgRkpKSEBcXBzc3N2hoaEBFRQVmZmbYuXMnv15mZiamTp2KVq1a\nQVlZGTY2NqVeIRcbG4uuXbtCQUEBRkZGCA0NLVXenTt3omvXrmjatCmfFhISAjk5OURGRsLCwgJK\nSkpwcnJCWloaIiIiYGVlBRUVFfTq1QvPnj0DACQnJ0MgECAqKkok//Pnz0NWVhaPHz8ute2SLl68\niG7dukFVVRWqqqqwsrLC6dOnAQC6uroAgJ49e0IgEMDAwKDc+AHAwIEDsW/fPuTm5vLbUFRURO/e\nvUViWV9R/yHpo5hLF8VbuoTxdnR0pIpcTcvLEx+WgoKqhauwUPx6ubmVz6+iVrfyWuzKWmbs2LE4\nc+YMdu3ahdjYWHTr1g19+/ZFYmJiudsOCgqCo6MjYmNj8f3338Pf3x/h4eH8/HPnzqFTp05iyzBz\n5kx8//33SEhIQN++fREYGIhffvkFP//8MxISErBmzRr88ccfCAoKAlB0S/nevXu4du0an0dOTg5C\nQ0Ph7e0NALh79y4cHR3RrVs3XL9+HREREZCRkUGvXr2Qk5PDr/fs2TP89ttv2LFjB+Lj49GyZUuM\nHDkSTZs2RVRUFO7cuYNVq1ZBQ0MDQFHluV+/frh9+zZCQ0MRFxcHPz8/jBgxgt/f7Oxs9OnTB02a\nNEF0dDS2b9+OlStX4uXLlyL7XVZMCgsL8eOPP+LPP//EpUuX8OTJEwwdOhSBgYHYtGkTnzZjxgwA\ngIGBAVxdXREcHCyST3BwMNzc3NC6dWuxcRfKz89H//790aVLF8TExCAmJgZBQUFQUlICANy4cQMA\ncODAAaSlpSE6Orrc+AFA586dkZ2djStXrohsq1OnTiLHBSGEkBrEGqjydq2i3V6//iwLCGDMwUH0\n06dPUXplP+7uZ0vlFRDA2IYNZ6u8f9Whp6fHlixZwhhjLCkpiXEcx06cOCGyjI2NDRs7diw/zXEc\n27Vrl8j01KlTRdYxNTVl33//PT/dsWNHNmvWLJFlIiIiGMdxbOfOnXxaVlYWU1JSYqdOnRJZdtu2\nbUxdXZ2f7ty5M5s8eTI/vXfvXqaoqMjev3/PGGPM29ubjRgxQiSPT58+MSUlJXbo0CHGGGMBAQFM\nIBCwx48fiyynpqbGQkJCmDgRERFMQUGB347QmDFj2MCBAxljjAUHBzMVFRWWnp7Oz79z5w7jOI6P\nNWOMaWlpsfXr14vks3XrVsZxHIuNjeXTVqxYwTiOYzdu3ODTVq9ezbS0tPjpAwcOMGVlZfbhwwfG\nGGPv3r0T2dfyvH37lnEcxyIjI8XOf/z4MeM4jp07d04kvaz4CamqqrLg4GCRtP379zOO41heXp7Y\ndRrwZYgQQiRW1WuhbO1WI+smF5e2CAk5C0dHZz4tJ+csfHwMYWxc+fwSE4vya9RIND9nZ8OaKG61\n3L17FwBKdWjv0aNHqdt2JVlZWYlMt2jRQqQF6sOHD2jcuLHYde3t7fm/4+LikJ2djcGDB4u0+hUU\nFCAnJwdv3ryBpqYmvL29sWDBAqxZswYyMjLYvn07BgwYAFVVVQBAdHQ0Hjx4UGqbOTk5uH//Pj+t\no6ODVq2vuR93AAAgAElEQVRaiSwza9YsjB8/HiEhIXB0dET//v35W8LR0dHIzc3lW56EcnNzYWRk\nBKAojmZmZlBTU+Pnm5ubi0wDwPv378XGhOM4WFhYiJQRADp06CCS9ubNGzDGwHEc+vXrBzU1Neza\ntQsTJ07Ezp07oa6ujn79+pXKvyQNDQ2MHz8ebm5ucHJygoODAwYNGsTvT3nExU9IVVUV6enppdIA\nID09HVpaWhXmTwghRHJ0a1UMY+M28PExhLZ2ONTVI6GtHf7/lbiqPbVa0/lJA5OgL568vLzINMdx\nIg8OqKurIyMjQ+y6ysrK/N/Cdfbt24fY2Fj+c+fOHSQlJfG3OIcPH46MjAwcO3YMr169wqlTp/jb\nqsIye3l5ieQRGxuLe/fuYdy4cWK3LTR//nzcu3cPw4YNw507d9C5c2csWLCAL5+amlqpfOPj40WG\n1pAkZmXFRCAQiFRihX/LyMiUShNuR1ZWFuPGjeNvr27evBljxoyBQCDZab1p0yZcv34dvXr1wrlz\n59C+fXts2rSpwvXExU/o/fv3UFdXL5UGoFR6fUP9h6SPYi5dFG/pqql4N+gWOeHDDlV54MHYuE2N\nVrRqOr+aYm5uDqCo75a7uzuffv78eXTs2LFaebdr1w4PHz6UqAwKCgp48OABevfuXeZyGhoa6Nev\nH3bs2IHU1FQ0adIEbm5u/HxbW1vExsbyHfMrS19fH35+fvDz88OyZcuwcuVKLFq0CLa2tkhPT0d2\ndjYfL3H7EBwcjPfv3/OtcHFxcXwlRkjSmEhq/PjxWLp0KX7//Xfcvn0bhw4dqtT65ubmMDc3x/Tp\n0+Hn54dNmzZhwoQJfCVd+LCJJN68eYPMzMxSrXqpqanQ09ODrGyDvtwQQkiVCF/RVVUNukWuqk+t\nNiTXrl2DiYmJSGf14tq2bYuhQ4di0qRJOH36NBISEjB16lTcvXsXs2fPrtS2GGMirVIODg4iDyeU\nRUVFBf7+/vD398fGjRuRmJiIuLg47NmzB/PmzRNZ1svLC0ePHsUff/wBT09PkVYsf39/xMfHw9PT\nE9HR0UhJSUFERASmTZtW7rh6WVlZmDx5Mj8OX0xMDE6ePMlX2pydneHi4oLBgwfj8OHDSE5OxvXr\n17Fu3Tps3rwZAPDNN9+gcePG8PT0xK1bt3DlyhWMHTu21DAvksZEUrq6uujduzemTZsGFxcX6Onp\nSbTegwcPMHfuXFy6dAmpqamIiorChQsX+H3W0tKCiooKTp06hbS0NLx7967CPK9evQoFBQV07txZ\nJP3KlSsN4jxsCPtQ31DMpYviLV3CeNNTq6RcHz9+RFJSErKzs8tcZvPmzXBzc4OnpyesrKwQFRWF\nY8eOSdRfqriST8N+/fXXePnyJf8EZPHlSpo/fz5WrVqF4OBgWFlZoXv37lizZg309fVFlnN3d4e6\nujoSEhLg5eUlMs/ExASXL19GZmYm3NzcYG5ujgkTJuDTp0/87VlxT/XKysoiPT0d48aNg5mZGXr3\n7o3mzZuLvMniyJEjGDx4MKZPnw5TU1P07dsXJ06cgKFhUT9HRUVFHD9+HG/evIG9vT1Gjx6NGTNm\nQFtbW2Rbnp6eiIqKKvU0q7iYSJrm6+uL3NxcTJgwodS8sigrK+P+/fsYMWIEjI2NMWTIEHTr1g3r\n168HUHSrd8OGDQgNDUXr1q351tnynoo+ePAghgwZInLLPTs7G6dOnYKnp6fEZSOEECI5erPDF6hF\nixaYN28epkyZ8tm3NWHCBMjIyOC333777NuqL1xdXeHs7Iy5c+fWSH4bN27EokWL8Pjx41q7fZmR\nkYE2bdqUerPDjh07sGLFigbxZofIyEhqsZAyirl0Ubylq2S86c0OpEJZWVk4ffo0Xrx4IfI05OcU\nFBSE0NDQL/Zdq+IsX74cv/76a7XftZqVlYWEhAQsX74ckydPrtU+aGvXroWrq6tIJa6goABLly7F\n8uXLa61chBDS0FGL3BckMDAQ69evh5eXF1atWlXbxSHV5OPjg7/++guurq7Yt2+fyCvUhEOSlCU+\nPr7MIUSk7Us9HwkhpLiqXgupIkdIA5SZmVmqH15xbdq0ERnapDbR+UgIIXRrVazAwEAaF4d8kVRU\nVGBgYFDmp65U4uoTupZIH8Vcuije0iWMd2RkZLWeWm3QAztVJzCEEEIIIZ+bcLxb4bvFK4turRJC\nahWdj4QQQrdWCSGEEEK+OFSRI4QQCVD/IemjmEsXxVu6aireVJEjhBBCCKmnqI8cIaRW0flICCHU\nR47UEwKBAAKBADIyMtV+s4Gk7ty5w2+3Xbt2UtkmIYQQIg1UkStD4v1EbPh7A37d8ys2/L0BifcT\n61R+dcXixYtLvdi+Ihs2bMDz58+hpKRU7e2npaVh1KhRaN++PeTk5NCrV69Sy5iamuL58+eYOXNm\nmS98J6Qi1H9I+ijm0kXxli7qIyeBqg4InHg/ESERIXil8wrpzdLxSucVQiJCqlz5qun86qO8vDz+\nbzU1NWhra9dIvjk5OdDU1MTMmTPh4uIitqImIyMDHR0dKCsr0y08QgghdUp1BwSmPnJibPh7A17p\nvELkw0iRdOUnyrD7yq7SZbl28Ro+thK9jeio5wjtl9qYNGxSpfJydHSEoaEhmjVrhk2bNiEvLw//\n+9//EBQUhMDAQPzxxx8oLCzEhAkTsHjxYgQGBmLPnj1ISEgQyWfs2LF49OgRwsLCKtzm0qVLsWXL\nFjx9+hSqqqqwsbHBoUOHsGfPHowdO1Zk2cDAQCxcuBB6enoYPXo03rx5g9DQULRr1w5RUVEQCATY\nuXMnvvnmm0rttyR8fHzw9OlTnDlzRuz8wMBA7Nq1C0lJSTW+bVJ11EeOEEKoj1yNymN5YtMLUFCl\n/ApRKDY9tzC3Svnt27cPBQUFuHz5MlatWoXFixfD3d0dOTk5uHjxIlauXImlS5fi5MmT8PX1xYMH\nD3D+/Hl+/YyMDOzduxfffvtthds6cOAAfv75Z6xduxb379/HmTNn0KdPHwDAiBEjMHfuXLRq1Qpp\naWlIS0vDrFmz+HXXrl2LZs2a4cqVK9i6dWu529HT08OYMWP46YcPH0IgEGDbtm2VDQ8hhBDyxaCK\nnBhynJzYdBlU7f2UgjLCLC+Qr1J+BgYG+Omnn2BoaIgxY8bAzMwMz58/x7Jly2BoaAgvLy906NAB\n4eHhaNmyJfr06YPg4GB+/d27d0NJSQmDBg2qcFupqalo1qwZ3Nzc0KpVK1haWmLKlClQUFCAgoIC\nlJWVISMjA21tbWhra4v0e7O3t8fChQthaGgIExOTcrdjaGiIFi1a8NNycnIwMTGBurp6FSJESM2j\n/kPSRzGXLoq3dNVUvBv0u1aryqWjC0IiQuDYzpFPy0nKgc8IHxgbGlc6v8RWRX3kGrVrJJKfc0/n\nSufFcRwsLS1F0po1a4bmzZuXSnv58iUA4Ntvv8WQIUOwfv16qKmpITg4GN7e3pCVrfjrHz58ONat\nW4c2bdrA1dUVzs7OGDhwIFRUVCosp729vcT7VfIWb8uWLXH37l1++sKFC3xLIAD88MMPmDdvnsT5\nE0IIIQ0RVeTEMDY0hg98cPbGWeQW5kJeIA/nns5VqsR9jvzk5ERbDDmOK5UGAIWFRbd0e/fuDW1t\nbWzfvh3du3fHjRs38Ndff0m0rRYtWiAhIQEREREIDw/HokWLMHfuXFy9ehWtWrUqd11lZWUJ96hi\ndnZ2iI2N5ac1NDRqLG9CJOHo6FjbRfjiUMyli+ItXTUVb6rIlcHY0LjKFS1p5FeR4k9vCgQC+Pr6\nIjg4GAkJCXBwcKjUeGry8vJwc3ODm5sbFi1aBB0dHRw+fBiTJ0+GvLw8Cgqq1newMhQUFGBgYFDh\ncjS8CCGEkC8J9ZGrZxhjpZ5qkSRt3LhxSEhIwJYtWzBhwgSJt7dlyxZs3rwZsbGxSE1Nxc6dO5GR\nkQEzMzMAgL6+PtLS0nDlyhW8fv0a2dnZ/PYrw9nZGf7+/vz006dPYWJigkOHDlW47s2bN3Hz5k28\nffsWGRkZiI2Nxc2bNyu1fUIqQv2HpI9iLl0Ub+miPnJfKI7jSrU6SZLWrFkzeHh44OLFixgyZIjE\n22vSpAlWrlyJOXPmICcnB23btkVwcDB69uwJABg0aBCGDh0KDw8PvHv3jh9+pLItY8nJyWjTpg0/\nnZeXh3v37uHDhw8VrmtjY8P/zXEcrK2twXGcVFoKCSGEkNpE48h9Qezt7dG9e3f88ssvtVYGgUCA\nHTt2YNSoUVLfNo0jVzd9qecjIYQUV9VrIVXkvgCvX7/GsWPH4Ovri6SkJOjp6dVaWQQCARo1agRZ\nWVm8fPkSioqKn32b8fHxsLOzQ15eHtq0aYN79+599m0SyX1p5yMhhIhDAwKTMmlra2PWrFlYt25d\nqUqcu7s7GjduLPbj4eFR42W5f/8+4uLiEBsbK5VKHFA0Rt2tW7cQHx+P8PBwqWyTNDzUf0j6KObS\nRfGWLuojRyQmHIZEnC1btuDTp09i532OipYkT57WNDk5uVrZLiGEEPK5NehbqwEBAXB0dCw1Vgvd\nyiGk7qDzkRDyJYuMjERkZCSCgoKoj1xx1EeOkPqBzkdCCKE+coQQ8llR/yHpo5hLF8W7chITU7Fh\nQzhWr47Ehg3hSExMrdT61EeuGjQ0NOgNAITUEfS6NUJIfZOYmIqQkPt4984Zz54BlpZASMhZ+PgA\nxsZtKly/Jn2Rt1YJIYQQQqpq3bpwXLvmhMePi6abNgXMzAAdnXBMmuRUpTyrWm/5IlvkCCGEEEKq\n4tMn4OpVAZ48+S/t40cgPx/IzZV+jzXqI0dqDPWvkC6Kt3RRvKWPYi5dFO+KvX4NBAcDb9/+N6yX\npiZgbQ3IyQHy8mUP91VSTcWbKnKEEEIIIRVISiqqxL15AxgYtEV+/lm0aQO0bw/IygI5OWfh7NxW\n6uWiPnKEEEIIIWVgDLh8GQgLK/obKGp9s7RMxaNHD5CbK4C8fCGcndtW60EHetdqCVSRI4QQQkh1\n5OUBR48Ct279l6amBowYATRvXrPbonHkSK2j/hXSRfGWLoq39FHMpYviLerDByAkRLQSp6sL+PrW\nTCWOxpEjhBBCCPkMnjwB/v4byMj4L83GBvDwAGRkaq9c4tCtVUIIIYSQ/xcbW3Q7NT+/aFogAHr3\nBuzsgM/5LgEaR44QQgghpIoKC4EzZ4CoqP/SFBWBYcMAff3aK1dFqI8cqTHUv0K6KN7SRfGWPoq5\ndH3J8c7OBnbvFq3EaWsDEyZ8vkoc9ZEjhBBCCKmm16+Bv/4qGh9OyMQEGDQIaNSo9solqXrZR+7D\nhw9wcXFBfHw8rl69CjMzs1LLUB85QgghhJQnKQnYtw/IyfkvrUcPoGfPz9sfTpwvqo+ckpISjh8/\njtmzZ1NljRBCCCGVUtYgvwMHAubmtVu2yqqXfeRkZWWhpaVV28UgJXzJ/StqA8Vbuije0kcxl64v\nJd55ecDBg0UPNggrcWpqwNix0q3EUR85QgghhJBK+PAB2LMHePbsvzRdXWD4cEBZufbKVR212iK3\nfv162NraQkFBAWPGjBGZ9/btWwwaNAgqKirQ09PDX3/9JTYPTto3sUmZHB0da7sIXxSKt3RRvKWP\nYi5dDT3eT54AmzaJVuI6dgS8vWunEldT8a7VFrmWLVtiwYIFOHXqFLKzs0XmTZ48GQoKCnj58iVi\nYmLg4eEBS0vLUg82UB85QgghhJTn5s2iQX4LCoqmpTXIrzTUaovcoEGDMGDAAGhqaoqkZ2Vl4cCB\nA1i0aBGUlJTQrVs3DBgwADt27OCX6dOnD06fPg1fX19s27ZN2kUnYnwp/SvqCoq3dFG8pY9iLl0N\nMd6FhcCpU8ChQ/9V4hQVgdGjAXv72q3ENag+ciVb1e7duwdZWVkYGhryaZaWliI7ffz48Qrz9fHx\ngZ6eHgBAXV0dVlZWfFOmMC+arrnpmzdv1qnyNPRpijfFu6FPC9WV8jT0aaG6Up7qTnfq5Ih9+4Cz\nZ4um9fQcoa0NtG4didRUQF+/dst38+ZNREZG4uHDh6iOOjGO3IIFC/DkyRNs3boVAHDhwgUMGzYM\nz58/55cJDg7G7t27ERERIVGeNI4cIYQQ8mV69apokN+3b/9Lq+uD/NbrceRKFlxFRQUfPnwQSXv/\n/j0aN24szWIRQgghpJ65dw/Yv190kF8HB8DRsf73hxNHUNsFAEo/eWpkZIT8/Hzcv3+fT4uNjUX7\n9u0rlW9gYGCpJmPy+VCspYviLV0Ub+mjmEtXfY83Y8DFi0UtccJKnJwcMHRo7bypoSLCeEdGRiIw\nMLDK+dRqRa6goACfPn1Cfn4+CgoKkJOTg4KCAigrK2Pw4MFYuHAhPn78iIsXL+Lo0aMYPXp0pfIP\nDAzk70kTQgghpGHKywMOHBB9U4OaGjBuXN1/U4Ojo2O1KnK12kcuMDAQP/74Y6m0hQsX4t27dxg7\ndizOnDkDLS0tLFu2DCNGjJA4b+ojRwghhDR84gb5bdMGGDasfg3yW9V6S622yAUGBqKwsFDks3Dh\nQgCAhoYGDh48iMzMTDx8+LBSlbj64Ny5czhz5ky5ywQGBkJHRwfDhg2r0jZWrlwJExMTyMjI4J9/\n/hGZ5+XlhebNm2P27Nli17W2tkZO8Q4GFUhLS8OAAQP4sf527dpV5rIPHz5Enz59YGJiAnNzc/z5\n558AgOfPn8POzg7W1tawsLDAoEGD8Pr1a4nLAACpqakIDg6u1DpCixYtQvv27WFpaQlbW1ucPn26\n1DKJiYlQUlIqM26S7ANjDC4uLmjatGmVyjl//nyYmprCwcGhSuuHhIQgKSmpSuuWFBsbi71794qk\nCQQCfPz4sUbyF6dnz55ITU2Fo6MjHj16BADQ19cHAP4p9ZICAgIQGhpaYd6+vr64dOmSROX4559/\n4OfnJ1mh66iQkBAMHTqUn37x4gW6dOlSa+WR5Lq4YcMGrFixgp++ffs2+vXr97mLRuqox49LD/Jr\nawt4edWvSlx11Ik+cp9LXe4jFxERIbaiIJSfnw+O4+Dt7S3RD5A4jo6OOH78OHr06FGqH+L27dsx\nceLEMteNiYlBo0o82jNjxgw0bdoUsbGxOH/+PPz9/fHkyZNSyzHGMGjQIEycOBEJCQmIi4vjL8JN\nmzbFhQsXEBMTg9u3b0NfX79Ui21FUlJSsGnTpkqtI9SpUyf8+++/iI2NxZ9//onhw4eLVGYLCgrw\n7bffYvDgwWXmIck+rF+/Hnp6elV+K8mqVatw8eJFBAUFVWn9kJAQ3Lt3r9LrFRYWlkqLiYkRe3xK\nozVcXPzKimlQUJBE/xAFBwejW7duYueVvJYEBARg7ty5YpcVF6ualJ+f/1ny/fnnn8u9LnxuJa+L\nJWNeUFCA8ePH4/fff8enT58AABYWFigoKMDVq1elWdQGqa7+XpYlJgYICQEyM4umBQLAwwPo2xeQ\nkanVokmkQfSR+9wq00dOIBBg6dKlsLe3h4GBAcLCwjBnzhy+ZSUhIQEA0LdvX+zbt49f78CBA3Bz\ncysz38TERHTp0gVWVlawsLDAL7/8gjt37uCPP/7A9u3bYW1tjeXLlyM1NRVaWlqYPXs2OnbsiC1b\ntgCo3g+ira0tDAwMqrSusFWlsLAQkyZNgqmpKaysrPDVV1+JXf7WrVuws7MDAGhpacHKykrsD3xY\nWBhUVVXRv39/Pk3YMiUrKwsFBQUARRfsjIwMaGtrAwB27tyJzp07Iz8/H4WFhXBxcRFbYZs8eTLu\n3r0La2tr/oc7OjoaXbp0gaWlJbp27Yp///1X7D64urry27ewsABjDG/evOHnL1u2DP3790e7du3K\njFt5+wAASUlJ+PvvvzFv3jyR71bS/evevTs+ffoEJycn/P7773jx4gWcnJxga2uL9u3bi1QsDh8+\njA4dOvDH8Llz57B161Zcv34dU6ZMgbW1NcLDwwEU/YB36tQJHTt2RP/+/fHixQsARefQ0KFD4ebm\nBnNzc7x//57P/82bNwgICEBYWBisra0xbdo0ft7atWthb2+Ptm3b4sCBA3y6p6cn7Ozs0KFDBwwe\nPBjp6ekAii5kVlZWmDhxIiwtLWFlZcWfcyVpampCRkYGTZo0gcz/X62FMS6rldPHxwcbNmwAAGRm\nZmLMmDGwsLCAhYWFSOuOo6Mj33rt4+MDPz8/ODs7w8jICD/99BO/3PXr1yEnJ8e3AEZGRqJDhw4Y\nO3YsrK2tcfLkSSQmJqJPnz6wt7eHlZUVQkJCAACLFy/GjBkzROLYtGlTZGdnIzc3F7Nnz0anTp1g\nZWUFLy8vZGVl8eUZP348evToAXt7e2RnZ2Po0KEwNzeHlZUVhg8fzue5bds2dO7cGba2tnB2duYr\n7rm5ufj2229hZGSErl27Ijo6ml8nPz8fu3fvxpAhQ/i02r4upqWllbouNmrUCD169BA5roYPH85f\nM0nDV1gInDwJHD783yC/SkpFrXD//zNUr1S3jxxYA1XZXeM4jm3cuJExxtjevXuZkpIS++effxhj\njC1fvpx5enoyxhg7efIk69mzJ7+ek5MTO3LkSJn5Tpkyhf3000/8dHp6OmOMscDAQDZ79mw+PSUl\nhXEcx0JDQ/m0wMBANmvWLJH8+vTpw65fv84YYyw6Opr16dOnwn1zdHTk96U4cfkLcRzHsrKy2I0b\nN5ipqWmp8pfk5eXFZs6cyRhjLDk5mWlpabGpU6eWWu7XX39lgwYNYkOHDmXW1tZs6NCh7PHjxyLL\nWFpasiZNmrCuXbuy7OxsPn3cuHFs5syZLCgoiA0fPlxsOSIjI5mtrS0/nZOTw1q3bs3Cw8MZY4yF\nhYUxXV1dlpeXJ3Z9oZCQENaxY0d++ubNm8zBwYEVFhaWG7fy9qGgoIA5ODiw2NhYlpKSwrS0tETW\nkWT/GPvvu2GMsU+fPrHMzEzGGGO5ubnMycmJnTx5ki/DlStXGGOMFRYWsg8fPjDGSh8PO3bsYBMm\nTGCFhYWMMcY2btzIRo0axRhjLCAggOnq6rI3b96UGachQ4aUKt+GDRsYY4xdunSJtWzZkp/3+vVr\n/u8ffviBzZs3jzHGWEREBJOTk2M3b95kjDG2ZMkSvgw1wcfHhy/TnDlzmI+PD2OMsQ8fPjBzc3N2\n4sQJxphobLy9vVn37t1ZTk4Oy83NZebm5uzMmTOMsaJrwowZM/j8IyIimIyMDB/vvLw8ZmNjwxIS\nEvjtGBsbs4SEBPbo0SPWvHlzVlBQwBhjbO3atWzcuHGMMcYWLVrEFi9ezOc7Z84c9sMPP/DlsbOz\nYx8/fmSMMXbgwAHm5ubGLys8N8+fP888PDxYTk4OY4yx48ePs27duvHbcnNzY/n5+ezjx4/M1taW\nDR06lDHG2LVr15i1tbVI3OridZExxjZt2sTGjh3LTycmJjIDA4Myt0cajo8fGdu+nbGAgP8+Gzcy\n9vZtLResBlS1SlYnxpGrK4T/0VpbW0NGRgZ9+vQBANjY2PD//bm6umLatGlISEgAYwzJycno27dv\nmXk6ODhgzpw5+PjxI3r27ImePXvy81iJ1jYFBQWR/iriFO/rZmtrW6rvW00zMDBAXl4exo4dCycn\npzL39ZdffsH06dNhZWUFXV1dODs7860lxRUUFCA8PBzXrl2DkZERVq9eDW9vb5w9e5Zf5ubNm8jP\nz8eUKVMwbdo0/P777wCKbkna2NggPz8fN27cEFuOkjFNTExEo0aN+Lg7OztDXl4eiYmJMC/jUaZz\n585h4cKFCAsLAwDk5eVhwoQJCAkJkbgzqrh9WLlyJRwcHNChQwexI3lLsn8l5efnY9asWYiKigJj\nDGlpaYiNjYWbmxucnJwwbdo0fP3113B3dxfZ3+L7cOTIEVy/fh02NjZ8nurq6vx8Dw8PNGnSROz2\ny4qFsE9rp06d8OzZM+Tm5kJeXh7btm3D7t27kZubi6ysLBgbG/PrGBsbw9LSkl/v6NGjEsWgss6e\nPYu1a9cCABo3boyRI0ciLCwMvXv3FlmO4zgMHDgQ8vLyAIquA8nJyQCK+nmWbO1u164dOnXqBKDo\n7TQJCQkifXtzc3ORkJCAAQMGwNzcHP/88w/69euHkJAQrFmzBkDRd5GRkcG3buXk5MDKyoovz5Ah\nQ6CoqAgAsLKyQnx8PL777js4OjrCw8MDAHD06FHExsbyZWGM8S2fERER8Pb2hoyMDBQVFeHp6YmL\nFy8CKOqW0LJly1LxqovXxZYtW/LfBQC0atUKqampZW6PNAziBvk1NS0a5Pf/T9MvUoOuyAlvrUp6\ne1V4S0xGRkakf5iMjAzfJ4XjOHz33XfYsGEDOI7DxIkTy+3rNHjwYHTt2hWnTp3CsmXL8Oeff2LH\njh1ifwCVq9Ez8/Tp0/xtNU9PT8ycObPKeRWnpqaGuLg4REZGIiwsDHPnzsWNGzego6MjspyWlhbG\njRvHx7pPnz5wdXUtlV+bNm3QsWNHGBkZAQBGjRrFP+BSnKysLLy8vODr68unPX/+HFlZWRAIBHj/\n/j1UVFRqZB+Li4qKwujRo3HkyBH+Furz58+RnJzM/4Clp6eDMYaMjAy+kilOyX24cOECbt26he3b\ntyM/Px/v3r2DgYEBbt26BRUVlUrvX2RkJC5cuID09HRcu3YN8vLy+Pbbb5GdnQ2gqC9dXFwczp49\ni6FDh2LGjBkYP348gNJ9yRYsWAAfH59S2+A4rkrHZfFzCSiqHF69ehW///47oqKioKmpid27d4s8\nmCJcR7je5+oHBohWFhhjZZ7Dxa8Dr169KrdMxb8vxhi0tLQQExMjdlkfHx9s27YNenp6+PDhg0iX\nhd9++63Ma1bx70JfXx93795FWFgYTpw4AX9/f9y+fRsAMHbsWLF9KEv+IyLJPyW1eV28cuWK2OOv\n5H4Ip8v7LknFIiMj6+yQXeIG+XV0LBrot75+5cJ4R0ZGVqt/IvWRqwJvb28cOnQIoaGh/A9jWR48\neKSSj7UAACAASURBVABtbW14e3tj4cKFfJ8UNTU1kf5G1eXq6oqYmBjExMSUqsQJL3BV8fr1a2Rl\nZcHV1RU//fQT1NTUkJKSUmq5t2/fouD/OyuEh4cjLi4O33zzTanl3N3d8fjxY6SlpQEATp48ybc4\nPHnyBJn/32u1sLAQ+/fvh729PYCi1ozhw4djxYoVCAgIwIgRI/jtFaeqqioSV2NjY+Tm5vInSXh4\nOPLz80VagoSio6MxfPhw7N+/ny8TAOjq6uLVq1dISUlBSkoKpk2bhgkTJoitxJW3D0ePHkVqaipS\nUlJw8eJFaGhoIDk5GSoqKhLvX0nv379H8+bNIS8vj6dPn+Lw4cP8D5mw1XHKlCnw9PTk+waqqqry\nLTQA0L9/f2zYsIFPy8nJwa1btwBU/ENfmeM4PT0dampqaNKkCXJycvinlaXNxcWF70+VkZGBv//+\nG7169ZJoXWE89PT08PTp0zKXMzY2hpKSEnbu3MmnJSQkICMjA0BRReb8+fNYtWoVxowZwy/Tv39/\n/PLLL3xH/oyMjDL7Cj59+hQcx2HAgAFYtWoVXr16hXfv3qFfv37Yvn07X76CggK+hdfJyQk7duxA\nQUEBsrOzsXv3bj6/ivapItK8Lj558oR/Ulk4raurS5W4BqisQX6HDWs4b2qobh+5Bl2Rq4ySF4Di\n0xzHiUyrqKjA3d0drq6u0NTULDff0NBQdOjQATY2NpgyZQp/C2XQoEGIjo7mO/WW3EZZPDw8+Ivy\nv//+y99OEWfFihVo3bo1rl69Ch8fH+jq6vKVjIoIy/Lo0SP06tULVlZWsLS0RJ8+ffhbNsVdu3YN\nfn5+MDU1RWBgII4ePcr/J//HH38gICAAAKCkpIR169bB3d0dVlZW2L59O98JPDExEV999RXf2f3t\n27dYtWoVAGDu3LmwsbHBsGHD4OPjA319fSxYsKBUOSwtLWFsbAwLCwsMGzYM8vLy2L9/P/z9/WFp\naYkFCxZg3759kJUt3Rg9efJk5OTkYMKECbC2toa1tTXi4uIqjFXx/StvH4or2XIg6f4B/303jo6O\nmDJlCi5dugQLCwuMHz8eLi4u/HLff/89LCwsYG1tzbemAsCECRPw448/8g87eHp6YtSoUXBwcOCH\nXrl8+TK/rfKOS2dnZ2RlZcHKyop/2KGsc8nd3R1t27aFkZERHB0d0bFjx1LnWfG/q/ujXPxcKW7B\nggVgjMHCwgJdu3aFl5eX2NbjkmVq1qwZP92zZ09cuXKlzPLKysri6NGj2LNnDywtLdG+fXt89913\nyM3NBQAoKipiwIAB2LlzJ7y8vPj15s2bB0tLS9jZ2cHS0hLdu3cXqcgV38bt27fRtWtXWFlZoVOn\nTvD390ezZs3QvXt3LFmyBP379+cfJjhy5AiAou9eV1cXpqamcHZ2hr29PZ+ntbU1nj59yj9cUXJ7\nJaelcV3s0qWL2OPg8uXLIsd6yWlSNXWtNU7cIL/q6kWD/JqZ1W7ZakJNxbtWBwT+nD7ngMD5+fmw\ntLTE9u3b0bFjx8+yDaBoyITMzEyRp+pqUmBgILKysj5b/oTUFR4eHvD29q7ymIziCPuIlTV2XX00\nbdo0WFtbw9vbu9LrSuu6mJOTAzMzM8TFxfH/LHp4eGDBggXo3LnzZ9suka6GMshvZdTLAYHroyNH\njsDQ0BBubm6f9WIFFP2He/DgwRr98RHy8vLCrl27oKamVmN51rcxiOo7irdk3NzckJmZWW7rtSRK\nxnvRokVYvnx5tfKsa77//vty+32W5XNdF8Ud45s3b8bEiRP5Stzt27chEAioElcD6so15UsZ5Lem\n4t2gW+QCAgIq9bBDdQwYMIAfZV6oTZs2OHTo0Gffdl1RlzvKNkQUb+mieFdeda+LFHPpqgvxjokB\njh37b3w4gQBwd6+f48NVpOTDDkFBQVVqkWvQFbkGumuEEEJIg1JYCJw+DRTregolpaJbqQ2o90K5\nqlpvadDDjxBCCCGkbsvOBvbuBYoNDQgdHWDECEBDo/bKVV9QHzlSY+pK/4ovBcVbuije0kcxl67a\niPerV0BwsGglztS06MnUhl6Jq6l4U4scIYQQQqQuMbFoeJGGNMhvbaA+coQQQgiRGuEgv+Hh/40P\nJydX9KqthjA+XFVRHzkxKvuKLkLI/7F33/FR1+mixz8zKaSSBAKBhBRCCSShCSJIkSYoVVooggVx\n3V31rLvr6+zr6iJBz9G79xx3967uXgsiCtJFKSIohKEIAkJoAQIBUgihphCSkDIz94/fyQyDgDPJ\nzO83M3nerxevZZ6Q+T0+zpqHbxVCCNeprYV16+D4cWssPFxZD9emjXZ5aamxV3Tdc0Ru9uzZdr1B\ns2bNWLhwYYMTcBUZkVOfO2xdb0qk3uqSeqtPaq4uV9e7rEw55LeoyBpLSICpU73rfDh73Vlvp4/I\nrVq1itdee+2eb1r/wHfffdctGzkhhBBCuIeCAli5Em6/JfLBB+Gxx8DHR7u8vME9R+Q6dOjA2bNn\nf/ENkpKSyM7OdnpijSUjckIIIYT2Dh2Cb76xPeR39GjltgZh1dC+RTY7CCGEEMLpTCbYsgX27bPG\nmtohv45Q9a7Vc+fOkZub25BvFV5MznxSl9RbXVJv9UnN1eXMeldWwtKltk1cVBT86lfSxNVzVr3t\nauSmT5/Onj17APj0009JSUkhOTlZ1sYJIYQQwsaVKz8/5Dc5WTnkNzxcu7y8lV1Tq61ataKwsBB/\nf39SU1P58MMPCQ8PZ8KECeTk5KiRp8N0Oh3z58+X40eEEEIIlWRnw5dfQk2NNTZ0KAweLIf83kv9\n8SMLFixw3Rq58PBwSktLKSwspG/fvhQWFgIQGhpKeXm541mrQNbICSGEEOowm2HXLti+3XrIr7+/\ncshv167a5uYpXLpGrkePHrzzzju8+eabjBkzBoALFy4QFhbm8AOF95L1LOqSeqtL6q0+qbm6Glrv\n2lplFO72mxrCw5WpVGni7k3VNXKffPIJR48e5datW7z11lsA7N27lyeffNIpSQghhBDC85SVwaJF\ntjc1JCQomxqiojRLq0mR40eEEEII4bD8fOWQ34oKa0wO+W04l9+1umvXLjIzMykvL7c8TKfT8dpr\nrzn8UCGEEEJ4rrsd8jtmDPTurW1eTZFdU6svv/wyU6ZMYefOnZw6dYqTJ09a/leIerKeRV1Sb3VJ\nvdUnNVeXPfU2GuHbb2H9emsTFxQETz8tTZyjnPX5tmtEbunSpWRlZREdHe2UhwohhBDCs1RWwurV\ncP68NdamDUyfLufDacmuNXLdu3cnIyODyMhINXJyClkjJ4QQQjjHlSuwfDmUlFhjycnwxBPKMSOi\n8Vx61+qBAwd4++23mTlzJlF3bEMZPHiwww9VgzRyQgghROOdOgVr18ohv67m0s0OBw8eZNOmTeza\ntYvAwECbrxUUFDj8ULWkp6fLzQ4qMhgMUmsVSb3VJfVWn9RcXXfWu/6Q34wM65+RQ36dp77e9Tc7\nNJRdjdzrr7/Oxo0befTRRxv8IC2kp6drnYIQQgjhcWpqYN06yMqyxiIilPVwcj6cc9UPOC1YsKBB\n32/X1GpcXBw5OTn4e9BEuEytCiGEEI4rK1PWw126ZI21bw9Tpyo7VIVruHSN3OLFi9m/fz/z5s37\n2Ro5vd6uE0xUJ42cEEII4Zi7HfLbty+MGiWH/LqaS+9anTNnDh988AExMTH4+vpafvn5+Tn8QOG9\n5MwndUm91SX1Vp/UXF0ffmjgs8+sTZxeD+PGwejR0sS5gqrnyJ07d84pDxNCCCGEezEaYcsW2LtX\nuScVIDgY0tIgPl7T1IQd5K5VIYQQoomSQ37dh9OnVufNm2fXG8yfP9/hhwohhBBCW1euwMcf2zZx\nKSkwZ440cZ7kniNyISEhHD169L7fbDab6d27N6WlpS5JrjFkRE59cuaTuqTe6pJ6q09q7jp3O+Q3\nIsLAv/3bEDnkVyV3fr6dfiBwZWUlHTt2/MU3aNasmcMPFUIIIYT67nXI76RJynEj0sR5HlkjJ4QQ\nQjQB9zrkd8YMaN1au7yEwqVXdAkhhBDCc5WWwooVcsivN3LP03yFR5Izn9Ql9VaX1Ft9UnPnyMtT\nNjXc3sQ99BDMmmXbxEm91aXqOXKeKj093XKHmRBCCNHUHDwImzYpZ8WBcrDvmDHwwAPa5iWsDAZD\no5o6WSMnhBBCeJn6Q37377fGgoNh2jSIi9MuL3FvLl0jd+XKFQIDAwkNDaWuro7PP/8cHx8fZs+e\n7bZ3rQohhBBN0d0O+W3bVjnkNyxMu7yEa9jVhY0dO5acnBwAXn/9dd59913+9re/8Yc//MGlyQnP\nIusr1CX1VpfUW31Sc8dkZ+fxzjsZPPmkgZUrM7h2LQ+wHvL7S02c1Ftdqq6RO3PmDD179gRg6dKl\n7Nmzh9DQUJKTk/n73//ulESEEEII0TDZ2Xm8+24OZ88Ot6yHO3x4G7/5DUyZEi/nw3kxu9bIRUZG\ncuHCBc6cOcP06dPJysrCaDQSFhbGzZs31cjTYbJGTgghRFNgNsMrr2Rw5MgwS8zHB7p2heTkDH77\n22H3+W7hLly6Ru6xxx4jLS2N69evM23aNABOnDhBu3btHH6gEEIIIZyjulq5ais727pSKiAAunVT\nNjfU1Mg6dm9n17/hhQsXMmbMGObOnctrr70GwPXr10lPT3dlbsLDyPoKdUm91SX1Vp/U/P6uXVPO\nh8vOBr3eBCg3NfTurTRxAP7+JrvfT+qtLlXXyAUEBPDCCy/YxORsNiGEEEIbp0/Dl18qI3IAiYkd\nuHZtG0lJwy3r4aqrtzF8+C/fmS482z3XyM2ePdv2D/7PJ8NsNlt+D/D555+7ML2GkzVyQgghvI3Z\nDLt3K5fe1/+I8/WFCRPA3z+PbdvOUlOjx9/fxPDhHUhKitc2YWE3p6+R69Chg6Vhu3btGp999hnj\nxo0jPj6evLw8Nm7cyNNPP93wjIUQQghht5oa+PprOHHCGgsLU86Ha9sWIF4atybIrl2rI0eOZN68\neQwaNMgS2717N2+++SbfffedSxNsKBmRU5/BYJApdxVJvdUl9Vaf1NyqpES59P7yZWssIUG59L5+\nPVxjSb3VdWe9Xbpr9ccff6Rfv342sYceeoi9e/c6/EAhhBBC2O/sWVizBqqqrLGHHoKRI5VjRkTT\nZteI3COPPMKDDz7IW2+9RWBgIJWVlcyfP599+/axc+dONfJ0mIzICSGE8GRmM+zdC99/b10P5+MD\nY8dCr17a5iacz6UjcosXL2bmzJk0b96ciIgISkpK6NOnD8uWLXP4gUIIIYS4v9pa2LABjh61xkJD\nlUvv5QhXcTu7zpFr3749e/fu5ezZs6xfv56cnBz27t1L+/btXZ2f8CByBpG6pN7qknqrr6nWvKwM\nFi2ybeJiY+FXv3JtE9dU660VVc+RqxcQEEDr1q0xGo2cO3cOgMTERKck4og//elP7N27l4SEBBYt\nWoSvr0P/GEIIIYRbys2F1auhosIa690bHn9cOWZEiDvZtUZu8+bNPPfccxQVFdl+s06Hsf52XpUc\nOXKE//7v/2bJkiW8/fbbJCYmMn369J/9OVkjJ4QQwlOYzXDgAGzeDKb/uYxBr4fRo6FPH21zE+po\naN9i19Tqb3/7W+bNm8fNmzcxmUyWX2o3cQB79+5l1KhRgHIH7A8//KB6DkIIIYSz1NXB+vWwaZO1\niQsOhmeekSZO/DK7GrnS0lJeeOEFgoKCXJ3PLyopKSE0NBSA5s2bU1xcrHFGop6sr1CX1FtdUm/1\nNYWal5fD4sWQmWmNRUcr6+Hi4tTNpSnU2504q952NXLPPfccixYtcsoD673//vv06dOHgIAAnn32\nWZuvFRcXM3HiREJCQkhISGD58uWWr4WHh3Pjxg0AysrKaNGihVPzEkIIIdRQUAAffggXLlhjPXrA\ns88qNzYIYQ+71sgNHDiQ/fv3Ex8fT5s2bazfrNM1+By5r776Cr1ez5YtW6iqquLTTz+1fG3GjBkA\nfPLJJ2RmZjJmzBj27NlDcnIyR44c4a9//SufffYZb7/9Nh06dGDatGk//weTNXJCCCHc1KFD8M03\nUL9CSa9XDvh96CG47Tpz0YS49By5uXPnMnfu3Ls+tKEmTpwIwE8//cSF2/46UlFRwdq1a8nKyiIo\nKIgBAwYwYcIElixZwjvvvEOPHj2Iiopi8ODBxMfH8+///u/3fMYzzzxDQkICoIzk9ezZ03IdRv2Q\npryW1/JaXstrea3Wa6MR/s//MZCdDQkJyteLigw88gj066d9fvJavdf1v8/NzaUx7BqRc6U///nP\nFBYWWkbkMjMzGThwIBW37b3+61//isFgYP369Xa/r4zIqc9gMFg+qML1pN7qknqrz9tqfvOmcrRI\nXp411qaNcshvRIR2edXztnq7uzvr7dJdq2azmUWLFjF06FA6d+7MsGHDWLRokVMapTtH9W7evEnz\n5s1tYqGhoZSXlzf6WUIIIYQWLl6Ejz6ybeJSU2HOHPdo4oTnsmtq9e233+bzzz/nj3/8I3FxceTn\n5/Nf//VfXLx4kT//+c+NSuDOZjAkJMSymaFeWVmZZaeqcF/yNzl1Sb3VJfVWn7fU/MgR5bqtujrl\ntU4Hw4fDgAHutR7OW+rtKZxVb7sauY8//pgdO3YQHx9viY0aNYpBgwY1upG7c0Suc+fO1NXVkZOT\nQ8eOHQHlEODU1FSH3zs9PZ0hQ4bIh1MIIYTqTCblwvu9e62xgACYMgX+58ebEBgMBpt1c46ya2q1\nsrKSyMhIm1jLli25detWgx9sNBq5desWdXV1GI1GqqurMRqNBAcHM2nSJN544w0qKyvZvXs3GzZs\nYPbs2Q4/o76RE+pozAdROE7qrS6pt/o8ueaVlbBkiW0T16oVPP+8+zZxnlxvLWTnZPPeivf4j8/+\ng3+u/CfZOdkOff/tmyDS09MbnIddjdxjjz3GrFmzOHXqFFVVVZw8eZKnnnrKcsNCQ7z11lsEBQXx\nl7/8haVLlxIYGMh//ud/AvCvf/2LqqoqWrduzaxZs/jggw/o2rVrg58lhBBCqOXSJWU93Pnz1liX\nLjB3LrRsqV1ewnmyc7JZtG0RBp2B7WwnNyKXxdsXO9zMOYNdu1bLysp4+eWXWblyJbW1tfj5+ZGW\nlsZ7771HeHi4Gnk6TKfTMX/+fJlaFUIIoZqsLPj6a6ittcaGDoXBg91rPZxonHe/eJftuu3crLkJ\nQIBvAL3b9ibmegy/TfutQ+9VP7W6YMGCBm0idej4EaPRyLVr14iMjMTHx8fhh6lJjh8RQgihFpMJ\nMjJg925rrFkzmDQJkpK0y0s436Wbl3jhvRcoa1tmicU2jyUxIpGIyxG8Mv2VBr2vS48f+eyzzzhy\n5Ag+Pj5ERUXh4+PDkSNHWLJkicMPFN5L1leoS+qtLqm3+jyl5rduwfLltk1cy5bKVKonNXGeUm8t\nnbl+hkWZi6g1KkOuOnR0btmZDi06oNPp8Nf72/1ezqq3XY3cvHnziI2NtYm1a9eO119/3SlJCCGE\nEJ7o6lX4+GM4c8Ya69RJ2dTQqpV2eQnn21+4n2XHllFjrCExMRHOQbeobkSHRgNQfaaa4Q8MVz0v\nu6ZWIyIiuHbtms10al1dHS1btqSsrOw+36kdmVoVQgjhSqdOwdq1UFNjjQ0apKyJ09s1TCI8gcls\nYkvOFvYV7rPEwgPCeTDoQY6cOkKNqQZ/vT/DHxhOUseGD8G69K7Vrl27smbNGpvL6b/66iu330kq\n58gJIYRwNrMZduyA22fG/PzgiScgJUWztIQL1BhrWHNiDaevn7bEYkJjmNFtBiH+IQzoPqDRz2js\nOXJ2jcjt3r2b0aNH8+ijj5KYmMjZs2fZunUrmzZtYuDAgQ1+uCvJiJz65J4+dUm91SX1Vp871ry6\nGr76ShmNqxcRAdOnQ1SUdnk5gzvWW0s3qm+w7NgyLt28ZIklt0pmYpeJ+Pn4Nfr9Vb1rdeDAgRw7\ndow+ffpQWVlJ3759ycrKctsmTgghhHC269dh4ULbJi4xUVkP5+lNnLBVVF7Exwc/tmniBsYNZGry\nVKc0cc7k8PEjly9fJjo62pU5OYWMyAkhhHCWM2fgyy+VHar1+veHRx+V9XDeJvtaNmtOrKHWpOxM\n1ev0jO08lgfaPuDS57p0RK6kpISZM2cSGBhouf90/fr1jb5nVQghhHBnZrNyrMiyZdYmztdXOR9u\n1Chp4ryJ2Wzmxws/suL4CksTF+AbwKzus1zexDWGXR/BX//61zRv3py8vDyaNWsGQP/+/VmxYoVL\nk2us9PR0ORdHRVJrdUm91SX1Vp/WNa+pgTVrYOtWpaEDCAuDOXOge3dNU3MJreutJZPZxLc537I5\nZzNmlH/ZEQERPNfrORIjEl3yzPp6GwyGRt21ateu1W3btlFUVISfn3VeuFWrVly5cqXBD1ZDYwoj\nhBCi6SopgRUr4PJlayw+HtLSIDhYu7yE81XXVbPmxBrOFFsPA4xtHsv01OkE+7v+X3b96RoLFixo\n0PfbtUauY8eO7Ny5k+joaCIiIigpKSE/P5+RI0dy6vZVn25E1sgJIYRoiHPnYPVqqKqyxvr2VaZS\n3fx2SuGgsltlLDu2jMsV1o49tXUqE5ImqL6pwaVr5ObOncuUKVPIyMjAZDKxd+9enn76aV544QWH\nHyiEEEK4I7MZfvwRli61NnE+PjB+PIweLU2ct7lYfpGFhxbaNHGD4wczuetkt9uZej92NXJ/+tOf\nmDZtGi+99BK1tbU8++yzTJgwgVdeadjFsMI7NeX1FVqQeqtL6q0+NWteWwtffw2bN4PJpMRCQ+GZ\nZ+AB913n7lRN6TN+6topPs38lPKacgB8dD480eUJhrUfhk6nUyUHZ9XbrjVyOp2O3/3ud/zud79z\nykOFEEIId1FWBitXwsWL1li7djBtmtLMCe9hNpvZe2Ev35/93rKpIcA3gOmp00kIT9A2uQaya41c\nRkYGCQkJJCYmUlRUxJ/+9Cd8fHx45513aNOmjRp5Okyn0zF//ny5oksIIcQ95eXBqlVQUWGN9eoF\nY8Yox4wI72Eym9h0ZhM/XfzJEmsR2IKZ3WYSGRSpWV71V3QtWLCgQWvk7GrkunTpwnfffUdcXBwz\nZsxAp9MREBDAtWvXWL9+fYMSdzXZ7CCEEOJezGb46Sf49lvrVKpeD48/Dn36gEqza0Il1XXVrD6x\nmpziHEssLiyO6anTCfIL0jAzK5dudrh48SJxcXHU1tayZcsWPvzwQz744AN++OEHhx8ovFdTWl/h\nDqTe6pJ6q89VNa+rgw0b4JtvrE1ccDA8/TQ8+GDTbeK89TNeequUTzI/sWniurXuxlM9ntK0iVN1\njVzz5s25dOkSWVlZpKSkEBoaSnV1NbW1tU5JQgghhFBDebkylVpQYI21batceh8Wpl1ewjUKbxSy\n/PhybtbctMQeiX+EIQlDVNvU4Gp2Ta3+5S9/4Z///CfV1dX8/e9/Z8aMGWRkZPC//tf/Yt++fWrk\n6TCZWhVCCHG7CxeUTQ3l5dZY9+4wbhz4ec5pE8JOJ66e4KuTX1mu2/LR+TA+aTw92vTQOLO7a2jf\nYlcjB5CdnY2Pj4/lrtXTp09TXV1Nt27dHH6oGqSRE0IIUS8zEzZuBKNRea3TwciR0K9f051K9VZm\ns5k9BXv4/tz3lligbyDTU6cTHx6vYWb359I1cgBJSUmWJg6gc+fObtvECW146/oKdyX1VpfUW33O\nqLnRCJs2wbp11iYuMBBmz4b+/aWJu503fMaNJiMbTm+waeJaBLZg7gNz3a6Jc/kauS5duliu34qN\njb3rn9HpdOTn5zslEVdIT0+X40eEEKKJqqhQ1sPl5VljUVHKeriICO3yEq5xq+4Wq7JWca7knCUW\nHxbPtNRpbrMz9W7qjx9pqHtOre7atYtBgwZZHnIv7tokydSqEEI0XUVFyqX3ZWXWWEoKTJgA/v7a\n5SVco6SqhGXHlnG18qol1j2qO+OTxuOr94wDAV2+Rs7TSCMnhBBN09GjsH69cswIKNOnw4bBwIEy\nleqNLty4wPJjy6motZ7qPDRhKIPjB3vUztSG9i33bFPnzZt3zzetj+t0Ot58802HHyq8k8FgcNsR\nWm8k9VaX1Ft9jtbcZIKtW2HPHmssIAAmT4ZOnZyfn7fxxM941pUsvjr1FXUmpWuvvzO1W5T7r+F3\nVr3v2cgVFBTct5Otb+SEEEIIrVVWwpo1cM66PIrISJgxA1q21C4v4Rpms5nd+bvZdn6bJRbkF8T0\n1OnEhcVpmJn6ZGpVCCGER7t8WVkPV1JijSUlwaRJ0KyZdnkJ1zCajGw8vZHMS5mWWMvAljzZ/Ula\nBLbQMLPGcfrU6rnb/1pzH4mJiQ4/VAghhHCGEyfg66+hpsYaGzIEHnlE1sN5o6raKlZlreJ86XlL\nLCE8gWkp0wj0C9QwM+3cc0ROr//lI+Z0Oh3G+oN53IyMyKnPE9dXeDKpt7qk3uq7X81NJti+HXbt\nssb8/WHiROjaVZ38vI27f8ZLqkr44tgXXKu8Zon1bNOTcZ3H4aP30TCzhrmz3k4fkTPV3yQshBBC\nuJFbt2DtWjh92hpr0UI5H651a+3yEq5TUFbA8uPLqayttMSGtx/OwLiBTX69vlevkZs/f74cCCyE\nEF7k2jVYvhyuX7fGOnZUdqYGNs2ZNa93/Mpxvj71tWVnqq/elye6PEFq61SNM3OO+gOBFyxY4Nxz\n5EaNGsWWLVsALAcD/+ybdTp27tzp8EPVIFOrQgjhXbKzlZG46mprbOBA5Yw4O1YDCQ9jNpvZlb+L\njPMZlliQXxAzUmcQG3b3G6c8mdOnVp966inL75977rl7PlSIeu6+vsLbSL3VJfVWX33NzWbYuVNZ\nE1fPz0+5pSHVOwZl3II7fcbr70w9fOmwJRYZFMmT3Z4kItA77ldz+TlyTz75pOX3zzzzTKMfGBWU\nVQAAIABJREFUJIQQQjiqulrZlXrypDUWHq6sh2vTRru8hOtU1VaxMmsluaW5llj78PZMS51GgG+A\ndom5KbvXyO3cuZPMzEwqKpQrMOoPBH7ttddcmmBDydSqEEJ4tuJi5Xy4K1essfbtYepUCHLfO9BF\nIxRXFfPF0S+4XmVdBNmrTS/Gdh7rkTtTHeH0qdXbvfzyy6xatYpBgwYRKKtJhRBCuFhOjnJTw61b\n1li/fjBypKyH81b5ZfmsOL7CZmfqiMQRDIgdIEu57sOuEbmIiAiysrKIjo5WIyenkBE59bnT+oqm\nQOqtLqm3Osxm5a7UrVvh/HkDCQlD8PWFsWOhZ0+ts/NuWn7Gj14+yrpT6zCalbNpffW+TOo6ieRW\nyZrkowaXnyN3u9jYWPz9/R1+cyGEEMJetbWwbh0cP26NNW8O06ZBTIx2eQnXMZvN7MjbgSHXYIkF\n+wUzo9sM2jVvp11iHsSuEbkDBw7w9ttvM3PmTKKiomy+NnjwYJcl1xgyIieEEJ6jtFRZD3fpkjUW\nFwdpaRASol1ewnXqTHWsz17P0ctHLbFWQa14svuThAeEa5iZNlw6Infw4EE2bdrErl27frZGrqCg\nwOGHCiGEEPXOn4fVq6HSujSKPn3g8cfBx7vXtzdZlbWVrDy+kryyPEusQ0QHpqZMlZ2pDrJryejr\nr7/Oxo0buXbtGgUFBTa/hKhnMBi0TqFJkXqrS+rtfGYz7NsHS5ZYmzgfHxg3TlkTt2uXQdP8mhq1\nPuPXK6+z8NBCmyaud9vezOw2s0k1cc6qt10jcsHBwTzyyCNOeaAQQghRVwcbN8Jh63mvhIQoU6lx\ncdrlJVwrtzSXlcdXUlVXBYAOHY92eJT+7frLztQGsmuN3OLFi9m/fz/z5s372Ro5vZvuA5c1ckII\n4Z5u3ICVK6Gw0BqLiVE2NTRvrl1ewrWOXDrC+uz1lp2pfno/JnWdRNdWXTXOzD00tG+xq5G7V7Om\n0+kwGo0OP1QNOp2O+fPnM2TIEDkyQAgh3ER+PqxaBTdvWmM9eypTqb52zREJT2M2mzHkGtiRt8MS\nC/EPYUbqDGKay3Zkg8GAwWBgwYIFrmvkcnNz7/m1hIQEhx+qBhmRU5+cs6Uuqbe6pN6N99NP8O23\nUP/3f70eRo2Cvn3hbrNqUnN1uaLedaY61p1ax7Erxyyx1sGtebLbk4QFhDn1WZ5G1XPk3LVZE0II\n4f6MRti0CQ4etMaCgpT1cPLjxXtV1FSw4vgKCm5YN0Z2bNGRqclTaebbTMPMvIvdd616GhmRE0II\n7WRn57F161lu3tRz7JiJ8PAOREbGA9C2rbIeLrzpHRXWZFyrvMYXR7+g5FaJJfZg9IM83ulx9Dr3\nXFuvNZeukfNE0sgJIYQ2srPzWLw4h+rq4WRlQXU11NVto2fPjgwdGs/48eDnp3WWwlXOl5xnZdZK\nbtUpF+Xq0DGyw0j6tesnO1Pvo6F9i7TFwmnknC11Sb3VJfW23/ffn+X69eFkZipNHICv73CaNTvL\npEn2N3FSc3U5o96ZRZksObrE0sT56f2YljqN/rFyvMidVD1HTgghhLBHbS0cOqTn3DlrzNcXkpMh\nNlZ/100NwvOZzWYyzmewK3+XJRbqH8qMbjOIDo3WMDPvZ9fU6rlz53j99dc5fPgwN2/bM67T6cjP\nz3dpgg0lU6tCCKGu69eV8+E2bsygsnIYoBzym5ICgYHQunUGv/3tMI2zFM5Wa6zl61Nfk3U1yxKL\nCo5iZreZTX5nqiNcumt15syZdOzYkb/+9a8/u2tVCCGEOHkSvv5amUpNTOzA4cPbaNduOJ06Kddu\nVVdvY/jwjlqnKZysoqaC5ceXc+HGBUusU4tOTEmeIjtTVWLXiFzz5s0pKSnBx4NuL5YROfXJmU/q\nknqrS+p9d0YjbNsGe/ZYY8pUah6XLp2lpkaPv7+J4cM7kJQU79B7S83V5Wi9r1Zc5YtjX1B6q9QS\n6xvTl8c6PiY7U+2g6jlygwcPJjMzkz59+jj8ACGEEN6pvBzWrIE8693nREQo58O1bRsPONa4Cc9x\nruQcq7JW2exMfazjYzzU7iGNM2t67BqRe/HFF1m5ciWTJk2yuWtVp9Px5ptvujTBhpIROSGEcJ3c\nXKWJu/2qrc6dYeJEZT2c8F6Hig6x8fRGTGYTAP4+/kxJnkLnlp01zsyzuXRErqKigrFjx1JbW8uF\nC8o8uNlslq3EQgjRxJjNyjTqtm1gUn6Oo9PBsGEwcODdr9oS3sFsNrP13FZ+KPjBEgv1D2Vmt5m0\nDW2rYWZNmxwILJxG1rOoS+qtLqk33LoF69YpGxvqBQfD5MmQmOj850nN1XW/etcaa/nq1FecuHrC\nEmsb0pYZ3WbQvFlzlTL0Li5fI5ebm2u5Y/Xc7QcC3SHRFf/vFUII4VYuX1aOFikutsZiY2HqVGgu\nP8e92s2amyw/tpzC8kJLLKllEpOTJ+Pv469hZgLuMyIXGhpKeXk5AHr93Xef6HQ6jEaj67JrBBmR\nE0II5zhyBDZuVA77rffQQzBypHK0iPBeVyqusOzYMpudqf3a9WNkh5GyM9XJmsxdqzdu3GDEiBGc\nPHmSffv2kZycfNc/J42cEEI0Tl0dbN4MP/1kjfn7w/jxkJqqXV5CHWeLz7IqaxXVRuWeNR06Hu/0\nOH1j+mqcmXdqMnetBgUFsWnTJqZMmSKNmpuRexHVJfVWV1Ord2kpLFpk28S1agXPP69eE9fUaq61\n2+v908Wf+OLYF5Ymzt/Hn5ndZkoT50RN9q5VX19fIiMjtU5DCCG81pkzsHYtVFVZY6mpykicvyyJ\n8moms4mt57ayp8B6wnPzZs2Z2W0mbULaaJiZuBePm1qt9+yzz/Lqq6+SkpJy16/L1KoQQjjGZIId\nO2DnTuWYEQC9HkaNgr595WgRb1djrGHtybWcunbKEmsb0paZ3WYS2ixUw8yaBo+YWn3//ffp06cP\nAQEBPPvsszZfKy4uZuLEiYSEhJCQkMDy5cstX/vb3/7G0KFDeffdd22+R86xE0II56ishC++UBq5\n+p8lzZvDs88qGxvkP7ferby6nMWHF9s0cV0iu/Bsr2eliXNzDjdyJpPJ5pcjYmJimDdvHnPmzPnZ\n11588UUCAgK4cuUKX3zxBb/5zW84cUI5r+b3v/8927dv549//KPN98iIm3uR9Szqknqry5vrfeEC\nfPghnD1rjSUmwgsvKEeMaMWba+5OLt+8zMJDC9mzyzqd+nDsw6SlpMnxIi7krM+3XY3cwYMH6d+/\nP0FBQfj6+lp++fn5OfSwiRMnMmHCBFq2bGkTr6ioYO3atbz11lsEBQUxYMAAJkyYwJIlS+76PqNH\nj+a7777j+eef57PPPnMoByGEEAqzGQ4cgE8/hbIya3zwYJg1SznsV3i3M9fPsChzEWXVygdAr9Mz\ntvNYOV7Eg9i12eHpp59m/PjxfPLJJwQFBTX6oXeOpJ0+fRpfX186duxoifXo0eOe3eqmTZvses4z\nzzxjOdQ4PDycnj17Wk5Rrn9vee3c1/XcJR9vf13PXfLx9tf13CWfxryurYXy8iEcPQq5ucrXu3QZ\nwqRJcPGigZ073Stfee3818Gdgtl0ZhPnD58HIKl3ElNTpnLh6AUMpw2a5+ftrwHS09PJzc2lMeza\n7NC8eXPKysqctiZt3rx5XLhwgU8//RSAXbt2kZaWRlFRkeXPfPzxxyxbtozt27c36Bmy2UEIIe7u\n2jVYtQquXLHG2raFtDSIiNAuL6EOk9nEd2e/48cLP1piYc3CeLL7k7QObq1hZk2bSzc7TJw4kS1b\ntjj85vdyZ6IhISHcuHHDJlZWVkZoqCyw9CS3/y1DuJ7UW13eUu8TJ+Cjj2ybuAcegOeec78mzltq\n7k5qjDWsPL7SpomLCY3h+d7Pc+LAift8p3A2Z32+7ZparaqqYuLEiQwaNIioqChLXKfT8fnnnzv8\n0DtH9jp37kxdXR05OTmW6dUjR46Q2shTJ9PT0xkyZIhlOFMIIZoqoxG2boW9e60xX18YMwZ69dIu\nL6GeG9U3WH5sOUU3rbNfXSO7MqnrJPx8HFvzLpzHYDA0qqmza2o1PT397t+s0zF//ny7H2Y0Gqmt\nrWXBggUUFhby8ccf4+vri4+PDzNmzECn07Fw4UIOHTrE2LFj2bt3L127drX7/e/MTaZWhRACysth\n9WrIz7fGIiJg2jRoI2e8NgmXbl5i2bFl3Ki2zn4NiB3AiMQRcpSXm/CIu1bT09N58803fxZ74403\nKCkpYc6cOXz//fdERkbyv//3/2b69OkNfpY0ckIIAbm5ShNXUWGNJSXBxIkQEKBZWkJFp6+fZs2J\nNdQYawBlZ+qYTmPoHd1b48zE7VzeyG3fvp3PP/+cwsJC2rVrx6xZsxg2bJjDD1SLNHLqMxgMMo2t\nIqm3ujyt3mYz/PADbNtmPeBXp4Phw2HAAM844NfTau6O9l3Yx+aczZhRPgTNfJoxLXUaiRGJP/uz\nUm913Vlvl252WLhwIdOmTaNt27ZMmjSJNm3aMHPmTD766COHH6im9PR0WSwrhGhybt2ClSuVNXH1\nPxeCg+Gpp2DgQM9o4kTjmMwmvj3zLd/mfGtp4sIDwpn7wNy7NnFCOwaD4Z5L2Oxh14hcp06dWLNm\nDT169LDEjh49yqRJk8jJyWnww11JRuSEEE3RpUvK0SLFxdZYXBxMmaJcuSW8X3VdNV+e/JLT109b\nYu2at2N66nRC/EM0zEzcj0unVlu2bElRURH+/v6WWHV1NdHR0Vy/ft3hh6pBGjkhRFNz+DBs3Ah1\nddZY//4wYgT4+GiXl1BHdk42G/dt5MfCH6moqSAxMZHI6EhSWqXwRJcnZGeqm3Pp1OqAAQP4wx/+\nQMX/rJa9efMmr776Kg8//LDDDxTeS6ax1SX1Vpc717uuDjZsgK+/tjZx/v4wdSqMGuW5TZw719zd\nZOdk8/6W99li2sLV1lepbFfJ4ROHSTAnMCV5il1NnNRbXaqeI/fBBx8wffp0wsLCaNGiBcXFxTz8\n8MMsX77cKUm4ipwjJ4TwdiUlylTqbRfj0KqVcrRIZKR2eQl1fbr9U7JCsjAZTQDo0JHyUAqVVyvl\neBE3p8o5cvUKCgq4ePEi0dHRxMbGNvihapCpVSGEtzt9GtauVTY31OvWDcaNU0bkhPczmox8m/Mt\n7696n1vtlA+Cr96XlFYpRARGEH4pnFemv6JxlsIeDe1b7jkiZzabLV28yaR0+DExMcTExNjE9Hq7\nZmeFEEI4ickEBgPs3GmN+fjAY49Bnz6yK7WpKK8uZ1XWKgpuFKD/n5VSwX7BpLZOJdAvEAB/vXT0\n3u6eXVjz27Y3+fr63vWXn58snBRWsr5CXVJvdblLvSsqYOlS2yYuLAyefRYefNC7mjh3qbk7yi/L\n58ODH1JwowCAxMREWhS14IG2D1iauOoz1Qx/YLjd7yn1VpfL18hlZWVZfn/u3DmnPEwIIUTDFRQo\ntzTcsN6yRIcOMHkyBAVpl5dQj9ls5sDFA2zO2YzJbF0PN3PQTFo82IKMzAxqTDX46/0ZPnQ4SR2T\nNM5YuJpda+T++7//m1dfffVn8b/+9a/84Q9/cElijVV/D6xsdhBCeDqzGfbvhy1blGnVeo88ovyS\nFS5NQ62xlo2nN3Lk8hFLLMgviKnJU2kf0V7DzERj1G92WLBggevOkQsNDaW8vPxn8YiICEpKShx+\nqBpks4MQwhvU1MD69XD8uDUWGAiTJkGnTtrlJdRVequUlcdXUnTTuj05OjSaaSnTCAsI0zAz4SxO\n3+wAkJGRgdlsxmg0kpGRYfO1s2fP2qyjE0Lu6VOX1FtdWtT76lXlaJGrV62x6GhIS4PwcFVT0YR8\nxhXnSs6x5sQaKmsrLbFebXoxpvMYfPV2nSJmF6m3upxV7/t+AubMmYNOp6O6uprnnnvOEtfpdERF\nRfHee+81OgEhhBA/d/y4MhJXU2ON9emj7Ez1dd7PbuHGzGYzewr2sPXcVst9qT46Hx7v9Di92/aW\n8+EEYOfU6uzZs1myZIka+TiNTK0KITyR0Qjffw8//miN+frC2LHQs6d2eQl1VddVsy57HSeunrDE\nQv1DSUtJIzbMvc9xFQ3j0rtWPZE0ckIIT3PjhrIrtaDAGmvRQrmlISpKu7yEuq5XXmfF8RVcrbTO\nqceFxZGWkiaX3nsxl961WlZWxu9//3seeOAB4uPjiY2NJTY2lri4OIcfqKb09HQ5F0dFUmt1Sb3V\n5ep6nzsHH35o28R16QK/+lXTbeKa4mc8+1o2Hx38yKaJ6xvTl6d7PO3yJq4p1ltL9fU2GAykp6c3\n+H3sWmnx4osvUlBQwBtvvGGZZv2v//ovJk+e3OAHq6ExhRFCCDWYzbB7N2RkKL8H5TiR4cPh4Ye9\n64BfcW9msxlDroEdeTssMV+9L+M6j6NHmx4aZiZcrf6YtAULFjTo++2aWm3VqhUnT54kMjKSsLAw\nysrKKCwsZNy4cRw6dKhBD3Y1mVoVQri7qir46ivlztR6ISEwZQokJGiWllBZVW0Va0+u5UzxGUss\nPCCcaSnTaBvaVsPMhJpccvxIPbPZTFiYck5NaGgopaWltG3bljNnzvzCdwohhLiboiLlaJHbj+KM\nj1eauNBQ7fIS6rp88zIrs1ZSXFVsiSVGJDIleQpBfnJdh/hldq2R6969Ozv/52K/gQMH8uKLL/Lr\nX/+apCS5+kNYyfoKdUm91eXMeh86BJ98YtvEPfwwPPWUNHG38/bP+PErx1l4aKFNEzcwbiCzus/S\npInz9nq7G5fftXq7jz/+2PL7//t//y+vvfYaZWVlfP75505JQgghmoLaWti0CTIzrbFmzWDCBEhO\n1i4voS6T2cTWc1vZU7DHEvP38eeJLk+Q3Eo+CMIxdq2R27dvHw899NDP4vv376dv374uSayxZI2c\nEMKdlJTAypVw6ZI11rq1crRIy5ba5SXUVVFTwZoTazhfet4SaxnYkump02kV3ErDzITWXLpGbsSI\nEXe9a/Wxxx6juLj4Lt/hHtLT0y27QYQQQivZ2cqmhlu3rLHu3ZVDfv39tctLqOti+UVWHl9JWXWZ\nJZbUMomJXScS4BugYWZCSwaDoVHTrPcdkTOZTJjNZsLDwykrK7P52tmzZxkwYABXrlxp8MNdSUbk\n1Cf39KlL6q2uhtTbZILt22HXLmvMxwcefxx695ajRX6JN33GM4sy+ebMN9SZ6gDQoWNIwhAGxw92\nm6u2vKnenuDOertkRM73tgv9fO+43E+v1/P66687/EAhhGgKKipgzRo4b51BIyxMufA+Jka7vIS6\njCYj3+Z8y08Xf7LEAnwDmNx1Mp1adtIwM+Et7jsil5ubC8DgwYPZtWuXpVPU6XS0atWKoCD33Rot\nI3JCCK3k5ytXbd2+IqVjR5g0Cdz4P5vCycqry1mVtYqCG9brOloHt2Z66nRaBLbQMDPhjuSu1TtI\nIyeEUJvZDPv2wXffKdOqoEyfPvIIDB6s3Nggmob8snxWZa3iZs1NSyy1dSrjk8bj7yMLI8XPuXSz\nw+zZs+/6QECOIBEWsr5CXVJvdf1SvaurYf16yMqyxgIDYfJkZTROOM4TP+Nms5kDFw+wOWczJrPS\nzet1eh5NfJR+7fq5zXq4u/HEensyZ9XbrkauQ4cONp3ipUuX+PLLL3nyyScbnYAQQni6q1eVo0Wu\nXbPGYmJg6lQID9cuL6GuWmMtG09v5MjlI5ZYkF8QU5On0j6ivYaZCW/W4KnVn376ifT0dDZu3Ojs\nnJxCplaFEGo4dgw2bICaGmvswQdh1CjwteuvysIblN4qZeXxlRTdLLLEokOjmZYyjbCAMA0zE55C\n9TVydXV1RERE3PV8OXcgjZwQwpWMRtiyBfbvt8b8/GDcOOWMONF0nC0+y5cnv6SyttIS69WmF2M6\nj8FXL928sE9D+xa7lt5u27aNjIwMy68NGzbw9NNPk5KS4vADhfeSe/rUJfVW1+31LiuDTz+1beJa\ntoS5c6WJcyZ3/4ybzWZ25+9m6dGllibOR+fD2M5jGZ803uOaOHevt7dR9a7V5557zmaBZnBwMD17\n9mT58uVOScJV5GYHIYSznTunnA9XaR18oWtXeOIJ5d5U0TRU11WzLnsdJ66esMRC/UNJS0kjNixW\nw8yEp3HpzQ6eTKZWhRDOZDYrNzRs3678HpTjRB59FPr1k1sampLrlddZcXwFVyuvWmJxYXGkpaQR\n4h+iYWbCk7n0+BGA0tJSvvnmGy5evEh0dDSjR48mIiLC4QcKIYSnqaqCtWvhzBlrLDQUpkyB+Hjt\n8hLqy76WzdqTa6k2VltifWP6MqrDKHz0PhpmJpoqu9bIZWRkkJCQwD/+8Q8OHDjAP/7xDxISEti6\ndaur8xMeRNZXqEvqrY6LF+HDD+H77w2WWEICvPCCNHGu5k6fcbPZzPbz21l+fLmlifPV+zKxy0RG\ndxrtFU2cO9W7KVB1jdyLL77IRx99RFpamiW2evVqXnrpJU6dOuWURIQQwp2YzXDoEGzapOxQrTdg\nAAwfLrc0NCVVtVWsPbmWM8XWIdnwgHCmpUyjbWhbDTMTws41cuHh4Vy/fh0fH+vfOGpra2nVqhWl\npaUuTbChZI2cEKKhamvhm2/g8GFrrFkzmDgRunTRLi+hvss3L7MyayXFVcWWWGJEIlOSpxDkJxfn\nCudx6fEjs2fP5v3337eJ/b//9//uenWXEEJ4suJi+OQT2yYuKgp+9Stp4pqa41eOs/DQQpsmbmDc\nQGZ1nyVNnHAbdjVyhw4d4tVXXyUmJoa+ffsSExPDH//4RzIzMxk0aBCDBg1i8ODBrs5VuDlZX6Eu\nqbfznTqlrIe7dMka69FDOR/u2DGDZnk1VVp9xk1mE9+d/Y41J9ZQa6oFwN/Hn7SUNEYkjkCv8855\ndflvirpUXSP3/PPP8/zzz9/3z7jzRcBCCHE/JhNs2wY//GCN+fjA6NHwwANytEhTUlFTwZoTazhf\net4SaxnYkump02kV3ErDzIS4OzlHTgjRpN28qRzwm5trjYWHQ1oaREdrlpbQwMXyi6w8vpKy6jJL\nLKllEhO7TiTAN0DDzERT4PJz5Hbu3ElmZiYVFRWAshVbp9Px2muvOfxQIYRwB/n5sHo13H5ldKdO\nMGkSBAZql5dQX2ZRJt+c+YY6Ux0AOnQMSRjC4PjBMuMk3JpdE/0vv/wyU6dOZdeuXZw8eZKTJ09y\n6tQpTp486er8hAeR9RXqkno3nNkMe/fC4sXWJk6ng6FDYebMuzdxUm/1qVFzo8nIxtMbWZe9ztLE\nBfgGMLPbTB5JeKRJNXHyGVeXqmvkli5dSlZWFtEyzyCE8FDZ2Xls3XqWyko9J0+aCArqQGSkcqJv\nUBBMngwdOmicpFBVeXU5q7JWUXCjwBKLCo5iWuo0WgS20DAzIexn1xq57t27k5GRQWRkpBo5OYVO\np2P+/PkMGTKEIUOGaJ2OEEJD2dl5LF6cQ13dcI4fV67cqqvbRs+eHenZM56pUyEsTOsshZryy/JZ\nlbWKmzU3LbHU1qmMTxqPv4+/hpmJpsZgMGAwGFiwYEGD1sjZ1cgdOHCAt99+m5kzZxIVFWXzNXc9\ndkQ2Owgh6v3jHxlkZg4jL0/ZoVovOTmD994bho/n364k7GQ2mzlw8QCbczZjMisfBr1Oz6OJj9Kv\nXb8mNZUq3ItLNzscPHiQTZs2sWvXLgLvWDxSUFBwj+8STY3BYJDRTxVJve1z+jRs366npMQa0+sh\nKQk6d9bb3cRJvdXn7JrXGmvZeHojRy4fscSC/IKYmjyV9hHtnfYcTyWfcXU5q952NXKvv/46Gzdu\n5NFHH230A4UQQg3FxbB5s9LIVVdbh+FCQqBrVwgOBn9/033eQXiT0lulrDy+kqKbRZZYdGg001Km\nERYg8+rCc9k1tRoXF0dOTg7+/p6zbkCmVoVommprYfdu5XDfOmUTIteu5XH8eA6dOg0nOlrZoVpd\nvY1nnulIUlK8tgkLlztbfJYvT35JZW2lJdarTS/GdB6Dr97uU7iEcKmG9i12NXKLFy9m//79zJs3\n72dr5PR697yqRBo5IZoWs1m5YmvLFigttcZ1OuV2hnbt8ti79yw1NXr8/U0MH95BmjgvZzab+aHg\nB7ad24YZ5eeBj86Hxzs9Tu+2vWU9nHArLm3k7tWs6XQ6jEajww9VgzRy6pP1FeqSeltduwbffgtn\nz9rGY2KUa7ZiYhr/DKm3+hpT8+q6atZlr+PE1ROWWKh/KGkpacSGxTopQ+8in3F13Vlvl252OHfu\nnMNvLIQQrlZTAzt3Kof73v53yqAgGDECevWSe1KbouuV11lxfAVXK69aYnFhcaSlpBHiH6JhZkI4\nn0N3rZpMJi5fvkxUVJTbTqnWkxE5IbyX2QxZWfDdd3DjhjWu00GfPjBsmFyx1VRlX8tm7cm1VBur\nLbG+MX0Z1WEUPno5Z0a4L5eOyN24cYOXXnqJFStWUFdXh6+vL9OnT+e9994jTE7RFEKo6MoVZRr1\n/HnbeGysMo3atq02eQltmc1mDLkGduTtsMR89b6M6zyOHm16aJiZEK5l912rFRUVHD9+nMrKSsv/\nvvzyy67OT3gQuadPXU2t3tXVykaGDz6wbeJCQmDiRJgzx7VNXFOrtzuwt+ZVtVUsO7bMpokLDwjn\nuV7PSRPnAPmMq0vVu1Y3b97MuXPnCA4OBqBz584sXryYxMREpyQhhBD3YjbD0aPw/fdw03qbEno9\n9O0LQ4ZAQIBm6QmNXb55mZVZKymuKrbEOkR0YHLyZIL8gjTMTAh12LVGLiEhAYPBQEJCgiWWm5vL\n4MGDyc/Pd2V+DSZr5ITwfJcuwaZNcOd/ZhIS4PHH4Y7TkEQTc/zKcdadWketqdYSGxg3kGHth6HX\nufc6biHu5NI1cnPnzuXRRx/lj3/8I/Hx8eTm5vK3v/2N559/3uEHCiHEL6mqgu3b4cDxXusPAAAg\nAElEQVQBZUSuXmgojBoFKSmyG7UpM5lNbD23lT0Feywxfx9/nujyBMmtkjXMTAj12TUiZzKZWLx4\nMV988QVFRUVER0czY8YM5syZ47YHKsqInPrkDCJ1eWO9zWY4fBi2boWKCmtcr4f+/WHwYGjWTJvc\nvLHe7u5uNa+oqWDNiTWcL7UulGwZ2JLpqdNpFdxK5Qy9i3zG1aXqOXJ6vZ45c+YwZ84chx/gCvv3\n7+eVV17Bz8+PmJgYPv/8c3x95ZoVITzZxYvwzTdQWGgbT0xUdqNGRmqTl3AfF8svsvL4Ssqqyyyx\npJZJTOw6kQBfWSgpmia7RuRefvllZsyYwcMPP2yJ7dmzh1WrVvH3v//dpQnezaVLl4iIiKBZs2a8\n9tpr9O7dm8mTJ9v8GRmRE8IzVFbCtm1w6JDtNGpYGDz2GHTpItOoAjKLMvnmzDfUmZQLdHXoGNp+\nKIPiBrntzJAQjnDpFV2RkZEUFhbS7LY5jVu3bhEbG8vVq1fv852uN3/+fHr16sUTTzxhE5dGTgj3\nZjIpzdu2bcqauHo+PjBgAAwaBH5+2uUn3IPRZOTbnG/56eJPlliAbwCTu06mU8tOGmYmhHM1tG+x\na1uPXq/HZDLZxEwmk+aNUl5eHt9//z3jxo3TNA+hkDOI1OXJ9S4ogI8/ho0bbZu4Tp3gxReVmxnc\nrYnz5Hp7qk3fbWLx4cU2TVxUcBS/6v0raeJcQD7j6nJWve1q5AYOHMif//xnSzNnNBqZP38+gwYN\ncviB77//Pn369CEgIIBnn33W5mvFxcVMnDiRkJAQEhISWL58ueVrf/vb3xg6dCjvvvsuoNw28dRT\nT/HZZ5/h4yPXrgjhCW7ehK+/hk8+gaIiazwiAmbMgCefhBYttMtPuI/8snw2nN5AwY0CSyy1dSrP\nPfAcLQLlQyJEPbumVgsKChg7dixFRUXEx8eTn59P27Zt2bBhA7GxsQ498KuvvkKv17Nlyxaqqqr4\n9NNPLV+bMWMGAJ988gmZmZmMGTOGPXv2kJxsu528rq6O8ePH8+qrrzJs2LC7/4PJ1KoQbsNkUo4S\n2b4dbt2yxn19lSnUAQOU3wthNps5cPEAm3M2YzIrgwd6nZ5HEx+lX7t+sh5OeC2XrpEDZRRu//79\nFBQUEBsby0MPPYRe3/ADF+fNm8eFCxcsjVxFRQUtWrQgKyuLjh07AvD0008THR3NO++8Y/O9S5Ys\n4fe//z3dunUD4De/+Q1paWm2/2DSyAnhFvLylEN9L1+2jXfpomxmCA/XJi/hfmqNtWw8vZEjl49Y\nYkF+QUxNnkr7iPYaZiaE67n0+BEAHx8f+vfvT//+/R1+yN3cmezp06fx9fW1NHEAPXr0uOsc8uzZ\ns5k9e/YvPuOZZ56x3EYRHh5Oz549LWe21L+vvHbe68OHD/PKK6+4TT7e/trd611ZCVVVQzh2DHJz\nla8nJAyhZUto0cJAmzYQHu4++f7Sa3evt6e/vllzk8IWhRTdLCL3cC6gnA/3+6d/T+aPmeSR51b5\neuPr+pi75OPtrw8fPkxpaSm5ubk0ht0jcs5254jcrl27SEtLo+i2hTMff/wxy5YtY/v27Q6/v4zI\nqc9gMFg+qML13LXeRiPs2wcGA9TUWON+fvDII9Cvn2dOo7prvb3B2eKzfHnySyprKy2xXm16EXIx\nhOHDhmuYWdMin3F13Vlvl4/IOdudyYaEhHDjxg2bWFlZGaGhoWqmJRpB/gOgLnes97lzyjTqtWu2\n8ZQUGDlSORvOU7ljvT2d2Wzmh4If2HZuG2aUnwk+Oh8e7/Q4vdv2RtdF1sOpST7j6nJWvX+xkTOb\nzZw/f564uDin3p5w54LVzp07U1dXR05OjmV69ciRI6Smpjb4Genp6QwZMkQ+nEK4WFkZfPcdZGXZ\nxlu1Um5laC/Lm8QdquuqWZe9jhNXT1hiof6hpKWkERvm2CY6ITyZwWCwmd52lN6eP5SamtqojQ23\nMxqN3Lp1i7q6OoxGI9XV1RiNRoKDg5k0aRJvvPEGlZWV7N69mw0bNti1Fu5e6hs5oY7GfBCF49yh\n3nV1sGsXvP++bRPXrJlyuf2vf+09TZw71NtbXK+8zsJDC22auLiwOF7o84JNEyc1V5fUW123r51L\nT09v8Pv8Ynem0+no1asX2dnZDX7I7d566y2CgoL4y1/+wtKlSwkMDOQ///M/AfjXv/5FVVUVrVu3\nZtasWXzwwQd07drVKc8VQjjXmTPwr38pNzPU1lrj3bvDSy8pl9zLEY/iTtnXsvno4EdcrbTeCvRQ\nzEM83eNpQvxDNMxMCM9k12aHP//5zyxdupRnnnmG2NhYy4I8nU7HnDlz1MjTYbLZQQjXKCmBLVvg\n1CnbeFSUMo0aH69NXsK9mc1mDLkGduTtsMR89b6M6zyOHm16aJiZEO7BpZsddu/eTUJCAjt27PjZ\n19y1kQNZIyeEM9XWwg8/wO7dypRqvYAA5UqtPn3ASSswhJepqq1i7cm1nCk+Y4mFB4QzLWUabUPb\napiZENpr7Bo5zY4fcTUZkVOfbF1Xl1r1NpshOxs2b4bSUtuv9eoFI0ZAcLDL09CcfL4dk52TzdaD\nW7l+6zpHLx2lTWwbIqMjAegQ0YHJyZMJ8gu673tIzdUl9VaX6sePXL9+nW+++YZLly7x7//+7xQW\nFmI2m2nXrp3DDxVCeIbr15UG7swZ23h0tDKNKv/3F3eTnZPN4u2LKW1bSvatbExRJi6duERPevJE\nvycY1n4Yep0M3wrhDHaNyO3YsYPJkyfTp08ffvjhB8rLyzEYDLz77rts2LBBjTwdJiNyQjRcTY2y\nG3XPHuWA33qBgcoIXK9eMo0q7u3dL95lj+8erlddt8R8dD70r+vPfzz3HxpmJoT7cumI3O9+9ztW\nrFjBiBEjiIiIAKBfv37s27fP4QcKIdyX2QwnTiibGW4/n1ung969lbVwQfefDRNNmNls5lDRITJy\nM6iIqbDEA30DSW2dSmRxpIbZCeGd7Po7dV5eHiNGjLCJ+fn5Ybz9r+puKD09Xc7FUZHUWl3OrvfV\nq7BkCaxebdvEtWsHzz8PY8c27SZOPt/3V1xVzGdHPmPD6Q02owoxoTH0ju5NsH8w/np/h95Taq4u\nqbe66uttMBgadY6cXSNyXbt2ZfPmzTz22GOW2LZt2+jWrVuDH6yGxhRGiKaiuhp27IAffwSTyRoP\nDlamUXv2VEbkhLgbk9nEjxd+ZPv57dSalAMFExMTyT6TTcpDKYQHhANQfaaa4UPl3lQh7lR/usaC\nBQsa9P12rZH78ccfGTt2LKNHj2b16tXMnj2bDRs2sG7dOvr27dugB7uarJET4v7MZjh2DL7/HsrL\nrXGdDvr2haFDlaNFhLiXKxVXWHdqHYXlhZaYXqfn4diHaVPbhp1HdlJjqsFf78/wB4aT1DFJw2yF\ncG8N7VvsPn6ksLCQpUuXkpeXR1xcHLNmzXLrHavSyAlxb5cvK5fb5+XZxuPjld2oUVHa5CU8g9Fk\nZFf+Lnbl7cJoti6xaRPShvFJ44kOjdYwOyE8k8sbOQCTycS1a9do1arVzy69dzfSyKlPziBSV0Pq\nfesWbN8OBw7YTqOGhMDIkdCtm0yj3ot8vhWFNwpZl72OKxVXLDEfnQ9DEobwcOzD+Oiddy+b1Fxd\nUm91qXqOXElJCf/2b//GqlWrqK2txc/Pj6lTp/KPf/yDFi1aOPxQtcjNDkIozGY4ckSZRq2wbiZE\nr4d+/eCRR5SL7oW4l1pjLdtzt7O3YC9mrD9sYpvHMj5pPK2CW2mYnRCeS5WbHZ544gl8fX156623\niIuLIz8/nzfeeIOamhrWrVvX4Ie7kozICaEoKlKmUQsKbOPt2yvTqK3k56/4BedLzrM+ez0lt0os\nMT+9HyMSR/BgzINyuK8QTuDSqdWwsDCKiooIuu3sgcrKStq2bUtZWZnDD1WDNHKiqauqgm3b4OBB\nZUSuXvPmMGoUJCfLNKq4v1t1t/j+7PccLDpoE0+MSGRc53FEBEZolJkQ3qehfYtdf43q0qULubm5\nNrG8vDy6dOni8AOF95IziNR1r3qbTErz9t578NNP1ibOxwcGDYKXXoKUFGniHNXUPt/Z17L55/5/\n2jRxAb4BTEiawOzus1Vp4ppazbUm9VaXs+pt1xq5YcOGMXLkSJ566iliY2PJz89n6dKlzJ49m0WL\nFmE2m9HpdMyZM8cpSQkhGubCBWUa9eJF23jHjvD449CypTZ5Cc9RUVPB5pzNHLtyzCbeNbIrozuN\nJrRZqEaZCSHuxq6p1frNArfvVK1v3m63fft252bXCDqdjvnz58tmB9EkVFTA1q2QmWkbDw+Hxx6D\npCQZgRP3ZzabOX7lON/mfEtlbaUlHuwXzJjOY+ga2dXtTysQwhPVb3ZYsGCB648f8SSyRk40BSaT\nMn2akaEcLVLP1xcGDoQBA8DPT7v8hGe4UX2Djac3cvr6aZt4j6gejOo4iiC/Jnw3mxAqcekaOSHs\nIesr1LVypYGPPlKmUm9v4pKS4MUXYcgQaeKcyRs/32azmYMXD/LP/f+0aeLCmoUxq/ssJnadqGkT\n5401d2dSb3WpukZOCOE+ysuV8+C+/RYSEqzxFi2UdXCdOmmWmvAgxVXFrM9eT25prk28b0xfhrcf\nTjNfOVhQCE8gU6tCeAijEfbvB4NBuei+np8fDB4M/fsrU6pC3M/dLrkHaBnYkvFJ44kPj9cwOyGa\nLpfe7CCE0Nb588oU6tWrtvHkZOVMuLAwbfISnuV+l9w/Ev8Ifj4yFy+Ep7F7jdzJkyd58803efHF\nFwE4deoUR48edVliwvPI+grnu3EDVq+Gzz6zbeIiI6FTJwNpadLEqcWTP99GkxFDroEPf/rQpolr\nE9KGuQ/MZUTiCLds4jy55p5I6q0uZ9XbrkZu9erVDB48mMLCQj7//HMAysvL+cMf/uCUJIQQturq\nYPdu5VDfrCxr3N9fudz+N7+BmBjt8hOeo/BGIR8e/BBDrgGj2Qgol9wPbz+c5x94nv/f3r1HNXWn\n6wN/ws2AXES5hhZpRRB+Kihgl9U6qLWWU62V09bao63aUY/ai/W003ZZNR71OHbUdk61dcbevOKl\n0zn11tGOGLUe1MYLdQS5aGWqKCgoEJAQwv794SE1gBpC+G528nzWYq1m7yT75Vkp63Xn3fur8dPI\nXCERtYVNM3K9evXCli1bkJiYiMDAQNy4cQMmkwnh4eG4fv26iDpbjfeRI6UqLLx9IUNZmfX2Pn2A\nESNuL7FFdD8mswmZP2fi6KWjXOSeqAMTch+5bt264dq1a3Bzc7Nq5CIiIlBaWmpX4e2NFzuQ0ty8\nCezdC+TmWm8PCbm9uP2dV6gS3UtLi9x7uXth+EPDucg9UQfVrveR69+/PzZs2GC1bevWrRgwYECr\nD0jOi/MVrZOXV4TVqzOxYoUOs2dnYsGCIqsmrlOn27cT+fd/b7mJY95iKSHv2vpa7MzbiXXZ66ya\nuB6BPTAzZSYeeeARRTVxSsjcmTBvsYTeR+7jjz/GiBEj8Pnnn6OmpgZPPPEE8vPzsW/fPocUQeRq\n8vKK8NVXhTAYhqOg4PYNfevr9yMxEQgK6o7ERODxxwFfX7krJaXIu56HXfm7UFVXZdmm9lBjZI+R\nSAxL5PJaRE7K5vvIVVdXY9euXSgqKkJkZCSeeuop+Pl13MWT+dUqdWQrVmTif/93WLM5uPDwTHzw\nwTA8+KA8dZHycJF7IufQ7veR69y5M8aNG9fqAxBRc5LkBoPh18ceHsDDDwO9ermxiSObcJF7IgJs\nnJErKirClClT0K9fP/Ts2dPyExMT0971kYJwvsJ23t4N6NHj9n+HhwOPPAJoNIBa3WDzezBvsTpS\n3pXGSmT8IwN/yf2LVROXEJqAWQNmIT443imauI6UuStg3mIJnZF77rnnEBcXh0WLFkGtVjvkwESu\n7PHHe+DSpf1ISRmOzp1vbzMa92P48Gh5C6MOTZIknLhyAt+f/x5G86/rtAV0CsDo2NGI7srPD5Gr\nsWlGLiAgAOXl5XB3dxdRk0NwRo46ury8Iuzffx51dW7w8mrA8OE9EBvLdS6pZVzknsi5teuM3KhR\no3Dw4EEMGzas1QeQk1ar5Q2BqcOKje3Oxo3uq3GR+8yfM1HfUG/ZzkXuiZxD4w2B7WXTGbnr169j\n4MCBiImJQUhIyK8vVqnwxRdf2H3w9sQzcuLpdDo2zQIxb7HkyLvEUIIdeTtaXOQ+NSoVHm42X6+m\nSPyMi8W8xWqad7uekZsyZQq8vLwQFxcHtVptOZgzDNMSEXU09Q31OFx0GIf/eRgN0q8XwIT5hmFM\n7BiE+4XLWB0RdSQ2nZHz8/PD5cuX4a+gRR55Ro6IlOhS5SXsyNuB0upflz90V7kjNSoVjz74KNzd\nlDOrTES2a9czcn379kVZWZmiGjkiIiXhIvdEZA+bGrlhw4Zh5MiRmDx5MkJDQwHA8tXqlClT2rVA\nUg7OV4jFvMVqz7y5yH3L+BkXi3mL5ai8bWrkDh8+DI1G0+LaqmzkiIjsU1tfi+/Pf48TV05Ybe8R\n2AOjY0eji7qLTJURkVLYvNaq0nBGjog6srstcv9k9JNICE3gxWRELsbhM3J3XpXa0HD3ZYPc3Fzz\nlD8RkT2q66rxXeF3+EfpP6y2c5F7IrLHXbuwOy9s8PDwaPHH09NTSJGkDFynTyzmLVZb85YkCWdK\nzmD1j6utmjhfL188//+ex7je49jENcHPuFjMW6x2X2v17Nmzlv++cOGCQw5GROSKKmorsLtgN/LL\n8q22J4Qm4MnoJ+Ht6S1TZUSkdDbNyC1fvhxvvfVWs+0rV67EnDlz2qWwtuKMHBHJjYvcE5Gt7O1b\nbL4hcFVVVbPtgYGBuHHjRguvkB8bOSKSU1lNGXbm7+Qi90Rkk3a5IXBmZiYkSYLZbEZmZqbVvvPn\nz3f4GwRrtVqkpqbyvjiC8B5EYjFvsWzNm4vcOw4/42Ixb7Ea89bpdG2al7tnIzdlyhSoVCoYjUa8\n8sorlu0qlQqhoaH4+OOP7T6wCFqtVu4SiMiFuPoi90TUeo0nnBYuXGjX6236anXixInYsGGDXQeQ\nC79aJSJRuMg9EbVVu87IKREbOSISgYvcE5Ej2Nu38G6+5DC8B5FYzFuspnnXmeuwt3AvPj/5uVUT\n96D/g5iRMgOPdX+MTVwb8TMuFvMWq93vI0dERC271yL3AyIGcHktIhKGX60SEdmotr4W+87vw8kr\nJ622c5F7Imqrdrn9CBER3cZF7omoI+KMHDkM5yvEYt5iVNdV4+ucr7F041KrJi4uKA6zUmYhMSyR\nTVw74WdcLOYtFmfkiIjakSRJOFN6Bn8r/BtqTDWW7b5evviXnv+C+OB4GasjIrqNM3JERE3cbZH7\nxLBEjOwxkovcE5HDcUaOiKiNuMg9ESkNZ+TIYThfIRbzdqyymjKsy16HXfm7rJq4AREDMDNlJi79\ndEnG6lwTP+NiMW+xOCNHROQAd1vkPsgnCE/HPo3IgEgZqyMiujfOyBGRyyoxlODbvG9RXFVs2cZF\n7olIDpyRIyKyERe5JyJnobgZuZKSEgwaNAhDhw7FyJEjUVZWJndJ9H84XyEW826dvMI8rN66Gtov\ntfi35f+Gv2T9xdLEuavcMfyh4Zjaf+pdmzjmLR4zF4t5i+WyM3LBwcE4cuQIAGDdunVYu3Yt3n33\nXZmrIqKOLK8wD2v2rUFpaCkuqy4DIcDlnMtIRCL69eqHMb3GIMgnSO4yiYhaTdEzch9//DG8vLww\nffr0Zvs4I0dEDVIDCsoK8F/r/wtFXYus9rmr3NG/tj8+mPYBV2YgItm51IxcdnY2pk2bhps3b+LH\nH3+Uuxwi6mCqjFU4eeUkTl45iQpjBUpqSoCuv+4PVAciNigWYdfD2MQRkaIJnZFbtWoVkpOToVar\nMXnyZKt95eXlGDt2LHx9fREVFYWMjAzLvg8//BBDhw7FihUrAAAJCQk4duwYFi9ejEWLFon8Fege\nOF8hFvO2JkkSLty4gG1nt+HDox/iwMUDqDBWAADc/u9PXVfvrugd0ht9Q/tC7aGGl5uXze/PvMVj\n5mIxb7EUOSMXERGBefPmYe/evbh165bVvlmzZkGtVqO0tBSnTp3CU089hYSEBMTHx+PNN9/Em2++\nCQAwmUzw9PQEAPj7+8NoNDY7DhG5jhpTDU5fPY0TxSdQdqv5xU8+nj549tFncebcGQREBVi2GwuM\nGD50uMhSiYgcTmgjN3bsWACAXq/HpUu/3iW9uroa33zzDc6ePQsfHx8MGjQIY8aMwYYNG7B06VKr\n9zh9+jTeeustuLu7w9PTE59//vldjzdp0iRERUUBALp06YLExESkpqYC+LUT5mPHPm7UUepx9seN\nOko9oh4fOHAA16qvwaOHB3Ku5aDwZCEAICoxCgBw8fRFhHYOxYSnJyAuOA4/HPoBHgEeMJQaUNdQ\nh4u5F9E/pj9io2NbdfxGcv/+fMzHfKz8xwCg1Wpx8eJFtIUsFzu8//77uHz5Mr788ksAwKlTpzB4\n8GBUV1dbnrNy5UrodDrs2LHDrmPwYgci52OsN+Knkp+gL9ajpLqk2f5O7p2QGJaIJE0SQjqHyFAh\nEZF97O1b3NqhlvtqOlxsMBjg7+9vtc3Pzw9VVVUiy6I2uvNfGdT+XCnvq4ar2Jm3EyuyVmB3we5m\nTZzGT4OnY5/Gfzz6H0jrmdYuTZwr5d1RMHOxmLdYjspblqtWm3acvr6+qKystNpWUVEBPz8/kWUR\nUQdiMptw9tpZ6Iv1uFTZfMF6TzdP9Antg2RNMjR+GhkqJCKSnyyNXNMzcjExMaivr0dhYSGio6MB\n3L7FSO/evdt0HK1Wi9TUVMv30tS+mLNYzpr39Zrr0BfrcfrqadTW1zbbH+wTjGRNMhLCEqD2UAur\ny1nz7siYuVjMW6w7Z+bacnZO6Iyc2WyGyWTCwoULcfnyZaxduxYeHh5wd3fH+PHjoVKp8Nlnn+Hk\nyZMYNWoUsrKyEBcXZ9exOCNHpBzmBjPOXT8HfbEeP9/8udl+d5U74oPjkaxJRmRAJO/9RkRORxEz\ncosWLYKPjw+WLVuGjRs3wtvbG0uWLAEAfPLJJ7h16xZCQkIwYcIErFmzxu4mjuTB+QqxnCHvm7U3\nsf/Cfnx49ENsz9nerIkLVAdixMMjMGfgHPxr/L+ie5fusjVxzpC30jBzsZi3WIqckdNqtdBqtS3u\nCwwMxF//+leR5RCRDBqkBhSWF0JfrEdBWQEkWP8LVAUVYoNikaxJRo/AHjz7RkR0D4pea/VeVCoV\nFixYwBk5og6iyliFU1dP4UTxCcuKC3fy8/JDkiYJ/cP7w7+TfwvvQETkfBpn5BYuXGjXV6tO3cg5\n6a9GpBiSJOHnmz9DX6zHuevn0CA1NHtOj8AeSIlIQUy3GLipZLkjEhGR7BQxI0fOjfMVYnXkvGtM\nNcj6JQurjq/C+uz1yLmWY9XE+Xj6YNCDg/D6I69jYsJE9Arq1eGbuI6ct7Ni5mIxb7EUOSNHRM5L\nkiRcqrwEfbEeZ6+dRX1DfbPnRAZEIkWTgrjgOHi48c8PEVFbOfVXq5yRI2p/xnojzpSegb5Yj6uG\nq832d3LvhISwBCRrkrlsFhFRE5yRuwvOyBG1r6uGq9AX6/FTyU+oM9c12x/uG46UiBT0DukNL3cv\nGSokIlIOzsiR7DhfIZYceZvMJmRfzcZnJz/DGv0a6Iv1Vk2cp5sn+oX1w7SkaZiePB39w/s7TRPH\nz7d4zFws5i0WZ+SISJiymjLLslm36m812y/XsllERK6OX60SUYu4bBYRkTj29i1OfUZOq9XyYgei\nVrpZexMnr5zEySsnYagzNNsfqA5EkiYJ/cL6obNXZxkqJCJyHo0XO9iLZ+TIYXQ6HZtmgRyZN5fN\nuj9+vsVj5mIxb7Ga5s0zckTUaoY6A05eOXnPZbP6h/dH//D+CFAHyFAhERHdC8/IEbkYSZJw8eZF\n6Iv1yL2ee9dls5I1yYjpFgN3N3cZqiQici08I0dE93TLdAunr56GvliPsltlzfb7ePqgX1g/JGmS\n0NW7qwwVEhFRa/E+cuQwvAeRWLbk3bhs1v+c+x+syFqBvef3NmviIgMikR6XjjkD52BEjxFs4u6C\nn2/xmLlYzFss3kfOBrxqlVyVrctmJYUnIdQ3VIYKiYgI4FWrd8UZOXJFJYYSy7JZRrOx2f5w33Ak\na5LRJ7SP06y4QETkDDgjR+Si6hvqcbb0LPTFevxS+Uuz/Z5unugd0hvJmmRo/DQueesQIiJnxUaO\nHIb3IBLr2799C3W0+r7LZvUN7QtvT28ZKnQu/HyLx8zFYt5iOSpvNnJECmJuMCOvLA/6Yj0yz2Ui\nSh1ltd9d5Y644Dgka5LRPaA7z74RETk5zsgRKUBFbQVOXDlx12Wzuqi7IFmTjMSwRPh6+cpQIRER\ntQVn5IicTIPUgPPl56Ev1iO/LL/FZbNiusUgWZOM6K7RPPtGROSCnPo+clqtlvfFEYhZO4ahzoDD\nRYfx38f+G5vObEJeWZ5VE+fn5YffdP8NkuqSML7PePTs1pNNnAD8fIvHzMVi3mI15q3T6aDVau1+\nH6c+I9eWYIhEkiQJRRVF+PHyjzh3/RzMkrnZcx4OfBgpmhTLslm6Ip34QomIyKEa73e7cOFCu17P\nGTkimeQV5mHP8T0oqixCcWUxQh4IQZAmyOo53h7e6BfeD0nhSejm002mSomIqL3Z27ewkSOSQfa5\nbPznX/8TNzQ3LIvW1xfWIzE+EUGaIEQGRCJZk4z44Hh4uDn1iXMiIoL9fYtTz8iRWJyvsN2h04dQ\n9UCVpYkDgE49O8FcZsaM5BmY0m8K+ob2vWcTx7zFYt7iMXOxmLdYXGuVSMHMMEPjp8HFmxfh6+UL\njZ8GoZ1D0a20G9c+JSIim/GrVSIZrN66GpeDLqO2vhZ+Xn6Wq05DSkMw8/mZMtRPobUAAA/bSURB\nVFdHRESi8atVIgV5POlxSBck+HfytzRxxgIjhvcfLnNlRESkJGzkyGE4X2G72OhYTBo6CSGlIehy\ntQtCSkMwaegkxEbH2vwezFss5i0eMxeLeYvFGTkbaLVay/1ZiDqa2OjYVjVuRETkfHQ6XZuaOs7I\nEREREcmMM3JERERELoaNHDkM5yvEYt5iMW/xmLlYzFssR+XNRo6IiIhIoTgjR0RERCQzzsgRERER\nuRg2cuQwnK8Qi3mLxbzFY+ZiMW+xOCNHRERE5OI4I0dEREQkM87IEREREbkYNnLkMJyvEIt5i8W8\nxWPmYjFvsTgjR0REROTinHpGbsGCBUhNTUVqaqrc5RARERE1o9PpoNPpsHDhQrtm5Jy6kXPSX42I\niIicDC92INlxvkIs5i0W8xaPmYvFvMXijBwRERGRi+NXq0REREQy41erRERERC6GjRw5DOcrxGLe\nYjFv8Zi5WMxbLM7IEREREbk4zsgRERERyYwzckREREQuho0cOQznK8Ri3mIxb/GYuVjMWyzOyBER\nERG5OM7IEREREcmMM3JERERELoaNHDkM5yvEYt5iMW/xmLlYzFsszsgRERERuTjFzshlZGTgjTfe\nQGlpaYv7OSNHRERESuFSM3Jmsxnbt29HZGSk3KUQERERyUaRjVxGRgaef/55qFQquUuhO3C+Qizm\nLRbzFo+Zi8W8xXLZGbnGs3Hjxo2TuxRq4vTp03KX4FKYt1jMWzxmLhbzFstReQtt5FatWoXk5GSo\n1WpMnjzZal95eTnGjh0LX19fREVFISMjw7Jv5cqVGDp0KJYvX45NmzbxbFwHdfPmTblLcCnMWyzm\nLR4zF4t5i+WovIU2chEREZg3bx6mTJnSbN+sWbOgVqtRWlqKTZs2YcaMGcjJyQEAzJkzBwcOHMBb\nb72FnJwcrF+/HmlpaSgoKMDs2bNF/gp31dZTpK19vS3Pv9dz7rbP1u1yn4J3xPFb8x5tzfte+1va\nbus2kZz5M8685f+bYmsN7Ulk5vyb4nqf8fbKW2gjN3bsWIwZMwbdunWz2l5dXY1vvvkGixYtgo+P\nDwYNGoQxY8Zgw4YNzd7j97//Pfbu3YvvvvsOMTEx+Oijj0SVf0/8QAIXL168b02OwkZObN4tHb+9\nX9/RGjnmLb6Rc+bM+TfF9T7j7ZW3LLcfef/993H58mV8+eWXAIBTp05h8ODBqK6utjxn5cqV0Ol0\n2LFjh13HiI6Oxvnz5x1SLxEREVF7SkhIsGtuzqMdarmvpvNtBoMB/v7+Vtv8/PxQVVVl9zEKCwvt\nfi0RERGREshy1WrTk4C+vr6orKy02lZRUQE/Pz+RZREREREpiiyNXNMzcjExMaivr7c6i5adnY3e\nvXuLLo2IiIhIMYQ2cmazGbW1taivr4fZbIbRaITZbEbnzp2Rnp6O+fPno6amBj/88AN27tyJiRMn\niiyPiIiISFGENnKNV6UuW7YMGzduhLe3N5YsWQIA+OSTT3Dr1i2EhIRgwoQJWLNmDeLi4kSWR0RE\nRKQosly1Kqd33nkHWVlZiIqKwhdffAEPD1mu93AZlZWVePzxx5Gbm4tjx44hPj5e7pKc2vHjxzF7\n9mx4enoiIiIC69ev52e8HZWUlCA9PR1eXl7w8vLC5s2bm91eidpHRkYG3njjDZSWlspdilO7ePEi\nUlJS0Lt3b6hUKmzbtg1BQUFyl+XUdDodFi9ejIaGBrz++ut45pln7vl8xS3R1RbZ2dkoLi7GoUOH\n0KtXL3z99ddyl+T0fHx8sGfPHjz77LPNLnIhx4uMjMSBAwdw8OBBREVF4dtvv5W7JKcWHByMI0eO\n4MCBA3jxxRexdu1auUtyCY1LNUZGRspdiktITU3FgQMHkJmZySaund26dQsrV67Ed999h8zMzPs2\ncYCLNXJZWVkYOXIkAODJJ5/EkSNHZK7I+Xl4ePB/fIHCwsLQqVMnAICnpyfc3d1lrsi5ubn9+ie0\nsrISgYGBMlbjOjIyMrhUo0BHjhzBkCFDMHfuXLlLcXpZWVnw9vbG6NGjkZ6ejpKSkvu+xqUauRs3\nblhuaeLv74/y8nKZKyJqH0VFRfj+++8xevRouUtxetnZ2XjkkUewatUqjB8/Xu5ynF7j2bhx48bJ\nXYpL0Gg0OH/+PA4dOoTS0lJ88803cpfk1EpKSlBYWIhdu3Zh6tSp0Gq1932NIhu5VatWITk5GWq1\nGpMnT7baV15ejrFjx8LX1xdRUVHIyMiw7OvSpYvlfnUVFRXo2rWr0LqVzN7M78R/PduuLXlXVlbi\npZdewrp163hGzkZtyTshIQHHjh3D4sWLsWjRIpFlK5q9mW/cuJFn4+xgb95eXl7w9vYGAKSnpyM7\nO1to3Uplb96BgYEYNGgQPDw8MGzYMJw9e/a+x1JkIxcREYF58+ZhypQpzfbNmjULarUapaWl2LRp\nE2bMmIGcnBwAwKOPPoq///3vAIC9e/di8ODBQutWMnszvxNn5Gxnb9719fV44YUXsGDBAvTs2VN0\n2Yplb94mk8nyPH9/fxiNRmE1K529mefm5mL9+vVIS0tDQUEBZs+eLbp0RbI3b4PBYHneoUOH+HfF\nRvbmnZKSgtzcXADA6dOn0aNHj/sfTFKw999/X5o0aZLlscFgkLy8vKSCggLLtpdeekl69913LY/f\nfvtt6bHHHpMmTJggmUwmofU6A3syT0tLkzQajTRw4EDpq6++Elqv0rU27/Xr10vdunWTUlNTpdTU\nVGnr1q3Ca1ay1uZ97NgxaciQIdLQoUOlJ554Qvrll1+E16x09vxNaZSSkiKkRmfS2rz37NkjJSUl\nSY899pj08ssvS2azWXjNSmbP53v16tXSkCFDpNTUVOnChQv3PYai70sgNTnDk5+fDw8PD0RHR1u2\nJSQkQKfTWR5/8MEHospzSvZkvmfPHlHlOZ3W5j1x4kTeSLsNWpv3gAEDcPDgQZElOh17/qY0On78\neHuX53Ram3daWhrS0tJEluhU7Pl8z5w5EzNnzrT5GIr8arVR0xkJg8EAf39/q21+fn6oqqoSWZZT\nY+ZiMW+xmLd4zFws5i2WiLwV3cg17XR9fX0tFzM0qqiosFypSm3HzMVi3mIxb/GYuVjMWywReSu6\nkWva6cbExKC+vh6FhYWWbdnZ2ejdu7fo0pwWMxeLeYvFvMVj5mIxb7FE5K3IRs5sNqO2thb19fUw\nm80wGo0wm83o3Lkz0tPTMX/+fNTU1OCHH37Azp07OTPkAMxcLOYtFvMWj5mLxbzFEpp3W6/IkMOC\nBQsklUpl9bNw4UJJkiSpvLxceuaZZ6TOnTtL3bt3lzIyMmSu1jkwc7GYt1jMWzxmLhbzFktk3ipJ\n4s29iIiIiJRIkV+tEhEREREbOSIiIiLFYiNHREREpFBs5IiIiIgUio0cERERkUKxkSMiIiJSKDZy\nRERERArFRo6IiIhIodjIERE1MWnSJMybN8+h7zljxgwsXrzYoe9JROQhdwFERB2NSqVqtth1W336\n6acOfT8iIoBn5IiIWsTVC4lICdjIEVGHsmzZMjzwwAPw9/dHr169kJmZCQA4fvw4Bg4ciMDAQGg0\nGrz22mswmUyW17m5ueHTTz9Fz5494e/vj/nz5+P8+fMYOHAgunTpghdeeMHyfJ1OhwceeABLly5F\ncHAwHnroIWzevPmuNe3atQuJiYkIDAzEoEGDcObMmbs+980330RoaCgCAgLQt29f5OTkALD+unb0\n6NHw8/Oz/Li7u2P9+vUAgHPnzmHEiBHo1q0bevXqhe3bt9/1WKmpqZg/fz4GDx4Mf39/jBw5EmVl\nZTYmTUTOgI0cEXUYeXl5WL16NfR6PSorK7Fv3z5ERUUBADw8PPDHP/4RZWVlyMrKwv79+/HJJ59Y\nvX7fvn04deoUjh49imXLlmHq1KnIyMjAP//5T5w5cwYZGRmW55aUlKCsrAzFxcVYt24dpk2bhoKC\ngmY1nTp1Cq+88grWrl2L8vJyTJ8+HU8//TTq6uqaPXfv3r04fPgwCgoKUFFRge3bt6Nr164ArL+u\n3blzJ6qqqlBVVYVt27YhPDwcw4cPR3V1NUaMGIEJEybg2rVr2LJlC2bOnInc3Ny7ZpaRkYGvvvoK\npaWlqKurw/Lly1udOxEpFxs5Iuow3N3dYTQacfbsWZhMJkRGRuLhhx8GAPTv3x8DBgyAm5sbunfv\njmnTpuHgwYNWr//d734HX19fxMfHo0+fPkhLS0NUVBT8/f2RlpaGU6dOWT1/0aJF8PT0xJAhQ/DU\nU09h69atln2NTdef//xnTJ8+HSkpKVCpVHjppZfQqVMnHD16tFn9Xl5eqKqqQm5uLhoaGhAbG4uw\nsDDL/qZf1+bn52PSpEnYtm0bIiIisGvXLjz00EN4+eWX4ebmhsTERKSnp9/1rJxKpcLkyZMRHR0N\ntVqN559/HqdPn25F4kSkdGzkiKjDiI6OxkcffQStVovQ0FCMHz8eV65cAXC76Rk1ahTCw8MREBCA\nuXPnNvsaMTQ01PLf3t7eVo/VajUMBoPlcWBgILy9vS2Pu3fvbjnWnYqKirBixQoEBgZafi5dutTi\nc4cOHYpXX30Vs2bNQmhoKKZPn46qqqoWf9eKigqMGTMGS5YswaOPPmo51rFjx6yOtXnzZpSUlNw1\nszsbRW9vb6vfkYicHxs5IupQxo8fj8OHD6OoqAgqlQrvvPMOgNu374iPj0dhYSEqKiqwZMkSNDQ0\n2Py+Ta9CvXHjBmpqaiyPi4qKoNFomr0uMjISc+fOxY0bNyw/BoMB48aNa/E4r732GvR6PXJycpCf\nn48//OEPzZ7T0NCAF198EcOHD8dvf/tbq2P95je/sTpWVVUVVq9ebfPvSUSuhY0cEXUY+fn5yMzM\nhNFoRKdOnaBWq+Hu7g4AMBgM8PPzg4+PD86dO2fT7Tzu/CqzpatQFyxYAJPJhMOHD2P37t147rnn\nLM9tfP7UqVOxZs0aHD9+HJIkobq6Grt3727xzJder8exY8dgMpng4+NjVf+dx587dy5qamrw0Ucf\nWb1+1KhRyM/Px8aNG2EymWAymfDjjz/i3LlzNv2OROR62MgRUYdhNBrx3nvvITg4GOHh4bh+/TqW\nLl0KAFi+fDk2b94Mf39/TJs2DS+88ILVWbaW7vvWdP+dj8PCwixXwE6cOBF/+tOfEBMT0+y5SUlJ\nWLt2LV599VV07doVPXv2tFxh2lRlZSWmTZuGrl27IioqCkFBQXj77bebveeWLVssX6E2XrmakZEB\nX19f7Nu3D1u2bEFERATCw8Px3nvvtXhhhS2/IxE5P5XEf84RkYvR6XSYOHEifvnlF7lLISJqE56R\nIyIiIlIoNnJE5JL4FSQROQN+tUpERESkUDwjR0RERKRQbOSIiIiIFIqNHBEREZFCsZEjIiIiUig2\nckREREQK9f8BT5GcuSZXa8EAAAAASUVORK5CYII=\n", "text": [ - "" + "" ] } ], - "prompt_number": 5 + "prompt_number": 13 }, { "cell_type": "markdown", @@ -436,8 +453,8 @@ "output_type": "stream", "stream": "stdout", "text": [ - "1000000 loops, best of 3: 1.15 \u00b5s per loop\n", - "1000000 loops, best of 3: 436 ns per loop" + "1000000 loops, best of 3: 764 ns per loop\n", + "1000000 loops, best of 3: 321 ns per loop" ] }, { @@ -448,7 +465,7 @@ ] } ], - "prompt_number": 70 + "prompt_number": 15 }, { "cell_type": "code", @@ -456,19 +473,20 @@ "input": [ "funcs = ['string_add', 'string_join']\n", "\n", - "orders_n = [10**n for n in range(1, 9)]\n", + "orders_n = [10**n for n in range(1, 6)]\n", + "test_chars_n = (test_chars*n for n in orders_n)\n", "times_n = {f:[] for f in funcs}\n", "\n", - "for n in orders_n:\n", + "for st,n in zip(test_chars_n, orders_n):\n", " for f in funcs:\n", - " times_n[f].append(min(timeit.Timer('%s(test_chars)' %f, \n", - " 'from __main__ import %s, test_chars' %f)\n", - " .repeat(repeat=10, number=1000)))" + " times_n[f].append(min(timeit.Timer('%s(st)' %f, \n", + " 'from __main__ import %s, st' %f)\n", + " .repeat(repeat=3, number=1000)))" ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 71 + "prompt_number": 16 }, { "cell_type": "code", @@ -478,7 +496,8 @@ ], "language": "python", "metadata": {}, - "outputs": [] + "outputs": [], + "prompt_number": 4 }, { "cell_type": "code", @@ -493,18 +512,23 @@ "\n", "fig = plt.figure(figsize=(10,8))\n", "for lb in labels:\n", - " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", + " plt.plot([len(test_chars)*n for n in orders_n], \n", + " times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", "plt.xlabel('sample size n')\n", "plt.ylabel('time per computation in milliseconds [ms]')\n", - "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", + "#plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", "plt.legend(loc=2)\n", "plt.grid()\n", "plt.xscale('log')\n", "plt.yscale('log')\n", - "plt.title('Performance of different string reversing methods')\n", - "ftext = 'new_str += char is {:.2f}x faster than \"\".join(chars)'\\\n", - " .format(times_n['string_add'][-1]\\\n", - " /times_n['string_join'][-1])\n", + "plt.title('Performance of different string concatenation methods')\n", + "max_perf = max( a/j for a,j in zip(times_n['string_add'],\n", + " times_n['string_join']) )\n", + "min_perf = min( a/j for a,j in zip(times_n['string_add'],\n", + " times_n['string_join']) )\n", + "\n", + "ftext = '\"\".join(chars) is {:.2f}x to {:.2f}x faster than new_str += char'\\\n", + " .format(min_perf, max_perf)\n", "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", "plt.show()" ], @@ -514,13 +538,13 @@ { "metadata": {}, "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAnMAAAIECAYAAAByl6h3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdYFNfXB/DvLB0EQRAUEEGQ3hVBUFywl6hRk1hQrFGM\nNZZYMIBGY0xsMUZjxYI9GktiBbGBXVARkGJHFCMYBUWE+/7By/xcacsufc7nefaRnXLvPbPDcpx7\nZpdjjDEQQgghhJA6SVTTAyCEEEIIIbKjZI4QQgghpA6jZI4QQgghpA6jZI4QQgghpA6jZI4QQggh\npA6jZI4QQgghpA6jZI7UeR8+fMDIkSOhp6cHkUiEs2fP1vSQ6qS9e/fC3NwcioqKGDlypNT7BQcH\no2XLlqU+L63tyMhI2NvbQ1lZGb6+vpUTRB0UGhoKJSWlmh5GrXX//n2IRCJERUXV9FCqhKmpKRYu\nXFglbYvFYowZM6ZK2ia1CyVzpFoMHz4cIpEIIpEISkpKMDU1RUBAAF6+fCl323/++Sd27tyJI0eO\nID09HW3btq2EEQtLfn4+Ro4ciYEDB+LRo0dYuXKlzG3NmDEDly5dKrftgIAAtG7dGvfu3cP+/fvl\njqEyWFhYICQkRO52FBUVsXXrVqm2HThwINLS0uTus74yMTFBeno62rRpU9NDkcsPP/wAMzOzYss5\njgPHcVXSZ1W2TWoXxZoeABEOb29v7NmzBx8+fMDVq1cxZswYPHr0CEeOHJGpvffv30NZWRlJSUkw\nMjKCh4eHXOMrak+I0tLSkJ2dje7du6Np06ZytaWhoQENDY0y22aMITk5GXPnzoWRkZHMfTHGkJ+f\nD0XFynkrq6w/fBzHobzPYy8au6qqKlRVVSul34oqKCgAAIhENfP/eml+50QiEfT19atpRITUTXRl\njlQbJSUl6Ovrw9DQEL1798bkyZNx7Ngx5ObmAgB27doFZ2dnqKmpwczMDNOmTUNOTg6/v1gsxujR\nozFv3jwYGhqiefPm8PHxwffff4/U1FSIRCK0aNECAJCXl4dZs2bB2NgYKioqsLOzw86dOyXGIxKJ\nsGrVKgwePBja2toYNmwYP+UVGRkJBwcHqKurw9fXF+np6Th9+jScnZ3RoEEDdO7cWeJqyr1799Cv\nXz8YGRlBQ0MDjo6O2L59u0R/RVMeCxYsQNOmTaGrqwt/f39kZ2dLbLd79260atUKampq0NPTQ48e\nPZCVlcWvX7VqFaytraGmpgZLS0ssWrQI+fn5ZR77ixcvwtvbG+rq6mjUqBGGDBmCjIwMAIXTfM2b\nNwdQmHCXNVX97t07BAQEQFtbG40aNcL48eP516/Ix9Osn7atoKCAM2fOQEFBAfn5+Rg2bBhEIhF/\nFSs5ORn9+/eHjo4OGjVqhK5du+L27dt82x+/Pi4uLlBVVUV4eDjy8vIQHByMFi1aQE1NDfb29li3\nbl2x13vNmjUYOnQotLS00KxZMyxevFji9UlJSUFISAh/Ffnhw4clHoe4uDh07doVOjo6aNCgAWxt\nbfnX29TUFPn5+RgxYgREIhEUFBRKHfupU6eKTbMWPY+KioKrqys0NDTQunVrXL16VWIM4eHhcHBw\ngJqaGlxcXHDu3DmIRCKEhYWVOOaPX5s9e/bA2toaKioqSEpKwps3bzB58mQYGxtDQ0MDrq6uOHDg\nAL+fl5cXxo4dW6w9GxsbfP/99/zzivwON23aFKampgCAgwcPwsXFBRoaGtDR0YG7uztiYmIAFJ9m\nLXq+d+9e9OrVCxoaGjA3N8eWLVskxnbv3j106dIFampqMDU1xR9//FHutGNkZCREIhGOHj2Ktm3b\nQl1dHW5uboiPj8fNmzfh5eUFDQ0NuLu7Iz4+XmLfa9euoUuXLtDU1IS+vj769+/Pnz+hoaH4/vvv\n8eDBA/7cmj9/Pr9vbm4uJk+eDF1dXTRp0gTffvutxO+0NO9nDx48QLdu3aCurg4TExOsWrWqWHxl\nHWdSxzFCqoG/vz/r3LmzxLKlS5cyjuPYmzdv2ObNm5mOjg7bvn07u3fvHjt79ixzdHRkQ4cO5bfv\n0KED09TUZAEBASw+Pp7dvn2bvXz5kk2fPp2ZmZmxZ8+esRcvXjDGGJs+fTrT1dVl+/btY0lJSWzR\nokVMJBKx8PBwvj2O45iuri5bvXo1S01NZUlJSWzz5s1MJBIxHx8fdvnyZXb9+nXWsmVL1q5dO+bt\n7c0uXbrEYmJimLW1Nfvqq6/4tm7dusVWr17Nbt68yVJTU9mqVauYoqIiO336tMT4tbW12bfffssS\nExPZiRMnWKNGjdi8efP4bTZt2sSUlJTYDz/8wMf422+/8XEFBQWx5s2bs7/++ovdv3+f/fPPP8zE\nxESijU89ffqUaWpqsiFDhrDbt2+z8+fPM0dHR+bt7c0YY+zt27fsypUrjOM4dvjwYfbs2TP2/v37\n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\ntvpct7br1ee6/qy/c9dOvbPiHTXrduq0UGU7yjQ8dbi6XdDN9/zxyut7PlQ9r8728Zm38/c+QnW7\nb7/9Vh+v/liRKZG+RqxsR5nSf5Gujl061toslbvr3uvlTzMVbl9+8aVOnHuixvaYvTG64uorQlaH\nQw5fU9dQDWLVNqfDWWujyOHlSkE9zOr1evXtt98qKSlJkZH22ZFnUjO3LW+b5ubOrfYD/8ftP+qu\n1LuUnJyssooynXSf1En3SZW5T3180n2yzq+dvv2k+6TKPeVhTFi7+vyCbypMzCw1nl90oWbq490U\nczsdTkVGRNZ5ceW4VHpuqSIcEXI4HHJ73HJ73Wqxt4X6X9Nf5e7yRv3z2B9VR3hOb/B+2P+DVv9r\ntZp1ayanw6nWsa3V6kArI2e+g36Y9aKLLlJpaWlACyD4eqT00CiNUva6bG3+38268KILlX5teoN+\nI3i8np9sAOvTHJ50n7T8l7JHp859WDUrKEluueu6ie2ZkLm2PWuxzlh5nB5FOCJUuKVQiT0T5ZVX\nsc5YNXM2q7a3sCkx4fGuTTByV+1xOltD1dCXqIjK9ar2tp7NVfFX+f4oz9+Qr+Q+ySrbUaZRt9Zs\narxer8o95TUaPN/H/789kG0VnoqA/49/ildelbnLVOYu821b801l415yvERHth7Rz/v9XO27tVf2\numxjmrmGmBX8yWbO4XDokksu0bZt29SrVy9LiyF4eqT0UI+UHnKdE5wB0ghHhGIiYxQTGSM1++nr\n/5SqH0ZWmsOW0S3ldXrl9rp9f/VKUrOIZpV1/j+Hzj7/cbb5kLPd9qfmSgK97dluFxcZ5/uujXZG\nKzYyVg6HQ/HR8eoQ1+Gsh+/8PaRY53VDdL+1HobpcGrvc/4P+Uru8v+/6G6r/RddbYeAazvUa+V6\nwbjPM6/XwtlCHmflCdqdDqeiIqIkSbHOWMVHx/ueSw45fP9vtX1c9ZwK5LrhWOO7lt/paPzRygas\neZQ6teykCEeEWp9orV92+2VAjVVjn6U8/Y/yHwp/0DmHzlH6wNr/KHc4Ts0wt1CLBq3D4/XUaPJq\naxoDaSRr+2Pr9MZdkpwRTknSSc/JBs3V1Pk1M/f0009rwYIFGjVqlLp06eLbFehwOJSZmRmKOuvN\npMOspqrt8HLZjrImvXvexMxVtuVtU/a6bJ30nFR0RLTSL23Yvc+NkamPt6m5mzq3x12jGXzjgzf0\n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\n97//XRdccIFycnLUs2dPffjhh2e9vlHN3KpVq3TDDTdIkm688UatXLkyzBWFRmRkpDE/5E/XoUMH\nNWvWTJIUFRV11r9qmoqIiFPf0kePHlViYmIYqwmtrKwsI9/qb+XKlUpNTdXEiRPDXUrIrFq1SrGx\nsbr55ps1bNgwHTx4MNwlhczJkye1Zs0aDRgwINylhERiYqJKS0slVb7tZ7t27cJcUWjs2rVLvXv3\nliRdcsklWr58+Vmvb1QzV1RU5DvdSUJCggoLC8NcEUKhoKBA//znP3XzzTeHu5SQ2Lhxoy6//HK9\n/PLLuuuuu8JdTkhU7ZW74447wl1KSHXq1Ek7d+7U8uXLdejQoZ/8672pOHjwoPLy8rRkyRKNGTNG\nU6dODXdJIfP5559r0KBB4S4jZJKSktShQwf17NlTDz30kO6///5wlxQSF154oXJyciRVPuZFRUVn\nvb4tm7mXX35Zl112mWJiYjR69OhqXyssLNTQoUMVFxen5ORkZWVl+b7WqlUr3/nsiouL1bp165DW\nbVWguU9nx70WVnIfPXpUI0eO1N/+9jdb7Zmzkrl3795avXq1nn32WU2fPj2UZVsWaO4FCxbYeq9c\noLmjo6MVGxsrSRo2bJg2btwY0rqtCjR3YmKi+vfvr8jISF177bXatGlTqEsPmNWf44sWLdJtt90W\nqnIbTKC5V6xYoYqKCm3dulXvv/++HnvssVCXbkmguYcMGaKYmBilp6fr+PHj6tix41nXseU0eOfO\nnTVp0iQtXbpUP/74Y7WvjRs3TjExMTp06JDWr1+vm266Sb1799aFF16oq666SrNmzVJGRoaWLl2q\nq6++OkwJAhNo7tPZcWYu0NwVFRW68847NWXKFHXr1i1M1Qcm0Mzl5eWKioqSVLn3uaysLBzlByzQ\n3Fu2bNH69eu1YMEC7dixQw8//HBI3re5oQSau7S0VHFxcZKk5cuX62c/+1k4yg9YoLn79u2rF154\nQZK0YcMGXXDBBeEoPyBWfo6Xl5dr7dq1vrfCtJNAcxcXF/texNWmTRsVFxeHo/yAWXm8Z86cKUma\nNm2a0tPTz76Q18aefvpp76hRo3yfl5aWeqOjo707duzwbRs5cqT3P/7jP3yfP/74494BAwZ4R4wY\n4S0vLw9pvQ0lkNyDBw/2durUyXvllVd6586dG9J6G0p9c8+bN8/bpk0bb1pamjctLc377rvvhrxm\nq+qbefXq1d7U1FTvwIEDvddff713z549Ia+5IQTyHK/St2/fkNQYDPXN/cknn3h/8YtfeAcMGOC9\n5557vG63O+Q1N4RAHu9XXnnFm5qa6k1LS/Pu2rUrpPU2hEAyf/rpp96HHnoopHU2tPrmLi8v9/76\n17/2pqameq+44grvqlWrQl5zQ6hv7gMHDngHDhzoTU9P986YMeMn79+We+aqeM/Yy7R9+3ZFRkYq\nJSXFt613795yuVy+z//zP/8zVOUFTSC5P/nkk1CVFzT1zZ2RkWH7E0/XN3O/fv20bNmyUJYYFIE8\nx6usWbMm2OUFTX1zDx48WIMHDw5liUERyOP9wAMP6IEHHghViQ0ukMw33nijbrzxxlCVGBT1zR0Z\nGalFixaFssSgqG/uDh06+Gbm/GHLmbkqZ87HlJaWKiEhodq2+Ph4lZSUhLKsoCN3JRNym5hZIncV\ncp/S1HKbmFkid5WGzm3rZu7MTjcuLs73AocqxcXFvlewNhXkrmRCbhMzS+SuQu5TmlpuEzNL5K7S\n0Llt3cyd2el2795dFRUVysvL823buHGjLrroolCXFlTkrmRCbhMzS+SuQu6mm9vEzBK5qzR0bls2\nc263WydOnFBFRYXcbrfKysrkdrvVokULDRs2TJMnT9bx48f1xRdfaPHixbafm6pCbnNym5hZIje5\nm35uEzNL5A56bmuvzwiPKVOmeB0OR7XLtGnTvF6v11tYWOi99dZbvS1atPB27drVm5WVFeZqGw65\nzcltYmavl9zkbvq5Tczs9ZI72LkdXq8NTzwGAAAASTY9zAoAAIBKNHMAAAA2RjMHAABgYzRzAAAA\nNkYzBwAAYGM0cwAAADZGMwcAAGBjNHMAAAA2RjMHAGcYNWqUJk2a1KD3ef/99+vZZ59t0PsEAEmK\nDHcBANDYOByOGm+MbdWrr77aoPcHAFXYMwcAteCdDgHYBc0cgEbl+eef17nnnquEhAT17NlTOTk5\nkqQ1a9boyiuvVGJiojp16qTx48ervLzcd7uIiAi9+uqr6tatmxISEjR58mTt3LlTV155pVq1aqU7\n77zTd32Xy6Vzzz1XM2bMULt27XTeeedp4cKFdda0ZMkS9enTR4mJierfv7/+9a9/1XndRx55RO3b\nt1fLli118cUXa/PmzZKqH7q9+eabFR8f77s4nU7NmzdPkrR161Zdd911atOmjXr27KlFixbVuVZa\nWpomT56sq6++WgkJCbrhhht0+PBhP/+nATQVNHMAGo1t27bplVde0dq1a3X06FF99tlnSk5OliRF\nRkbqxRdf1OHDh7Vq1SplZ2frL3/5S7Xbf/bZZ1q/fr2+/PJLPf/88xozZoyysrK0e/du/etf/1JW\nVpbvugcPHtThw4e1f/9+/e1vf9PYsWO1Y8eOGjWtX79e9957r+bMmaPCwkLdd999+tWvfqWTJ0/W\nuO7SpUu1YsUK7dixQ8XFxVq0aJFat24tqfqh28WLF6ukpEQlJSV677331LFjR6Wnp+vYsWO67rrr\nNGLECH3//fd655139MADD2jLli11/p9lZWVp7ty5OnTokE6ePKmZM2fW+/8dgL3RzAFoNJxOp8rK\nyrRp0yaVl5crKSlJ559/viTp0ksvVb9+/RQREaGuXbtq7NixWrZsWbXb/+53v1NcXJwuvPBC/fzn\nP9fgwYOVnJyshIQEDR48WOvXr692/enTpysqKkqpqam66aab9O677/q+VtV4vf7667rvvvvUt29f\nORwOjRw5Us2aNdOXX35Zo/7o6GiVlJRoy5Yt8ng86tGjhzp06OD7+pmHbrdv365Ro0bpvffeU+fO\nnbVkyRKdd955uueeexQREaE+ffpo2LBhde6dczgcGj16tFJSUhQTE6Pbb79dGzZsqMf/OICmgGYO\nQKORkpKi2bNna+rUqWrfvr3uuusuHThwQFJl4zNkyBB17NhRLVu21MSJE2scUmzfvr3v49jY2Gqf\nx8TEqLS01Pd5YmKiYmNjfZ937drVt9bpCgoK9MILLygxMdF32bt3b63XHThwoB588EGNGzdO7du3\n13333aeSkpJasxYXF+uWW27Rc889p6uuusq31urVq6uttXDhQh08eLDO/7PTm8XY2NhqGQGYgWYO\nQKNy1113acWKFSooKJDD4dATTzwhqfLUHhdeeKHy8vJUXFys5557Th6Px+/7PfPVqUVFRTp+/Ljv\n84KCAnXq1KnG7ZKSkjRx4kQVFRX5LqWlpbrjjjtqXWf8+PFau3atNm/erO3bt+uPf/xjjet4PB4N\nHz5c6enp+s1vflNtrWuuuabaWiUlJXrllVf8zgnAPDRzABqN7du3KycnR2VlZWrWrJliYmLkdDol\nSaWlpYqPj1fz5s21detWv071cfphzdpenTplyhSVl5drxYoV+vjjj3Xbbbf5rlt1/TFjxui1117T\nmjVr5PV6dezYMX388ce17gFbu3atVq9erfLycjVv3rxa/aevP3HiRB0/flyzZ8+udvshQ4Zo+/bt\nWrBggcrLy1VeXq6vvvpKW7du9SsjADPRzAFoNMrKyvTkk0+qXbt26tixo3744QfNmDFDkjRz5kwt\nXLhQCQkJGjt2rO68885qe9tqOy/cmV8//fMOHTr4XhmbkZGh//qv/1L37t1rXPcXv/iF5syZowcf\nfFCtW7dWt27dfK88PdPRo0c1duxYtW7dWsnJyWrbtq0ef/zxGvf5zjvv+A6nVr2iNSsrS3Fxcfrs\ns8/0zjvvqHPnzurYsaOefPLJWl9s4U9GAGZwePmzDoBhXC6XMjIytGfPnnCXAgCWsWcOAADAxmjm\nABiJw5EAmgoOswIAANgYe+YAAABsjGYOAADAxmjmAAAAbIxmDgAAwMZo5gAAAGzs/wDxreAXv8Yx\nVAAAAABJRU5ErkJggg==\n", + "png": "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\n/B8B7aSAfFV1TAAAAABJRU5ErkJggg==\n", "text": [ - "" + "" ] } ], - "prompt_number": 73 + "prompt_number": 18 }, { "cell_type": "markdown", @@ -561,25 +585,28 @@ "input": [ "import timeit\n", "\n", - "def plus_operator():\n", - " return 'a' + str(1) + str(2) \n", + "n = 1000\n", + "\n", + "def plus_operator(n):\n", + " my_str = 'a'\n", + " for i in range(n):\n", + " my_str = my_str + str(1) + str(2)\n", + " return my_str \n", " \n", - "def format_method():\n", - " return 'a{}{}'.format(1,2)\n", + "def format_method(n):\n", + " my_str = 'a'\n", + " for i in range(n):\n", + " my_str = '{}{}{}'.format(my_str,1,2)\n", " \n", - "def binary_operator():\n", - " return 'a%s%s' %(1,2)\n", - "\n", - "%timeit plus_operator()\n", - "%timeit format_method()\n", - "%timeit binary_operator()\n", + "def binary_operator(n):\n", + " my_str = 'a'\n", + " for i in range(n):\n", + " my_str = '%s%s%s' %(my_str,1,2)\n", + " return my_str\n", "\n", - "#\n", - "# Python 3.4.0\n", - "# MacOS X 10.9.2\n", - "# 2.5 GHz Intel Core i5\n", - "# 4 GB 1600 Mhz DDR3\n", - "#" + "%timeit plus_operator(n)\n", + "%timeit format_method(n)\n", + "%timeit binary_operator(n)" ], "language": "python", "metadata": {}, @@ -588,8 +615,8 @@ "output_type": "stream", "stream": "stdout", "text": [ - "1000000 loops, best of 3: 764 ns per loop\n", - "1000000 loops, best of 3: 494 ns per loop" + "1000 loops, best of 3: 869 \u00b5s per loop\n", + "1000 loops, best of 3: 686 \u00b5s per loop" ] }, { @@ -597,7 +624,7 @@ "stream": "stdout", "text": [ "\n", - "10000000 loops, best of 3: 79.3 ns per loop" + "1000 loops, best of 3: 445 \u00b5s per loop" ] }, { @@ -608,7 +635,88 @@ ] } ], - "prompt_number": 17 + "prompt_number": 21 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "funcs = ['plus_operator', 'format_method', 'binary_operator']\n", + "\n", + "orders_n = [10**n for n in range(1, 5)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " for f in funcs:\n", + " times_n[f].append(min(timeit.Timer('%s(n)' %f, \n", + " 'from __main__ import %s, n' %f)\n", + " .repeat(repeat=3, number=1000)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 23 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", + "\n", + "labels = [('plus_operator', 'my_str + str(1) + str(2)'), \n", + " ('format_method', '\"{}{}{}\".format(my_str,1,2)'),\n", + " ('binary_operator', '\"%s%s%s\" %(my_str,1,2)'),\n", + " ] \n", + "\n", + "matplotlib.rcParams.update({'font.size': 12})\n", + "\n", + "fig = plt.figure(figsize=(10,8))\n", + "for lb in labels:\n", + " plt.plot(orders_n, times_n[lb[0]], \n", + " alpha=0.5, label=lb[1], marker='o', lw=3)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time per computation in milliseconds [ms]')\n", + "#plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "plt.title('Performance of different string assembly methods')\n", + "\n", + "max_perf = max( p/b for p,b in zip(times_n['plus_operator'],\n", + " times_n['binary_operator']) )\n", + "min_perf = min( p/b for p,b in zip(times_n['plus_operator'],\n", + " times_n['binary_operator']) )\n", + "\n", + "ftext = '\"%s%s%s\" %(my_str,1,2) is {:.2f}x to'\\\n", + " '{:.2f}x faster than my_str + str(1) + str(2)'\\\n", + " .format(min_perf, max_perf)\n", + "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nw5SQkEDz588ndXV1atWqFZ/Hy8uL/15V7MzMTOI4jv744w96/PgxFRQUUGZmJunq6tKMGTPo1q1b\nlJiYSLNnzyZtbW3KysoiIuL3T6dOnSg8PJxSUlIoKyuLxo0bR7a2tnTq1ClKTU2lv//+mzQ0NGjb\ntm2C/a2rq0tbt26le/fu0caNG4njOP6YePr0KZmYmNCCBQvo8ePH9PjxYyotLZW4Hdq2bUujR4+m\nO3fuUEpKCv33v/+lI0eOEBFRVlYWycrK0oYNG/g41dV9x44dJCsry8cuz+fo6EiRkZEUHx9PAwYM\nIBMTEyopKSEiovv375OSkhJNnjyZ7ty5Q6GhodShQwfiOI52795d5bFQ03FaXFxMmpqaNG/ePEpK\nSqKkpCQ6ePAgnTt3joiI/vOf/5C6ujodOXKEMjIyKCYmhtavX08FBQVERBQaGkrKysrk7+9PSUlJ\ndOXKFerZsyc5OjrydRg3bhypq6uTh4cHxcfH07///kuKiorUr18/GjduHMXHx9PRo0dJSUmJNm3a\nxJdzdHQkdXV1mjJlCl9OLBbT3LlzBbF79+7Nf7ewsCAfHx/BNujevTvNmDGjym3k5eVFKioqNHjw\nYLp58yadPXuWmjZtSn369KGBAwfSjRs3KDIyknR1dWnhwoWC/VbdOSw3N5ccHBxoxIgR/HFRVFRE\nKSkpxHEcmZqaUkhICCUnJ9OiRYtIVlaWEhMTiYiorKyM7O3tqX379nT+/Hm6efMmDR8+nDQ1Nflz\nw4MHD0hZWZkmTJhAd+7coVOnTlHbtm0Fx0RN+49pOFjHjnnvKp5w4+LiyNTUlLp06UJEREZGRrR5\n82ZBmbNnzxLHcfT8+XMienNiNzc3rxTby8uLzMzM+O+vXr0iBQUFwS8FIiJXV1dydnbmv3McR5Mm\nTRLk2bFjB3EcR7GxsXzab7/9RhzH0fXr1/m0tWvXko6OTrVtHjp0KE2ePJn/7ujoSO3atRPkmT59\nOr8NiIiaN29Os2fPlhjv1atXpKysTCdOnBCk79y5kzQ0NKqsx88//0zNmzen4uJiPi02NpY4jqOI\niAgiIv6Xy/nz56uMk5eXR4qKirR161ZBup2dXaWO3dv7o6rYFTshXl5e1LlzZ0GesrIyatmyJa1b\nt46I/rd/IiMj+Tz37t0jkUhECQkJgrI+Pj6C7c1xHM2ZM0eQp02bNvTjjz/y383MzCp1BCRp0qQJ\n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\nAXyY+NChQ5BKpbjnnntw6NAh9THN75G219b2/dT1HRuqasLWrVvVfd22bRteeeUV9WPNoA7gC++u\nXLmCtWvXIikpCYGBgZDL5Vqvravvmt599118+eWX+PHHHwV/t0O9JzKxMAbk5wPvvw/89JMwqJs7\nF9iyBdi4EXByAiDpBnP82WivPW6B3XvvvYdly5bB3NxcnSHo09jYiDvvvBPW1tbw9PTE3/72N63X\nGIsbvKenB7t371avouvs7FTPu+jo6IBSqURRURGWL1+O559/HuvWrUNubq7gGs899xxeffVVmJqa\nque09Z0PANeuXYOXlxcef/xx7Ny5c9Dqs2PHjmHFihXw9fUVrH4UiUTo7OxEaWkprK2tcd999+HP\nf/4zzp8/P+z3+fvf/179r9KBfWxvbwfA54bcuHFj2Nfts337dhw8eBA5OTn4zW9+M+RzdX0etra2\nt1xN/M033wyam9T3A1zzB3lcXJz62tnZ2bjvvvvwz3/+E0FBQYOuW1lZOWhupab29nbU1tYiMjIS\ne/fuxeLFi5Gfn6/z+bcKFENCQmBlZaWev5eeng5HR0c4ODjc8r1t2bIFjz/+OI4cOYKNGzeq/x4H\nsrW1RWdnp3o1tI2NDYKCgnD06FEAwM8//4y8vDyEhYUB4EFJTk4OvvnmG5iamurs91CfZWNjozro\nSElJweXLl9VzTs+ePYv3338fFy9eRF1dHT788MMhP58+LS0t6tXsH3/8sfqXan19PTo6OrBu3Trs\n378fM2bMQHFxsdb3HRERIZhXV1FRoZ6ndiv63JcD++rq6gqxWIzLly8jIyNDr/MMMVbfPUMVFBTA\n398fO3fuxIMPPqieG2hra6v1/h1I188nXd+xyspKQcZvKLf6nt64cQMikQi//vWvceDAAdTV1aGp\nqQm2trZa59hq9ltzHumHH36Ijz76CCdOnNA6h3Y4fSfjo6IC+OQT4O9/BwbuXGhnB9x9N/Doo4CH\nB28rKCzAByc+gEwkM9rrj9tQ7Ny5c7F7924kJCSgSyM/uX37dpibm6O2thYXLlzAhg0b1OURBrrV\nF84Y3nzzTTz66KOwt7cHwIcmly1bBjMzM3z88cdQKpXYsmULmpubIRaL4e7uLljc0FeWpC9t/sc/\n/hGPPfYYenp61Bm/d999F6mpqZBKpTA3N8e7776rPr+xsRGHDh1ST8p+8MEHceedd+Lvf/87wsPD\n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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 27 }, { "cell_type": "markdown", @@ -654,14 +762,7 @@ "%timeit string_is_int(an_int)\n", "%timeit string_is_int(no_int)\n", "%timeit an_int.isdigit()\n", - "%timeit no_int.isdigit()\n", - "\n", - "#\n", - "# Python 3.4.0\n", - "# MacOS X 10.9.2\n", - "# 2.5 GHz Intel Core i5\n", - "# 4 GB 1600 Mhz DDR3\n", - "#" + "%timeit no_int.isdigit()" ], "language": "python", "metadata": {}, @@ -670,8 +771,8 @@ "output_type": "stream", "stream": "stdout", "text": [ - "1000000 loops, best of 3: 401 ns per loop\n", - "100000 loops, best of 3: 3.04 \u00b5s per loop" + "1000000 loops, best of 3: 420 ns per loop\n", + "100000 loops, best of 3: 2.83 \u00b5s per loop" ] }, { @@ -679,7 +780,7 @@ "stream": "stdout", "text": [ "\n", - "10000000 loops, best of 3: 92.1 ns per loop" + "10000000 loops, best of 3: 116 ns per loop" ] }, { @@ -687,7 +788,7 @@ "stream": "stdout", "text": [ "\n", - "10000000 loops, best of 3: 96.3 ns per loop" + "10000000 loops, best of 3: 119 ns per loop" ] }, { @@ -698,7 +799,88 @@ ] } ], - "prompt_number": 5 + "prompt_number": 28 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "funcs = ['string_is_int', 'isdigit']\n", + "t1 = '123'\n", + "t2 = '123abc'\n", + "isdigit_method = []\n", + "string_is_int_method = []\n", + "\n", + "for t in [t1,t2]:\n", + " string_is_int_method.append(min(timeit.Timer('string_is_int(t)', \n", + " 'from __main__ import string_is_int, t')\n", + " .repeat(repeat=3, number=1000000)))\n", + " isdigit_method.append(min(timeit.Timer('t.isdigit()', \n", + " 'from __main__ import t')\n", + " .repeat(repeat=3, number=1000000)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 52 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "N = len(isdigit_method)\n", + "ind = np.arange(N) # the x locations for the groups\n", + "width = 0.25 # the width of the bars\n", + "\n", + " \n", + "fig, ax = plt.subplots()\n", + "plt.bar(ind, \n", + " [i for i in string_is_int_method], \n", + " width,\n", + " alpha=0.5,\n", + " color='g',\n", + " label='string_is_int(a_str)')\n", + "\n", + "plt.bar(ind + width, \n", + " [i for i in isdigit_method], \n", + " width,\n", + " alpha=0.5,\n", + " color='b',\n", + " label='a_str.isdigit()')\n", + " \n", + "ax.set_ylabel('time in microseconds')\n", + "ax.set_title('Time to check if a string is an integer')\n", + "ax.set_xticks(ind + width)\n", + "ax.set_xticklabels(['\"%s\"' %t for t in [t1, t2]])\n", + "plt.xlabel('test strings')\n", + "plt.xlim(-0.1,1.6)\n", + "#plt.ylim(0,15)\n", + "plt.legend(loc='upper left')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 90 }, { "cell_type": "markdown", @@ -746,14 +928,7 @@ "%timeit string_is_number(an_int)\n", "%timeit string_is_number(no_int)\n", "%timeit a_float.replace('.','',1).isdigit()\n", - "%timeit no_float.replace('.','',1).isdigit()\n", - "\n", - "#\n", - "# Python 3.4.0\n", - "# MacOS X 10.9.2\n", - "# 2.5 GHz Intel Core i5\n", - "# 4 GB 1600 Mhz DDR3\n", - "#" + "%timeit no_float.replace('.','',1).isdigit()" ], "language": "python", "metadata": {}, @@ -762,8 +937,8 @@ "output_type": "stream", "stream": "stdout", "text": [ - "1000000 loops, best of 3: 400 ns per loop\n", - "1000000 loops, best of 3: 1.15 \u00b5s per loop" + "1000000 loops, best of 3: 418 ns per loop\n", + "1000000 loops, best of 3: 1.28 \u00b5s per loop" ] }, { @@ -771,7 +946,7 @@ "stream": "stdout", "text": [ "\n", - "1000000 loops, best of 3: 452 ns per loop" + "1000000 loops, best of 3: 500 ns per loop" ] }, { @@ -779,7 +954,7 @@ "stream": "stdout", "text": [ "\n", - "1000000 loops, best of 3: 394 ns per loop" + "1000000 loops, best of 3: 427 ns per loop" ] }, { @@ -790,7 +965,90 @@ ] } ], - "prompt_number": 6 + "prompt_number": 91 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "funcs = [\"string_is_number\", \"replace('.','',1).isdigit()\"]\n", + "t1 = '1.234'\n", + "t2 = '123abc'\n", + "isdigit_method = []\n", + "string_is_number_method = []\n", + "\n", + "for t in [t1,t2]:\n", + " string_is_number_method.append(min(timeit.Timer('string_is_number(t)', \n", + " 'from __main__ import string_is_number, t')\n", + " .repeat(repeat=3, number=1000000)))\n", + " isdigit_method.append(min(timeit.Timer(\"t.replace('.','',1).isdigit()\", \n", + " 'from __main__ import t')\n", + " .repeat(repeat=3, number=1000000)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 96 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "N = len(isdigit_method)\n", + "ind = np.arange(N) # the x locations for the groups\n", + "width = 0.25 # the width of the bars\n", + "\n", + " \n", + "fig, ax = plt.subplots()\n", + "\n", + "plt.bar(ind , \n", + " [i for i in isdigit_method], \n", + " width,\n", + " alpha=0.5,\n", + " color='b',\n", + " label=\"a_str.replace('.','',1).isdigit()\")\n", + "\n", + "plt.bar(ind + width, \n", + " [i for i in string_is_number_method], \n", + " width,\n", + " alpha=0.5,\n", + " color='g',\n", + " label='string_is_number(a_str)')\n", + "\n", + " \n", + "ax.set_ylabel('time in microseconds')\n", + "ax.set_title('Time to check if a string is a number')\n", + "ax.set_xticks(ind + width)\n", + "ax.set_xticklabels(['\"%s\"' %t for t in [t2, t1]])\n", + "plt.xlabel('test strings')\n", + "plt.xlim(-0.1,1.6)\n", + "#plt.ylim(0,15)\n", + "plt.legend(loc='upper left')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 98 }, { "cell_type": "markdown", @@ -846,11 +1104,10 @@ "collapsed": false, "input": [ "import timeit\n", + "import copy\n", "\n", "def reverse_func(my_list):\n", - " new_list = my_list[:]\n", - " new_list.reverse()\n", - " return new_list\n", + " return copy.deepcopy(my_list).reverse()\n", " \n", "def reversed_func(my_list):\n", " return list(reversed(my_list))\n", @@ -858,15 +1115,12 @@ "def reverse_slizing(my_list):\n", " return my_list[::-1]\n", "\n", - "%timeit reverse_func([1,2,3,4,5])\n", - "%timeit reversed_func([1,2,3,4,5])\n", - "%timeit reverse_slizing([1,2,3,4,5])\n", + "n = 10\n", + "test_list = list([i for i in range(n)])\n", "\n", - "# Python 3.4.0\n", - "# MacOS X 10.9.2\n", - "# 2.4 GHz Intel Core Duo\n", - "# 8 GB 1067 Mhz DDR3\n", - "#" + "%timeit reverse_func(test_list)\n", + "%timeit reversed_func(test_list)\n", + "%timeit reverse_slizing(test_list)" ], "language": "python", "metadata": {}, @@ -875,8 +1129,8 @@ "output_type": "stream", "stream": "stdout", "text": [ - "1000000 loops, best of 3: 930 ns per loop\n", - "1000000 loops, best of 3: 1.89 \u00b5s per loop" + "100000 loops, best of 3: 13.8 \u00b5s per loop\n", + "1000000 loops, best of 3: 1.44 \u00b5s per loop" ] }, { @@ -884,7 +1138,7 @@ "stream": "stdout", "text": [ "\n", - "1000000 loops, best of 3: 775 ns per loop" + "1000000 loops, best of 3: 330 ns per loop" ] }, { @@ -895,7 +1149,91 @@ ] } ], - "prompt_number": 1 + "prompt_number": 104 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "funcs = ['reverse_func', 'reversed_func',\n", + " 'reverse_slizing']\n", + "\n", + "orders_n = [10**n for n in range(1, 6)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " test_list = list([i for i in range(n)])\n", + " for f in funcs:\n", + " times_n[f].append(min(timeit.Timer('%s(test_list)' %f, \n", + " 'from __main__ import %s, test_list' %f)\n", + " .repeat(repeat=3, number=1000)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 117 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", + "\n", + "labels = [('reverse_func', 'copy.deepcopy(my_list).reverse()'), \n", + " ('reversed_func', 'list(reversed(my_list))'),\n", + " ('reverse_slizing', 'my_list[::-1]'),\n", + " ] \n", + "\n", + "matplotlib.rcParams.update({'font.size': 12})\n", + "\n", + "fig = plt.figure(figsize=(10,8))\n", + "for lb in labels:\n", + " plt.plot(orders_n, times_n[lb[0]], \n", + " alpha=0.5, label=lb[1], marker='o', lw=3)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time per computation in milliseconds [ms]')\n", + "#plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "plt.title('Performance of different list reversing approaches')\n", + "\n", + "max_perf = max( f/s for f,s in zip(times_n['reverse_func'],\n", + " times_n['reverse_slizing']) )\n", + "min_perf = min( f/s for f,s in zip(times_n['reverse_func'],\n", + " times_n['reverse_slizing']) )\n", + "\n", + "ftext = 'my_list[::-1] is {:.2f}x to '\\\n", + " '{:.2f}x faster than copy.deepcopy(my_list).reverse()'\\\n", + " .format(min_perf, max_perf)\n", + "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", + "\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\naWmIiooynh86vFtaWoo1a9Zg7969iI2NxUcffYTk5GSsXr0acrkcmZmZWLFixS177WQyGR5//HGk\npKRApVLhkUcewZkzZ6z4iRORu2FiR0ROIyUlBa+//jq2bNmCyMhIrFy5Ejdu3AAgJkHLly9HdHQ0\nAgMD8cILLwwbdoyMjDR+7e3tbfJYpVKhs7PT+Dg4OBje3t7Gx4mJicZ7DVZdXY1XXnkFwcHBxn/X\nrl0ze212djaefvpprF+/HpGRkXjyySfR0dFh9ntta2vDgw8+iF/96le4++67jfc6efKkyb327NmD\nurq6W/7MBieO3t7eJt8jEY09TOyIyKmsXLkSR44cQXV1NWQyGf7rv/4LgFguZNKkSSgvL0dbWxt+\n9atfwWAwWPy6Q1e5trS0oLu72/i4uroaMTExw56XkJCAF154AS0tLcZ/nZ2d+M53vmP2Phs2bMDp\n06dx8eJFlJaW4n/+53+GXWMwGPDd734Xubm5+MEPfmByr8WLF5vcq6OjAzt27LD4+ySisY2JHRE5\njdLSUuTn50Oj0cDLywsqlQoKhQIA0NnZCX9/f/j4+ODy5csWlQ8ZPPRpbpXr5s2bodVqceTIEXz8\n8cf49re/bby2//onnngCf/jDH1BYWAhBENDV1YWPP/7YbM/Y6dOncfLkSWi1Wvj4+JjEP/j+L7zw\nArq7u/H666+bPH/58uUoLS3F7t27odVqodVqcerUKVy+fNmi75GIiIkdETkNjUaD559/HuHh4YiO\njkZjYyNeeuklAMDLL7+MPXv2ICAgAOvWrcOjjz5q0gtnru7c0PODH0dFRRlX2K5atQp//OMfkZqa\nOuzamTNnYufOnXj66acREhKCCRMmGFewDtXe3o5169YhJCQESUlJCAsLw3/+538Oe83333/fOOTa\nvzI2Ly8Pfn5++Oyzz/D+++8jNjYW0dHReP75580u1LDkeySisUcm8OMeEY0xarUaq1atwtWrVx0d\nChGRTbHHjoiIiMhNMLEjojGJQ5ZE5I44FEtERETkJthjR0REROQmmNgRERERuQkmdkRERERugokd\nERERkZtgYkdERETkJv4/dDERlOXTSFkAAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 118 }, { "cell_type": "markdown", @@ -941,62 +1279,139 @@ "cell_type": "code", "collapsed": false, "input": [ - "import timeit\n", + "import timeit\n", + "\n", + "def cond_loop(n):\n", + " even_nums = []\n", + " for i in range(n):\n", + " if i % 2 == 0:\n", + " even_nums.append(i)\n", + " return even_nums\n", + "\n", + "def list_compr(n):\n", + " even_nums = [i for i in range(n) if i % 2 == 0]\n", + " return even_nums\n", + " \n", + "def filter_func(n):\n", + " even_nums = list(filter((lambda x: x % 2 != 0), range(n)))\n", + " return even_nums\n", + "\n", + "%timeit cond_loop(n)\n", + "%timeit list_compr(n)\n", + "%timeit filter_func(n)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "10 loops, best of 3: 18.1 ms per loop\n", + "100 loops, best of 3: 15.3 ms per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "10 loops, best of 3: 22.8 ms per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 119 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "funcs = ['cond_loop', 'list_compr',\n", + " 'filter_func']\n", + "\n", + "orders_n = [10**n for n in range(1, 6)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " test_list = list([i for i in range(n)])\n", + " for f in funcs:\n", + " times_n[f].append(min(timeit.Timer('%s(n)' %f, \n", + " 'from __main__ import %s, n' %f)\n", + " .repeat(repeat=3, number=1000)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 120 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", "\n", - "def cond_loop():\n", - " even_nums = []\n", - " for i in range(100):\n", - " if i % 2 == 0:\n", - " even_nums.append(i)\n", - " return even_nums\n", + "labels = [('cond_loop', 'explicit for-loop'), \n", + " ('list_compr', 'list comprehension'),\n", + " ('filter_func', 'lambda function'),\n", + " ] \n", "\n", - "def list_compr():\n", - " even_nums = [i for i in range(100) if i % 2 == 0]\n", - " return even_nums\n", - " \n", - "def filter_func():\n", - " even_nums = list(filter((lambda x: x % 2 != 0), range(100)))\n", - " return even_nums\n", + "matplotlib.rcParams.update({'font.size': 12})\n", "\n", - "%timeit cond_loop()\n", - "%timeit list_compr()\n", - "%timeit filter_func()\n", + "fig = plt.figure(figsize=(10,8))\n", + "for lb in labels:\n", + " plt.plot(orders_n, times_n[lb[0]], \n", + " alpha=0.5, label=lb[1], marker='o', lw=3)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time per computation in milliseconds [ms]')\n", + "#plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "plt.title('Performance of different conditional list creation methods')\n", "\n", - "#\n", - "# Python 3.4.0\n", - "# MacOS X 10.9.2\n", - "# 2.5 GHz Intel Core i5\n", - "# 4 GB 1600 Mhz DDR3\n", - "#" + "max_perf = max( f/c for f,c in zip(times_n['filter_func'],\n", + " times_n['cond_loop']) )\n", + "min_perf = min( f/c for f,c in zip(times_n['filter_func'],\n", + " times_n['cond_loop']) )\n", + "\n", + "ftext = 'the list comprehension is {:.2f}x to '\\\n", + " '{:.2f}x faster than the lambda function'\\\n", + " .format(min_perf, max_perf)\n", + "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", + "\n", + "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { - "output_type": "stream", - "stream": "stdout", - "text": [ - "100000 loops, best of 3: 14.4 \u00b5s per loop\n", - "100000 loops, best of 3: 12 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "10000 loops, best of 3: 23.9 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", + "metadata": {}, + "output_type": "display_data", + "png": "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\nLsXWrVvR0tKi9/x0X0Pz9eXLl5GQkICYmBjEx8djz549WLBgAaKjoyGTybBkyRK9yROapchVq1Zh\n2bJleOCBBwCwZc9du3Zh9erVWLp0KcRiMV5++WW953Cn6xKJRFi4cKH23Hbs2IFt27bpPW7Xrl14\n7LHHkJSUhOjoaMTGxuLkyZMGr1vz+D//8z8RHR2NuLg4REdHIzExUTCw03euKpUKTzzxhHYZua2t\nTW/26v/93//h888/R3R0NHbt2oXPP/9cu+wymZ+B5ntvv/02oqKisHz5crzzzjv43e9+p/eYBx98\nEAEBARCJRJDJZNi6dav2e8uWLUNbWxsA4Mknn8T4+Di+/e1va8uaaFrbPf7449rre+2115CRkQGx\nWIy6ujq88MIL+Oqrr+Di4oKvvvoKzz77rN777ZlnnsGrr76qTZ545plntGVHli9fjpiYGL3Zom1t\nbdiyZYt2c/nRo0e1A+SJ1/CPf/wD/v7++Prrr7F37174+/tr//v9/Oc/R2NjI6KiohAfH4/du3cj\nJSVlUteg+/N3dHTEq6++iri4OMTGxsLe3n7Sv0NSqRSZmZn48ssvER0djaioKPzkJz/RzgTf7TPk\npz/9KZ544gksX74cFRUVeu8jTeyNN97Ar371Kyxbtgz/+te/bltuNubz6m6fAbokEoneaxsbG7vt\nubrn+fLLL+P9999HdHQ0Dhw4gKSkpDue551+Vzw8PBAbG4uEhATs2bMHixcvhpWVFf7xj3/gxz/+\nsfZ+0gx4lyxZgu9+97uIjIzEqlWrEBISYtTvIgD8+te/RnZ2NpYuXYrf//732m0gdzvPzz//HCdO\nnMCSJUsQExODDz/8EACbGf/iiy+0yRO67xcVFYU33ngDmzZtQnR0NK5cuaJNMrnT5xuZQRUVwDvv\nABcu8DFrazbd9oMfsB5fEyiVQFER8N57gM7f1vDyAp5+mi29WlqydmAl9SV499y7aOjjk33cbd3x\n5LInsTV8Kywlhld/zG3GWop98803EIvFyM3NxcjICD766CPt9zTLOX//+99x8eJFbN++HSdPnkRk\nZKT2OU888QR+9atfYfHixXpfn1qKTd769evxH//xH4LBHCGEEDJrDQ6yzhET6yQuXAhs387q0+nR\n2Mgm93SrMkkkrBXYmjXsawBoHWjFQflBtA22aZ8nFomRGJCIxMBESMWm29E251uKaWabzp07Jyj7\n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\n4gAAAABJRU5ErkJggg==\n", "text": [ - "\n" + "" ] } ], - "prompt_number": 14 + "prompt_number": 122 }, { "cell_type": "markdown", @@ -1066,6 +1481,7 @@ "\n", "\n", "def add_element_check1(elements):\n", + " \"\"\"if ele not in dict (v1)\"\"\"\n", " d = dict()\n", " for e in elements:\n", " if e not in d:\n", @@ -1075,6 +1491,7 @@ " return d\n", " \n", "def add_element_check2(elements):\n", + " \"\"\"if ele not in dict (v2)\"\"\"\n", " d = dict()\n", " for e in elements:\n", " if e not in d:\n", @@ -1083,6 +1500,7 @@ " return d\n", " \n", "def add_element_except(elements):\n", + " \"\"\"try-except\"\"\"\n", " d = dict()\n", " for e in elements:\n", " try:\n", @@ -1092,12 +1510,14 @@ " return d\n", " \n", "def add_element_defaultdict(elements):\n", + " \"\"\"defaultdict\"\"\"\n", " d = defaultdict(int)\n", " for e in elements:\n", " d[e] += 1\n", " return d\n", "\n", "def add_element_get(elements):\n", + " \"\"\".get() method\"\"\"\n", " d = dict()\n", " for e in elements:\n", " d[e] = d.get(e, 1) + 1\n", @@ -1138,7 +1558,7 @@ "stream": "stdout", "text": [ "Results for 100 integers in range 1-10\n", - "10000 loops, best of 3: 28 \u00b5s per loop" + "100000 loops, best of 3: 16.8 \u00b5s per loop" ] }, { @@ -1146,7 +1566,7 @@ "stream": "stdout", "text": [ "\n", - "10000 loops, best of 3: 26.2 \u00b5s per loop" + "100000 loops, best of 3: 18.2 \u00b5s per loop" ] }, { @@ -1154,7 +1574,7 @@ "stream": "stdout", "text": [ "\n", - "10000 loops, best of 3: 26.5 \u00b5s per loop" + "100000 loops, best of 3: 17.1 \u00b5s per loop" ] }, { @@ -1162,7 +1582,7 @@ "stream": "stdout", "text": [ "\n", - "10000 loops, best of 3: 22.8 \u00b5s per loop" + "100000 loops, best of 3: 14.7 \u00b5s per loop" ] }, { @@ -1170,7 +1590,7 @@ "stream": "stdout", "text": [ "\n", - "10000 loops, best of 3: 33.3 \u00b5s per loop" + "10000 loops, best of 3: 20.8 \u00b5s per loop" ] }, { @@ -1180,7 +1600,7 @@ "\n", "\n", "Results for 1000 integers in range 1-5\n", - "1000 loops, best of 3: 242 \u00b5s per loop" + "10000 loops, best of 3: 161 \u00b5s per loop" ] }, { @@ -1188,7 +1608,7 @@ "stream": "stdout", "text": [ "\n", - "1000 loops, best of 3: 239 \u00b5s per loop" + "10000 loops, best of 3: 166 \u00b5s per loop" ] }, { @@ -1196,7 +1616,7 @@ "stream": "stdout", "text": [ "\n", - "1000 loops, best of 3: 203 \u00b5s per loop" + "10000 loops, best of 3: 128 \u00b5s per loop" ] }, { @@ -1204,7 +1624,7 @@ "stream": "stdout", "text": [ "\n", - "10000 loops, best of 3: 184 \u00b5s per loop" + "10000 loops, best of 3: 114 \u00b5s per loop" ] }, { @@ -1212,7 +1632,7 @@ "stream": "stdout", "text": [ "\n", - "1000 loops, best of 3: 350 \u00b5s per loop" + "1000 loops, best of 3: 197 \u00b5s per loop" ] }, { @@ -1222,7 +1642,7 @@ "\n", "\n", "Results for 1000 integers in range 1-1000\n", - "1000 loops, best of 3: 262 \u00b5s per loop" + "10000 loops, best of 3: 166 \u00b5s per loop" ] }, { @@ -1230,7 +1650,7 @@ "stream": "stdout", "text": [ "\n", - "1000 loops, best of 3: 370 \u00b5s per loop" + "1000 loops, best of 3: 240 \u00b5s per loop" ] }, { @@ -1238,7 +1658,7 @@ "stream": "stdout", "text": [ "\n", - "1000 loops, best of 3: 502 \u00b5s per loop" + "1000 loops, best of 3: 354 \u00b5s per loop" ] }, { @@ -1246,7 +1666,7 @@ "stream": "stdout", "text": [ "\n", - "1000 loops, best of 3: 422 \u00b5s per loop" + "1000 loops, best of 3: 281 \u00b5s per loop" ] }, { @@ -1254,7 +1674,7 @@ "stream": "stdout", "text": [ "\n", - "1000 loops, best of 3: 373 \u00b5s per loop" + "1000 loops, best of 3: 234 \u00b5s per loop" ] }, { @@ -1265,7 +1685,84 @@ ] } ], - "prompt_number": 25 + "prompt_number": 123 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "funcs = ['add_element_check1', 'add_element_check2',\n", + " 'add_element_except', 'add_element_defaultdict',\n", + " 'add_element_get']\n", + "\n", + "orders_n = [10**n for n in range(1, 6)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " elements = [random.randrange(1, 100) for i in range(n)]\n", + " for f in funcs:\n", + " times_n[f].append(min(timeit.Timer('%s(elements)' %f, \n", + " 'from __main__ import %s, elements' %f)\n", + " .repeat(repeat=3, number=1000)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 136 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", + "\n", + "labels = [('add_element_check1', 'if ele not in dict (v1)'), \n", + " ('add_element_check2', 'if ele not in dict (v2)'),\n", + " ('add_element_except', 'try-except'),\n", + " ('add_element_defaultdict', 'defaultdict'),\n", + " ('add_element_get', '.get() method')\n", + " ] \n", + "\n", + "matplotlib.rcParams.update({'font.size': 12})\n", + "\n", + "fig = plt.figure(figsize=(10,10))\n", + "for lb in labels:\n", + " plt.plot(orders_n, times_n[lb[0]], \n", + " alpha=0.5, label=lb[1], marker='o', lw=3)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time per computation in milliseconds [ms]')\n", + "#plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "plt.title('Performance of different methods to count elements in a dictionary')\n", + "\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nSk1NpWvXrlFISAiJoki9e/emc+fOUWxsLDk5OVGvXr3Iw8OD/vrrL7p06RK1atWKhg8fLov1zz//\n0Jo1a+jvv/+m1NRUCg4OlnVAnq+/qakpffrpp5SYmEi///47NWrUiBYuXCjLs2nTJtLS0qKvvvpK\nto0//vijbLsCAgKoRYsWtHfvXkpPT6f//e9/ZGNjIxejvNu3b5ORkRH5+flRXFwcRUdHU7t27cjD\nw4OISjtrMTExJAgCHThwgLKzsyt0RsrMmDGDJBIJ7d+/nxITE+mzzz4jY2NjcnJykuUJCAiQva4s\ndlZWlqyjlZ2dTQUFBZSVlUUWFhY0ZcoUiouLo6SkJJo2bRo1btyYcnNziYhk70/Xrl0pMjKS0tLS\nKDc3l8aOHUtubm70xx9/UHp6Om3fvp1MTU3p559/lnu/LSwsaOPGjZSamkpr1qwhQRBkbeLevXtk\nZ2dHs2fPpuzsbMrOziapVKpwP4wdO5aMjY3J39+fEhIS6MCBA6Srq0tvvvkmjR07lhISEujgwYOk\np6dHP/30k9y+qer9q6wOZR/Ebm5udOTIEUpOTqZx48aRsbGxrNP/5MkTsrGxIW9vb4qNjaULFy5Q\n7969ydHRUfZ+xsbGkoaGBs2bN4+SkpJo9+7dZGtrK/eBtHz5crK2tqaoqCjKzMykmJgYWrVqVaXt\nKzc3lzQ1NWn16tWyOhMRXb58mTQ0NGTt/dChQ2RjYyN3TJdXUlJCnp6e5ODgQPv27aO0tDSKjo6W\nvY/KbKMqHbuq9ufFixdJEATas2eP3LmlsvZQXfsr37FTts1aWlpSWFgYpaSk0JQpU8jAwID69etH\nmzdvppSUFJo2bRoZGBjQ3bt3ZfuodevWNGzYMLpw4QKlpKRQUFAQ6ejo0NWrV194+wcPHkw+Pj50\n+fJl2ZeObdu2VbpvKuvY2dvb086dOyklJYXmzZtHmpqalJSUVGmcrKws+uabb+jixYuUnp5O4eHh\nZGhoSCEhIZWWKSkpoQ4dOlCXLl3o3LlzdOnSJfLx8SFjY2OaOHGiLJ+Xl5fc60WLFpGhoSGtWbOG\nrl27RpcuXZJ9CazsGC2/ncq2VVEUydPTk6KjoykhIYH69+9PdnZ2si97JSUlNH/+fDp37hxlZGTQ\n/v37qWnTphQQECCrb0BAAOnr65OXlxedO3eOrl27Ro8ePaJWrVrR4sWL5fZJr169aMqUKZXus/qO\n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\n7AAAABziG6SlHxRk0gPUAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 139 }, { "cell_type": "markdown", @@ -1318,19 +1815,12 @@ "collapsed": false, "input": [ "import timeit\n", - "n = 1000\n", - "\n", - "#\n", - "# Python 3.4.0\n", - "# MacOS X 10.9.2\n", - "# 2.5 GHz Intel Core i5\n", - "# 4 GB 1600 Mhz DDR3\n", - "#" + "n = 1000" ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 19 + "prompt_number": 140 }, { "cell_type": "markdown", @@ -1355,24 +1845,15 @@ " for i in range(n):\n", " if i % 3 == 0:\n", " a_set.add(i)\n", - " return a_set" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 20 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ + " return a_set\n", + "\n", "def set_compr(n):\n", " return {i for i in range(n) if i % 3 == 0}" ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 21 + "prompt_number": 141 }, { "cell_type": "code", @@ -1388,8 +1869,8 @@ "output_type": "stream", "stream": "stdout", "text": [ - "10000 loops, best of 3: 136 \u00b5s per loop\n", - "10000 loops, best of 3: 113 \u00b5s per loop" + "1000 loops, best of 3: 165 \u00b5s per loop\n", + "10000 loops, best of 3: 145 \u00b5s per loop" ] }, { @@ -1400,7 +1881,7 @@ ] } ], - "prompt_number": 22 + "prompt_number": 142 }, { "cell_type": "markdown", @@ -1430,7 +1911,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 23 + "prompt_number": 143 }, { "cell_type": "code", @@ -1442,7 +1923,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 24 + "prompt_number": 144 }, { "cell_type": "code", @@ -1458,8 +1939,8 @@ "output_type": "stream", "stream": "stdout", "text": [ - "10000 loops, best of 3: 129 \u00b5s per loop\n", - "10000 loops, best of 3: 111 \u00b5s per loop" + "10000 loops, best of 3: 164 \u00b5s per loop\n", + "10000 loops, best of 3: 143 \u00b5s per loop" ] }, { @@ -1470,7 +1951,86 @@ ] } ], - "prompt_number": 25 + "prompt_number": 145 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "funcs = ['list_loop', 'list_compr']\n", + "orders_n = [10**n for n in range(1, 6)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " for f in funcs:\n", + " times_n[f].append(min(timeit.Timer('%s(n)' %f, \n", + " 'from __main__ import %s, n' %f)\n", + " .repeat(repeat=3, number=1000)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 152 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", + "\n", + "labels = [('list_loop', 'explicit for-loop'), \n", + " ('list_compr', 'list comprehension')]\n", + "\n", + "matplotlib.rcParams.update({'font.size': 12})\n", + "\n", + "fig = plt.figure(figsize=(10,8))\n", + "for lb in labels:\n", + " plt.plot(orders_n, times_n[lb[0]], \n", + " alpha=0.5, label=lb[1], marker='o', lw=3)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time per computation in milliseconds [ms]')\n", + "#plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "plt.title('Performance of explicit for-loops vs. list comprehensions')\n", + "\n", + "max_perf = max( l/c for l,c in zip(times_n['list_loop'],\n", + " times_n['list_compr']) )\n", + "min_perf = min( l/c for l,c in zip(times_n['list_loop'],\n", + " times_n['list_compr']) )\n", + "\n", + "ftext = 'the list comprehension is {:.2f}x to '\\\n", + " '{:.2f}x faster than the explicit for-loop'\\\n", + " .format(min_perf, max_perf)\n", + "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", + "\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAIECAYAAACUvmMzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlcTfn/B/DXvdo3JbK3SEXbvUmFSEm2yDKGkGQNMwZf\n688womHGd8bSkGWIkN1gTNZUN/sWolWFGWuyhBatn98ffe/RrVvdm0tp3s/Ho8ejc87nvD+fz7mf\nc/r0OZ9zLo8xxkAIIYQQQr54/NouACGEEEIIUQzq2BFCCCGE1BPUsSOEEEIIqSeoY0cIIYQQUk9Q\nx44QQgghpJ6gjh0hhBBCSD1BHTvyWRQVFWHcuHFo3Lgx+Hw+zp49W9tF+iIdOHAApqamUFJSwrhx\n42q1LAEBATAzM+OWQ0NDoaysLPP+8qYv6+HDh3B3d4eWlhYaNGhQoxhVMTY2xrJlyxQe90vl6uqK\niRMncst+fn7w8PCoxRJ9WepSe+Lz+di9e3dtF4N8QtSxIxw/Pz/w+Xzw+XwoKyvD2NgYU6ZMwatX\nrz469h9//IE9e/YgPDwcz549Q+fOnRVQ4n+X4uJijBs3Dt7e3nj48CGCgoJqu0jg8Xjc797e3njy\n5InM+5ZPHxYWBj5ftkvS8uXL8eLFC8TFxeHp06eyF1hGPB5Pom7/duWPx9q1a3Hw4EGZ91dSUsKO\nHTs+RdG+CHWpPT179gxfffVVbReDfEJKtV0AUre4uLhg//79KCoqwvXr1zFx4kQ8fPgQ4eHhNYpX\nUFAAFRUVpKamomXLlujUqdNHlU8c79/oyZMnyMnJQd++fdG8efPaLg4AoOz7zdXU1KCmpibzvvKm\nLys1NRUODg4wNTWt0f5iRUVFUFKiy6C8tLW15UrP4/FQH9+F/yW2HwMDg9ouAvnEaMSOSFBWVoaB\ngQFatGgBLy8vTJ8+HSdPnkR+fj4AYO/evRAKhVBXV4eJiQlmzZqF3Nxcbn9XV1dMmDABixYtQosW\nLWBkZAQ3Nzf88MMPuHfvHvh8Ptq0aQMAKCwsxPz589GqVSuoqqrCysoKe/bskSgPn8/H2rVrMXLk\nSOjq6sLX15e7hScSiWBjYwMNDQ306NEDz549Q3R0NIRCIbS0tODh4SExInT//n0MGTIELVu2hKam\nJmxtbREWFiaRn/iWU2BgIJo3bw59fX2MGTMGOTk5Eun27dsHe3t7qKuro3HjxujXrx+ysrK47WvX\nrkW7du2grq4Oc3NzLF++HMXFxVUe+8uXL8PFxQUaGhpo1KgRRo0ahczMTAClty2NjIwAlHa+q7ud\nXVX++/fvh6qqKq5du8al37FjBzQ0NBAfHw/gw6221atXc8dr2LBheP36daV5Sru1Ghsbiz59+qBh\nw4bQ1taGk5MTrl69WiG9SCSCr68vAHCjxpXdaubz+YiKisLWrVsl0j19+hTe3t7Q09ODhoYG3Nzc\nEBsby+0nEonA5/Nx/PhxdO3aFerq6ggJCam0PmW9e/cO/v7+MDAwgJqaGhwcHBARESGRJiUlBZ6e\nntDW1oa2tja8vLyQnp5e4fhERkbCysoK6urq6NSpE+Li4rg0b9++xdixY9G8eXOoqanB0NAQs2bN\nqrRczs7O8Pf3r7C+ffv2+OGHHwAACQkJ6N27N/T09KClpQVLS8sK7V5e5W/FVpWHsbExiouLMXbs\nWPD5/GpvnQcHB8PS0hJqampo2rQphg4dym2r7nN48OAB+Hw+9uzZg969e0NTUxOWlpY4f/48/vnn\nH/Tp0wdaWlqwsrLC+fPnuf3EbSM8PByOjo5QV1eHjY0NoqOjK6SR1n5kOd/z8/Mxffp06Ovro1mz\nZvjPf/5TIU11cYyNjbF48eIq45w/fx7Ozs7Q0dGBjo4OhEIhTp8+zW0vfytW1vPmzJkzcHFxgaam\nJqysrHDy5EmJsi9fvhympqZQU1ODgYEB+vTpg/fv31f5WZNPhBHyP2PGjGEeHh4S61auXMl4PB7L\nzs5m27ZtY3p6eiwsLIzdv3+fnT17ltna2rLRo0dz6bt37860tbXZlClTWFJSEouPj2evXr1is2fP\nZiYmJiwjI4O9ePGCMcbY7Nmzmb6+Pjt48CBLTU1ly5cvZ3w+n0VGRnLxeDwe09fXZ8HBwezevXss\nNTWVbdu2jfH5fObm5sauXr3Kbty4wczMzFjXrl2Zi4sLu3LlCrt16xZr164dGz58OBfrzp07LDg4\nmN2+fZvdu3ePrV27likpKbHo6GiJ8uvq6rL//Oc/LCUlhZ0+fZo1atSILVq0iEuzdetWpqyszH78\n8UeujuvWrePqtXjxYmZkZMSOHDnCHjx4wI4fP84MDQ0lYpT39OlTpq2tzUaNGsXi4+PZ+fPnma2t\nLXNxcWGMMZaXl8euXbvGeDwe++uvv1hGRgYrKCiQGkuW/CdOnMhMTU3Z27dvWUpKCtPW1mYbNmyQ\naAs6Ojps4MCBLD4+nolEImZmZsYGDx4skU/btm255W3btjElJSVuOT4+nmloaLCRI0ey2NhYlp6e\nzvbv388uXbpUIX1BQQELDg5mPB6PZWRksIyMDPb27Vup9Xv27Bnr0qUL8/Hx4dKVlJQwR0dHZmdn\nxy5cuMDu3LnDhg8fzvT09LjPJTo6mvF4PNauXTsWHh7OHjx4wB4/fiw1D2NjY7Zs2TJueejQoczE\nxISdPn2aJScns+nTpzMVFRWWnJzMGGMsNzeXGRoasp49e7IbN26w2NhY5ubmxtq2bct9TuJ2a29v\nz86ePctu377N+vfvz1q2bMny8vIYY4xNmzaNCQQCdvXqVfbw4UN28eJFtmXLFqllZIyx33//nenp\n6bH8/Hxu3ZUrVxiPx2OpqamMMcZsbGzYqFGjWFJSErt//z47ceIECw8PrzSmNK6urmzixIncsp+f\nn8S1oqo8MjMzmZKSEvvtt9+4z7YyP/zwA9PS0mLBwcEsNTWV3bp1i/3000/c9uo+h/v37zMej8dM\nTU3Zn3/+ye7evcsGDx7MWrZsyVxdXdmRI0fY3bt32dChQ1nr1q1ZYWEhY+xD2zAzM2PHjh1jycnJ\nbPz48UxTU5M9ffpUIk3Z9vPo0SOZzjcjIyOmp6fHVqxYwdLS0tj+/fuZsrIyCwkJ4dIoIk5hYSHT\n09Njs2bNYmlpaSwtLY0dOXKEnTt3jovB4/HYrl27GGNMrvNGIBCwU6dOsbS0NDZ27Fimo6PDXr9+\nzRhj7I8//mA6OjosPDycPXz4kN26dYsFBQVx7Zp8XtSxI5wxY8awnj17cssJCQmsTZs2rHPnzoyx\n0ovKpk2bJPaJiYlhPB6PZWVlMcZKO0YWFhYVYpfvBOTk5DBVVVWJzgRjjA0ePJj16NGDW+bxeGzC\nhAkSabZt28Z4PB6Li4vj1v3yyy+Mx+OxGzducOtWr17NGjduXGWdBw4cKPEHq3v37kwoFEqkmTJl\nCncMGGOsdevWbNq0aVLj5eTkMA0NDXbq1CmJ9du3b2e6urqVlmPhwoUSf2gYYywuLo7xeDx29uxZ\nxtiHP1oXLlyoNI6s+efm5jIrKys2bNgwJhQK2ZAhQyTSjxkzhmlra0t0rk6fPs14PB5LT09njFXf\nsfPx8alwLMsqn37nzp2Mx+NVmr6s8h2NM2fOMB6Px5KSkrh1+fn5rHnz5mzp0qWMsQ9/oMLCwqqN\nX7Zjl5qayng8Hjtx4oREmg4dOrBx48YxxhjbsmUL09DQYC9fvuS2Z2RkMHV1dbZjxw6uvjwej0VF\nRXFpXr9+zbS0tNjWrVsZY6Xt0c/PT6ZjIN5fXV2dHThwgFv3zTffsC5dunDLDRs2ZKGhoTLHlKb8\n8S5/raguDyUlJbZ9+/Yq88jOzmZqamps5cqVUrfL8jmIz5GgoCBuu/gfolWrVnHrbt68yXg8HktI\nSGCMfWgb4s+BMcaKioqYkZER17GS1n5kPd+MjIzYwIEDJdL07duXjRgxQqFxXr16xXg8HhOJRBUP\n4P+U7djJc94cPnyYS5ORkcF4PB47ffo0Y4yxVatWMXNzc4nrF6k9dCuWSBCJRNDW1oaGhgZsbGzQ\ntm1b7Nq1C5mZmfjnn38wc+ZM7laTtrY2+vXrBx6Ph7S0NC6Gvb19tfmkpaWhoKAALi4uEutdXFyQ\nkJAgsc7R0bHC/jweDzY2Ntxy06ZNAQC2trYS616+fMnN7cnNzcX8+fNhbW0NfX19aGtr4/jx4/jn\nn38k4goEAom8mjdvjoyMDADA8+fP8ejRI/Tq1UtqvRISEpCXl4chQ4ZIHKfJkyfj7du3ePnyZaX7\nderUSWK+jq2tLRo2bIjExESp+3xM/urq6ti3bx/++OMPvHjxQuotSUtLS4m5VF26dAEAmcsTGxsL\nd3d3mcv+MRISEqCvr4927dpx61RUVODk5FRle+rbt6/EcZJGXN+q2mpCQgKsrKzQqFEjbruBgQEs\nLCwqHK+yDw7p6uqiffv2XJypU6fi4MGDsLGxwYwZM3Dy5Mkq56bp6urCy8sLO3fuBFA6vWHv3r3c\nbW0AmD17NiZMmAA3NzcsWbIEN2/erDReTSkij4SEBOTn51d6bsnyOYiVPYcruzYApedzWWU/mwYN\nGsDR0bHK9iPr+cbj8SAUCiXilL2uKCqOnp4eJkyYgN69e6Nfv35YsWIF7t69i8rIc96UzdfAwAAN\nGjTg8h0+fDgKCwthZGSEsWPHIiwsDNnZ2ZXmSz6tL2vWJ/nkOnXqhO3bt0NJSQktWrTgOhriE/i3\n336Dm5tbhf1atmwJoPTCo6mpqdAySYvH5/MlnjIT/152/o54HWMMPB4Pc+bMwdGjR7F69WpYWFhA\nQ0MDs2bNwps3byRil384g8fjoaSkRKayitMdPHgQ5ubmFbbr6elJ3U9Rk8vlyf/cuXPg8Xh48+YN\nnj9/Dl1dXYm0H1ueujBhXvzZl1W2PYWEhNR4HlD52NLqKkv9y6bp1asX/vnnH5w6dQoikQg+Pj6w\nsbFBZGRkpU8M+/r6YvDgwXjx4gXOnz+PnJwceHt7c9sXLlyIUaNG4eTJk4iKisLy5csxd+5cBAYG\nylPdKn2OPCoj7RiXnesp/oykravuvK6u/chzvlV1XVFUHAD4/fffMX36dJw+fRoRERFYtGgR1q1b\nh0mTJlVZ17Kk1VvaQ2vifFu0aIHk5GRER0cjKioKgYGBmDdvHq5cuYJWrVrJnC9RDBqxIxLU1NTQ\npk0bGBoaSoweNW3aFK1bt0ZycjLatGlT4UdVVVWufNq2bQtVVVXExMRIrI+JiZEYiVOkc+fOwcfH\nB0OHDoWNjQ1MTEyQkpIi12sIDAwM0KpVK5w6dUrqdisrK6ipqSE9PV3qcarsj7OVlRUuX76MwsJC\nbl1cXBzevHkDa2trmcsna/7x8fGYNWsWQkJC4O7uDm9vbxQUFEjESkpKwrt377jlixcvAigdyZOF\nvb09IiMjZe7cif9w1KQzaGVlhZcvXyIpKYlbl5+fjytXrlR5/Fq0aCFxfCqLDaBCWz179iwX28rK\nComJiRIjshkZGbh7926F/C9dusT9npWVheTkZIljqqenB29vb2zcuBHHjh1DTEyMRL3K69WrFxo1\naoS9e/dix44dGDBgABo2bCiRxsTEBFOmTMGBAwewZMkSbNiwodJ4sip/3lSVh4qKSrUPD4kfmKjq\n3AKkfw6KumaU/WyKiopw9erVKtt7Tc/3TxWnbLyZM2fi+PHjGD9+PH7//fdK09XkvJFGRUUFvXv3\nxooVK3Dnzh3k5ubizz//lCsGUYwvbsTu6tWrmDFjBpSVldGyZUvs2LHji3vc/Eu1bNkyjB8/Hnp6\nevDy8oKysjKSkpJw8uRJbNy4EUDpH2VZ/jBraGjgu+++w6JFi9CkSRPY2tri4MGDOHr0KM6cOfNJ\nym9hYYEjR45gyJAh0NTUxKpVq/D06VM0a9aMSyNL+RcvXowpU6agadOm+Oqrr1BSUoLo6GiMGDEC\n+vr6WLBgARYsWAAejwd3d3cUFRXhzp07uHXrFn7++WepMb/99lsEBQXBz88PCxYswOvXrzF16lS4\nuLjA2dlZ5jpqaWlVm//79+8xYsQIDB48GL6+vhgwYAAEAgHmzp2LNWvWcLF4PB58fX3x448/4uXL\nl/jmm28wcODASjtA5c2dOxdOTk4YNWoUZs2aBV1dXdy4cQOtW7eW+tobExMTAMCff/4JZ2dnaGho\nVDr6W/5zcnd3h6OjI0aOHIng4GDo6OggMDAQBQUFmDJliszHr2x8MVNTU3z99deYOnUqNm3aBEND\nQ2zYsAGJiYnYu3cvAGDUqFEIDAzE8OHD8csvv6CkpASzZ89Gq1atMHz4cC4Wj8fDvHnzsHLlSujq\n6uL777+Hjo4ORo4cCQD4/vvv0bFjR1haWoLP5yMsLAza2towNDSstKxKSkoYOXIk1q9fj3v37uGP\nP/7gtuXk5GDu3LkYOnQojI2NkZWVhZMnT3KdJKB0xI/H42H79u1VHo/y54V4OTs7G/PmzasyDxMT\nE0RFRaFPnz5QVlZG48aNK+ShpaWFWbNmISAgAOrq6ujZsyfy8vJw4sQJzJ8/X6bP4WOtWLECzZo1\ng7GxMVatWoWXL19i6tSplaaX5Xwre6w+dZy0tDRs3rwZXl5eaNWqFZ48eYJz585VOj1GUedNSEgI\nGGNwcHCArq4uIiMj8e7dO5n/CSSK9cWN2BkaGiI6OhoxMTEwNjam/wgUqLqXaPr4+GD//v0IDw+H\nk5MTHB0dsWTJEomh9spiSFu/bNkyTJw4ETNmzICNjQ12796NXbt2Sb3VKy2evOtWr17NvX6lZ8+e\naN26NYYOHVrhlm75OOXXjR8/HqGhoTh48CDs7OzQvXt3nDp1ivsHY+HChVi1ahU2b94MoVCIbt26\nISgoiOu4SGNgYIDTp0/j0aNHcHBwwIABA7jObnV1LK+6/GfOnIm8vDyuM66np4fdu3dj/fr1OHHi\nBBfH0dERXbt2hYeHB/r27QuBQICtW7dWe6zErK2tIRKJkJmZie7du8POzg6rV6+W+EesbHoHBwdM\nnz4d/v7+aNq0KaZNm1ZpHaXlfeTIEbRr1w6enp5wdHTE8+fPERERITHvTdbR2fLptmzZgt69e8PH\nxwdCoRCXLl1CeHg4d9tMTU0Np0+fhqqqKlxcXODq6gptbW2cPHlSor58Ph/Lly+Hv78/HBwc8Pz5\ncxw7dox7n5+6ujp++OEHdOzYEQ4ODoiPj8eJEyeqfW/cmDFjkJycDF1dXfTt25dbr6SkhKysLIwf\nPx6Wlpbo06cPmjdvLvG6i4cPH+Lhw4fVHo/KzhNlZeVq81i5ciViY2NhbGzMzW+TJjAwEMuWLcNv\nv/0GGxsb9O7dW2K+XnWfg7hs0sovy7pff/0VixYtgp2dHS5duoQ///xT4h8/afvIcr7Lck1URBwt\nLS2kpaXB29sbFhYWGDp0KJydnbFu3boK+4kp4rxp1KgRtm3bBjc3N1haWmLNmjXYvHmzTNdyong8\nVtuTYD7C4sWLYWdnh0GDBtV2UQipV/z8/PD48eMK72ojNRcaGoqJEydK3G4ndYNIJEKPHj3w6NEj\ntGjRoraLQ8hH+eJG7MT+/vtvREREYMCAAbVdFEIIIYSQOqHWOnbr1q1Dx44doaamhrFjx0pse/Xq\nFQYPHgwtLS0YGxtX+DaCt2/fwtfXF9u3b/8kXwBOyL9dXfpuy/qEjmndRZ8NqS9q7Vbs4cOHwefz\ncerUKeTl5WHbtm3cthEjRgAonZB58+ZNeHp64uLFi7C0tERRURG8vLwwe/Zs9OjRozaKTgghhBBS\nN33yVyBXY+HChRJvWs/OzmYqKirc1+Ewxpivry+bP38+Y4yxHTt2MH19febq6spcXV3Zvn37pMZt\n0aIFA0A/9EM/9EM/9EM/9FPnf0xNTRXSr6r1OXas3IDh3bt3oaSkhLZt23LrBAIB9xbs0aNH48WL\nF4iOjkZ0dDSGDRsmNe6TJ0+4R/Tr8s/ixYu/iDxqGkOe/WRJW12aqrbXdFtd+vnU5VRU/JrEUXRb\nkSVdTdoEtRXF5kHXlrrxQ9cW+dJ+ivaSnp6ukH5VrXfsys9ryM7Oho6OjsQ6bW1tiRel1ieurq5f\nRB41jSHPfrKkrS5NVdur2vbgwYNq864LPnV7UVT8msRRdFuRJV1N2gu1FcXmQdeWuoGuLfKl/VTt\nRRFq/XUnCxcuxOPHj7k5djdv3kTXrl2Rk5PDpfn1119x9uxZHD16VOa4deHrjMiXw8/PD6GhobVd\nDPIFoLZC5EHthchKUf2WOjdiZ25ujqKiIokvlY+Li5P7600AICAgACKR6GOLSP4F/Pz8arsI5AtB\nbYXIg9oLqY5IJEJAQIDC4tXaiF1xcTEKCwuxZMkSPH78GJs3b4aSkhIaNGiAESNGgMfjYcuWLbhx\n4wb69++PS5cuoX379jLHpxE7QgghhHwpvvgRu8DAQGhoaGDFihUICwuDuro6li1bBgBYv3498vLy\nYGBgAB8fH2zcuFGuTh0h8qKRXSIraitEHtReyOemVH2STyMgIKDSoUc9PT0cPnz48xaIEEIIIeQL\nV+sPT3wqVQ1pNmrUCK9fv/7MJSKkdujp6eHVq1e1XQxCCCFVUNSt2FobsfscAgIC4OrqWuHR4tev\nX9P8O/KvQV+VRAghdZdIJFLoLft/5YgdPVhB/k2ovSuWSCT6LO+II/UDtRciqy/+4QlCCCGEEKJY\nNGJHSD1H7Z0QQuo+GrEjhBBCCCES6nXHjr55ouYCAgJgZmbGLYeGhkJZWVnm/eVNX9bDhw/h7u4O\nLS0tNGjQoEYxqmJsbMy9M5EQedE1hciD2gupjqK/eaLed+xo0mrNlX2a0tvbG0+ePJF53/Lpw8LC\nwOfL1tyWL1+OFy9eIC4uDk+fPpW9wDLi8Xj0pCghhJA6wdXVVaEdu3r9upOaSkn5G2fOpKOwkA9l\n5RL07GkKCwujOhfzUyt7r19NTQ1qamoy7ytv+rJSU1Ph4OAAU1PTGu0vVlRUBCUlauJEseifRSIP\nai/kc6vXI3Y1kZLyN0JD05CZ2QNZWa7IzOyB0NA0pKT8XWdirl27Fu3atYO6ujrMzc2xfPlyFBcX\nAwD2798PVVVVXLt2jUu/Y8cOaGhoID4+HkDpl1J7eHhg9erVaNmyJTQ1NTFs2LAqX9os7dZqbGws\n+vTpg4YNG0JbWxtOTk64evVqhfQikQi+vr4AAD6fDz6fj3HjxknNh8/nIyoqClu3bpVI9/TpU3h7\ne0NPTw8aGhpwc3NDbGwst59IJAKfz8fx48fRtWtXqKurIyQkRKbj+e7dO/j7+8PAwABqampwcHBA\nRESERJqUlBR4enpCW1sb2tra8PLyQnp6eoXjExkZCSsrK6irq6NTp06Ii4uTqQyEEEKIItBwRjln\nzqRDVdUdktMi3HH7dhQcHGo2wnb1ajpyc90l1rm6uiMyMkruUbuAgACEhoYiKCgIQqEQiYmJmDx5\nMt6/f4+lS5di2LBhOHPmDEaMGIGbN2/i6dOn+Pbbb7Fq1SpYW1uXKdNVaGpq4vTp03jx4gUmTpyI\n8ePH49ChQzKVIyEhAS4uLhg0aBCio6Ohq6uL2NhYlJSUVEjr7OyMdevW4dtvv8WzZ88AAOrq6lLj\nPn36FEOGDEGbNm2wcuVKqKurgzGGQYMGobCwEMeOHYOOjg5+/PFHeHh4IDU1Ffr6+tz+s2bNwq+/\n/gpra2uZ5/iNGzcOsbGx2LVrFwwNDbFhwwb0798ft2/fhoWFBfLy8tCrVy+Ym5vj7NmzYIxh9uzZ\n6NOnDxITE7l8SkpKMG/ePGzcuBG6urpYsGABPD09kZaWVuPRS1L30HvJiDyovZDPjTp25RQWSh/E\nLC6u+eBmSYn0fQsK5IuZm5uLX375BYcPH0avXr0AAEZGRggMDMT06dOxdOlSAEBQUBAcHBwwYcIE\n3L17Fx4eHpg8ebJELMYYdu7cCW1tbQBAcHAwevfujXv37qFNmzbVluXnn3+Gubk5du3axa2rbD9l\nZWXo6OgAAAwMDKqM27RpU6ioqEBdXZ1LGxkZiWvXriExMRHt2rUDUDoKaWxsjPXr12PRokXc/gsX\nLoSnp2e15RdLS0vDH3/8gePHj8PDwwMAsGbNGpw7dw7//e9/ERISgt27d+PFixe4efMmGjVqBADY\nu3cvjI2NsXfvXowePRpA6TH95Zdf0K1bNwDAzp070bp1a+zevbvSEUpCCCFEkep1x66yrxSrirJy\nxREnAGjQQPp6WfD50vdVUZEvZkJCAvLy8jBkyBCJyf/FxcXIz8/Hy5cvoa+vD3V1dezbtw8CgQDN\nmzdHdHR0hViWlpZcpw4AunTpAgBITEyUqWMXGxuLfv36yVX+mkpISIC+vj7XqQMAFRUVODk5ISEh\nQSKto6Mj93vfvn1x/vx5bvndu3cVYicmJgIAXFxcJNa7uLjg0qVLXP5WVlZcpw4o7aBaWFhw+4t1\n7tyZ+11XVxft27evkIZ82Wj0hciD2gupjqK/Uqzed+zk1bOnKUJDI+Hq+uHWaX5+JPz82sLCombl\nSEkpjamqKhnT3b2tXHHEtzkPHjwIc3PzCtv19PS438+dOwcej4c3b97g+fPn0NXVlUj7sS9BrAsv\nvWWMVXi6VVNTk/s9JCQE79+/V0hsaXWVpf61fYwIIYTUbeIBqCVLligkHj08UY6FhRH8/NrCwCAK\nuroiGBhE/a9TV/MnWBUV08rKCmpqakhPT0ebNm0q/IhfJxIfH49Zs2YhJCQE7u7u8Pb2RkFBgUSs\npKQkiRGsixcvAigdyZOFvb09IiMjZe64qKioAKhZR8fKygovX75EUlISty4/Px9XrlyRmDdYXosW\nLSSOT2WxASAmJkZi/dmzZ7nYVlZWSExMxMuXL7ntGRkZuHv3boX8xaN8AJCVlYXk5GSZjyn5MtB7\nyYg8qL2Qz61ej9jVlIWFkcJfRaKImFpaWliwYAEWLFgAHo8Hd3d3FBUV4c6dO7h16xZ+/vlnvH//\nHiNGjMDgwYPh6+uLAQMGQCAQYO7cuVizZg0Xi8fjwdfXFz/++CNevnyJb775BgMHDpTpNiwAzJ07\nF05OThj78HQvAAAgAElEQVQ1ahRmzZoFXV1d3LhxA61bt0anTp0qpDcxMQEA/Pnnn3B2doaGhobE\n6FpZjDGJDqC7uzscHR0xcuRIBAcHQ0dHB4GBgSgoKMCUKVPkOYRcfDFTU1N8/fXXmDp1KjZt2sQ9\nPJGYmIi9e/cCAEaNGoXAwEAMHz4cv/zyC0pKSjB79my0atUKw4cP52LxeDzMmzcPK1euhK6uLr7/\n/nvo6Ohg5MiRcpeREEIIqQkasfvCLFy4EKtWrcLmzZshFArRrVs3BAUFcR2nmTNnIi8vDxs3bgRQ\nent29+7dWL9+PU6cOMHFcXR0RNeuXeHh4YG+fftCIBBg69at3HZpL/Etu2xtbQ2RSITMzEx0794d\ndnZ2WL16tcR748qmd3BwwPTp0+Hv74+mTZti2rRpldZRWt5HjhxBu3bt4OnpCUdHRzx//hwRERES\n895kfelw+XRbtmxB79694ePjA6FQiEuXLiE8PJy73a2mpobTp09DVVUVLi4ucHV1hba2Nk6ePClR\nXz6fj+XLl8Pf3x8ODg54/vw5jh07Rk/E1jM0Z4rIg9oL+dx4rJ5OAqpqDlhdmB9Wm/z8/PD48eMK\n72ojNRcaGoqJEyeisLCwtotSwb+9vRNCyJdAUddqGrEjhBA50JwpIg9qL+Rzq9cdu4CAADqppKDv\nSv006JgSQgiRl0gkUuh3xdKtWELqOWrvhBBS99GtWEIIIYQQIoE6doQQIgea3kHkQe2FfG7UsSOE\nEEIIqSdojh0h9Ry1d0IIqftojh0hhBBCCJFAHTtCCJEDzZki8qD2Qj436th9Yfz8/ODh4cEtBwQE\nwMzMrBZL9GVxdXXFxIkTa7sYAEq/P3f58uW1XQxCCCH1SL3u2NXHFxSXf7nwnDlzcOXKFZn3b9u2\nLZYsWfIpivZFqEsvZ75+/TpmzpxZ28UgcqLv/iTyoPZCqqPoFxQrVZ/ky6XIA1VXMMYkJldqampC\nU1NT5v3rSqdG0QoLC6GsrFzbxZCLvr5+bReBEEJILXN1dYWrq6vCBl3q9YhdTaWkpSB4XzDW7F2D\n4H3BSElLqZMxgYq3Yh89eoSvvvoKTZo0gbq6OkxNTfHrr78CKG086enpWLJkCfh8Pvh8Pv75559K\nY+/btw/29vZQV1dH48aN0a9fP2RlZQEo7UjNnz8frVq1gqqqKqysrLBnzx6J/fl8PtatW4fhw4dD\nS0sLxsbGOHz4MF6/fo0RI0ZAR0cHpqamOHToELfPgwcPwOfzsWvXLri7u0NDQwOmpqbYt29fhTS7\nd+9Gv379oKWlhR9++AEAsHfvXgiFQqirq8PExASzZs1Cbm6uRLkYYwgMDETz5s2hr6+PMWPGICcn\nRyJNdXHEt3SripOQkIDevXtDT08PWlpasLS0RFhYGLfd2NgYy5Yt45bfvXsHf39/GBgYQE1NDQ4O\nDoiIiKhQ7wMHDqB///7Q1NSEqakptm/fXulnSBSvvt0FIJ8WtRfyuVHHrpyUtBSERocis2kmsppl\nIbNpJkKjQz+qI/YpYlZm6tSpePfuHSIjI5GSkoKQkBC0atUKAHD48GEYGxtj9uzZePbsGZ49e8Zt\nK2/btm0YPXo0hgwZgps3byImJgaenp4oLi4GACxYsABbtmxBUFAQEhIS4OPjAx8fH0RFRUnEWbZs\nGfr374/bt2/D09MTo0ePhre3N/r27Ytbt27B09MTvr6+ePXqlcR+c+fOxYQJExAXF4eRI0di1KhR\nuHXrlkSaefPmYfTo0UhISIC/vz9CQ0MxdepUzJkzB0lJSdixYwfOnDmDyZMnc/swxnDw4EFkZWUh\nJiYGe/fuRXh4OFasWMGlkSUOgGrjjBgxAk2aNMGlS5cQHx+PVatWQU9Pj9te/rbwuHHjEBERgV27\ndiEuLg7Ozs7o378/UlIk28n8+fPh5+eHO3fuwNvbGxMmTEBqaqrUz5EQQsi/C73HrpzgfcHIbJoJ\n0QORxHrNR5pw6OpQo7JcPX8Vua0kR41cjV1h8NwAU4dNlSuWn58fHj9+zI3kBAQEYNeuXdwfdqFQ\niMGDB2Px4sVS9zczM8Po0aO5Ea7KGBoaYtCgQfjtt98qbMvNzUWjRo2wZs0aic7OkCFD8ObNG0RG\nRgIoHbGbMWMGVq1aBQB48eIFDAwMMG3aNAQFBQEAsrKy0KhRI4SHh6Nfv3548OAB2rRpg0WLFkkM\nSzs7O8PU1BQ7duzg0gQGBuL777/n0hgbG2PBggWYNGkSt+7s2bNwdXXF69ev0bBhQ7i6uuLNmze4\nefMml2bq1Km4desWLl68qNA4urq6CAoKwpgxY6QeYxMTE0ycOBELFixAWloazM3Ncfz4cfTp04dL\nY29vD6FQiJCQEK7eq1atwowZMwAAJSUl0NXVxcqVKyt9KITeY0cIIXUfvcfuEylkhVLXF6O4xjFL\nUCJ1fUFJQY1jVmbGjBlYvnw5OnXqhPnz5+PcuXNyx3j+/DkePXqEXr16Sd2elpaGgoICuLi4SKx3\ncXFBQkKCxDqBQMD93rhxYzRo0AC2trbcOl1dXaioqOD58+cS+3Xu3Fli2dnZuUJsR0dH7vfMzEz8\n888/mDlzJrS1tbmffv36gcfjIS0tTWqZAKB58+bIyMhQaBwAmD17NiZMmAA3NzcsWbJEohNYXmJi\nIgDIdEyFQiH3O5/Ph4GBgUS+hBBC/r2oY1eOMk/6BPwGaFDjmPxKDrMKX6XGMSvj5+eHv//+G5Mn\nT8bTp0/Rt29fjB49WuH5yEraAw3l1/F4PJSUSO/8ikn7L6bsQyPi/X/77TfExcVxP7dv30Zqaiqs\nra25vFRUJI972fwVFQcAFi5ciLt372LYsGGIj49Hp06dsGjRoirrKUu9q8uXfFo0Z4rIg9oL+dzq\n9VOxNdHTvidCo0PhaubKrctPzYeftx8s2lrUKGZKq9I5dqpmqhIx3d3cP7a4UjVr1gx+fn7w8/ND\n3759MXLkSGzYsAFaWlpQUVHh5slVxsDAAK1atcKpU6fQv3//Ctvbtm0LVVVVxMTEwNLSklsfExMD\nGxsbhdTh0qVLErckL168CCsrq0rTN23aFK1bt0ZycjLGjx9f43wVFUfMxMQEU6ZMwZQpU/Dzzz/j\n119/RWBgYIV04rrFxMSgb9++3PqzZ8/C3t7+o8tBCCHk34E6duVYtLWAH/wQeSMSBSUFUOGrwN3N\nvcaduk8VszLffvstPD09YW5ujvfv3+PQoUMwNDSElpYWgNKOxvnz5/Hw4UOoq6tDX19f6itQFi9e\njClTpqBp06b46quvUFJSgujoaIwYMQL6+vr47rvvsGjRIjRp0gS2trY4ePAgjh49ijNnziikHlu3\nbkW7du1gb2+PsLAwXL58GcHBwVXus2zZMowfPx56enrw8vKCsrIykpKScPLkSWzcuBFAxdfFfKo4\n2dnZmDdvHoYOHQpjY2NkZWXh5MmTEp3Tsvubmpri66+/xtSpU7Fp0yYYGhpiw4YNSExMxN69e6ss\nL82f+7zovWREHtReyOdGHTspLNpaKLzTpaiY5Z+klPbC3RkzZuDhw4fQ0NBA586dceLECW7bkiVL\nMGnSJFhYWCA/Px/379+HoaFhhXzGjx8PdXV1/Pe//8WPP/4ILS0tdO7cmbutu2zZMu7hiMzMTJiZ\nmWHXrl1wc3P76DoCwM8//4zff/8dly9fRosWLbBr1y6JuWXSOqM+Pj7Q1tbGihUrsGzZMigpKaFN\nmzb46quvJPYrv2/5dYqIo6ysjKysLIwfPx5Pnz6Fjo4OevTowb16RlodtmzZgjlz5sDHxwdv376F\nra0twsPDYW5uXmW96+u7CQkhhMiPnooldYr4yc/z58+jS5cutV2ceoHau2KJRCIahSEyo/ZCZEVP\nxcqgPn6lGCGEEELqD0V/pRiN2JE65cGDBzA1NcW5c+doxE5BqL0TQkjdp6hrNXXsCKnnqL0TQkjd\nR7diCSGkFtD0DiIPai/kc6OOHSGEEEJIPUG3Ygmp56i9E0JI3Ue3YgkhhBBCiIR/5QuK9fT06KWu\n5F9DT0+vtotQr9B7yYg8qL2Qz+1f2bF79epVbReB1DF08SWEEFIf/Cvn2BFCCCGE1CU0x44QQggh\nhEigjh0hoHdNEdlRWyHyoPZCPjfq2BFCCCGE1BM0x44QQgghpJbRHDtCCCGEECKBOnaEgObBENlR\nWyHyoPZCPrd63bELCAigk4oQQgghdZZIJEJAQIDC4tEcO0IIIYSQWkZz7AghhBBCiATq2BECmgdD\nZEdthciD2gv53KhjRwghhBBST9AcO0IIIYSQWpKS8jfOnEnHt9+6K6TfoqSAMhFCCCGEEDmlpPyN\n0NA0vHjhrrCYdCuWENA8GCI7aitEHtReSFWOHElHYqI7UlMVF5NG7AghhBBCPqPiYuDCBUAk4iMv\nT7GxaY4dIYQQQshn8vgxcPQokJEBXL0ahdzcHuDxAJFIMf0WGrEjhBBCCPnECgqA6Gjg8mVA3H9r\n08YUtxNDodwkR2H50Bw7QkDzYIjsqK0QeVB7IQBw7x6wYQNw6dKHTp2yMtDV9T3aeVyDkv0FheVF\nI3aEEEIIIZ9AXh5w+jRw86bk+jZtgAEDgF2nIgDrQhS9ylBYnjTHjhBCCCFEgRgDkpKA48eB7OwP\n69XVgd69AYEAeJn3AtPWT8PTxk8BADFjY2iOHSGEEEJIXfL2bWmHLjlZcr2VFdC3L6CuUYxz/1xA\nzIMYvHn/RuH50xw7QkDzYIjsqK0QeVB7+fdgDIiNBYKDJTt12tqAtzfw9ddAVskjbIrdhKj7UShm\nxWjTpg1K0ktg2NBQYeWgETtCCCGEkI/w8iXw11/AgweS6zt2BHr2BPjKBTiZFoUrj66A4cPtVlsL\nW3hbe+N28m3sxE6FlIVG7P4nICAAhYWF3LKfnx+Cg4M/KqZIJIKDgwMA4MmTJ+jRo0eV6f/++29s\n3rz5o/KsCwICAjBnzpzPkpenpyfu37//0XFcXV0BAJs2bcKaNWvk2nfUqFFo2bIl+Hw+cnNzK00X\nFhYGW1tbKCsrV2hby5Ytg0AggJ2dHQQCAXbs2CF3HUJDQ5Faw9eXy1qH6sq5du1atG/fHra2trCz\ns5O7HKmpqbCzs4O9vT327Nkj9/6KPofWrFmDzMxMbjkgIADHjh1TWPzypJXf2NgYiYmJnyzPmggN\nDcXXX38NALh+/Tp8fHyq3cfOzg75+fkAKh7X8o4cOQJLS0vY29vj7t27CilnbRFfW0j9VFwMnD9f\n+sRr2U6dvj7g5wf07w88zElF8NVgXH50mevUKfOV0du0NyZ0mICutl0xddhUhZWJOnb/s3TpUhQU\nFHDLPB5PofFbtGiBqKioKtPcv38fv//+u0Lz/RSKioqq3K7oY1eVY8eOwcTERGHx/P39MWPGDLn2\nmThxIm7dulVtOjs7O+zbtw8jR46scIymTZuGuLg43Lx5EydPnsQ333yDly9fylWO0NDQGv8RlLUO\nVZXz0KFDOHjwIK5fv47bt2/j9OnTcpfj0KFDcHZ2RmxsLEaMGCH3/h9zDhUXF1dYFxQUhOfPn3PL\nn7ptSyt/XXwQrOxx6NixI8LCwqrd5+bNm1BVVQVQ8biWt2nTJgQGBiI2Nhbm5uYyl6ukpKTSchKi\naE+fAlu2AGfOAOI/i3w+0LUrMHky0KRFDg4lHcKuO7vwJv/DXDpTPVNMdZiKzq07g89TfDeMOnYA\nvvnmGwBAly5d0KFDB7x5U/oBxMfHw93dHebm5hgzZgyX/u3bt5gwYQKcnJwgEAgwY8aMCheU8h48\neIDGjRsDAHJzc/H111/DysoKQqEQ3t7eXDkSExNhZ2eHYcOGSY3z008/wdbWFkKhEM7Oztz6FStW\nwMbGBjY2Nhg3bhxyckpfdhgQEABvb294enrCzMwMw4YNw/Xr1+Hm5oa2bdti7ty5XAxXV1fMnDkT\nTk5OMDMzw/fff19hW+fOnTFo0CAuTycnJ9jb28PLywsZGR8e1378+DE8PT3Rvn179O/fH3n/+86U\ngoICzJkzB05OThAKhfD19eXK6ufnhylTpkg95r///jssLS25kSJxB6bsaEZaWhrc3d0hEAhgb2+P\nU6dOcfvz+Xz89NNPcHR0hKmpKQ4dOiRxXMXzYMqONl68eBH29vaws7ODtbU19u7dK/UzcXV1RZMm\nTaRuK8vKygrt27cHn8+v8IdaR0eH+/3du3fQ0tKCqqoq8vLyIBAIcPToUQBAVFQU2rdvzx0zsW3b\ntiE2Nhbfffcd7OzsEBUVhZKSEsyePZtrF3PmzKm0ncpah8rKCQArV67EkiVLoKmpCQBcPFnrsGvX\nLqxZswYHDhyAnZ0d7t27h5UrV8LR0REdOnRAly5dEBcXB0C+cyglJQX9+vWDo6MjhEIhQkNDuTz5\nfD6WLFkCR0dHLF26VKI8y5Ytw5MnTzB06FDY2dkhKSkJAHDjxg2pbTsyMpK7htja2mLfvn0Sx3fu\n3Lno1q0bTE1N8X//939Sj29l14D9+/ejS5cuMDExkRjtrapuZVV23j1//hwmJiaIjY0FAGzfvh3d\nunVDcXExQkND4eHhgYEDB8LKygru7u548uQJAEi037J3JgAgPDwcDg4OEAqF6NChA+Lj47ljnZOT\nU+G4JpebYT5z5kycP38ec+fO5e5ynDx5Eh06dIBAIEDPnj2Rnp7O5W1ra4tx48bBzs4OJ0+elIhV\n/jyr7DqZnZ2NsWPHctt++eUXic+usuuiLGiOXf1TWAhERACbN5d27sSaNwcmTgTc3RkSX8Yh+Fow\nbmfc5rZrKGtgSPsh8LH1gZ663qcrIPvCvHnzhjk4ODAtLS2WkJBQaTp5q8bj8VhOTg63PGbMGNat\nWzeWn5/PCgoKmJWVFYuIiGCMMTZ+/Hi2c+dOxhhjxcXFzNvbm23evLlCzOjoaNaxY0fGGGP3799n\njRs3ZowxdujQIda7d28uXVZWFmOMMZFIxKWXJjQ0lHXu3JllZ2czxhh79eoVY4yx48ePM2tra/bu\n3TvGGGO+vr5s3rx5jDHGFi9ezMzMzNjbt29ZcXExEwgErFevXqygoIDl5OQwAwMDlpaWxhhjzNXV\nlfXu3ZsVFxez7OxsZmNjw8LDw7ltAwcOZMXFxYwxxnbu3MkmTZrESkpKGGOMrV+/no0aNUoizzdv\n3jDGGOvVqxd3fAIDA9mPP/7I1Wnu3Lns+++/r/SYnzlzhjHGWMOGDdmzZ88YY4wVFBSw3Nxcxhhj\nxsbGXDtwdHRkW7duZYwxlpiYyBo3bsxevHjBfb7BwcGMMcYuXLjAWrZsWeGzYoyxgIAANmfOHMYY\nY15eXmzPnj0VPqfKlG9DlfHz82Pr1q2rsH7jxo2sXbt2TF1dnR04cIBbn5yczAwNDdmVK1eYiYkJ\nu3XrltS4rq6u7NixY9zy+vXrWc+ePVlhYSErKChg7u7ubMOGDR9dh8rKqaenx5YvX866dOnCOnbs\nKHFOyFqHssefMcYyMzO53yMiIlinTp0YY7KfQ4WFhaxDhw4sOTmZMcbY27dvmbm5OUtJSeHq+9//\n/rfSupZtX4yVtu1WrVpJbduvX7/mzo9nz56xVq1aceVydXVl3t7ejLHSa1jjxo25864sadcAY2Nj\n7pg8ePCAaWlpsZycHKl1s7Cw4JbLquq8E4lEzNzcnF26dIkZGRmxR48eMcYY27ZtG1NXV2d3795l\njDG2ZMkSNnToUG6b+Pey17mUlBTWrFkzrm4FBQXcdals2yp/XMsr25YzMjJYkyZNWFJSEmOMsZCQ\nEObk5MTl3aBBA3b58mWpccqWs6rr5Ny5c5mfnx93HK2srNiJEycYY4x179690uuiLMTXFlI/3LvH\nWFAQY4sXf/gJDGTs/HnGiosZe5X7iu24tYMtjl4s8fNH4h8sOz+7ytiK6pJ9cQ9PaGho4Pjx45gz\nZ84nvT3B4/EwaNAgqKioAAA6dOiAe/fuAQCOHj2Ka9euYeXKlQBKRyQMDWV/okUoFCIpKQnffvst\nXF1d4enpCaDif5flHTt2DFOnTuVGRPT0Snv8Z86cwYgRI6ClpQUAmDRpEqZPn87t16dPH2hrawMA\nN9qnrKwMZWVlWFhYID09HaampgCAMWPGgM/nQ1NTE97e3oiKiuLKN3LkSPD5fO4YxMbGokOHDgBK\nb8/q6upK5Cke3XFycuL+wz569CjevXuHgwcPAgDy8/MhFAorPebp6elwd3dHjx494OvriwEDBsDT\n07PC7dd3794hLi4OY8eOBQC0b98eQqEQly9f5sovHtVxcnLCkydPUFBQwOVVdh6M+HPo0aMHfvzx\nR6Snp8PDwwOOjo5Vfj4fy9/fH/7+/oiPj0evXr3QsWNHGBsbw8LCAkuXLkWXLl0QFBQEgUBQaYyy\nbSgyMhJjx46FklLpaT527FgcPnwYkydPVmg5HRwcYGRkhOLiYjx69AgXLlxAZmYmnJ2dYWFhgW7d\nutW4DtevX8fy5cvx+vVr8Pl8bqRW1nPo7t27SE5O5j57ACgsLERSUhJ3i6/syHB1eDweBg8eLLVt\nP3/+HGPHjkVaWhqUlJTw6tUrpKSkcO1GPNdLR0cH7du3R1paGnfeSat7WeLyGxkZQU9PD48ePUJR\nUVGFuhUUFCA5ORkWFhYS+1d13nXv3h0jRoxAt27dcOTIEbRs2ZLbr1u3bjAzMwMATJgwATY2NlUe\nn4iICHh6enL1El9nPsaVK1cgEAjQrl07AKUj+1OnTuVG28zMzODk5FRtnKquk5GRkfjtt98AANra\n2hgxYgTOnDmDPn36gMfjVXldrA7Nsasf3r8vfdHwjRuS601MSl80rKtXgiuPriDqfhQKSz7M12+o\n2hD9zfvDTN/ss5X1i+vYKSkpcbc0PzXxLSYAaNCggcTcsj///BPGxsY1imtiYoLExEScOXMGJ06c\nwIIFC3Dnzh2Z9pV24S8/B6d8mvL1qKpe5eOUnaMiviCKLVq0CH5+flLLUz6P9+/fc8sbNmyo9GJX\nfj/xAy2HDh3CtWvXEBUVBTc3N2zcuBF9+vSpsH/5MpelpqbGxQVKO6Pijp0006dPh5eXFyIiIjBt\n2jT06tULgYGBlaaXR1Vzf6ytrSEQCHDjxg2ujcXGxqJp06Z4+PChXHGrahcfS1zO2NhYGBkZwdDQ\nkJsX16RJE3h4eODq1avo1q2bXHUQKygowNChQ3H+/HkIhUI8efIErVq1AiD7OcQYQ+PGjXGz/Gvf\nyyjfrqtTWdueMmUKBg0ahMOHDwMALCwsJNq9uP2J95M2p68y5fctKiqSqW5lVXXe3bx5EwYGBhU+\nG3nbz6eYD1jdPLmyn9+QIUNw//598Hg8nD17tsqylS9nVde+qraR+k/8ouF37z6sU1MDevUC7OyA\njJxnCLnxFx6/e8xt54EHp1ZO6GHSAyoNKv878ynQHLv/0dbWRlZWlkxpvby88NNPP3HzlV68eIEH\n5Z9xrsLjx4/B4/EwcOBArFq1CpmZmXj9+jV0dHS4+X3S9O/fHxs2bED2/15jLZ603rNnT+zbtw/Z\n2dlgjGHLli3o1auXzOURY4whLCwMxcXFyMnJwYEDBySe5C17cfPy8kJwcDB3zPLz83H79u0K6cTL\n4nVeXl5YuXIl9wfv3bt3FebYlFdcXIz09HQ4ODhg3rx56NWrV4WJ/tra2hAKhdi+fTsAICkpCXFx\ncejUqZNMdRfPgylb9rt378LExASTJk3Cd999h2vXrlW6v3g/Wf6olT0eYmWferx//z7i4uK4EZXD\nhw/jwoULiI+PR3h4eIV5RGI6OjoSbbhnz57Yvn07ioqKUFhYiO3bt1fZLmSpQ1XlHDlyJE6cOAEA\nyMnJwblz5+SuQ9m8379/j+LiYq4zt379em6brOeQhYUFNDQ0JCb3Jycn413ZK3QVyh9TxphE56fs\nZ/nmzRsYGRkBKB25SktLq7RuVeVX1TWgrHbt2slct6rOu9WrV6O4uBixsbFYsWIFN48RAC5cuMDV\nY9u2bXB3d6+yTB4eHjh+/Di3T35+Pne9Kl/P6q634uPl5OSEuLg4pKSkACidB9ihQwfuzkVZhw4d\nws2bN3Hjxo0KHfaqrpM9e/ZESEgId2z27dsHDw8PrhxVXRerQ3PsvlzZ2cD+/cC+fZKduvbtgW++\nAWwEhYi6H4nfY3+X6NQZaBpgfIfx6NO2z2fv1AG12LFbt24dOnbsCDU1Ne72mdirV68wePBgaGlp\nwdjYuNLXHijyv6ZZs2ahR48eEg9PVBZ/zZo1aNCgAQQCAWxtbdG3b19uUnH58pWNIf799u3b6NKl\nC4RCIZycnLBgwQI0a9YMAoEAFhYWsLGxkfrwhPhWZKdOnWBnZ4fBgwcDKL3t6ePjg86dO8PW1hZ8\nPh8LFy6UWoaq6sXj8dCuXTuubP3790e/fv2k7ufj44NRo0ahe/fuEAgE6NixIy5evFhpvcXL8+fP\nh0AggIODAwQCAbp16ybRsZNW1uLiYowdO5a7jfzs2TP4+/tXKP+uXbsQFhYGgUAAHx8fhIWFQV9f\nv9K4lR0D8ba1a9fC2toaHTp0QHBwMJYtWyZ1nyFDhsDQ0BA8Hg8WFhbo27cvt83Ozg7Pnj0DAOzZ\nswetW7fGwYMHsWjRIrRu3Zqr+5IlS7i8hg8fjg0bNqBNmzZ48OABpk+fjn379kFPTw/79u2Dv7+/\n1PY2adIkLF26lHt4YtKkSdxrRzp06AChUIiJEyd+VB0qKydQOun94cOHsLa2hpOTE0aPHg13d3e5\n6lD2+Ovo6GDp0qVwcHBAx44doaWlJfc5pKSkhL/++gt79+6FQCCAtbU1vv32W24kuLpryHfffYex\nY8eiQ4cOSEpKktqOxOt+/vlnzJ49G3Z2djhw4ECF282yXK+quwaU1aBBA6l1K/t0v1hl593Vq1ex\ndu1abN++Hc2aNcPmzZvh7e3NdcacnZ0xe/ZsWFlZQSQSISgoqEK9y9bNzMwMmzdvxvDhwyEUCtGl\nS8fNOIAAACAASURBVBf8/fffFeovPq7SHp4oH7NJkybYuXMnRo4cCYFAgN27d3OdWWnXt/IxxNur\nuk4uWrQIjDHY2NigS5cu8PX15Tp91V0XSf3DWOkt13XrgLJvGtLSAoYNA4YPB14WP8DG6xtx7p9z\nKGGlgzwNeA3Qw6QH/O390UqnVS2Vvha/K/bw4cPg8/k4deoU8vLysG3bNm6b+HZOSEgIbt68CU9P\nT1y8eBGWlpZcmrFjx3IXHGnq4isC6jo3NzfMmTOHLlqEEISGhuLYsWM4cOBAbRelVtF18d/l1avS\nFw2Xfz1qhw6AhwfAU36PiPQIxD6Nldhu1NAIAywGoLFGzaeKKarfUmtz7MSjTdevX8ejR4+49Tk5\nOTh06BASEhKgoaEBZ2dnDBw4EDt37sRPP/0EAOjXrx83NO/v7y/X5GdCCCHVq240jJD6pKQEuHwZ\niI4ufZ2JmJ4e4OVV+pBEUmYSjqUeQ3bBh+kFqg1U4WHqAfvm9nXmfKn1hyekPcWmpKSEtm3bcusE\nAoHEPIXjx4/LFNvPz4+bfK6rqwuhUMhNHhbHo+UPy4sXL65T5fmcy2vWrKH2QcsyLYt/ryvl+VTL\nRkZG2L9/f50pT20tR0dHQyQSQSQSUXupp8uHDolw4QKgrV26/OBB6faRI13h5gacjj6GbaIr4Jvw\nS7ffegAA6NOzD/qZ9cONSzcQczdG7vzFv8szR18WtXYrVmzRokV49OgRdyv23LlzGDZsGJ6Weevf\n5s2bsXv3bkRHR8scl27FEnmUvWgTUhVqK0Qe1F7qrqIiICYGuHChdMROrFmz0lG65s0ZYp/GIiI9\nAvnF+dx2LRUteJp5on2T9gotzxd/K1asfCW0tLTw9u1biXVv3rzh3sNGyKdAF14iK2orRB7UXuqm\nv/8Gjh4Fyn5zo5IS0L070KUL8Dr/BUJv/YW/3/wtsZ99c3t4mHpATUkNdVWtd+zK35M2NzdHUVER\n0tLSuNuxcXFxsLa2ro3iEUIIIaSeyM8v/Tqw69cl1xsZlb5oWK9RMS48vICYBzEoZh/eNamvro8B\nFgNgrGv8eQtcA/zayri4uBjv379HUVERiouLkZ+fj+LiYmhqamLIkCH44YcfkJubi/Pnz+Ovv/7C\n6NGj5c4jICBA4l42IZWhdkJkRW2FyIPaS92RkgIEB0t26lRVgf79AT8/4L3KI2yK3YSo+1Fcp47P\n46ObYTdM7jj5k3XqRCIRAgICFBav1ubYBQQEVPjS7YCAAPzwww94/fo1xo0bh4iICDRu3Bg///yz\nxNfmyILm2BF50DwYIitqK0Qe1F5qX3Y2cOIEkJAgud7CAvD0BNQ0CxB1PwpXHl0Bw4d+QwvtFvCy\n8EIzrWafpZyK6rfU+sMTnwp17AghhJB/L8aAuDjg1CkgL+/Dek1NoF8/wNISSHuVivC74XiT/+Eb\nX5T5yuhh0gNOrZzA532+G5v15uEJQgghhBBFev0aCA8H0tMl1wuFpd/xypRycDj5FG5n3JbYbqpn\niv7m/aGnrvcZS6tYlXbsZJ3Tpqqqii1btiisQIoUEBAAV1dXGgYn1aLbJURW1FaIPKi9fF4lJcCV\nK0BUlOSLhnV1Sx+OaNOG4XbGbZxKP4Xcwlxuu4ayBvq07QMbA5vP/qJh8XsSFaXSW7GqqqpYsGBB\npcOC4iHDlStXyvyF2p8T3Yol8qCLL5EVtRUiD2ovn09GRukrTB4//rCOxwM6dQLc3ICc4tcIvxuO\n9NeSw3i2TW3R27Q3NFU0P3OJJX3yOXampqZILz+GKYWFhQVSUlI+uiCKRh07QgghpP4rKgLOnSv9\nKfuiYQOD0hcNt2hZgiuPriDqfhQKSz4M4+mq6aK/eX+0bdRWStTPjx6eqAZ17AghhJD67eHD/2fv\nzqOjPM+D/39nNNr3DSGhDa0Is5l9FYsQCCHRxu0bO7apHVw3aWzq1u2bnmMHA04av2/axIkTO87i\nGDtu4jjum1+QEIhFiH0VqzGgDe0SQkII7cvM/P54ohk9xsAIaZ4ZietzTk40961Hc+mc2+Kae7lu\nZZbuxg1rm4sLpKbC4sVwo6uBnKs51LZZp/F06JgXOY8VE1fg5uLmgKi/nEMPT5SXl6PX6y33sAox\n2slyibCVjBUxFDJe7KOnB/btg1OnlNOvA6KilFm6gKA+CisPcqT6CCazdRovzDuM7ORsIv0iHRC1\nNmw6x/vEE09w9OhRAN5//30eeeQRJk+e7LSHJoQQQggxNpWUwDvvwMmT1qTOzU0pYbJhA3S4VvDu\n6Xc5VHXIktQZ9AbSJqbxD7P+YUwndWDjUmxoaCi1tbW4ubkxZcoUfvGLXxAQEMBf/dVfUVpaqkWc\nQ6bT6di8ebOcihVCCCHGgI4O2LULLl5UtycmKrdHuHt3s6dsD0X1Rar+GP8YspOzCfEK0TBa2w2c\nit26dat2e+wCAgK4desWtbW1zJ07l9q/HDnx9fV1yhOxIHvshBBCiLHAbFaSuV27oNNaoQQvL1iz\nBqZMgStNl9lRsoP23nZLv7uLO6viVzEzfKbmJUwehKZ77KZPn84bb7xBRUUFa9euBaCmpgZ/f/9h\nByCEM5B9MMJWMlbEUMh4GZ5bt2DHDmX5dbBp0yAjA/pdbvOHS3lcabqi6k8JSSEzMRNfd18No3UO\nNiV27733Hps2bcLNzY0f/OAHABw7doynnnrKrsEJIYQQ4uFjNit76Pbtg95ea7u/v7LsmpBgpqi+\niD1le+gx9lj6fd18yUzMJCU0xQFROwcpdyKEEEIIp3HjhlLCpLra2qbTwdy5sGIFtBmbyLmaQ2Vr\npeq5WeGzSI9Px8PgoXHEI0PzcieHDh3i7NmztLW1Wd5cp9PxyiuvDDsIe5ErxYQQQojRwWiEw4fh\n4EHl6wGhoQOFho0cqT7CgYoDGM3Wbwj2DCY7OZvYgFjtgx4Bml0pNtjGjRv55JNPWLJkCZ6enqq+\n3/72tyMWzEiSGTsxFLIPRthKxooYChkvtqmpUWbpGhutbS4usGSJUmi4obOG7Ve309hh/Qa9Ts+i\nqEUsjV2KQf9AZXmdiqYzdh999BGXLl0iIiJi2G8ohBBCCAHK/rmCAjhxQl1oODLyL4WGg3vZe62A\nEzUnMGP9hgm+E1iXvI4wnzAHRO3cbJqxmzZtGgUFBYSEOGcNmC8jM3ZCCCGE8yorg5wc5eTrAFdX\nSEtT9tOVtZSQW5xLa0+rtV/vSlpcGnMnzEWvs+mOhVFD07tiT506xfe//32efPJJwsLU2XFqauqw\ng7AHSeyEEEII59PZCfn5cP68uj0+HrKzwdWrg/yyfC5cv6DqTwhKICspiwCPAA2j1Y6mS7FFRUXk\n5eVx6NChO/bYVQ8+tiLEKCX7YIStZKyIoZDxYmU2w6VLsHOncovEAE9PpSbd1KlmLjZeIP9SPp19\n1krEXq5eZCRkMHXc1FFRaNjRbErsXn31VXJzc0lPT7d3PEIIIYQYY27fhtxcKC5Wt0+Zotwe0atv\n4b8v5lLWUqbqnxY2jdXxq/F289Yw2tHNpqXY6OhoSktLcXNz0yKmESFLsUIIIYRjmc1w+jTs3Qs9\n1jrC+Pn9pdBwookTNScouFZAn6nP0h/gEUBWUhYJQQkOiNoxNF2Kff311/nnf/5nNm3adMceO73e\neTcvSh07IYQQwjGampTDEZXqOsLMmQMrV0JLXwO/PrOdurY6S58OHfMi57Fi4grcXEbPZNJwOKSO\n3d2SN51Oh3FwFUEnIjN2YihkH4ywlYwVMRQP43gxGuHoUThwAPr7re0hIUoJk/AJfRysPMiR6iOY\nzCZLf5h3GNnJ2UT6RTogasfTdMauvLx82G8khBBCiLGtrg7+/Ge4ft3aptcrRYZTU6GmvYJ3T+fQ\n3NVs6TfoDSyNWcrCqIW46F0cEPXYInfFCiGEEGJY+vpg/344dkxdaDgiQpml8w/uYk/5Hs7Un1E9\nF+MfQ3ZyNiFeo6dOrr2MVN5y1w1ymzZtsukHbN68edhBCCGEEGJ0Ki+Hd95Rll8H8hJXV1i1Cp57\nzsxNl895+9TbqqTO3cWd7KRsnp3xrCR1I+yuM3Y+Pj5cuHDhy7oszGYzs2bN4tbgstFOQmbsxFA8\njPtgxIORsSKGYiyPl64u2L0bzp5Vt8fFKSdeDd63ySvJ40rTFVV/SkgKmYmZ+Lr7ahit87P7HrvO\nzk4SEu5/zNjd3X3YQQghhBBidDCb4fJlyMuD9nZru4cHrF4N06ebOdNQxJ5Le+gxWmuc+Lr5kpmY\nSUpoigOifnjIHjshhBBC2KStDXbsgCvqSTgmT4bMTOjWN7H96naqWqtU/bPCZ5Een46HwUPDaEcX\nTU/FjlZSx04IIYQYPrMZzpxRll4HFxr29YW1ayExyciR6iMcqDiA0WwtgxbsGUx2cjaxAbHaBz1K\nOKSO3WgkM3ZiKMbyPhgxsmSsiKEYC+OluVkpNFxRoW6fNQvS06Gpt4btV7fT2NFo6dPr9CyKWsTS\n2KUY9GN6DmnEyIydEEIIIezGZFJOuhYWqgsNBwUpJUwionrZV76Pk7UnMWNNSCb4TmBd8jrCfMLu\n/KHC7mTGTgghhBAq9fWwfbvy/wP0eli4EJYuhYrbJeQW59La02rpd9W7khaXxtwJc9HrnPe6UWel\n6YxdY2Mjnp6e+Pr60t/fz4cffoiLiwvr16936rtihRBCCGG7vj5lhu7YMWXGbkB4uDJL5xfcwfaS\nXVxsvKh6LiEogaykLAI8ArQNWNzBpqwsKyuL0tJSAF599VV++MMf8uabb/Lyyy/bNTghtDKSG1fF\n2CZjRQzFaBovFRXw85/DkSPWpM5gUPbR/f3fm2nUneftU2+rkjovVy8eS3mMp6Y+JUmdk7Bpxq6k\npIQZM2YA8NFHH3H06FF8fX2ZPHkyP/7xj+0aoBBCCCHsp7sb9uyBoiJ1e2wsZGeD3quF332WS1lL\nmap/Wtg0VsevxtvNW7tgxX3ZtMcuJCSEmpoaSkpKeOKJJ7h06RJGoxF/f3/aB1cndCKyx04IIYS4\ntytXlLp0bW3WNg8PZZZuxqMmTtaeoOBaAX2mPkt/gEcAWUlZJATd/xIDYTtN99hlZGTw1a9+lebm\nZh5//HEAPv/8cyIjI4cdgBBCCCG01d6u3Bzx+efq9kmTlLp0HboG3ju7nbq2OkufDh3zIuexYuIK\n3FzcNI5Y2MqmGbvu7m4++OAD3NzcWL9+PQaDgcLCQhoaGnjiiSe0iHPIZMZODMVYqDUltCFjRQyF\ns40XsxnOnYP8fGUJdoCPj3JzREJSH4eqDnKk+ggms/X0RJh3GNnJ2UT6yYSOvWg6Y+fh4cE3vvEN\nVZszDVQhhBBC3FtLi1JouLxc3f7oo7BqFVzvqeAXRTk0dzVb+gx6A0tjlrIwaiEueheNIxYP4q4z\nduvXr1d/o04HgNlstnwN8OGHH9oxvAen0+nYvHmzXCkmhBDioWYywfHjsH+/Us5kQGCgcjgiPKqL\nPeV7OFN/RvVcjH8M2cnZhHiFaBzxw2XgSrGtW7eOyIzdXRO7LVu2WBK4pqYmPvjgA7Kzs4mJiaGy\nspLc3FyeeeYZ3nrrrWEHYQ+yFCuEEOJh19CgFBqus26VQ6eDBQtg2TIzpa2XySvJo73XehDS3cWd\nVfGrmBk+UzWRI+xrpPIWm/bYrVq1ik2bNrFkyRJL2+HDh3n99dfZvXv3sIOwB0nsxFA42z4Y4bxk\nrIihcNR46e+HAwfUNekAwsLgr/4KfIJvk1eSx5WmK6rnUkJSyEzMxNfdV+OIhaZ77I4fP878+fNV\nbfPmzePYsWPDDkAIIYQQI6eyUtlL19RkbTMYlKvAFiwwc66xiD0n99Bj7LH0+7r5kpmYSUpoigMi\nFiPJphm7pUuXMmfOHL773e/i6elJZ2cnmzdv5sSJExw8eFCLOIdMZuyEEEI8THp6YO9eOHVK3R4d\nrVwHhlcT269up6q1StU/K3wW6fHpeBg8tAtW3EHTGbtt27bx5JNP4ufnR2BgIC0tLcyePZvf/e53\nww5ACCGEEMNz9apSaPj2bWubuzusXAmPzjRytOYIBy4dwGg2WvqDPYPJTs4mNiBW+4CF3dg0Yzeg\nqqqKuro6wsPDiYmJsWdcwyYzdmIoZN+UsJWMFTEU9h4vHR2wcyd89pm6PTlZKTR8mxq2X91OY0ej\npU+v07MoahFLY5di0Ns0vyM0oOmM3QAPDw/GjRuH0Wik/C+FcOLi4oYdhBBCCCFsZzbDhQuwaxd0\ndVnbvb1hzRpInNRLwbV9nKw9iRlrsjDBdwLrktcR5hPmgKiFFmyasdu1axfPPfcc9fX16od1OoxG\n412eciyZsRNCCDEW3bqlHI4oK1O3T58Oq1dDbVcJucW5tPa0Wvpc9a6kxaUxd8Jc9Dq9xhELW2ha\n7iQuLo5vf/vb/N3f/R1eXl7DflMtSGInhBBiLDGZ4ORJKCiA3l5re0AAZGVBeHQHu0p3cbHxouq5\nhKAEspKyCPAI0DhiMRSaJnZBQUE0NzePqkKFktiJoZB9U8JWMlbEUIzUeGlsVAoN19RY23Q6mDcP\nli83c6XlAvll+XT2dVr6vVy9yEjIYOq4qaPq3++HlaZ77J577jl+85vf8Nxzzw37DYUQQghhm/5+\nOHQIDh+GwTufxo1TSph4B7fwyZVcylrU67LTwqaxOn413m7eGkcsHM2mGbvFixdz8uRJYmJiGD9+\nvPVhnU7q2AkhhBB2UF2tzNLduGFtc3GB1FRYuMjE6foTFFwroM9kvQA2wCOArKQsEoISHBCxGA5N\nl2K3bdt21yCeeeaZYQdhD5LYCSGEGI16emDfPqXQ8OB/xqKilFk6o2cD269up67NegGsDh3zIuex\nYuIK3FzcHBC1GC5NE7vRSBI7MRSyb0rYSsaKGIqhjpeSEsjNhVbrgVbc3JRCwzNm9nGo6iBHqo9g\nMlsvgA3zDiM7OZtIv8gRjFxoTdM9dmazmffff5/f/va31NbWEhkZydNPP83Xv/512ZAphBBCDFNH\nB+TnK7XpBktMVE68tpgr+EVRDs1dzZY+g97A0pilLIxaiIveReOIhbOyacbuP/7jP/jwww/513/9\nV6Kjo6mqquLNN9/kqaee4jvf+Y4WcQ6ZTqdj8+bNLFu2TD5dCyGEcEpmM1y8qBQa7rQeaMXLCzIy\nIGFSF3uv7eFM/RnVczH+MWQnZxPiFaJxxGKkFRYWUlhYyNatW7Vbio2NjeXAgQOqa8QqKytZsmQJ\nVVVV93jScWQpVgghhDNrbVWWXUtK1O3TpsGqVWaqui6TV5JHe2+7pc/dxZ1V8auYGT5TVszGGE2X\nYjs7OwkJUX8qCA4Opru7e9gBCOEMZN+UsJWMFTEUXzZezGblYMTevepCw/7+yrJrWPRtckvyuNJ0\nRfVcSkgKmYmZ+Lr7ahC5GK1sSuwyMjJ4+umneeONN4iJiaGiooJXX32V1atX2zs+IYQQYsy4cUMp\nYVJdbW3T6WDOHFixwsxnN4v49OQeeow9ln5fN18yEzNJCU1xQMRitLFpKba1tZWNGzfyhz/8gb6+\nPlxdXfnqV7/KT3/6UwICnPOKElmKFUII4SyMRqXI8MGD6kLDoaFKCRPP4Ca2X91OVat6e9Os8Fmk\nx6fjYfDQOGKhNYeUOzEajTQ1NRESEoKLi3OfwJHETgghhDOoqVFm6RobrW16PSxZAgsXGTlRf4QD\nFQcwmq0ZX7BnMNnJ2cQGxGofsHAITRO7Dz74gBkzZjB9+nRL2/nz57lw4QLr168fdhD2IImdGArZ\nNyVsJWNF2OLq1Up27Spj794LmEzTmDgxnpAQ5QDihAnKLF2fZw3br26nscOa8el1ehZFLWJp7FIM\nept2S4kxQtPDE5s2beLcuXOqtsjISLKzs502sRNCCCEc4erVSt58s5SKijQaGvQEBCzj3Ll9zJ4N\nTzwRw4xZveyv2MfJyycxY/2HfILvBNYlryPMJ8yB0YvRzqYZu8DAQJqamlTLr/39/QQHB9M6uDy2\nE5EZOyGEEFrr6IB//ucCSkpWqNoDA2HhwgL+ekMUucW5tPZY/+101buSFpfG3Alz0ev0WocsnISm\nM3YpKSl8+umnPP7445a2P/3pT6SkyAkdIYQQwmyG8+eV2yOqq63JmcEACQkQGNbB5xyi46L6H+6E\noASykrII8HDOg4hi9LEpsfvBD35AZmYmn3zyCXFxcZSVlbF3717y8vLsHZ8QmpB9U8JWMlbEF928\nqRQaLi9XXuv1yj2u48aBwXU/jA/iNPm4UU4MEwHwcvUiIyGDqeOmSqFhMaJsSuwWL17MxYsX+d3v\nfkdNTQ1z587lJz/5CVFRUfaOTwghhHBKRiMcOwaFhdDfb22fPj2e8qpt3DQ0Unp9NwaDG75+riyc\noiR108KmsTp+Nd5u3o4JXIxpQy53cv36dSIiIuwZ04iQPXZCCCHspbZWKWFy/bq1TaeD+fMhPOoy\nm/7wKlfcrmE0m9HpzPjddGPVwpU8t/w5EoISHBe4cFqa7rFraWnhhRde4NNPP8VgMNDZ2cn27ds5\nefIk3/ve94YdhBBCCDEa9PTA/v1w4oSyr25AeDhkZ4POt56Xf/46rRNvEo6/pT8yJZLwnnBJ6oTd\n2XT85pvf/CZ+fn5UVlbi7u4OwIIFC/j444/tGpwQWiksLHR0CGKUkLHy8CouhnfegePHrUmdqyus\nWgXPbOjls67d/LLol7T0tlie6S7pZmb4TBKCEjDpTA6KXDxMbJqx27dvH/X19bi6ulraQkNDaRxc\nRlsIIYQYg9rbYedOuHRJ3R4fD1lZ0Gwu5d2iXG513wJAjx69Tk+MfwzGECN+7n4AuOndtA5dPIRs\nSuwCAgK4ceOGam9dVVXVqNhrJ4Qt5JSjsJWMlYeH2QxnzsCePdDdbW338oKMDIhL7iC/bBcXGy+q\nnkudkUpDVQMBMQHwqNLWU9JD2vI0DaMXDyubEru///u/52//9m/53ve+h8lk4tixY7zyyit84xvf\nsHd8QgghhOaamiAnByor1e0zZkB6upni2+d4+9Ruuvq7LH2eBk9WJ6xmeth0isuK2XdmH72mXtz0\nbqQtTyM5IVnj30I8jGw6FWs2m3nrrbf4xS9+QUVFBdHR0Xzzm9/kpZdectr6O3IqVgyF1CYTtpKx\nMrYZjXD4MBw8qHw9IChIWXb1H99MbnEu125dUz13txImMl6ErTQ9FavT6XjppZd46aWXhv2GQggh\nhDOqqlJm6W7csLbp9bBwISxeYuRUw1F+d/oA/SZr0boAjwCykrLktKtwGjbN2BUUFBAbG0tcXBz1\n9fX8+7//Oy4uLrzxxhuMHz9eizhV/v3f/51jx44RGxvLb37zGwyGO/NTmbETQghhi+5u2LsXTp9W\nt0+YAOvWQZ9nDduvbqexw3pgUK/TsyByAUtjl+LmIocixPCNVN5iU7mTb33rW5bk6eWXX6a/vx+d\nTsc//MM/DDuAoTp//jx1dXUcPHiQSZMm8emnn2oegxBCiLHh8mV4+211UufmBmvWwNPP9FB0O4/3\nzrynSuoifCN4fubzpMenS1InnI5NS7F1dXVER0fT19dHfn6+pZ5deHi4veO7w7Fjx1i9ejUAGRkZ\nvP/++zzxxBOaxyHGFtkHI2wlY2VsuH0b8vLgyhV1e1ISrF0L9X1X+HlRHrd7blv63FzcWDFxBXMn\nzEWvs2leRMaL0JxNiZ2fnx8NDQ1cunSJRx55BF9fX3p6eujr67N3fHdoaWmxJJR+fn7cvHlT8xiE\nEEKMTmYznDoF+/Ypt0gM8PFRZuki42+zq3Qnl5suq55LDEpkbdJaAjwCNI5YiKGx6SPHxo0bmTt3\nLk8++STf+ta3ADhy5AgpKSkP/MY/+9nPmD17Nh4eHnz9619X9d28eZOvfOUr+Pj4EBsby+9//3tL\nX0BAALdvK5+gWltbCQoKeuAYhBggn6iFrWSsjF6NjfCb3ygzdYOTulmz4FvfMtMZcIp3Tr2tSuq8\nXb3528l/y5NTn3ygpE7Gi9CaTYcnAK5evYqLiwsJCcrJn+LiYnp6epg6deoDvfGf/vQn9Ho9+fn5\ndHV18f7771v6vva1rwHw3nvvcfbsWdauXcvRo0eZPHky58+f50c/+hEffPAB3//+94mPj+fxxx+/\n8xeTwxNCCCGA/n6lfMnhw2AadKtXSIhyv6tnSCM5V3Oovl2tem5m+EzS49LxdPXUOGLxMBqpvMXm\nxM5eNm3aRE1NjSWx6+joICgoiEuXLlmSyGeeeYaIiAjeeOMNAL797W9z/PhxYmJieP/99+VUrBg2\n2QcjbCVjZXSpqFBKmDQ3W9tcXGDxYliwqJ+jtQc5UnUEo9latC7YM5js5GxiA2KH/f4yXoSt7F7H\nbtKkSVz5y67SqKiouwZRVVU1rAC++EsUFxdjMBgsSR3A9OnTVRdv/+AHP7DpZz/77LPExsYCyhLu\njBkzLP+BDfw8eS2vAc6dO+dU8chreS2vh/e6pwd6epZx5gxUVCj9sbHLiI6GoKBCrnc08KuzN2ju\naqbiXAUA8Y/Gszh6MaZrJirOVRC7LNZpfh95PfZeD3xdUVHBSLrrjN2hQ4dYsmTJHUF80UCgD+qL\nM3aHDh3iq1/9KvX19Zbv+dWvfsXvfvc79u/fb/PPlRk7IYR4+JjNcOkS7NwJHR3Wdnd3SE+HydO6\n2HttD2fqz6iei/KLIjs5m3He4zSOWAiF3WfsBpI6GH7ydi9f/CV8fHwshyMGtLa24uvra7cYhBBC\njH63bsGOHVBSom5PSYE1a8xUdV/i7VM76eizZnzuLu6sjFvJ7IjZTntFphBDcdfEbtOmTXfNHgfa\ndTodr7/++rAC+OJ/SElJSfT391NaWmpZjj1//jxTpkwZ1vsIcS+FhYV2/QAjxg4ZK87HZIITJ6Cg\nAAZX4fLzg8xMGB97i5ziHZTcVGd8KSEprElcg5+7n91ik/EitHbXxK66uvqen14GErsHZTQahs3u\nrAAAIABJREFU6evro7+/H6PRSE9PDwaDAW9vbx577DFee+01fv3rX3PmzBlycnI4duzYkN9jy5Yt\nLFu2TP6jEkKIMaqhAbZvh7o6a5tOB3PmwPIVJs7dOMH/nCygz2TN+Pzc/chMzGRSyCQHRCyEWmFh\n4T23vA2Vw07Fbtmy5Y7Zvi1btvDaa6/R0tLChg0b2LNnDyEhIfyf//N/hny7hOyxE0KIsauvDwoL\n4dgxdQmTceOUEiaGgHpyinOoa7NmfDp0zJkwh7SJabgb3LUPWoh7sHu5k/Lycpt+QFxc3LCDsAdJ\n7IQQYmwqK4PcXGhpsbYZDJCaCnPm93KoupDjNccxma0Z3zjvcaxLXkekX6QDIhbi/uye2On1epuC\nMBqN9/0+R5DETgyF7IMRtpKx4jgdHbB7N5w/r26PjVVm6Vp0pewo3kFLtzXjM+gNLI1ZysKohbjo\nXbQNGBkvwnZ2PxVrGjy3LYQQQjiI2QwXLkB+PnR2Wts9PWHVKkic3MHu8nwuXL+gem5iwESykrII\n9grWOGIhHMfhN0/Yi06nY/PmzXJ4QgghRrGbN5Vl1y/uDpoyBVavNlPWcZ780ny6+rssfZ4GT1bF\nr2LG+BlSwkQ4vYHDE1u3brXvUuzq1avJz88H1DXtVA/rdBw8eHDYQdiDLMUKIcToZTTC8ePKAYnB\nJUz8/SErC4Ijb5JzNYdrt66pnps6bioZCRl4u3lrG7AQw2T3pdi/+7u/s3z93HPP3TUIIcYC2Qcj\nbCVjxf5qa5X7XRsarG06HcyfD6lLjZy+fpQ/nDpAv6nf0h/gEUBWUhYJQQlf8hMdR8aL0NpdE7un\nnnrK8vWzzz6rRSxCCCEeYr29SpHhEyeUfXUDxo+HdevA5FPDtos5XO+4bunToWNB1AKWxS7DzcXN\nAVEL4Vxs3mN38OBBzp49S8dfLt8bKFD8yiuv2DXAByVLsUIIMXoUFyvXgbW2WttcXWHZMnh0dg+F\nVfs4VXsKM9a/6+E+4axLXke4b7j2AQsxwuy+FDvYxo0b+eSTT1iyZAmenp7DflOtyM0TQgjh3Nrb\nYedOuHRJ3R4fr+ylu268wrtn8rjdY71D3FXvyoqJK5gXOQ+97v6luYRwZg65eSIwMJBLly4REREx\nYm9sbzJjJ4ZC9sEIW8lYGRlmM5w9q9Sl6+62tnt5QUYGxCa1satsJ5/f+Fz1XEJQAllJWQR4BGgc\n8YOR8SJspemMXVRUFG5usndBCCHE8DU1KSVMKirU7dOnw6pVZi63FvH2qT30GHssfd6u3qxJXMMj\noY/IwT0h7sGmGbtTp07x/e9/nyeffJKwsDBVX2pqqt2CGw6ZsRNCCOdiNMLhw3DwoPL1gMBA5eYI\n37Ab5BTnUNVapXru0fGPsip+FZ6uo2crkBBDpemMXVFREXl5eRw6dOiOPXbV1dXDDkIIIcTYVl0N\n27fDjRvWNr0eFi6ERUv6OV53iMOnD2M0WzO+YM9gspKymBg40QERCzE62TRjFxwczMcff0x6eroW\nMY0ImbETQyH7YIStZKwMTXc37NsHp0+rS5hMmKDM0vV4VJJTnENTZ5OlT6/Tszh6MakxqRj0Ns0/\nOC0ZL8JWms7YeXt7s3Tp0mG/mdbkVKwQQjjOlStKCZO2NmubmxusWAFTH+1iX8Uezlw5o3om0i+S\ndcnrGOc9TuNohXAMh5yK3bZtGydPnmTTpk137LHT653zqLnM2AkhhGPcvq2UMLl8Wd2elASZmWZq\nei+xq3QX7b3tlj53F3dWxq1kdsRsORwhHkojlbfYlNjdLXnT6XQYB++AdSKS2AkhhLbMZmXJde9e\n6LEeaMXHB9asgYi4W+wszaO4uVj13KSQSWQmZuLn7qdxxEI4D02XYsvLy4f9RkI4M9kHI2wlY+XL\nNTYq97t+8TzdzJmQttLExZsn+fnpAnqNvZY+XzdfMhMzSQlN0Tha7ch4EVqzKbGLjY21cxhCCCFG\no/5+pXzJkSPqEibBwcrhCI+QBv778nbq2uosfTp0zI6YTVpcGh4GDwdELcTYZfNdsaONLMUKIYR9\nVVQos3TNzdY2FxdYvBjmL+zjcE0hx2qOYTKbLP3jvMeRnZRNlH+U9gEL4cQ03WM3GkliJ4QQ9tHV\nBXv2wBn1gVaiopRZujZDGbnFubR0t1j6DHoDqTGpLIpahIveReOIhXB+mu6xG62k3ImwleyDEbZ6\nmMeK2QyXLsGuXdBuPdCKuzusXAkp0zrYXZ7PhesXVM/FBsSSnZRNsFewxhE73sM8XoRtHFLuZDSS\nGTsxFPLHV9jqYR0rra1KTbpi9YFWUlIgI8NMRdcF8svy6ezrtPR5GjxZFb+KGeNnPLQlTB7W8SKG\nTtOl2PLycl599VXOnTtH+6CPaTqdjqqqqns86TiS2AkhxPCZTHDyJBQUQK/1QCu+vpCZCWGxN8kt\nzqW8RV09Yeq4qaxOWI2Pm4/GEQsxOmma2M2fP5+EhASeeuqpO+6KddZPIpLYCSHE8DQ0KPe71lkP\ntKLTwezZsGy5kbNNxyisKKTf1G/pD/AIYG3iWhKDEx0QsRCjl6aJnZ+fHy0tLbi4jJ4Nr5LYiaGQ\n5RJhq4dhrPT1wYEDcPSoMmM3YNw45XCEzr+GnKs5XO+4bunToWN+5HyWT1yOm4ubA6J2Tg/DeBEj\nQ9PDE6mpqZw9e5bZs2cP+w2FEEI4r7IyyM2FFuuBVlxcYOlSmD2vhwNVBZwsO4kZ6z9A4T7hZCdn\nE+Eb4YCIhRCD2TRj98ILL/CHP/yBxx57THVXrE6n4/XXX7drgA9KZuyEEMJ2nZ2Qnw/nz6vbY2Mh\nKwuaucqOkh3c7rlt6XPVu7J84nLmR85Hr3POe8OFGC00nbHr6OggKyuLvr4+ampqADCbzQ/tKSch\nhBgrzGa4eFEpYdJpPdCKhwesWgUJk9vYVbaTz298rnouISiBtYlrCfQM1DhiIcS92JTYbdu2zc5h\n2IfUsRO2kn0wwlZjaay0tCjLrmVl6vYpU2D1ajNX24p45/Reuvu7LX3ert5kJGQwZdwU+XBvg7E0\nXoR9jHQdu7smdhUVFZY7YsvLy+/2bcTFxY1YMCNty5Ytjg5BCCGcjskEx45BYaFyUGKAvz+sXQuB\nE27wx+IcqlrV5aweHf8o6fHpeLl6aRuwEGPYwATU1q1bR+Tn3XWPna+vL21tbQDo9V++d0Kn02Ec\nfOuzE5E9dkIIcae6OqWESUODtU2ng3nzIHVZPycbDnOo8hBGs/Vve5BnENlJ2UwMnOiAiIV4OMhd\nsfchiZ0QQlj19sL+/XD8uLKvbsD48UoJk37vSnKKc2jqbLL06XV6FkUtIjUmFVcXVwdELcTDY6Ty\nFjnGJASM6P4GMbaNxrFSUgLvvKMsvw78u2EwQHo6rP96N2fac3j/3PuqpC7SL5JvzPoGaXFpktQN\nw2gcL2J0s+nwhBBCiNGnvV057frZZ+r2uDhYu9ZMg/Fzfl60k/Ze61WR7i7upMWlMTtitpQwEWIU\nkqVYIYQYY8xmOHcOdu+Gri5ru5cXrF4NMUmt5JXuoLi5WPVccnAya5PW4ufup3HEQgjZY3cfktgJ\nIR5Gzc2QkwMVFer26dNhZbqJS7dOUnCtgF5jr6XP182XzMRMJoVMkhImQjiIpgWKBzMNvjiQu5+Y\nFWI0kVpTwlbOOlaMRjhyBA4ehP5+a3tgoHJzhHdYAx9fzaG2rVb13JyIOaTFpeFh8NA44oeDs44X\nMXbZlNgVFRXx4osvcv78ebq7rYUqnbnciRBCPCyqq5VZusZGa5teDwsWwKIlfRytO8DRoqOYzNYP\n5qFeoWQnZxPtH+2AiIUQ9mLTUuyUKVNYt24dTz/9NF5e6sKUA0WMnY0sxQohxrqeHti3D06dUpcw\niYiAdeugw62M3OJcWrpbLH0uOheWxi5lUdQiXPQuDohaCPFlNN1j5+fnR2tr66jaeyGJnRBiLLty\nBfLy4PZta5ubG6xYAVMe7WRPeT7nr59XPRPjH0N2cjYhXiEaRyuEuB9N69h95StfIT8/f9hvprUt\nW7ZIDSFhExknwlaOHittbfCHP8DHH6uTusRE+Md/NOMZe553Tv9MldR5GDxYl7yOZ2c8K0mdxhw9\nXoTzKywsHNErUG3aY9fV1cVXvvIVlixZQlhYmKVdp9Px4YcfjlgwI03uihVCjBVmMxQVwZ49yhLs\nAG9vWLMGwuNuklOSS3mL+m7vKeOmkJGQgY+bj8YRCyFsodldsYPdLUHS6XRs3rx5RAIZabIUK4QY\nK27cUA5HVFWp22fOhBVpRs41H6OwopB+k/U4rL+7P2uT1pIUnKRxtEKIByF17O5DEjshxGjX3w+H\nDsHhw0o5kwHBwcr9rq5BtWy/up3rHdctfTp0zI+cz/KJy3FzcXNA1EKIB6F5Yrd//34+/PBDamtr\niYyM5Omnn2bFihXDDsBeJLETQyG1poSttBorlZXKLF2T9fpW9HpYvBjmLezhUM1+TtScwIz179x4\nn/GsS15HhG+E3eMTtpG/LcJWmh6e+PWvf83jjz9OeHg4jz32GOPHj+fJJ5/kl7/85bADEEIIYdXV\npSR077+vTuqiouCb34TI6cX88uw7HK85bknqXPWupMel8/zM5yWpE+IhZ9OMXWJiIp9++inTp0+3\ntF24cIHHHnuM0tJSuwb4oGTGTggxmpjN8PnnsHMntLdb293dYeVKSJ7aRn7ZLi7duKR6Lj4wnqyk\nLAI9AzWOWAgxkjRdig0ODqa+vh43N+t+jZ6eHiIiImhubh52EPYgiZ0QYrRobYUdO6C4WN0+aRKs\nWWOmtOMMe8r30N1vvfnHy9WLjIQMpo6bOqpqjAohvpymS7GLFi3i5ZdfpqOjA4D29nb+7d/+jYUL\nFw47ACGcgdSaErYaybFiMsGJE/D22+qkztcXHn8cVq5r4v+VbyOnOEeV1M0YP4MX577ItLBpktQ5\nOfnbIrRmUx27d999lyeeeAJ/f3+CgoK4efMmCxcu5Pe//7294xNCiDHp+nXYvh1qa9Xtc+bA0uX9\nnG48zKenDmE0W4/DBnkGkZWURVxgnMbRCiFGiyGVO6murqauro6IiAiioqLsGdewyVKsEMIZ9fXB\ngQNw9KgyYzcgNFQpYYJ/FTlXc7jRecPSp9fpWRS1iNSYVFxdXLUPWghhd3bfY2c2my1T/KbBf32+\nQK+3aTVXc5LYCSGcTXk55ObCzZvWNhcXSE2FWfO6Kazay+m606pnJvhOYF3yOsJ8whBCjF12T+x8\nfX1pa2sD7p686XQ6jIOrZjoRSezEUEitKWGrBxkrnZ2wezecO6duj4mBrCwzN7hMXkke7b3W47Bu\nLm6kTUxjzoQ56HXO+QFa3J/8bRG2Gqm85a577C5dsh6pLy8vv9u3CSGEuAuzGS5ehF27lORugIcH\nrFoFcSmt7CzN42rzVdVzycHJZCZm4u/hr3HEQojRzqY9dv/1X//Fv/3bv93R/qMf/YiXX37ZLoEN\nl8zYCSEcqaVFWXYtK1O3P/IIrM4wcbn1FPuu7aPX2Gvp83HzITMxk5SQFDntKsRDRtM6doOXZQcL\nDAykpaVl2EHYg06nY/PmzSxbtkymwYUQmjGZ4Phx2L9fOSgxwN8f1q4F/4jrbL+6ndo29XHY2RGz\nWRm3Eg+Dh8YRCyEcqbCwkMLCQrZu3Wr/xK6goACz2Ux2dja5ubmqvrKyMr73ve9RWVk57CDsQWbs\nxFDIPhhhq3uNlbo65Tqw+nprm04H8+bBkqV9HKs/wNHqo5jM1gNpoV6hZCdnE+0fbefIhSPI3xZh\nK7vvsQPYsGEDOp2Onp4ennvuOdWbh4WF8dOf/nTYAQghxGjX26vM0B0/ruyrGxAWBuvWQY9XOe9d\nyOVml/U4rIvOhdSYVBZFL8Kgt6mkqBBC3JdNS7Hr16/nt7/9rRbxjBiZsRNCaKGkRLkO7NYta5vB\nAMuWwfTZneyr2M25BvVx2Bj/GLKTswnxCtE2WCGE09J0j91oJImdEMKe2tshP1859TpYXBysXWum\ntv8iu0p30dlnPQ7rYfBgVfwqHh3/qByOEEKoaLIUO6C1tZUtW7Zw4MABmpubLQWLdTodVVVVww5C\nCEeTfTDifq5erWTv3jI+//wCvr7T6O+Px8cnxtLv5QWrV0NUYgs7SnIpa1Efh30k9BHWJK7Bx81H\n69CFA8nfFqE1mxK7F154gerqal577TXLsux//ud/8jd/8zf2jk8IIRzu6tVKtm0rxWhM4/x5PQbD\nMvr79zFjBoSExDBtGqxMN3Kx5Tg/P11In8l6HNbf3Z+1SWtJCk5y4G8ghHhY2LQUGxoayuXLlwkJ\nCcHf35/W1lZqa2vJzs7mzJkzWsQ5ZLIUK4QYKT/+cQFFRSuoqVEfjggJKeD//t8VeITWklOcQ0N7\ng6VPh455kfNYMXEFbi5uDohaCDGaaLoUazab8fdXKqD7+vpy69YtwsPDKSkpGXYAQgjhrEwmOHsW\nCgr03L5tbdfpIDISHplmpMS8ixNnTmDG+gd5vM94spOymeA3wQFRCyEeZjYldtOmTePgwYOkpaWx\nePFiXnjhBby9vUlOTrZ3fEJoQvbBiC8qL1cOR1y/Dv391rpzvb2FLFiwjF7fYk7r/kR3zThLn0Fv\nYHnscuZHzsdF7+KIsIWTkb8tQms2JXa/+tWvLF//5Cc/4ZVXXqG1tZUPP/zQboEJIYQjNDfD7t1w\nddD1rXFx8RSd34YhpIPuzvMUNP0WXW8TC6dMtH5PYBxZSVkEeQY5IGohhFDYtMfuxIkTzJs37472\nkydPMnfuXLsENlyyx04IMRRdXXDgAJw8qSzBDnBzg+iJVyks/wlXXKpo7K/HrOvH76YbC2bNIzom\nmtXxq5kWNk1KmAghHphT3BUbFBTEzZs3v+QJx5PETghhC6MRioqUmyO6uqztOh1Mnw5pafCz/+8N\njhuO09rTqno2qTWJH3/rx3i5emkctRBirBmpvEV/r06TyYTRaLR8Pfh/JSUlGAxyDY4YGwoLCx0d\ngnCAkhJ4913Iy1MndTEx8PzzkJndy4kbezlQecCS1N26cgsPgwfTw6YzOWyyJHXinuRvi9DaPTOz\nwYnbF5M4vV7Pq6++ap+ohBDCjm7cUA5GlJaq2wMDIT0dUlKg5GYxn5zK41b3LfR/+QysQ8c473HM\niZiDi94FtzYpYyKEcC73XIqtqKgAIDU1lUOHDlmmCHU6HaGhoXh5Oe8nVVmKFUJ8UWcnFBbC6dPq\nfXTu7pCaCvPmQafxNjtLdnK56bKlv6muiWvl15g8dzLebt4A9JT08OzyZ0lOkOoAQojhk7ti70MS\nOyHEAKNRORRx4AB0d1vbdTqYOROWLwcvbxMna09ScK2AXmOv5Xu8XL1Ij0vHs92TgrMF9Jp6cdO7\nkTYzTZI6IcSI0TSxW79+/ZcGADhtyRNJ7MRQSK2psclshuJipXxJc7O6Ly5Ouds1LAxqb9eSW5xL\nfXu96ntmjJ/BqvhVqn10MlbEUMh4EbbS9OaJ+Ph41Rs2NDTwP//zPzz11FPDDkAIIezh+nXYtQuu\nXVO3BwfDqlWQlAQ9xm7ySgo4VXtKdXNEqFcoa5PWEhsQq23QQggxTA+8FHv69Gm2bNlCbm7uSMc0\nImTGToiHU3u7UrrkzBn1va4eHrB0KcydC3q9mc9vfM6u0l209VpLORn0BlJjUlkUtUhujhBCaMrh\ne+z6+/sJDAz80vp2zkASOyEeLv39cOIEHDwIPT3Wdr0eZs+GZcvAywtudt0krySP0pvqI7EJQQlk\nJmbKzRFCCIfQdCl23759qorqHR0dfPzxxzzyyCPDDmCobt++zcqVK7l8+TInTpxg8uTJmscgxh7Z\nBzN6mc1w+TLs2QMtLeq+hARlH11oKBhNRg5WHuFg5UH6Tf2W7/Fx82FNwhomh0626eYIGStiKGS8\nCK3ZlNg999xzqj943t7ezJgxg9///vd2C+xuvLy8yMvL43//7/8tM3JCPOTq6pR6dJWV6vbQUGUf\nXWKi8rriVgU7indwo/OG5Xt06JgzYQ4rJq7Aw+ChYdRCCGE/NiV2A/XsnIHBYCAkJMTRYYgxRj5R\njy5tbbBvH5w/r95H5+mplC6ZNQtcXKCzr5PdZbs513BO9Xy4TzhZSVlM8Jsw5PeWsSKGQsaL0JrN\nd4LdunWLHTt2UFdXR0REBJmZmQQGBtozNiGEUOnrg2PH4PBh6LWWmkOvV4oLp6YqyZ3ZbOZs/Tl2\nl+2mq996V5ibixsrJq5g7oS56HX3vFFRCCFGJZv+shUUFBAbG8tbb73FqVOneOutt4iNjWXv3r1D\nerOf/exnzJ49Gw8PD77+9a+r+m7evMlXvvIVfHx8iI2NVS3zvvnmmyxfvpwf/vCHqmds2Q8jhC3k\nPkfnZjbDxYvws59BQYE6qUtOhhdeUPbSeXpCY0cj285t489X/6xK6iaHTubFuS8yP3L+sJI6GSti\nKGS8CK3ZNGP3wgsv8Mtf/pKvfvWrlrY//vGPvPjii1y5csXmN5swYQKbNm0iPz+frsE3bv/lPTw8\nPGhsbOTs2bOsXbuW6dOnM3nyZP7lX/6Ff/mXf7nj58keOyHGvpoapR5dTY26PSxMSebi4pTXfcY+\nDlYe5Ej1EUxm631hAR4BZCZmkhScpGHUQgjhGDaVOwkICKC5uRkXF2tdp76+PkJDQ7l169aQ33TT\npk3U1NTw/vvvA8op26CgIC5dukRCQgIAzzzzDBEREbzxxht3PJ+Zmcn58+eJiYnhG9/4Bs8888yd\nv5hOxzPPPENsbKzld5gxY4Zlv8PApyh5La/ltXO+bm+Hnp5lXLwIFRVKf2zsMry9wc+vkMREWLFC\n+f6P/vwRx2uPEzJZ2X9bca4CHTqeWvcUqTGpHD101OG/j7yW1/JaXg9+PfD1wDmGDz74QLs6dhs3\nbiQhIYGXXnrJ0vbWW29RUlLCT3/60yG/6Xe+8x1qa2stid3Zs2dZvHgxHR0dlu/50Y9+RGFhIdu3\nbx/yzwepYyfEaNXbC0eOwNGjyp66AS4uMH8+LFmiFBsGaOtpY2fpTj6/8bnqZ0T7R5OVlMU473Ea\nRi6EEA9O0zp2Z86c4d133+UHP/gBEyZMoLa2lsbGRubNm8eSJUssAR08eNCmN/3i3rj29nb8/PxU\nbb6+vk5b/FiMPYWFhZZPU8IxzGbllOu+fcqp18EmT4b0dBg4r2UymzhVe4qCawX0GK3ViD0NnqTH\np/Po+EfttgdXxooYChkvQms2JXbPP/88zz///D2/Zyh/RL+Ykfr4+HD79m1VW2trK76+vjb/TCHE\n6FVVpeyjq6tTt4eHK/vo/rKjAoC6tjpyi3Opa1N/84zxM0iPS8fbzdv+AQshhJOyKbF79tlnR/RN\nv5gEJiUl0d/fT2lpqWWP3fnz55kyZcqw3mfLli0sW7ZMPi2J+5Ix4hgtLbB3L1y6pG738YGVK2H6\ndBj4c9HT30PBtQJO1p7EjPXDYYhXCFlJWcQGxGoSs4wVMRQyXsT9FBYWqvbdDZfNd8UePHiQs2fP\nWvbBmc1mdDodr7zyis1vZjQa6evrY+vWrdTW1vKrX/0Kg8GAi4sLX/va19DpdPz617/mzJkzZGVl\ncezYMVJSUh7sF5M9dkI4rZ4eOHQIjh9X7ngdYDDAwoWweDG4uSltZrOZz298zq7SXbT1WtdoDXoD\nqTGpLIxaiEFvc0lOIYRwSprusdu4cSOffPIJS5YswdPT84Hf7Lvf/S6vv/665fVHH33Eli1beO21\n13jnnXfYsGED48aNIyQkhHffffeBkzohhkr2wWjDZIJz55RadO3t6r4pU5RZuoAAa1tLVwt5JXmU\n3CxRfW98YDxrk9YS5BmkQdRqMlbEUMh4EVqzacYuMDCQS5cuERERoUVMI0Jm7MRQyB9f+7t2TbnX\ntaFB3T5hAmRkQFSUtc1oMnK0+igHKw/SZ7IejfVx8yEjIYNHQh9xWIFyGStiKGS8CFuNVN5iU2I3\nbdo0CgoKRtUdrZLYCeEcbt6E3bvhi7XM/fyUGbqpU6376AAqb1WSW5zLjc4bljYdOmZHzCYtLg0P\ng4dGkQshhHY0XYp97733eP7553nyyScJCwtT9aWmpg47CHuRwxNCOE53Nxw8CCdOgNFobXd1VfbQ\nLVyofD2gs6+TPWV7ONtwVvVzxvuMJyspi0i/SI0iF0II7Tjk8MS7777LSy+9hK+v7x177Kqrq0cs\nmJEkM3ZiKGS5ZOSYTFBUBPv3Q2enum/6dEhLU2brBpjNZs5fP8/ust109lkfcHNxY3nscuZFzhvW\n3a4jTcaKGAoZL8JWms7Yvfrqq+Tm5pKenj7sNxRCjF1lZco+usZGdXt0tFKPbsIEdfuNjhvsKNlB\nxa0KVXtKSAoZCRn4e/jbN2AhhBhjbJqxi46OprS0FLeB+gOjgMzYCaGdpiYloStRH14lIEC5MWLy\nZPU+uj5jH4eqDnGk6ghGs3Wd1t/dn8zETJJDkjWKXAghnIOmhye2bdvGyZMn2bRp0x177PR651ki\nGUwSOyHsr7MTDhyAU6eUJdgBbm7Kna4LFii16QYrvVnKjuIdtHS3WNr0Oj0LIhewNHYpbi6j5wOk\nEEKMFE0Tu7slbzqdDuPgXdFORKfTsXnzZjk8IWwi+2CGxmiE06ehsBC6uqztOh08+iisWKHcHjFY\nW08b+WX5fNb4mao9yi+KrKQswnzUHxqdlYwVMRQyXsT9DBye2Lp1q3Z77MrLy4f9Ro6wZcsWR4cg\nxJhiNivLrbt3K8uvg8XGKvXoxo9Xt5vMJk7XnWZf+T56jD2Wdg+DB+lx6cwMn+mwmnRCCOFoAxNQ\nW7duHZGfZ/OVYgAmk4nr168TFhbmtEuwA2QpVoiR1dio7KMrK1O3BwXBqlWQnKzeRwdQ31ZPbnEu\ntW21qvZpYdNYHb8abzdvO0cthBCjg6anYm/fvs2LL77Ixx9/TH9/PwaDgSeeeIKf/vQTL88OAAAg\nAElEQVSn+PvLqTUhxrKODqV0SVGRMmM3wN0dli6FuXPv3EfX09/D/or9nKg5gRnrQ8GewWQlZTEx\ncKJG0QshxMPFpmm3jRs30tHRwWeffUZnZ6fl/zdu3Gjv+ITQxEgWhxwr+vvh6FF46y1lP91AUqfT\nwZw58E//pBQZHpzUmc1mLt+4zNun3uZ4zXFLUmfQG1geu5x/nPOPoz6pk7EihkLGi9CaTTN2u3bt\nory8HG9vZdkkKSmJbdu2ERcXZ9fghBDaM5uV67/27FGuAxssPl6pRzdu3J3P3eq+RV5JHsXNxar2\nuMA41iauJdgr2I5RCyGEABsTO09PT27cuGFJ7ACamprw8HDuOxvlSjFhKxkjivp6ZR9dRYW6PSRE\n2UeXmHjnPjqjycixmmMcqDhAn6nP0u7t6k1GQgZTxk0ZU4cjZKyIoZDxIu7HIVeKfe973+ODDz7g\nX//1X4mJiaGiooI333yT9evXs2nTphELZiTJ4QkhbNfeDvv2wblz6n10np6wbBnMng0uLnc+V9Va\nRW5xLo0d1qsmdOiYFTGLtIlpeLp63vmQEEKIO2hax85kMrFt2zb++7//m/r6eiIiIvja177Ghg0b\nnPaTuCR2Yige1lpTfX1w/DgcOgS9vdZ2vV7ZR7dsmZLcfVFXXxd7yvdwpv6Mqj3MO4zs5Gwi/SLt\nG7gDPaxjRTwYGS/CVpqeitXr9WzYsIENGzYM+w2FEI5nNsOlS7B3L9y6pe5LSlKWXUNCvuw5Mxeu\nXyC/LJ/Ovk5Lu6veleUTlzM/cj56nXOXQhJCiLHMphm7jRs38rWvfY2FCxda2o4ePconn3zCj3/8\nY7sG+KBkxk6IL1dbq+yjq6pSt48bpxyMiI//8ueaOpvYUbyDa7euqdonhUxiTcIa/D2k9JEQQjwo\nTZdiQ0JCqK2txd3d3dLW3d1NVFQUN27cGHYQ9iCJnRBqt28r++jOn1e3e3kpV4DNnKkswX5Rn7GP\nw1WHOVx1GKPZeoWgv7s/axLXMClkkp0jF0KIsU/zpVjT4Bu+UfbdSeIkxoqxvA+mrw+OHFH+12c9\ntIqLC8ybB6mpcLcD7mU3y9hRsoObXda6J3qdnvmR81kWuww3Fzc7R+98xvJYESNPxovQmk2J3eLF\ni/nOd77Df/7nf6LX6zEajWzevJklS5bYO75hkXIn4mFmNsPFi8o+utu31X0pKZCerlwH9mXae9vJ\nL83nYuNFVXukXyRZSVmM9xn/5Q8KIYQYEoeUO6muriYrK4v6+npiYmKoqqoiPDycnJwcoqKiRiyY\nkSRLseJhVl0Nu3Yp++kGGz9e2Uc38S6XP5jMJorqith3bR/d/d2Wdg+DByvjVjIrfJbTnoQXQojR\nTNM9dgBGo5GTJ09SXV1NVFQU8+bNQ/9lG3KchCR24mF065YyQ/fZZ+p2Hx9lH92MGV++jw6gob2B\nnKs51Laps8Gp46ayOmE1Pm4+dopaCCGE5ondaCOJnRiK0b4PpqcHDh+GY8eUO14HGAywYAEsXgyD\nzj6p9Bp72X9tv+puV4Bgz2DWJq0lLlCuDhxstI8VoS0ZL8JWmh6eEEI4J7NZuS1i3z7l9ojBHnlE\n2UcXEHD35680XSGvJI/bPdZNeC46F5bELGFx9GIMevkTIYQQo4nM2AkxSlVUKPXo6uvV7RERkJEB\n0dF3f/ZW9y12luzkavNVVfvEgImsTVpLiNeXVCcWQghhN5rN2JnNZq5du0Z0dDQGg3x6F8LRbt6E\nPXvg8mV1u68vrFwJ06bB3c43GE1Gjtccp7CikD6TtfaJt6s3qxNWM3XcVDkcIYQQo9h9Z+zMZjPe\n3t60t7c79WGJL5IZOzEUo2EfTHe3cqfr8eNgtNYJxtUVFi2ChQvB7R5l5apbq8ktzuV6x3VV+6zw\nWayMW4mn65dcCivuMBrGinAeMl6ErTSbsdPpdDz66KNcvXqVlJSUYb+hEGJoTCY4cwb274eODnXf\ntGmQlgb+97jNq6uvi73leymqL1K1h3mHkZWURZS/c5YsEkIIMXQ2ra0uX76cNWvW8OyzzxIVFWXJ\nKnU6HRs2bLB3jA9MChQLWznrGCkvV/bRXVdPshEVpdSji4y8+7Nms5mLjRfJL82no8+aEbrqXVkW\nu4z5kfNx0bvYKfKxy1nHinBOMl7E/TikQPHAwPyyvTf79+8fsWBGkizFitGsuRl274ar6rMN+Psr\nJ10feeTu++gAmjubyS3O5dqta6r25OBk1iSuIcDjHkdlhRBCaE7q2N2HJHZiKJxlH0xXFxw4ACdP\nKkuwA9zclFp0CxYoe+rupt/Uz+GqwxyqPITRbN2I5+fuR2ZiJsnByXI4YpicZayI0UHGi7CV5nXs\nmpub2bFjBw0NDXz729+mtrYWs9lM5L3WgoQQNjEaoahI2UfX1WVt1+mU2yJWrFBOvd5LeUs5O4p3\n0NzVbH0eHfMj57MsdhnuhrtUKBZCCDFm2DRjd+DAAf7mb/6G2bNnc+TIEdra2igsLOSHP/whOTk5\nWsQ5ZDJjJ0aLkhJlH11Tk7o9JkapRxcefu/n23vb2V22mwvXL6jaJ/hOICspi3Df+/wAIYQQDqfp\nUuyMGTP4r//6L1auXElgYCAtLS10d3cTHR1NY2PjsIOwB0nshLNrbFT20ZWWqtsDA5V9dCkp995H\nZzabKaovYm/5Xrr7uy3tHgYP0iamMStiFnrd6ClRJIQQDzNNl2IrKytZuXKlqs3V1RXj4GJaQoxi\nWu6D6exUllyLitT76NzdITUV5s1T7ni9l+vt18kpzqHmdo2qfcq4KWQkZODj5mOHyAXInikxNDJe\nhNZsSuxSUlLYtWsXGRkZlrZ9+/YxdepUuwUmxFhjNCqHIg4cUIoND9DpYOZMWL4cfO6Tj/Uaeyms\nKOR4zXFMZmtWGOQZxNrEtcQHxdspeiGEEKOBTUuxx48fJysri8zMTP74xz+yfv16cnJy+POf/8zc\nuXO1iHPIZClWOAuzWSlbsnu3ch3YYHFxSj26sLD7/5yrTVfJK8mjtafV0uaic2Fx9GIWRy/G1eUe\nx2WFEEI4Nc3LndTW1vLRRx9RWVlJdHQ0Tz/9tFOfiJXETjiD69dh1y64pi4nR3AwrFoFSUn33kcH\n0Nrdys7SnVxpuqJqjw2IJSspixCvkBGOWgghhNYcUsfOZDLR1NREaGio09fCksRODMVI74Npb1f2\n0Z05o8zYDfDwgGXLYM4ccLnPpQ8ms4kTNSfYX7GfXmOvpd3L1YvV8auZFjbN6f87HItkz5QYChkv\nwlaaHp5oaWnhn/7pn/jkk0/o6+vD1dWV//W//hdvvfUWQUFBww7CXuRKMaG1/n44fhwOHYKeHmu7\nXg+zZytJnZfX/X9Oze0acotzaWhvULXPDJ/JyriVeLna8EOEEEI4PYdcKfbXf/3XGAwGvvvd7xId\nHU1VVRWvvfYavb29/PnPfx6xYEaSzNgJLZnNcPky7NkDLS3qvsREZdk1NPT+P6e7v5u95XspqivC\njHX8jvMeR1ZSFtH+0SMcuRBCCGeg6VKsv78/9fX1eA2aaujs7CQ8PJzW1tZ7POk4ktgJrdTVKQWG\nKyvV7aGhysGIhIT7/wyz2cxnjZ+RX5ZPe2+7pd1V78rS2KUsiFyAi/4+a7dCCCFGLU2XYidNmkRF\nRQWTJ0+2tFVWVjJp0qRhByCEM3iQfTBtbfz/7d15dFPnmT/wryRblhfJyHg34AXbLGExYHDZjG0B\nKYU0hbY09NQESEsmTTOTtJ1OMzQsJZk0Z5I0c0q6MW0TIJiEczKnDWEmgG05ZjMQbCcEgvHK5gVs\nY3mVtdzfH/pZ5mKMr7Cszd/POZyD3nt19Yg8MQ/vfZ/3Ij8fKC8Xr6MLCrLdck1Pt92CHUpzVzMO\nXzmMqtYq0XhKWAq+kfINaAO1DsVFI4trpsgRzBdyNUmFXU5ODpYvX47169dj/PjxuHr1Kvbt24fc\n3Fz89a9/hSAIkMlk2LRp00jHS+R2JhNw8iRw4gTQ29/TALnctrlwZiYQGDj0dcxWM05cPYHiq8Uw\nW832cbVSjRUpKzAlfAqbI4iIyCGSbsX2/Wvj7r9k+oq5uxUWFjo3umHgrVhyNkEALlwAjh0D7l2B\nMGmSbR3d2LHSrlXTWoNDFYfQ3N1sH5NBhoxxGchOyEaAX4ATIyciIk/nlu1OvAkLO3Km69dt+9Fd\nFz/BC1FRtnV0SUnSrtPZ24kjVUdQ3lguGo9Vx+Kx1McQo45xUsRERORNXLrGjsjXDbYOpq3NNkP3\nxRfi8eBgICcHmDVL2jo6QRBwvv48jlUfQ7e52z4eoAiALkmH9Nh0yGUSLkRuxzVT5AjmC7kaCzui\n++jtta2hO3nStqauj0IBzJ8PLF4MBEi8W9rY0YhDFYdwzXBNND4tchoenfgo1AFqJ0ZORESjGW/F\nEt1FEGxdrvn5tq7Xu02dCixbBmglNqn2WnpRVFuEU9dPwSpY7eNalRYrU1ciOUzCPihERDQq8FYs\nkZNdvWpbR3fzpng8Jgb4+teB+Hjp16porsDhK4dxp+eOfUwhU2DhhIVYPGEx/BX+ToqaiIion+TC\n7tKlSzh48CAaGxvx9ttv46uvvkJvby9mzJgxkvERjajLl+vw979XoaDgc8jlM5CUNBHh4bYKTq0G\ndDpg5kxA6q4jBqMB/3vlf3Hp9iXReHxoPFalrkJEsITHT5BH45opcgTzhVxN0mrtgwcPIjMzEzdu\n3MCePXsAAO3t7fjpT386osERjaTPP6/D9u2V+L//y0FDQxq6unJQVlaJ1tY6ZGYCzz0HpKVJK+qs\nghWnr5/GrjO7REVdkH8QvjX5W9iQtoFFHRERjThJa+wmT56MAwcOIC0tDVqtFq2trTCZTIiJicHt\n27ddEafDuMaOBmOxAJ99BvzHfxTgzp0c0bHISCAjowA/+1nOIO8e6IbhBg5VHEJ9R71ofFb0LCyb\nuAxB/kGDvJOIiMjGpWvsbt26dd9brnIp+zwQeQhBAC5fBo4eBZqbgZ6e/vzVaICJE4HQUEChkJbX\nPeYe5Ffn49zNcxDQ/z9jRFAEVqWuQvwYBxblEREROYGkv8Fmz56NvXv3isbef/99zJs3b0SCInK2\nmzeBd94BDhywFXUAIJdboVLZul21Wj1CQ23jSqV10OsAtj3pLjRdwK4zu3D25ll7Uecn94MuUYd/\nSv8nFnU+TK/XuzsE8iLMF3I1STN2v/vd77Bs2TL85S9/QVdXF5YvX46KigocOXJkpOMblu3btyMr\nK4sLV0exO3eAggLg88/F4yoVkJs7EWVl+QgM1KG21jZuNOZDpxt8G5KW7hZ8XPExqlqrROMpYSn4\nRso3oA2UuBcKERERbMW/M/8BIHkfu87OThw6dAh1dXWYMGECVq5cCbXaczdW5Rq70a2nBzh+HDh9\nGjCb+8flcmDuXGDJEiAoyNYVm59fhd5eOZRKK3S6iZg0aeBsm9lqxslrJ/Fp3acwW/svqFaq8fXk\nr2NqxNQBz04mIiKSis+KHQILu9GprzFCrwe6usTHpkwBli4Fxo517Jq1d2pxqOIQbnf1NwrJIMO8\nuHnIScxBgJ/ER1AQERENwqXNE3V1ddixYwdKS0vR0dEhCqKiomLYQRANlyAAFRW2xoh7G7Xj4oDl\nyx+8wfD99prq7O3E0eqjKGsoE43HqmOxKnUVYtWxToqevAn3JSNHMF/I1SQVdt/97ncxZcoU7Ny5\nEyqVaqRjInLIzZvAkSOwr5PrM2aMbYbukUekbzAM2JojShtKcbTqKLrN3fbxAEUAchJzMDduLuQy\ndoQTEZHnkXQrNjQ0FC0tLVAoFK6IySl4K9b3tbXZnul6v8aIxYuBjAzAz8GH5jV1NuFQxSFcbbsq\nGn8k4hE8mvwoNAGaYUZNREQ0kEtvxa5atQpFRUXIyZG+aSvRSDEageLioRsjpLhceRnHPjuGHnMP\nau/UAmHA2Jj+RXhjVGOwMmUlUsamOPdLEBERjQBJM3a3b9/G/PnzkZqaisjIyP43y2T461//OqIB\nPizO2PkeiwU4f97WGNHZKT72MI0Rlysv453Cd9AR14GSEyUISgmCudKMtKlpiIyLxMLxC5EZnwl/\nhb9Tvwd5N66ZIkcwX0gql87Ybdq0CUqlElOmTIFKpbJ/OLd3IFcYbmPEYD48+SEuay6jpakFvZZe\nBCEIfsl+uFN/B1sf34rI4MihL0JERORBJM3YqdVq3LhxAxqN96wv4oydb3hQY4ROB0yb5lhjBGDb\nZLiwphC7P9yNnnE99nE/uR8maidicsdkvLDuheEHT0REJJFLZ+xmzJiB5uZmryrsyLu1tdmeGFFe\nLh4PCAAyMx+uMaKjtwNFtUX4rP4zWAUr5Hc9US86JBpJ2iQoFUoEdHNfOiIi8k6S/mrMycnBo48+\nio0bNyIqKgoA7LdiN23aNKIB0uhiNNqeGHHq1MDGiPR0W2NEcLBj1+wx9+DktZM4de0UTFaTfTwp\nKQnXaq4hdW4qbl28BWW4EsYrRuiydU76NuSLuGaKHMF8IVeTVNgVFxcjNjb2vs+GZWFHzmC19j8x\n4t7GiMmTbY0R4eGOXdNkMeHszbMorisW7UcHAPGh8Xhq1lPoutWF/PP56G7pRmRTJHTZOkxKnjS8\nL0NEROQmfKQYuZUgAFeu2NbR3dsYERtra4xISHDsmlbBirKGMuhr9TAYDaJj0SHR0CXqkByWzOYf\nIiLyGCO+xu7urler1TroBeRy7sBPD6e+3lbQ1dSIx0NDbTN0jjZGCIKAS7cvoaCmQPRcVwDQqrTI\nSczBtMhpLOiIiMhnDVrYaTQatLe3204aZJW6TCaDxWIZmcjIZz2oMaLviRH+Dm4dV91ajWPVx3Cz\n/aZoPEQZgiXxSzA7ZjYU8sGfnMJ1MCQVc4UcwXwhVxu0sPvyyy/tv6+urnZJMOTbRqIx4mb7TRyr\nPobqVnGOBigCsGjCImSMy4BSoXRC9ERERJ5P0hq7119/HT//+c8HjL/55pv46U9/OiKBDRfX2HkO\nq9X2xIjCwoGNEZMmAcuWOd4YcbvrNgpqCnDx1kXRuJ/cDxlxGVg4YSGC/CU+V4yIiMjNnFW3SN6g\nuO+27N20Wi1aW1uHHcRIYGHnfn2NEUePArduiY89bGOEwWiAvlaPsoYyWIX+tZ9ymRyzomdhScIS\naAK43yIREXkXl2xQXFBQAEEQYLFYUFBQIDpWVVXFDYtpUA9qjNDpgOnTHWuM6DJ14fjV4zhz4wzM\nVrPo2CMRjyA7MRvhQQ5O+92F62BIKuYKOYL5Qq72wMJu06ZNkMlkMBqNeOqpp+zjMpkMUVFR+N3v\nfjfiAd7rzJkzeP755+Hv74+4uDjs2bNn0OYOcj2Dob8x4u5/eDxsY0SvpRenr5/GiasnYLQYRccm\naidCl6RDrDrWSdETERF5N0m3YnNzc7F3715XxDOkhoYGaLVaBAQE4N///d8xZ84cfPvb3x5wHm/F\nupbRCJw4YWuMMPU/3AFyOTBnDpCV5VhjhMVqwfn68yiqK0JHb4foWKw6FkuTliJJm+Sc4ImIiNzM\npc+K9ZSiDgCio6Ptv/f394dCMfgWFjTynN0YIQgCLjRdQEFNAVp7xOs3w4PCkZOYgynhU7gXHRER\n0X147ZMn6urqsG7dOhQXF9+3uOOM3cgSBKCy0raO7t7GiJgYW2NEYqIj1xNQ2VKJ/Jp8NHQ0iI5p\nAjTISshCWnQa5LKR2RCb62BIKuYKOYL5QlI5q25x6WMjdu3ahfT0dKhUKmzcuFF0rKWlBatXr0ZI\nSAgSEhKQl5dnP/bb3/4W2dnZeOONNwAABoMB69evx7vvvssZOzdoaAD27gXee09c1Gk0wOrVwObN\njhV1V9uu4p2yd/DeF++JirpAv0Asn7gcz817DrNjZo9YUUdEROQrXDpj9z//8z+Qy+X45JNP0N3d\njb/97W/2Y+vWrQMA/OUvf0FpaSlWrlyJkydPYurUqaJrmM1mfPOb38TPf/5z5OTkDPpZnLFzvgc1\nRixaBHzta441RjR2NKKgpgCXmy+Lxv3l/pg/fj4WjF8AlZ/KSdETERF5LpfuY+dsL730Eq5fv24v\n7Do7OxEWFoYvv/wSycnJAIAnn3wSsbGxePXVV0Xv3bt3L1544QVMnz4dAPDMM89g7dq1Az6DhZ3z\nOLsx4k7PHRTWFOLzxs8hoP+/kVwmR3psOjLjMxGiDHHeFyAiIvJwLm2ecLZ7A6+oqICfn5+9qAOA\nmTNnQq/XD3hvbm4ucnNzJX3Ohg0bkPD/d8AdM2YM0tLS7Gsd+q7N14O/tlqB0NAsFBYCFy7Yjick\n2I5bLHqkpQErV0q/XrepG0gAzt08h6rSKtv10hIggwyyOhlmRc/CN1K+4Zbv+9ZbbzE/+FrS67t/\nLnlCPHzt2a+ZL3w92Ou+39fW1sKZPGLGrri4GGvXrkV9fb39nN27d2P//v0oLCx8qM/gjN3Dc3Zj\nhNFsxMlrJ3Hq+in0WnpFx1LHpiInMQfRIdGDvNs19Hq9/X86ogdhrpAjmC8klU/N2IWEhMBgMIjG\n2traoFarXRkWwdYYceQIUF0tHtdobE+MmDFD+hMjzFYzzt44i+KrxegydYmOjdeMx9KkpYgfE++k\nyIeHP3hJKuYKOYL5Qq7mlsLu3j3IUlNTYTabUVlZab8dW15ejmnTprkjvFHJYLDtRVdWJm6MUCpt\nT4xwpDHCKlhR3lAOfa0ebcY20bHI4EjoEnVIHZvKveiIiIiczKWFncVigclkgtlshsVigdFohJ+f\nH4KDg7FmzRps3boV//3f/43z58/jo48+wqlTp4b1edu3b0dWVhb/xfQAvb22xoiTJ8WNETJZf2NE\niMQ+BkEQcLn5MvKr83GrS3wPd4xqDLITsjE9arpHblvC2yUkFXOFHMF8oaHo9XrRurvhcukau+3b\nt+PXv/71gLGtW7eitbUVmzZtwtGjRxEeHo7f/OY3eOKJJx76s7jG7sGsVqC01DZL1yF+YhdSU21P\njIiIkH692ju1OFZ9DNcN10Xjwf7ByIzPxJzYOfCTe+4zffnDl6RirpAjmC8klVdvd+IKLOzur68x\n4uhRoKlJfCw62tYYkZQk/Xr17fXIr8lHZUulaDxAEYAF4xfga+O+hgC/ACdETkRE5Lu8unmC3KOh\nwVbQVVWJxzUaICcHmDlTemNEc1czCmsLcaHpgmhcIVNgXtw8LI5fjCD/ICdFTkRERFL4dGHHNXY2\n7e22J0bcrzFi0SJg/nzpjRHtxnYU1RXhfP15WAWrfVwGGdKi05CVkIVQVaiTv8HI4+0Skoq5Qo5g\nvtBQnL3GzucLu9HMmY0R3aZunLh2AiXXS2CymkTHpoRPQU5iDiKCHViUR0RERPYJqB07djjlelxj\n54OsVtvsXEHBwMaIlBTbOjqpjREmiwklN0pw/Opx9Jh7RMcSxiRgadJSjNOMc1LkREREoxPX2NF9\n9T0xYriNERarBaUNpSiqLUJ7b7voWExIDJYmLUWSNol70REREXkQFnY+orHRVtDd2xihVvc/MUIu\nYfs4QRDw5a0vUVBTgJbuFtGxsMAw6BJ1mBox1ecKOq6DIamYK+QI5gu5mk8XdqOhecJZjRGCIKCq\ntQr51fmo76gXHVMr1ViSsASzomdBIVc4+RsQERGNXl69QbEr+foau95eW1PEiRMDGyNmzways6U3\nRlw3XMex6mOovVMrGlf5qbBowiJkxGXAXyGxbZaIiIgcxjV2o1RfY0RhoW227m4pKbYnRkRGSrvW\nrc5bKKgpwKXbl0Tj/nJ/ZIzLwMLxCxHoH+ikyImIiGiksbDzIn1PjGhsFI9HRdkaIyZOlHadtp42\n6Gv1KGsog4D+fx3IZXLMjpmNJfFLoA5QOzFyz8d1MCQVc4UcwXwhV2Nh5wUaG20FXaX4qV1Qq/uf\nGCGlMaLL1IXiumKcuXEGFsEiOjYtchqyE7IxNmisEyMnIiIiV+IaOw/W3m675VpaOrAxYuFCW2OE\nUjn0dYxmI05fP42T107CaDGKjiWHJUOXqEOMOsbJ0RMREZFUXGMngbd2xQ7VGJGVZZutG4rZasZn\nNz/Dp3WfotPUKTo2TjMOukQdErWJzg2eiIiIJGNXrETeOGNntQLl5bbtS+5tjEhOtq2jk9IYYRWs\n+KLxCxTWFuJOzx3RsYigCOiSdJg0dpLP7UU3HFwHQ1IxV8gRzBeSijN2PqaqyrbB8HAaIwRBQEVz\nBfJr8tHUKX70RGhAKLITszEjagbkMgkL8oiIiMjrcMbOzZqabAXdcBsj6u7U4Vj1MVwzXBONB/kH\nITM+E+mx6fCTs44nIiLyRJyx83LOaoxo6GhAfnU+rrRcEY0rFUosGL8A88fNR4BfgJOjJyIiIk/E\nws7FenuBU6dsjRG9vf3jMhkwa5btiRFSGiNaultQWFOIC00XRHvRKWQKpMemIzM+E8HK4BH4Br6J\n62BIKuYKOYL5Qq7Gws5FhmqMWLbMtp5uKB29HSiqLcJn9Z/BKljt4zLIMCNqBrITszFGNcbJ0RMR\nEZE38Ok1dtu2bfOI7U4e1BixbJmtsBtKj7kHJ6+dxKlrp2CymkTHJo2dBF2SDpHBEp8lRkRERB6h\nb7uTHTt2OGWNnU8Xdu7+ak1NtidGXBEvf0NIiK0xIi1t6MYIk8WEszfPoriuGN3mbtGx+NB4LE1a\nivGh450cOREREbkSmyc8WEeHrTHi/HlxY4S/v60xYsGCoRsjrIIVZQ1l0NfqYTAaRMeiQ6KhS9Qh\nOSyZe9E5CdfBkFTMFXIE84VcjYWdEzmjMUIQBFy6fQkFNQW43XVbdEyr0iInMQfTIqexoCMiIqIB\neCvWCaxW4PPPgfz8gY0REyfaNhiW0hhR3VqNY9XHcLP9pmg8RBmCJfFLMDtmNhRyhRMjJyIiIk/A\nW7Eeorra1hjR0CAej4y0FXRSGiNutt/EsepjqG6tFo0HKAKwaMIiZIzLgFIhYUgCIYsAABOESURB\nVFM7IiIiGtVY2D0kZzRG3O66jYKaAly8dVE07if3Q0ZcBhZOWIgg/yAnR073w3UwJBVzhRzBfCFX\nY2HnIGc0RhiMBuhr9ShrKBuwF92smFnISsiCJkAzQt+AiIiIfBXX2ElkMtkaI44fH9gYkZZma4zQ\nDFGLdZm6cPzqcZy5cQZmq1l0bGrEVOQk5iA8KNxpMRMREZF34Bo7CbZv3z7sDYoFof+JEQbxriOY\nONG2wXB09IOv0Wvpxenrp3Hi6gkYLUbRsSRtEnSJOsRp4h46RiIiIvJOfRsUOwtn7B5gqMaIiRNt\nM3aDsVgtOF9/HkV1Rejo7RAdi1XHYmnSUiRpk4YVIzkH18GQVMwVcgTzhaTijN0IunXL1hhRUSEe\nDwmx3XKdNevBjRGCIOBC0wUU1BSgtadVdCw8KBw5iTmYEj6Fe9ERERGRU3HG7i4dHYBeD3z22cDG\niAULbM0RD2qMEAQBlS2VyK/JR0OHeJpPE6BBVkIW0qLTIJcN0S5LREREowpn7JzIGY0RV9uuIr86\nH3VtdaLxQL9ALI5fjLmxc+Gv8B+B6ImIiIhsRnVhJwj9T4y4tzEiKcm2jm6oxojGjkYU1BTgcvNl\n0bi/3B/zx8/HgvELoPJTOTlycjaugyGpmCvkCOYLudqoLexqaoBPPhnYGBER0f/EiActgbvTcweF\nNYX4vPFzCOifOpXL5EiPTUdmfCZClCEjFD0RERHRQKNujd1wGyM6ezvxad2nOHfzHCyCpf/zIMP0\nqOnISshCWGCYs74GERERjQJcY+egvsaI8+cBa//DHuDvD8yfb2uMCAgY/P1GsxEnr53Eqeun0Gvp\nFR1LCUuBLkmH6JAh7tsSERERjSCfL+xMJuD0aVtjhPGuvYFlMmDmTNtzXR/UGGG2mnH2xlkUXy1G\nl6lLdGy8ZjyWJi1F/Jj4EYqeXIXrYEgq5go5gvlCrubThd2LLxZAECZCpRIXXlIaI6yCFeUN5dDX\n6tFmbBMdiwyOhC5Rh9SxqdyLjoiIiDyGT6+xi4/fBrVajSVLvoPw8HhJjRGCIOBy82XkV+fjVtct\n0bExqjHITsjG9Kjp3IuOiIiIhq3vkWI7duxwyho7ny7sliyxfTWttgBbtuRg9uwHN0bU3qnFsepj\nuG64LhoP9g9GZnwm5sTOgZ/cpyc5iYiIyA3YPCGBXA6MHw9MmyZHevrg59W31yO/Jh+VLZWi8QBF\nABaMX4CvjfsaAvwe0FlBXo/rYEgq5go5gvlCrubThV1Ghq3TNTjYet/jzV3NKKwtxIWmC6JxhUyB\neXHzsDh+MYL8g1wRKhEREdGw+fSt2G3bBBiN+diwIRmTJvU3ULQb21FUV4Tz9edhFfqLPhlkSItO\nQ1ZCFkJVoe4Im4iIiEYh3oqVIDKyADpdf1HXberGiWsnUHK9BCarSXTulPApyEnMQURwhDtCJSIi\nIho2n56x6/tqJosJJTdKcPzqcfSYe0TnJYxJwNKkpRinGeeOMMlDcB0MScVcIUcwX0gqzthJYLFa\nUNpQiqLaIrT3touOxYTEYGnSUiRpk7gXHREREfkEn56x+/Zvvo3o8dEIjw23j4cFhiEnMQePRDzC\ngo6IiIg8AmfsJLgddRsNFxuQhjQkJiRiScISzIqeBYVc4e7QiIiIiJzO5x+foEpVQWlQ4p8z/hnp\nseks6ui+9Hq9u0MgL8FcIUcwX8jVfHrGbkLoBIzXjEfErQj4K/zdHQ4RERHRiPLpwi5JmwQAUMqV\nbo6EPB271kgq5go5gvlCrubzt2KNV4zQzda5OwwiIiKiEefThV1kUyQ2ZG/ApORJ7g6FPBzXwZBU\nzBVyBPOFXM2nb8X+eO2P3R0CERERkcv49D5227ZtQ1ZWFtc4EBERkUfS6/XQ6/XYsWOHU/ax8+nC\nzke/GhEREfkYZ9UtPr3GjkgqroMhqZgr5AjmC7kaCzsiIiIiH8FbsURERERuxluxRERERCTCwo4I\nXAdD0jFXyBHMF3I1FnZEREREPoJr7IiIiIjcjGvsiIiIiEiEhR0RuA6GpGOukCOYL+RqLOyIiIiI\nfATX2BERERG5GdfYEREREZEICzsicB0MScdcIUcwX8jVWNgRERER+QiusSMiIiJyM66xIyIiIiIR\nFnZE4DoYko65Qo5gvpCrsbAjIiIi8hFet8ausbERa9asgVKphFKpxP79+zF27NgB53GNHREREXkL\nZ9UtXlfYWa1WyOW2icZ3330X9fX1+OUvfzngPBZ2RERE5C1GbfNEX1EHAAaDAVqt1o3RkK/gOhiS\nirlCjmC+kKt5XWEHAOXl5cjIyMCuXbuwbt06d4dDPqCsrMzdIZCXYK6QI5gv5GouLex27dqF9PR0\nqFQqbNy4UXSspaUFq1evRkhICBISEpCXl2c/9tvf/hbZ2dl44403AAAzZ85ESUkJXn75ZezcudOV\nX4F81J07d9wdAnkJ5go5gvlCrubSwi4uLg4vvfQSNm3aNODYs88+C5VKhaamJrz33nt45plncPHi\nRQDACy+8gMLCQvzsZz+DyWSyv0ej0cBoNLos/pHgiml6Z3zGw17DkfdJOXeocx503BduiYz0d3DW\n9R/mOs7OFSnn+XK+8GeLY+eO5lwB+LPF0XM9OV9cWtitXr0ajz/++IAu1s7OTnz44YfYuXMngoKC\nsHDhQjz++OPYu3fvgGuUlZVhyZIlyMnJwZtvvolf/OIXrgp/RPCHr2PnjtT/TLW1tUN+tifgD1/H\nzh2JfGGuOPcz+LPFM/Bni2PnenJh55au2F/96le4ceMG/va3vwEASktLsWjRInR2dtrPefPNN6HX\n6/GPf/zjoT4jOTkZVVVVTomXiIiIaCRNnDgRlZWVw76OnxNicZhMJhO97ujogEajEY2p1Wq0t7c/\n9Gc44w+HiIiIyJu4pSv23knCkJAQGAwG0VhbWxvUarUrwyIiIiLyam4p7O6dsUtNTYXZbBbNspWX\nl2PatGmuDo2IiIjIa7m0sLNYLOjp6YHZbIbFYoHRaITFYkFwcDDWrFmDrVu3oqurC8ePH8dHH32E\n3NxcV4ZHRERE5NVcWtj1db2+9tpr2LdvHwIDA/HKK68AAH7/+9+ju7sbkZGR+MEPfoA//vGPmDJl\niivDIyIiIvJqXves2OEwGAxYunQpLl26hJKSEkydOtXdIZEHO3PmDJ5//nn4+/sjLi4Oe/bsgZ+f\nW/qNyMM1NjZizZo1UCqVUCqV2L9//4BtnYjulZeXh3/5l39BU1OTu0MhD1VbW4u5c+di2rRpkMlk\n+OCDDxAeHv7A93jlI8UeVlBQEA4fPozvfOc7TnnQLvm2CRMmoLCwEEVFRUhISMDf//53d4dEHioi\nIgInTpxAYWEhvv/972P37t3uDok8nMViwcGDBzFhwgR3h0IeLisrC4WFhSgoKBiyqANGWWHn5+cn\n6Q+FCACio6MREBAAAPD394dCoXBzROSp5PL+H6UGgwFardaN0ZA3yMvLw9q1awc0ExLd68SJE8jM\nzMSWLVsknT+qCjuih1FXV4ejR4/isccec3co5MHKy8uRkZGBXbt2Yd26de4OhzxY32zd9773PXeH\nQh4uNjYWVVVV+PTTT9HU1IQPP/xwyPd4ZWG3a9cupKenQ6VSYePGjaJjLS0tWL16NUJCQpCQkIC8\nvLz7XoP/Sho9hpMvBoMB69evx7vvvssZu1FgOLkyc+ZMlJSU4OWXX8bOnTtdGTa5ycPmy759+zhb\nN8o8bK4olUoEBgYCANasWYPy8vIhP8srV4LHxcXhpZdewieffILu7m7RsWeffRYqlQpNTU0oLS3F\nypUrMXPmzAGNElxjN3o8bL6YzWY88cQT2LZtG1JSUtwUPbnSw+aKyWSCv78/AECj0cBoNLojfHKx\nh82XS5cuobS0FPv27cOVK1fw/PPP46233nLTtyBXeNhc6ejoQEhICADg008/xSOPPDL0hwle7Fe/\n+pWwYcMG++uOjg5BqVQKV65csY+tX79e+OUvf2l/vWLFCiE2NlaYP3++8M4777g0XnIvR/Nlz549\nwtixY4WsrCwhKytLeP/9910eM7mHo7lSUlIiZGZmCtnZ2cLy5cuFa9euuTxmcp+H+buoz9y5c10S\nI3kGR3Pl8OHDwpw5c4TFixcLTz75pGCxWIb8DK+csesj3DPrVlFRAT8/PyQnJ9vHZs6cCb1eb399\n+PBhV4VHHsbRfMnNzeUm2aOUo7kyb948FBUVuTJE8iAP83dRnzNnzox0eORBHM2VFStWYMWKFQ59\nhleusetz7/qEjo4OaDQa0ZharUZ7e7srwyIPxXwhqZgr5AjmC0nlilzx6sLu3so3JCQEBoNBNNbW\n1ga1Wu3KsMhDMV9IKuYKOYL5QlK5Ile8urC7t/JNTU2F2WxGZWWlfay8vBzTpk1zdWjkgZgvJBVz\nhRzBfCGpXJErXlnYWSwW9PT0wGw2w2KxwGg0wmKxIDg4GGvWrMHWrVvR1dWF48eP46OPPuI6qVGO\n+UJSMVfIEcwXksqlueKsTg9X2rZtmyCTyUS/duzYIQiCILS0tAjf+ta3hODgYCE+Pl7Iy8tzc7Tk\nbswXkoq5Qo5gvpBUrswVmSBwQzciIiIiX+CVt2KJiIiIaCAWdkREREQ+goUdERERkY9gYUdERETk\nI1jYEREREfkIFnZEREREPoKFHREREZGPYGFHRERE5CNY2BER3WPDhg146aWXnHrNZ555Bi+//LJT\nr0lEdC8/dwdARORpZDLZgId1D9cf/vAHp16PiOh+OGNHRHQffNoiEXkjFnZE5FFee+01jBs3DhqN\nBpMnT0ZBQQEA4MyZM5g/fz60Wi1iY2Px3HPPwWQy2d8nl8vxhz/8ASkpKdBoNNi6dSuqqqowf/58\njBkzBk888YT9fL1ej3HjxuHVV19FREQEEhMTsX///kFjOnToENLS0qDVarFw4UJ88cUXg577wgsv\nICoqCqGhoZgxYwYuXrwIQHx797HHHoNarbb/UigU2LNnDwDgq6++wrJlyzB27FhMnjwZBw8eHPSz\nsrKysHXrVixatAgajQaPPvoompubJf5JE5EvYmFHRB7j8uXLePvtt3Hu3DkYDAYcOXIECQkJAAA/\nPz/813/9F5qbm3Hq1Cnk5+fj97//vej9R44cQWlpKU6fPo3XXnsNP/rRj5CXl4erV6/iiy++QF5e\nnv3cxsZGNDc34+bNm3j33XexefNmXLlyZUBMpaWleOqpp7B79260tLTg6aefxje/+U309vYOOPeT\nTz5BcXExrly5gra2Nhw8eBBhYWEAxLd3P/roI7S3t6O9vR0ffPABYmJioNPp0NnZiWXLluEHP/gB\nbt26hQMHDuDHP/4xLl26NOifWV5eHt555x00NTWht7cXr7/+usN/7kTkO1jYEZHHUCgUMBqN+PLL\nL2EymTBhwgQkJSUBAGbPno158+ZBLpcjPj4emzdvRlFRkej9v/jFLxASEoKpU6di+vTpWLFiBRIS\nEqDRaLBixQqUlpaKzt+5cyf8/f2RmZmJlStX4v3337cf6yvC/vznP+Ppp5/G3LlzIZPJsH79egQE\nBOD06dMD4lcqlWhvb8elS5dgtVoxadIkREdH24/fe3u3oqICGzZswAcffIC4uDgcOnQIiYmJePLJ\nJyGXy5GWloY1a9YMOmsnk8mwceNGJCcnQ6VSYe3atSgrK3PgT5yIfA0LOyLyGMnJyXjrrbewfft2\nREVFYd26daivrwdgK4JWrVqFmJgYhIaGYsuWLQNuO0ZFRdl/HxgYKHqtUqnQ0dFhf63VahEYGGh/\nHR8fb/+su9XV1eGNN96AVqu1/7p+/fp9z83OzsZPfvITPPvss4iKisLTTz+N9vb2+37XtrY2PP74\n43jllVewYMEC+2eVlJSIPmv//v1obGwc9M/s7sIxMDBQ9B2JaPRhYUdEHmXdunUoLi5GXV0dZDIZ\n/u3f/g2AbbuQqVOnorKyEm1tbXjllVdgtVolX/feLtfW1lZ0dXXZX9fV1SE2NnbA+yZMmIAtW7ag\ntbXV/qujowPf+9737vs5zz33HM6dO4eLFy+ioqIC//mf/zngHKvViu9///vQ6XT44Q9/KPqsJUuW\niD6rvb0db7/9tuTvSUSjGws7IvIYFRUVKCgogNFoREBAAFQqFRQKBQCgo6MDarUaQUFB+OqrryRt\nH3L3rc/7dblu27YNJpMJxcXF+Pjjj/Hd737Xfm7f+T/60Y/wxz/+EWfOnIEgCOjs7MTHH39835mx\nc+fOoaSkBCaTCUFBQaL47/78LVu2oKurC2+99Zbo/atWrUJFRQX27dsHk8kEk8mEs2fP4quvvpL0\nHYmIWNgRkccwGo148cUXERERgZiYGNy+fRuvvvoqAOD111/H/v37odFosHnzZjzxxBOiWbj77Tt3\n7/G7X0dHR9s7bHNzc/GnP/0JqampA86dM2cOdu/ejZ/85CcICwtDSkqKvYP1XgaDAZs3b0ZYWBgS\nEhIQHh6Of/3Xfx1wzQMHDthvufZ1xubl5SEkJARHjhzBgQMHEBcXh5iYGLz44ov3bdSQ8h2JaPSR\nCfznHhGNMnq9Hrm5ubh27Zq7QyEicirO2BERERH5CBZ2RDQq8ZYlEfki3oolIiIi8hGcsSMiIiLy\nESzsiIiIiHwECzsiIiIiH8HCjoiIiMhHsLAjIiIi8hH/D7zrlfdhcI6yAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 153 }, { "cell_type": "markdown", @@ -1500,7 +2060,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 26 + "prompt_number": 146 }, { "cell_type": "code", @@ -1512,7 +2072,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 27 + "prompt_number": 147 }, { "cell_type": "code", @@ -1528,8 +2088,8 @@ "output_type": "stream", "stream": "stdout", "text": [ - "10000 loops, best of 3: 121 \u00b5s per loop\n", - "10000 loops, best of 3: 127 \u00b5s per loop" + "10000 loops, best of 3: 159 \u00b5s per loop\n", + "10000 loops, best of 3: 151 \u00b5s per loop" ] }, { @@ -1540,7 +2100,7 @@ ] } ], - "prompt_number": 28 + "prompt_number": 148 }, { "cell_type": "markdown", @@ -2029,6 +2589,29 @@ "[[back to top](#sections)]" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## `sum()` vs. `numpy.sum()`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, { "cell_type": "code", "collapsed": false, @@ -2048,8 +2631,8 @@ "output_type": "stream", "stream": "stdout", "text": [ - "100 loops, best of 3: 18.3 ms per loop\n", - "10 loops, best of 3: 136 ms per loop" + "10 loops, best of 3: 85.8 ms per loop\n", + "10 loops, best of 3: 85.6 ms per loop" ] }, { @@ -2060,7 +2643,30 @@ ] } ], - "prompt_number": 6 + "prompt_number": 155 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## `range()` vs. `numpy.arange()`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] }, { "cell_type": "code", @@ -2079,8 +2685,8 @@ "output_type": "stream", "stream": "stdout", "text": [ - "10 loops, best of 3: 82.6 ms per loop\n", - "100 loops, best of 3: 5.35 ms per loop" + "10 loops, best of 3: 38.3 ms per loop\n", + "100 loops, best of 3: 2.28 ms per loop" ] }, { @@ -2091,7 +2697,30 @@ ] } ], - "prompt_number": 11 + "prompt_number": 156 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## `statistics.mean()` vs. `numpy.mean()`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] }, { "cell_type": "code", @@ -2106,22 +2735,17 @@ "metadata": {}, "outputs": [ { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1 loops, best of 3: 1.14 s per loop\n", - "10 loops, best of 3: 141 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" + "ename": "ImportError", + "evalue": "No module named 'statistics'", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mstatistics\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmagic\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'timeit (statistics.mean(samples))'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmagic\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'timeit (np.mean(samples))'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mImportError\u001b[0m: No module named 'statistics'" ] } ], - "prompt_number": 14 + "prompt_number": 157 }, { "cell_type": "markdown", From 936d1dc1ae49997f37edc237f799afcebe5cdba3 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 7 May 2014 21:57:53 -0400 Subject: [PATCH 029/248] updated for html print --- benchmarks/timeit_tests.ipynb | 304 +++++++++++++++++++-- tutorials/scope_resolution_legb_rule.ipynb | 16 +- 2 files changed, 291 insertions(+), 29 deletions(-) diff --git a/benchmarks/timeit_tests.ipynb b/benchmarks/timeit_tests.ipynb index 40434a8..1222ca9 100644 --- a/benchmarks/timeit_tests.ipynb +++ b/benchmarks/timeit_tests.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:a6e11ece22a848e8c3b728870bda775773780d2fa909fb330ad64e4febec9f2a" + "signature": "sha256:7773fd07ffe611312feea432cbf6765914b236c0cdfbbb7c8de867f61a8b97ce" }, "nbformat": 3, "nbformat_minor": 0, @@ -25,7 +25,7 @@ "source": [ "


\n", "I am really looking forward to your comments and suggestions to improve and extend this collection! Just send me a quick note \n", - "via Twitter: [@rasbt](https://twitter.com/rasbt) \n", + "via Twitter: [@rasbt](https://twitter.com/rasbt) \n", "or Email: [bluewoodtree@gmail.com](mailto:bluewoodtree@gmail.com)\n", "
" ] @@ -2616,13 +2616,13 @@ "cell_type": "code", "collapsed": false, "input": [ - "import numpy as np\n", + "from numpy import sum as np_sum\n", "import timeit\n", "\n", "samples = list(range(1000000))\n", "\n", "%timeit(sum(samples))\n", - "%timeit(np.sum(samples))" + "%timeit(np_sum(samples))" ], "language": "python", "metadata": {}, @@ -2631,8 +2631,8 @@ "output_type": "stream", "stream": "stdout", "text": [ - "10 loops, best of 3: 85.8 ms per loop\n", - "10 loops, best of 3: 85.6 ms per loop" + "10 loops, best of 3: 18.2 ms per loop\n", + "10 loops, best of 3: 138 ms per loop" ] }, { @@ -2643,7 +2643,89 @@ ] } ], - "prompt_number": 155 + "prompt_number": 20 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "funcs = ['sum', 'np_sum']\n", + "orders_n = [10**n for n in range(1, 6)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " samples = list(range(n))\n", + " times_n['sum'].append(min(timeit.Timer('sum(samples)', \n", + " 'from __main__ import samples')\n", + " .repeat(repeat=3, number=1000)))\n", + " times_n['np_sum'].append(min(timeit.Timer('np_sum(samples)', \n", + " 'from __main__ import np_sum, samples')\n", + " .repeat(repeat=3, number=1000)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 26 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 24 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", + "\n", + "labels = [('sum', 'in-built sum() function'), \n", + " ('np_sum', 'numpy.sum() function')]\n", + "\n", + "matplotlib.rcParams.update({'font.size': 12})\n", + "\n", + "fig = plt.figure(figsize=(10,8))\n", + "for lb in labels:\n", + " plt.plot(orders_n, times_n[lb[0]], \n", + " alpha=0.5, label=lb[1], marker='o', lw=3)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time per computation in milliseconds [ms]')\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "plt.title('Performance of explicit for-loops vs. list comprehensions')\n", + "\n", + "max_perf = max( n/i for i,n in zip(times_n['sum'],\n", + " times_n['np_sum']) )\n", + "min_perf = min( n/i for i,n in zip(times_n['sum'],\n", + " times_n['np_sum']) )\n", + "\n", + "ftext = 'the in-built sum() is {:.2f}x to '\\\n", + " '{:.2f}x faster than the numpy.sum()'\\\n", + " .format(min_perf, max_perf)\n", + "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", + "\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\ntzV16lSVlJQ0mVNRUZEee+wxrVy5UmVlZZo2bZruu+8+nT9/vsm+69evV0FBgUpKSlReXq4PPvhA\n7du3l2Q+vfvpp5+qsrJSlZWVWrt2rTp37qwRI0aourpad999tyZMmKAffvhB7733nn7zm99o7969\nl/2Z5ebm6q233lJpaanOnz+vxYsX+/xzBxA6CHYAAkZ4eLhqa2u1e/du1dXVKTU1Vddff70k6ZZb\nbtGtt96qsLAwde3aVVOnTlV+fr7p/b/73e8UGxurXr166eabb1Z2drbS0tIUHx+v7OxsFRUVmfaf\nP3++IiMjNXToUN1zzz16//33PWMXQtjrr7+uadOmacCAAXI4HHrkkUfUqlUrbd26tcn8o6KiVFlZ\nqb1796qhoUE9evRQp06dPOONT+/u379fkydP1tq1a5WSkqLPPvtM3bp106RJkxQWFqa+fftq7Nix\nl121czgcmjJlitLT0xUdHa0HH3xQO3fu9OEnDiDUEOwABIz09HQtXbpUOTk5SkpK0vjx4/X9999L\nMkLQqFGj1LlzZ7Vt21azZs1qctoxKSnJ8+eYmBjT6+joaFVVVXleJyQkKCYmxvO6a9eunmNd7PDh\nw3rppZeUkJDg+Tp27Ngl9x0+fLiefPJJTZ8+XUlJSZo2bZoqKysv+b2Wl5dr9OjRWrBggQYNGuQ5\nVmFhoelYa9as0YkTJy77M7s4OMbExJi+RwAtD8EOQEAZP368CgoKdPjwYTkcDv3+97+XZNwupFev\nXjpw4IDKy8u1YMECNTQ0eP25ja9yPX36tGpqajyvDx8+rOTk5CbvS01N1axZs3T69GnPV1VVlcaN\nG3fJ4zz11FPasWOH9uzZo/379+uPf/xjk30aGhr08MMPa8SIEfr1r39tOtawYcNMx6qsrNSrr77q\n9fcJoGUj2AEIGPv371deXp5qa2vVqlUrRUdHKzw8XJJUVVWluLg4tW7dWvv27fPq9iEXn/q81FWu\nc+fOVV1dnQoKCvT555/rgQce8Ox7Yf/HH39cK1as0LZt2+R2u1VdXa3PP//8kitjO3bsUGFhoerq\n6tS6dWvT/C8+/qxZs1RTU6OlS5ea3j9q1Cjt379fq1evVl1dnerq6rR9+3bt27fPq+8RAAh2AAJG\nbW2tnn/+eSUmJqpz5846efKkFi5cKElavHix1qxZo/j4eE2dOlUPPfSQaRXuUvedazx+8etOnTp5\nrrCdOHGi/vznPysjI6PJvv369dPKlSv15JNPqn379urevbvnCtbGKioqNHXqVLVv315paWm67rrr\n9Nvf/rbJZ7733nueU64XrozNzc1VbGysvvjiC7333ntKSUlR586d9fzzz1/yQg1vvkcALY/DzT/3\nALQwTqdTEydO1NGjR+2eCgD4FSt2AAAAIYJgB6BF4pQlgFDEqVgAAIAQwYodAABAiCDYAQAAhAiC\nHQAAQIgg2AEAAIQIgh0AAECI+H/3Q2KUDc+3ZgAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 27 }, { "cell_type": "markdown", @@ -2672,11 +2754,22 @@ "cell_type": "code", "collapsed": false, "input": [ - "%timeit(list(range(1000000)))\n", - "%timeit(np.arange(1000000))\n", + "from numpy import arange as np_arange\n", + "\n", + "n = 1000000\n", + "\n", + "def loop_range(n):\n", + " for i in range(n):\n", + " pass\n", + " return\n", "\n", - "# note that in Python range() is implemented as xrange()\n", - "# with lazy evaluation (generator)" + "def loop_arange(n):\n", + " for i in np_arange(n):\n", + " pass\n", + " return\n", + "\n", + "%timeit(loop_range(n))\n", + "%timeit(loop_arange(n))" ], "language": "python", "metadata": {}, @@ -2685,8 +2778,8 @@ "output_type": "stream", "stream": "stdout", "text": [ - "10 loops, best of 3: 38.3 ms per loop\n", - "100 loops, best of 3: 2.28 ms per loop" + "10 loops, best of 3: 50.9 ms per loop\n", + "10 loops, best of 3: 183 ms per loop" ] }, { @@ -2697,7 +2790,75 @@ ] } ], - "prompt_number": 156 + "prompt_number": 36 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "funcs = ['loop_range', 'loop_arange']\n", + "orders_n = [10**n for n in range(1, 6)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " for f in funcs:\n", + " times_n[f].append(min(timeit.Timer('%s(n)' %f, \n", + " 'from __main__ import %s, n' %f)\n", + " .repeat(repeat=3, number=1000)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 38 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", + "\n", + "labels = [('loop_range', 'in-built range()'), \n", + " ('loop_arange', 'numpy.arange()')]\n", + "\n", + "matplotlib.rcParams.update({'font.size': 12})\n", + "\n", + "fig = plt.figure(figsize=(10,8))\n", + "for lb in labels:\n", + " plt.plot(orders_n, times_n[lb[0]], \n", + " alpha=0.5, label=lb[1], marker='o', lw=3)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time per computation in milliseconds [ms]')\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "plt.title('Performance of explicit for-loops vs. list comprehensions')\n", + "\n", + "max_perf = max( a/r for r,a in zip(times_n['loop_range'],\n", + " times_n['loop_arange']) )\n", + "min_perf = min( a/r for r,a in zip(times_n['loop_range'],\n", + " times_n['loop_arange']) )\n", + "\n", + "ftext = 'the in-built range() is {:.2f}x to '\\\n", + " '{:.2f}x faster than numpy.arange()'\\\n", + " .format(min_perf, max_perf)\n", + "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", + "\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 40 }, { "cell_type": "markdown", @@ -2726,26 +2887,119 @@ "cell_type": "code", "collapsed": false, "input": [ - "import statistics\n", + "# note that the statistics module is only available\n", + "# in Python 3.4.0 or newer\n", + "\n", + "from statistics import mean as st_mean\n", + "from numpy import mean as np_mean\n", + "\n", + "def calc_mean(samples):\n", + " return sum(samples)/len(samples)\n", + "\n", + "samples = list(range(1000000))\n", + "\n", + "%timeit(st_mean(samples))\n", + "%timeit(np_mean(samples))\n", + "%timeit(calc_mean(samples))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1 loops, best of 3: 1.13 s per loop\n", + "10 loops, best of 3: 141 ms per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "10 loops, best of 3: 136 ms per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 48 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "funcs = ['st_mean', 'np_mean', 'calc_mean']\n", + "orders_n = [10**n for n in range(1, 6)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " samples = list(range(n))\n", + " for f in funcs:\n", + " times_n[f].append(min(timeit.Timer('%s(samples)' %f, \n", + " 'from __main__ import %s, samples' %f)\n", + " .repeat(repeat=3, number=1000)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 49 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", + "\n", + "labels = [('st_mean', 'statistics.mean()'), \n", + " ('np_mean', 'numpy.mean()'),\n", + " ('calc_mean', 'sum(samples)/len(samples)')]\n", + "\n", + "matplotlib.rcParams.update({'font.size': 12})\n", + "\n", + "fig = plt.figure(figsize=(10,8))\n", + "for lb in labels:\n", + " plt.plot(orders_n, times_n[lb[0]], \n", + " alpha=0.5, label=lb[1], marker='o', lw=3)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time per computation in milliseconds [ms]')\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "plt.title('Performance of different approaches for calculating sample means')\n", + "\n", + "max_perf = max( s/c for s,c in zip(times_n['st_mean'],\n", + " times_n['calc_mean']) )\n", + "min_perf = min( s/c for s,c in zip(times_n['st_mean'],\n", + " times_n['calc_mean']) )\n", + "\n", + "ftext = 'using sum(samples)/len(samples) is {:.2f}x to '\\\n", + " '{:.2f}x faster than statistics.mean()'\\\n", + " .format(min_perf, max_perf)\n", + "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", "\n", - "%timeit(statistics.mean(samples))\n", - "%timeit(np.mean(samples))" + "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { - "ename": "ImportError", - "evalue": "No module named 'statistics'", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mstatistics\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmagic\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'timeit (statistics.mean(samples))'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmagic\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'timeit (np.mean(samples))'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mImportError\u001b[0m: No module named 'statistics'" + "metadata": {}, + "output_type": "display_data", + "png": "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\nR/PbFRoaSiYmJvTrr79SXl4eHTp0iDp16iQRo7a//vqLNDU1ady4cXT9+nU6ffo02dvbk6urKxER\nvXz5ktLS0ojjOPrf//5HDx8+pNLSUqmx5syZQ0KhkA4cOECZmZm0YMEC0tLSIktLS36e0NBQ/nN9\nsR88eEAcx9E333xDDx8+pJcvX9KDBw/I0NCQZsyYQdevX6dbt27RrFmzSF9fnwoKCoiI+P3j4uJC\nycnJlJubSwUFBTRhwgQSi8V0/PhxysvLo59++ol0dHRo69atEvvb0NCQvvvuO8rJyaFNmzYRx3F8\nm3jy5Al17tyZFi5cSA8fPqSHDx9SRUWF1HpITk6m7du3040bNygrK4uCg4NJSUmJbt26xc9jYmJC\nWlpaFBoaSrdu3aIdO3aQuro6RUZGNmme8PBwysrKooyMDLp69Sq1adOGb0uHDx+mTp06SRwvsuQ4\nfvx4EgqFFB8fTzk5OZSWliax7sbqjIgarfsLFy6QgoIC7dixg+7evUvXrl2jrVu3Un5+vtS6LSoq\nosjISFJQUOD3AxFRdHQ0qaqqUkxMDN2+fZs2b95MKioqEvtYWl1Jc/36dVJTU6NPPvmELl68SNnZ\n2fTzzz/TuXPniEi243nChAnk6enJf27s2HV3d6fPPvtMIo9ly5aRqakp/zk0NJQsLCz4z43lUVRU\nRK6urjRmzBi+rqqPXY7jaOfOnXLty+HDh5NIJKLk5GRKT0+niRMnko6OTp1zd02//PILaWlp0cGD\nB+nevXt05coVioyMpJcvX8pcl25ubqStrU1BQUGUlZVF27ZtI47jyNvbmxYtWkRZWVm0fft24jiO\nDh8+XGd/N3T81K73ppxDk5KSiOM46tatGyUlJdGNGzeoV69eZG9vT3369KHExETKyMigvn37kouL\nC79ceno6aWhoUFhYGGVmZtL169fpo48+oi5dutCrV6/kqp/Gvjvs7Oxo3LhxlJGRQbm5uXT48GE6\nePBgvdvUmrCOXQupfRJMT08nMzMz6tWrFxFVHaDffvutxDIpKSnEcRwVFhYSUVXjFolEdWLXPhmW\nlJSQsrIy/fe//5WYb+TIkTRgwAD+M8dxNGXKFIl5YmNjieM4unr1Kl+2evVq4jiOLl26xJetX7+e\nDAwMGtzmDz74QOKE4ubmRg4ODhLzTJ8+na8DIiJjY2OaNWuW1HglJSWkpqZGR48elSjfvn076ejo\n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\niIiIiBSCgR0RERGRQjCwIyIiIlIIBnZERERECsHAjoiIiEghGNgRERERKQQDOyIiIiKFYGBHRDTK\nhg0b8NRTT7n1Ob/3ve/hl7/8pVufk4hoNI23G0BE5GtUKtWYzbqn6o9//KNbn4+IyB6O2BER2cHd\nFonIHzGwIyKf8utf/xozZsxAZGQk8vPzUVpaCgCoqKjA4sWLERMTg9TUVGzatAnDw8OWx6nVavzx\nj39ETk4OIiMjsXnzZtTX12Px4sWIjo7G2rVrLeeXl5djxowZePrpp5GQkICZM2fijTfecNimd999\nF0VFRYiJicGtt96KL7/80uG5P/rRj5CUlISoqCgUFhbi9OnTAGynd++9915ERERYfgICAvDaa68B\nAKqrq7Fy5UrExcUhPz8fe/bscXit4uJibN68GUuWLEFkZCTuvPNOdHR0OPmXJiIlYmBHRD6jpqYG\nL774Io4dO4aenh7s378fWVlZAACNRoPf//736OjowKeffooDBw7gpZdesnn8/v37UVlZiSNHjuDX\nv/41Hn74YezatQvnz5/Hl19+iV27dlnObW1tRUdHBy5duoRXX30VjzzyCGpra8e0qbKyEt/5znfw\nyiuvoLOzE48++ij+5V/+BUNDQ2PO3bdvHw4fPoza2lp0d3djz549iI2NBWA7vbt371709vait7cX\nu3fvRkpKCkpKStDX14eVK1fi29/+Nq5cuYI333wTjz32GM6cOePwb7Zr1y7s2LEDbW1tGBoawjPP\nPOPy352IlIOBHRH5jICAAOj1epw6dQrDw8PIyMjArFmzAADXX389Fi1aBLVajczMTDzyyCM4ePCg\nzeN/9rOfITw8HHPmzMH8+fOxatUqZGVlITIyEqtWrUJlZaXN+du3b4dWq8XSpUtxzz334K233rLc\nZw7C/vSnP+HRRx/FwoULoVKp8MADDyAoKAhHjhwZ0/7AwED09vbizJkzMJlMyMvLQ3JysuX+0dO7\nZ8+exYYNG7B7926kpaXh3XffxcyZM/Hggw9CrVajqKgIa9ascThqp1Kp8NBDDyE7OxvBwcH4xje+\ngS+++MKFvzgRKQ0DOyLyGdnZ2XjuueewdetWJCUlYd26dWhpaQEggqDVq1cjJSUFUVFReOKJJ8ZM\nOyYlJVl+DwkJsbkdHBwMnU5nuR0TE4OQkBDL7czMTMu1RmpqasKzzz6LmJgYy8/Fixftnrts2TL8\n4Ac/wPe//30kJSXh0UcfRW9vr93X2t3djfvuuw+/+tWvcMstt1iudfToUZtrvfHGG2htbXX4NxsZ\nOIaEhNi8RiKafhjYEZFPWbduHQ4fPoympiaoVCr8+7//OwBRLmTOnDmoq6tDd3c3fvWrX8FkMjn9\nvKNXuV69ehX9/f2W201NTUhNTR3zuIyMDDzxxBO4evWq5Uen0+Gb3/ym3ets2rQJx44dw+nTp3H2\n7Fn85je/GXOOyWTCt771LZSUlOC73/2uzbVuv/12m2v19vbixRdfdPp1EtH0xsCOiHzG2bNnUVpa\nCr1ej6CgIAQHByMgIAAAoNPpEBERgdDQUFRXVztVPmTk1Ke9Va5btmzB8PAwDh8+jH/+85+4//77\nLeeaz3/44Yfx8ssvo6KiApIkoa+vD//85z/tjowdO3YMR48exfDwMEJDQ23aP/L6TzzxBPr7+/Hc\nc8/ZPH716tU4e/Ysdu7cieHhYQwPD+Ozzz5DdXW1U6+RiIiBHRH5DL1ej5///OdISEhASkoK2tvb\n8fTTTwMAnnnmGbzxxhuIjIzEI488grVr19qMwtmrOzf6/pG3k5OTLSts169fj//+7/9Gbm7umHNv\nuOEGvPLKK/jBD36A2NhY5OTkWFawjtbT04NHHnkEsbGxyMrKQnx8PH7605+Oec4333zTMuVqXhm7\na9cuhIeHY//+/XjzzTeRlpaGlJQU/PznP7e7UMOZ10hE049K4tc9IppmysvLsX79ely4cMHbTSEi\nciuO2BEREREpBAM7IpqWOGVJRErEqVgiIiIiheCIHREREZFCMLAjIiIiUggGdkREREQKwcCOiIiI\nSCEY2BEREREpxP8HC5XlsuQ4w4kAAAAASUVORK5CYII=\n", + "text": [ + "" ] } ], - "prompt_number": 157 + "prompt_number": 51 }, { "cell_type": "markdown", diff --git a/tutorials/scope_resolution_legb_rule.ipynb b/tutorials/scope_resolution_legb_rule.ipynb index cea54a9..b2af45c 100644 --- a/tutorials/scope_resolution_legb_rule.ipynb +++ b/tutorials/scope_resolution_legb_rule.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:9cd21a4de985d02fd65a6682bfb5690a15932533ed143e684fc8403043dfbde2" + "signature": "sha256:134ba1fb10441f1756c0ab8a2ecef528f9c1cfd7543d8df415e2ae855f6891f9" }, "nbformat": 3, "nbformat_minor": 0, @@ -27,7 +27,7 @@ "source": [ "
\n", "I am really looking forward to your comments and suggestions to improve and extend this tutorial! Just send me a quick note \n", - "via Twitter: [@rasbt](https://twitter.com/rasbt) \n", + "via Twitter: [@rasbt](https://twitter.com/rasbt) \n", "or Email: [bluewoodtree@gmail.com](mailto:bluewoodtree@gmail.com)\n", "
" ] @@ -50,7 +50,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "\n", "
\n", "
" ] @@ -59,7 +59,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Sections\n", + "## Sections " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", "- [Introduction to namespaces and scopes](#introduction) \n", "- [1. LG - Local and Global scopes](#section_1) \n", "- [2. LEG - Local, Enclosed, and Global scope](#section_2) \n", From 0c27e44346ad07dd912866b3de49d9a84a59671c Mon Sep 17 00:00:00 2001 From: Sebastian Raschka Date: Thu, 8 May 2014 14:57:48 -0400 Subject: [PATCH 030/248] numba performance --- benchmarks/cython_least_squares.ipynb | 2 +- benchmarks/timeit_tests.ipynb | 575 +++++++++++++++++++++++--- 2 files changed, 524 insertions(+), 53 deletions(-) diff --git a/benchmarks/cython_least_squares.ipynb b/benchmarks/cython_least_squares.ipynb index 59ab236..1899265 100644 --- a/benchmarks/cython_least_squares.ipynb +++ b/benchmarks/cython_least_squares.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:12829b0c696b932be7039bcfd54490f1918f4155c72cd73b7fcfe1b46387decb" + "signature": "sha256:f31afc5ec11e69936e14bd2ddb07709f1548a2bf4e92e6915a6fa94869a056ab" }, "nbformat": 3, "nbformat_minor": 0, diff --git a/benchmarks/timeit_tests.ipynb b/benchmarks/timeit_tests.ipynb index 1222ca9..621e604 100644 --- a/benchmarks/timeit_tests.ipynb +++ b/benchmarks/timeit_tests.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:7773fd07ffe611312feea432cbf6765914b236c0cdfbbb7c8de867f61a8b97ce" + "signature": "sha256:72a4e6f875d6b68497036a926caa242f8bcd993b827ce9b6dd576c414b944cd5" }, "nbformat": 3, "nbformat_minor": 0, @@ -77,7 +77,8 @@ " - [`sum()` vs. `numpy.sum()`](#np_sum)\n", " - [`range()` vs. `numpy.arange()`](#np_arange)\n", " - [`statistics.mean()` vs. `numpy.mean()`](#np_mean)\n", - "- [Cython vs. regular (C)Python](#cython)" + "- [Cython vs. regular (C)Python](#cython)\n", + "- [Numba vs regular (C)Python & Numpy](#numba)" ] }, { @@ -2887,61 +2888,66 @@ "cell_type": "code", "collapsed": false, "input": [ - "# note that the statistics module is only available\n", - "# in Python 3.4.0 or newer\n", + "# The statistics module has been added to\n", + "# the standard library in Python 3.4\n", "\n", - "from statistics import mean as st_mean\n", - "from numpy import mean as np_mean\n", + "import timeit\n", + "import statistics as stats\n", + "import numpy as np\n", "\n", "def calc_mean(samples):\n", " return sum(samples)/len(samples)\n", "\n", - "samples = list(range(1000000))\n", + "def np_mean(samples):\n", + " return np.mean(samples)\n", + "\n", + "def np_mean_ary(np_array):\n", + " return np.mean(np_array)\n", + "\n", + "def st_mean(samples):\n", + " return stats.mean(samples)\n", + "\n", + "n = 1000000\n", + "samples = list(range(n))\n", + "samples_array = np_arange(n)\n", + "\n", + "assert(st_mean(samples) == np_mean(samples)\n", + " == calc_mean(samples) == np_mean_ary(samples_array))\n", "\n", - "%timeit(st_mean(samples))\n", + "%timeit(calc_mean(samples))\n", "%timeit(np_mean(samples))\n", - "%timeit(calc_mean(samples))" + "%timeit(np_mean_ary(samples_array))\n", + "%timeit(st_mean(samples))" ], "language": "python", "metadata": {}, "outputs": [ { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1 loops, best of 3: 1.13 s per loop\n", - "10 loops, best of 3: 141 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "10 loops, best of 3: 136 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" + "ename": "ImportError", + "evalue": "No module named 'statistics'", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mImportError\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 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtimeit\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mstatistics\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mstats\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mImportError\u001b[0m: No module named 'statistics'" ] } ], - "prompt_number": 48 + "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ - "funcs = ['st_mean', 'np_mean', 'calc_mean']\n", + "funcs = ['st_mean', 'np_mean', 'calc_mean', 'np_mean_ary']\n", "orders_n = [10**n for n in range(1, 6)]\n", "times_n = {f:[] for f in funcs}\n", "\n", "for n in orders_n:\n", " samples = list(range(n))\n", " for f in funcs:\n", + " if f == 'np_mean_ary':\n", + " samples = np.arange(n)\n", " times_n[f].append(min(timeit.Timer('%s(samples)' %f, \n", " 'from __main__ import %s, samples' %f)\n", " .repeat(repeat=3, number=1000)))" @@ -2958,8 +2964,10 @@ "import matplotlib.pyplot as plt\n", "\n", "labels = [('st_mean', 'statistics.mean()'), \n", - " ('np_mean', 'numpy.mean()'),\n", - " ('calc_mean', 'sum(samples)/len(samples)')]\n", + " ('np_mean', 'numpy.mean() on list'),\n", + " ('np_mean_ary', 'numpy.mean() on array'),\n", + " ('calc_mean', 'sum(samples)/len(samples)')\n", + " ]\n", "\n", "matplotlib.rcParams.update({'font.size': 12})\n", "\n", @@ -2976,14 +2984,14 @@ "plt.title('Performance of different approaches for calculating sample means')\n", "\n", "max_perf = max( s/c for s,c in zip(times_n['st_mean'],\n", - " times_n['calc_mean']) )\n", + " times_n['np_mean_ary']) )\n", "min_perf = min( s/c for s,c in zip(times_n['st_mean'],\n", - " times_n['calc_mean']) )\n", + " times_n['np_mean_ary']) )\n", "\n", - "ftext = 'using sum(samples)/len(samples) is {:.2f}x to '\\\n", - " '{:.2f}x faster than statistics.mean()'\\\n", + "ftext = 'using numpy.mean() on np.arrays is {:.2f}x to '\\\n", + " '{:.2f}x faster than statistics.mean() on lists'\\\n", " .format(min_perf, max_perf)\n", - "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", + "plt.figtext(.14,.15, ftext, fontsize=11, ha='left')\n", "\n", "plt.show()" ], @@ -3024,6 +3032,39 @@ "[[back to top](#sections)]" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, we implement a linear regression via least squares fitting (with vertical offsets) by solving to fit *n* points $(x_i, y_i)$ with $i=1,2,...n,$ via linear equation of the form \n", + "$f(x) = a\\cdot x + b$. \n", + "\n", + "Therefore we calculate the following parameters as follows:\n", + "\n", + "$a = \\frac{S_{x,y}}{\\sigma_{x}^{2}}\\quad$ (slope)\n", + "\n", + "$b = \\bar{y} - a\\bar{x}\\quad$ (y-axis intercept)\n", + "\n", + "where \n", + "\n", + "\n", + "$S_{xy} = \\sum_{i=1}^{n} (x_i - \\bar{x})(y_i - \\bar{y})\\quad$ (covariance)\n", + "\n", + "\n", + "$\\sigma{_x}^{2} = \\sum_{i=1}^{n} (x_i - \\bar{x})^2\\quad$ (variance)\n", + "\n", + "I have described the approach in more detail in this [IPython notebook](http://sebastianraschka.com/IPython_htmls/cython_least_squares.html)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "**First, the implementation in Python (CPython)**:" + ] + }, { "cell_type": "code", "collapsed": false, @@ -3046,7 +3087,16 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 62 + "prompt_number": 1 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "**And now, adding type definitions and compiling the code via Cython**:" + ] }, { "cell_type": "code", @@ -3057,7 +3107,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 58 + "prompt_number": 2 }, { "cell_type": "code", @@ -3083,7 +3133,83 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 63 + "prompt_number": 3 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "**A small visual proof of concept that our least squares fit works as intended:**" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 5 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from matplotlib import pyplot as plt\n", + "\n", + "import timeit\n", + "import random\n", + "random.seed(12345)\n", + "\n", + "n = 500\n", + "x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", + "y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", + "\n", + "slope, intercept = cy_lstsqr(x, y)\n", + "\n", + "line_x = [round(min(x)) - 1, round(max(x)) + 1]\n", + "line_y = [slope*x_i + intercept for x_i in line_x]\n", + "\n", + "plt.figure(figsize=(8,8))\n", + "plt.scatter(x,y)\n", + "plt.plot(line_x, line_y, color='red', lw='2')\n", + "\n", + "plt.ylabel('y')\n", + "plt.xlabel('x')\n", + "plt.title('Linear regression via least squares fit')\n", + "\n", + "ftext = 'y = ax + b = {:.3f} + {:.3f}x'\\\n", + " .format(slope, intercept)\n", + "plt.figtext(.15,.8, ftext, fontsize=11, ha='left')\n", + "\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nB2H+zOtjC0adAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "**Eventually, the benchmark:**:" + ] }, { "cell_type": "code", @@ -3109,7 +3235,277 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 64 + "prompt_number": 13 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", + "\n", + "labels = [('py_lstsqr', 'regular Python (CPython)'), \n", + " ('cy_lstsqr', 'Cython implementation')]\n", + "\n", + "\n", + "matplotlib.rcParams.update({'font.size': 12})\n", + "\n", + "fig = plt.figure(figsize=(10,8))\n", + "for lb in labels:\n", + " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time per computation in milliseconds [ms]')\n", + "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", + "plt.legend(loc=2)\n", + "plt.grid()\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "max_perf = max( py/nu for py,nu in zip(times_n['py_lstsqr'],\n", + " times_n['cy_lstsqr']) )\n", + "min_perf = min( py/nu for py,nu in zip(times_n['py_lstsqr'],\n", + " times_n['cy_lstsqr']) )\n", + "\n", + "ftext = 'Using Cython is {:.2f}x to '\\\n", + " '{:.2f}x faster than regular (C)Python'\\\n", + " .format(min_perf, max_perf)\n", + "plt.title('Performance of least square fit implementations in Cython and (C)Python')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 14 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Numba vs regular (C)Python & Numpy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Numba is using the [LLVM compiler infrastructure](http://llvm.org) for compiling Python code to machine code. Its strength is to work with NumPy arrays to speed-up the code. If you want to read more about Numba, please see refer to the original [website and documentation](http://numba.pydata.org/numba-doc/0.13/index.html)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, we implement a linear regression via least squares fitting (with vertical offsets) by solving to fit *n* points $(x_i, y_i)$ with $i=1,2,...n,$ via linear equation of the form \n", + "$f(x) = a\\cdot x + b$. \n", + "\n", + "\n", + "\n", + "$\\Rightarrow \\pmb a = (\\pmb X^T \\; \\pmb X)^{-1} \\pmb X^T \\; \\pmb y$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I have described the approach in more detail in this [IPython notebook](http://sebastianraschka.com/IPython_htmls/cython_least_squares.html)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Matrix equation " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to obtain the parameters for the linear regression line for a set of multiple points, we can re-write the problem as matrix equation \n", + "$\\pmb X \\; \\pmb a = \\pmb y$ \n", + "\n", + "$\\Rightarrow\\Bigg[ \\begin{array}{cc}\n", + "x_1 & 1 \\\\\n", + "... & 1 \\\\\n", + "x_n & 1 \\end{array} \\Bigg]$\n", + "$\\bigg[ \\begin{array}{c}\n", + "a \\\\\n", + "b \\end{array} \\bigg]$\n", + "$=\\Bigg[ \\begin{array}{c}\n", + "y_1 \\\\\n", + "... \\\\\n", + "y_n \\end{array} \\Bigg]$ \n", + "\n", + "With a little bit of calculus, we can rearrange the term in order to obtain the parameter vector \n", + "$\\pmb a = [a\\;b]^T$ \n", + "\n", + "We will implement this matrix equation in \n", + "- `py_mat_lstsqr()` and \n", + "- `numba_mat_lstqrs()`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Classic approach" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the more \"classic\" approach that is often found in statistics textbooks, we calculate the following parameters as follows:\n", + "\n", + "$a = \\frac{S_{x,y}}{\\sigma_{x}^{2}}\\quad$ (slope)\n", + "\n", + "$b = \\bar{y} - a\\bar{x}\\quad$ (y-axis intercept)\n", + "\n", + "where \n", + "\n", + "\n", + "$S_{xy} = \\sum_{i=1}^{n} (x_i - \\bar{x})(y_i - \\bar{y})\\quad$ (covariance)\n", + "\n", + "\n", + "$\\sigma{_x}^{2} = \\sum_{i=1}^{n} (x_i - \\bar{x})^2\\quad$ (variance)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will implement this \"classic\" approach in\n", + "- `py_lstsqr()` and \n", + "- `numba_lstqrs()`" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import numpy as np\n", + "\n", + "def py_mat_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " X = np.vstack([x, np.ones(len(x))]).T\n", + " return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 23 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from numba import jit\n", + "\n", + "@jit\n", + "def numba_mat_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " X = np.vstack([x, np.ones(len(x))]).T\n", + " return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 24 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def py_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = 0\n", + " cov_xy = 0\n", + " for x_i, y_i in zip(x,y):\n", + " temp = (x_i - x_avg)\n", + " var_x += temp**2\n", + " cov_xy += temp*(y_i - y_avg)\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 25 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "@jit\n", + "def numba_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = 0\n", + " cov_xy = 0\n", + " for x_i, y_i in zip(x,y):\n", + " temp = (x_i - x_avg)\n", + " var_x += temp**2\n", + " cov_xy += temp*(y_i - y_avg)\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 26 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Verifying that both approaches yield the same results" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import random\n", + "random.seed(12345)\n", + "\n", + "n = 500\n", + "x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", + "y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", + "\n", + "np.testing.assert_array_almost_equal(py_lstsqr(x, y),\n", + " py_mat_lstsqr(x, y), decimal=6)" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Visual checking the least square fit" + ] }, { "cell_type": "code", @@ -3121,14 +3517,82 @@ "metadata": {}, "outputs": [] }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from matplotlib import pyplot as plt\n", + "\n", + "slope, intercept = py_mat_lstsqr(x, y)\n", + "\n", + "line_x = [round(min(x)) - 1, round(max(x)) + 1]\n", + "line_y = [slope*x_i + intercept for x_i in line_x]\n", + "\n", + "plt.figure(figsize=(7,6))\n", + "plt.scatter(x,y)\n", + "plt.plot(line_x, line_y, color='red', lw='2')\n", + "\n", + "plt.ylabel('y')\n", + "plt.xlabel('x')\n", + "plt.title('Linear regression via least squares fit')\n", + "\n", + "ftext = 'y = ax + b = {:.3f} + {:.3f}x'\\\n", + " .format(slope, intercept)\n", + "plt.figtext(.15,.8, ftext, fontsize=11, ha='left')\n", + "\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 45 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "import random\n", + "random.seed(12345)\n", + "\n", + "funcs = ['py_mat_lstsqr', 'numba_mat_lstsqr', \n", + " 'py_lstsqr', 'numba_lstsqr']\n", + "\n", + "orders_n = [10**n for n in range(1, 6)]\n", + "times_n = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " x = np.asarray([x_i*np.random.randint(8,12)/10 for x_i in range(n)])\n", + " y = np.asarray([y_i*np.random.randint(10,14)/10 for y_i in range(n)])\n", + " for f in funcs:\n", + " times_n[f].append(min(timeit.Timer('%s(x,y)' %f, \n", + " 'from __main__ import %s, x, y' %f)\n", + " .repeat(repeat=3, number=1000)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 28 + }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib.pyplot as plt\n", "\n", - "labels = [('py_lstsqr', 'regular Python (CPython)'), \n", - " ('cy_lstsqr', 'Cython implementation')]\n", + "labels = [('py_mat_lstsqr', 'matrix equation in reg. (C)Python & Numpy'), \n", + " ('numba_mat_lstsqr', 'matrix equation in Numba'),\n", + " ('py_lstsqr', '\"classic least squares in reg. (C)Python'),\n", + " ('numba_lstsqr', 'classic least squares in Numba'),]\n", "\n", "\n", "matplotlib.rcParams.update({'font.size': 12})\n", @@ -3143,11 +3607,18 @@ "plt.grid()\n", "plt.xscale('log')\n", "plt.yscale('log')\n", - "ftext = 'Cython % is {:.2f}x faster than (C)Python'\\\n", - " .format(times_n['py_lstsqr'][-1]\\\n", - " /times_n['cy_lstsqr'][-1])\n", - "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", - "plt.title('Performance of least square fit implementations in Cython and (C)Python')\n", + "\n", + "#max_perf = max( py/nu for py,nu in zip(times_n['py_lstsqr'],\n", + "# times_n['numba_lstsqr']) )\n", + "#min_perf = min( py/nu for py,nu in zip(times_n['py_lstsqr'],\n", + "# times_n['numba_lstsqr']) )\n", + "#\n", + "#ftext = 'Using Numba is {:.2f}x to '\\\n", + "# '{:.2f}x faster than regular (C)Python and Numpy'\\\n", + "# .format(min_perf, max_perf)\n", + "\n", + "plt.figtext(.14,.15, ftext, fontsize=11, ha='left')\n", + "plt.title('Performance of least square fit implementations in Numba and (C)Python+Numpy')\n", "plt.show()" ], "language": "python", @@ -3156,13 +3627,13 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\n", + "png": "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\nqEC0tbVhb2+PqlWrKnjJVapUQVJSEuzt7RX+SnrCzcHBAVpaWqKGAACRkZGF/gL4WP755x94eXmh\nR48eqFWrFuzs7JCcnFyik0BSqRTW1tY4fPiw0vsuLi7Q1tZGWlqaUjsV1jldXFxw5swZUQOOj4/H\n06dP8c0335SsoPlQpd6ys7ORmJgIf39/tG7dGs7OztDS0lL4BcTzPJo3b47p06fjwoULqFy5MrZu\n3Qrg34FA1UGjbdu2mDt3Li5fvoxXr15h3759AD50qujoaFH8gtdSqRS5ubki/WJjY0VxTp48ibp1\n68LPzw9169ZFtWrVkJGRUaxuDRs2xJMnT/D69WsFW5XkIa0MuY3kr2coL06fPi26PnXqFFxcXJTG\nlc/O37hxQ6H8qpy2K4qGDRsiPT0dEolEQbaFhYXKcgqzoyr9W1NTE+/fvy9SvouLi9An5Lx9+xZn\nz54tcV8sqq2XFxzHYf78+Vi/fj2uXLkiuqdKX/pY8re/J0+eICkpCTVr1gTwoZ+2b98ePj4+cHV1\nhb29Pa5du1bkmBwTE4M3b95gyZIlaNy4MRwdHUs1e+ni4oLExETRD4KEhIRifyA4OjoCEM8mmpiY\noH379lixYgWePXumkObdu3d49eqVcC1PW3BSwNzcHPb29grOnpxBgwYhPj4eq1evxuXLlzFo0CDR\nfU1NzVKNL5/q+aOmpibq1/JJo/xhVapUKTR9gwYN0KtXL4wbNw6A+HkilUoVXmUTGxur0FZK8jzP\nT0xMjMgJPHXqFLS0tFCtWjUhbMiQIdi4cSPWrFkDa2treHp6Fiv3s3b4lHH//n00bdoUurq6WLhw\nIaZMmYIrV64gOTkZe/fuxdChQ4W4pOIrQXR1dTFq1ChMnToVO3fuxLVr1xAcHIz9+/dj0qRJZVIO\nJycn7N27FzExMbh69SoGDx6Me/fuifRVRf+AgAD8/vvvmDVrFhITE5GQkIAVK1YgOzsb+vr6mDRp\nEiZNmoRVq1YhOTkZCQkJ+N///gd/f/9CZf7888949uwZfHx8kJCQgKioKPTt2xfu7u6lXtKUExQU\nhGXLliE4OFhpvRkbG6NSpUpYs2YNUlJScPr0afTu3Vv0WpB9+/ZhyZIluHDhAm7evIk9e/bg1q1b\nwsAtdwb27duHrKwsvHz5Uqku69atw9q1axEfH48bN24gLCwMz58/F+SMHTsW27Ztw7Jly5CSkoLQ\n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\n+ujH27GDtnfuGNzXNiKC9evWlaiVr7jWvbt37xIeHo69vT1z587F39+fo0ePcunSpWKPZWdnx7Rp\n06hWrRpHjhzhzTff5J133iEuLg6Ajz76iN27d7NkyRK8vb1JS0tj//79QF4LUpcuXXj11VeZNWsW\nAPv27cPOzq7I59LpdHTu3JlTp04xZcoU6tevz+nTpzn4CIXv/v37iYiI4P3332fKlClkZWUxbtw4\n2rdvz969e7GxseH27du0a9eOcePG4eDgwPLlyxkwYAA+Pj5EREQ8NO5du3bRqFEjFi5cSPPmzbGw\nsCgylnPnzvHyyy8zceJEXn75ZdLT09m9e7e+eDhz5gydO3cmMjKS+fPnc+rUKYYNGwYU/zsscH8r\nrqIofPnll/j7+3P27FlGjBhBZGRkocsBI0aM4IsvvqBevXpYWloSGxtLXFwc3377LaGhoezfv583\n3niD9PR0xo8f/9BzMNbZs2eZOnUqP/74IxYWFrz66qu8+uqrD70sPn/+fKKiokhMTCQnJ4fz58/T\nokULevTowebNm7G2tmby5MlERETw999/o9FoSE5OJioqitGjR9O3b1/279/P8OHDS9TqvXHjRj76\n6COD+2bPnk3btm1p1qxZkY9xcXHR/79OnTo4OzuTmJhoUAjez9bWlqysLAAGDx7M9OnT+ec//6nf\nPm/ePKytrenZsyddunTh2LFjVKlShW+//RYAV1dXTp8+DcDIkSP57LPPmDRpEj/88AODBg2iefPm\n1KpVC51Ox4svvkhWVhbLly/HycmJf/3rX7Rv357Dhw/j7u6uf87333+fzz//HH9/fz7++GNeeeUV\nTp48aXB+ooK4eRNmzYKLF7liaUm8lxfX69SBKlWwUBR6arUEFvO5LJ4wukrqQaf2oG2JX3+t08XE\n6HTh4QY/iR075t3/iD+JHTsWOpYuJibveUrR9OnTdba2trrTp08Xuf348eM6RVF0W7ZsKfYYCxcu\n1NnY2Ohvd+3aVRcdHV3kvleuXNEpiqJLSkoq9niKoujmzJmj0+l0urVr1+oURdElJycbczo6nU6n\nmzlzps7S0lJ/u3///rrIyEiDfdLT03V2dna6X3/9tdjjdO3aVffaa68ZFXdaWppOURTdhg0bHhjb\nrl27dIqi6E6cOFHk9tGjR+tq1Kihy8nJ0d+3bNkyg5wU9zsJCAjQjRs37qHPfebMGZ1Op9MlJibq\n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\nQmCC\n", "text": [ - "" + "" ] } ], - "prompt_number": 67 + "prompt_number": 33 }, { "cell_type": "code", From e0456a37720d4653132e758cf3fe40524948db82 Mon Sep 17 00:00:00 2001 From: Sebastian Raschka Date: Thu, 8 May 2014 18:59:11 -0400 Subject: [PATCH 031/248] temporary update --- benchmarks/timeit_tests.ipynb | 226 ++++++++++++++++++++++++++++------ 1 file changed, 188 insertions(+), 38 deletions(-) diff --git a/benchmarks/timeit_tests.ipynb b/benchmarks/timeit_tests.ipynb index 621e604..601214e 100644 --- a/benchmarks/timeit_tests.ipynb +++ b/benchmarks/timeit_tests.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:72a4e6f875d6b68497036a926caa242f8bcd993b827ce9b6dd576c414b944cd5" + "signature": "sha256:e000047e484bbe1e2fa97fe4904e21d20d5a2b3caa66f25b574f10db0e4225a6" }, "nbformat": 3, "nbformat_minor": 0, @@ -78,7 +78,7 @@ " - [`range()` vs. `numpy.arange()`](#np_arange)\n", " - [`statistics.mean()` vs. `numpy.mean()`](#np_mean)\n", "- [Cython vs. regular (C)Python](#cython)\n", - "- [Numba vs regular (C)Python & Numpy](#numba)" + "- [Numba vs. Cython vs. regular (C)Python & NumPy](#numba)" ] }, { @@ -3263,10 +3263,10 @@ " times_n['cy_lstsqr']) )\n", "min_perf = min( py/nu for py,nu in zip(times_n['py_lstsqr'],\n", " times_n['cy_lstsqr']) )\n", - "\n", "ftext = 'Using Cython is {:.2f}x to '\\\n", " '{:.2f}x faster than regular (C)Python'\\\n", " .format(min_perf, max_perf)\n", + "plt.figtext(.15,.8, ftext, fontsize=11, ha='left')\n", "plt.title('Performance of least square fit implementations in Cython and (C)Python')\n", "plt.show()" ], @@ -3297,7 +3297,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Numba vs regular (C)Python & Numpy" + "# Numba vs. Cython vs. regular (C)Python & Numpy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" ] }, { @@ -3356,15 +3363,16 @@ "$\\pmb a = [a\\;b]^T$ \n", "\n", "We will implement this matrix equation in \n", - "- `py_mat_lstsqr()` and \n", - "- `numba_mat_lstqrs()`" + "- Python/CPython: `py_mat_lstsqr()` \n", + "- Numba: `numba_mat_lstsqrs()` \n", + "- Cython: `cy_mat_lstsqr()`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Classic approach" + "### \"Classic\" approach " ] }, { @@ -3391,8 +3399,18 @@ "metadata": {}, "source": [ "We will implement this \"classic\" approach in\n", - "- `py_lstsqr()` and \n", - "- `numba_lstqrs()`" + "- Python/CPython: `py_lstsqr()` \n", + "- Numba: `numba_lstsqrs()` \n", + "- Cython: `cy_lstsqrs()` " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "
" ] }, { @@ -3400,7 +3418,34 @@ "collapsed": false, "input": [ "import numpy as np\n", - "\n", + "import scipy.stats\n", + "from numba import jit" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%load_ext cythonmagic" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Matrix equation:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ "def py_mat_lstsqr(x, y):\n", " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", " X = np.vstack([x, np.ones(len(x))]).T\n", @@ -3409,14 +3454,12 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 23 + "prompt_number": 59 }, { "cell_type": "code", "collapsed": false, "input": [ - "from numba import jit\n", - "\n", "@jit\n", "def numba_mat_lstsqr(x, y):\n", " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", @@ -3426,7 +3469,28 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 24 + "prompt_number": 60 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "def cy_mat_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " X = np.vstack([x, np.ones(len(x))]).T\n", + " return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### \"Classic\" approach:" + ] }, { "cell_type": "code", @@ -3449,7 +3513,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 25 + "prompt_number": 61 }, { "cell_type": "code", @@ -3473,13 +3537,72 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 26 + "prompt_number": 62 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "def cy_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " cdef double x_avg, y_avg, temp, var_x, cov_xy, slope, y_interc, x_i, y_i\n", + " x_avg = sum(x)/len(x)\n", + " y_avg = sum(y)/len(y)\n", + " var_x = 0\n", + " cov_xy = 0\n", + " for x_i, y_i in zip(x,y):\n", + " temp = (x_i - x_avg)\n", + " var_x += temp**2\n", + " cov_xy += temp*(y_i - y_avg)\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 63 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### NumPy and SciPy libraries:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def numpy_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " X = np.vstack([x, np.ones(len(x))]).T\n", + " return np.linalg.lstsq(X,y)[0]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 70 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def scipy_lstsqr(x,y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " return scipy.stats.linregress(x, y)[0:2]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 71 }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Verifying that both approaches yield the same results" + "### Verifying that the different approaches yield the same results" ] }, { @@ -3493,12 +3616,27 @@ "x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", "y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", "\n", - "np.testing.assert_array_almost_equal(py_lstsqr(x, y),\n", - " py_mat_lstsqr(x, y), decimal=6)" + "np.testing.assert_array_almost_equal(\n", + " py_lstsqr(x, y), py_mat_lstsqr(x, y), decimal=6)\n", + "np.testing.assert_array_almost_equal(\n", + " numpy_lstsqr(x,y), py_lstsqr(x, y), decimal=6)\n", + "np.testing.assert_array_almost_equal(\n", + " scipy_lstsqr(x,y), py_lstsqr(x, y), decimal=6)\n", + "\n", + "print('ok')" ], "language": "python", "metadata": {}, - "outputs": [] + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "ok\n" + ] + } + ], + "prompt_number": 80 }, { "cell_type": "markdown", @@ -3556,6 +3694,13 @@ ], "prompt_number": 45 }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Benchmarking:" + ] + }, { "cell_type": "code", "collapsed": false, @@ -3564,8 +3709,9 @@ "import random\n", "random.seed(12345)\n", "\n", - "funcs = ['py_mat_lstsqr', 'numba_mat_lstsqr', \n", - " 'py_lstsqr', 'numba_lstsqr']\n", + "funcs = ['py_mat_lstsqr', 'numba_mat_lstsqr', 'cy_mat_lstsqr', \n", + " 'py_lstsqr', 'numba_lstsqr', 'cy_lstsqr',\n", + " 'numpy_lstsqr', 'scipy_lstsqr']\n", "\n", "orders_n = [10**n for n in range(1, 6)]\n", "times_n = {f:[] for f in funcs}\n", @@ -3581,7 +3727,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 28 + "prompt_number": 66 }, { "cell_type": "code", @@ -3589,10 +3735,14 @@ "input": [ "import matplotlib.pyplot as plt\n", "\n", - "labels = [('py_mat_lstsqr', 'matrix equation in reg. (C)Python & Numpy'), \n", + "labels = [('py_mat_lstsqr', 'matrix equation in reg. (C)Python & NumPy'), \n", " ('numba_mat_lstsqr', 'matrix equation in Numba'),\n", - " ('py_lstsqr', '\"classic least squares in reg. (C)Python'),\n", - " ('numba_lstsqr', 'classic least squares in Numba'),]\n", + " ('cy_mat_lstsqr', 'matrix equation in Cython & NumPy'),\n", + " ('py_lstsqr', '\"classic\" least squares in reg. (C)Python'),\n", + " ('numba_lstsqr', '\"classic\" least squares in Numba'),\n", + " ('cy_lstsqr', '\"classic\" least squares in Cython'),\n", + " ('numpy_lstsqr', 'least squares via np.linalg.lstsq()'),\n", + " ('scipy_lstsqr', 'least_squares via scipy.stats.linregress()'),]\n", "\n", "\n", "matplotlib.rcParams.update({'font.size': 12})\n", @@ -3608,17 +3758,17 @@ "plt.xscale('log')\n", "plt.yscale('log')\n", "\n", - "#max_perf = max( py/nu for py,nu in zip(times_n['py_lstsqr'],\n", - "# times_n['numba_lstsqr']) )\n", - "#min_perf = min( py/nu for py,nu in zip(times_n['py_lstsqr'],\n", - "# times_n['numba_lstsqr']) )\n", - "#\n", - "#ftext = 'Using Numba is {:.2f}x to '\\\n", - "# '{:.2f}x faster than regular (C)Python and Numpy'\\\n", - "# .format(min_perf, max_perf)\n", + "max_perf = max( py/nu for py,nu in zip(times_n['py_lstsqr'],\n", + " times_n['cy_lstsqr']) )\n", + "min_perf = min( py/nu for py,nu in zip(times_n['py_lstsqr'],\n", + " times_n['cy_lstsqr']) )\n", + "\n", + "ftext = 'Using Cython is {:.2f}x to '\\\n", + " '{:.2f}x faster than regular (C)Python'\\\n", + " .format(min_perf, max_perf)\n", "\n", "plt.figtext(.14,.15, ftext, fontsize=11, ha='left')\n", - "plt.title('Performance of least square fit implementations in Numba and (C)Python+Numpy')\n", + "plt.title('Performance of least square fit implementations')\n", "plt.show()" ], "language": "python", @@ -3627,13 +3777,13 @@ { "metadata": {}, "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAnwAAAIECAYAAACDnPP6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXdYFcfXx7+79HLpXhBQiiAoUawYG1wVW+xREzUoWLBG\nxagRK1jA3kuMaLCg/uwtJjYUDNhQBBUBaXZRxF5ROO8fvnfDci9wQQGj83kenoednTlz5kzZc6fs\nckREYDAYDAaDwWB8sfAVrQCDwWAwGAwGo2xhDh+DwWAwGAzGFw5z+BgMBoPBYDC+cJjDx2AwGAwG\ng/GFwxw+BoPBYDAYjC8c5vAxGAwGg8FgfOF8lQ7f+/fvMWDAAJiZmYHneZw8ebKiVfpPsmPHDlSr\nVg3q6uoYMGCA0jg+Pj5o3bp1OWvGKFg3kZGR4Hked+/eLbEsOzs7BAcHl4GWitja2iIoKKhc8vpc\n4XkeW7ZsqWg1IJPJMHjw4IpW45Owfv16aGhoVLQaJUbV/jBmzBgMHz68xPIHDRqECRMmlEa1UvFf\nrYcvhc/W4fPx8QHP8+B5HhoaGrC1tcWwYcPw6NGjj5a9a9cubN26FX/++ScyMzPRuHHjT6Dx10Vu\nbi4GDBiAXr164datW1i6dKnSeBzHgeO4ctUtLCwMPP/ZNu0yR1ndNGnSBJmZmahcuTIAICoqCjzP\n4+bNm8XKO3/+PMaMGVPWagOomPbyMdy+fbvUPxo9PT3Rv39/hfDMzEx07979U6j3UezduxeLFi36\naDm2trbgeR5///23KPxr76eqoEp/yMjIQEhICKZMmSIKz87Oxq+//gpnZ2fo6OjA3NwcHh4e2LRp\nE3JzcwEAU6dOxapVq3Dnzh1RWvmzl+d56Ovro06dOvjjjz9KpLu6ujo2btxYojQVSUREBHieh62t\nLd6+fSu6V1hf/a/xWfc2d3d3ZGZm4saNG1i2bBl2796Nfv36lVpeTk4OACAlJQVWVlb49ttvIZVK\nS/2LQy7va+Tu3bt4+fIl2rdvj8qVK0MikSiNR0Rg7/YuOXl5ecjLyytVWmV1o6GhAalUqvDwUKVu\nTE1NoaOjUypdvhY+ZRuXSqXQ0tL6ZPJKi5GREfT19T9aDsdx0NbWxq+//lrqNs0onFWrVqFVq1aw\ntLQUwm7duoV69ephz549CAgIwMWLF3Hq1CkMHDgQCxYsQEJCAgDAxsYGjRs3xpo1axTkrly5EpmZ\nmYiLi8N3332HQYMGYdeuXSrrxXHcZzX2R0REwM7Orth4WVlZWLJkiSjsv/ZDtFDoM8Xb25s8PT1F\nYUFBQaSmpkZv3rwhIqKtW7eSq6sraWtrk62tLf3yyy/08uVLIb6HhwcNHDiQpkyZQpUrVyYLCwuS\nyWTEcZzwZ2dnR0REOTk5NGHCBLKysiJNTU2qWbMmbdmyRZQ/x3G0bNky6t27NxkaGtKPP/5IoaGh\npK6uTidOnKBvvvmGdHR0qEWLFnTv3j06fvw4ubq6kp6eHnl6etKdO3cEWenp6dStWzeytLQkXV1d\nqlWrFm3atEmUn4eHBw0aNIhmzJhBFhYWZGJiQv369aMXL16I4v3vf/+jevXqkba2NpmamlL79u3p\n8ePHwv1ly5aRk5MTaWtrk6OjIwUFBdH79++LtP/p06epefPmpKOjQ8bGxtSnTx968OABERGFhoaK\nbMhxHEVGRqpcj8XV25EjR8jDw4NMTEzI0NCQPDw86Ny5cyIZISEh5OzsTNra2mRiYkLu7u50+/Zt\nOnHihIJu/fv3L7ScQUFBZG9vT1paWlSpUiVq27YtvX79WmQ7Kysr0tXVpbZt29KGDRuI4zihLuX1\nn59bt24p2GTQoEFUrVo10tHRIXt7e5o0aRK9fftWuB8QEEAODg60bds2cnJyInV1dUpKSqLnz5/T\nqFGjBB3q1q1Lu3fvLrQ8hdWN3C537tyhjIwMhTgtWrQoVKaNjQ3NmjVLdD116lQaOnQoGRoakrm5\nOa1atYpev35Nw4cPJ2NjY7KysqIVK1aI5HAcR0uXLqXvv/+e9PT0yMrKipYuXSqKY2trS0FBQcJ1\nTk4OBQQEkJ2dHWlra5OLiwv9/vvvCnKXL19OP/zwA+np6ZGNjQ3t3r2bHj16RL169SKJREL29va0\na9cuUbrMzEzy9vamSpUqkUQioaZNm9LJkyeF+3KbHT16lJo3b066urpUs2ZN+vvvv0V5KxtPiuvf\n3t7ehfYhjuNo8+bNQty7d+/Sjz/+SEZGRqSjo0MymYzOnz9fIj2Jim/rBZGPPwWvixuPCmJra0sj\nR44kiURCISEhQvimTZuI4zjhWpW+JC/rX3/9Rd9++y3p6OhQgwYN6OrVqxQfH09NmjQhXV1dcnNz\no6tXryrIPnbsGNWsWZO0tbWpUaNGFBcXJ8R5/Pgx/fTTT1S1alXS0dEhJycnWrhwYZFlIyJasmQJ\n1alTh/T19cnCwoJ69epF9+7dE+6rWj9xcXHUuHFj0tLSIkdHR9q2bZtCf1BG5cqVKTQ0VBTWsWNH\nqly5Mj179kwh/vv370Xj7apVq8je3l4Up2AbJCKqXr06/fTTT5Senk4cx9GpU6dE9yMjI0lNTY1u\n3LhBNjY2orbN8zwR/VsP0dHRVLduXdLV1aX69etTTEyMSFZRzx+if8fLffv2kZOTE+np6ZFMJqOU\nlJRC7XTixAmytbUt8j7HcTRp0iQyMjKihw8fCvc8PT1Fz5GCfYOIaObMmSL58mef/Bmir69PQ4YM\noffv39Py5cupatWqZGxsTIMHD6acnByR7AEDBtCECRPIzMyMDAwMaPDgwYLfExoaSkZGRvTq1StR\n/tOnTydHR8dCy0f0Yfbls8Tb25tat24tClu4cCFxHEcvXryg0NBQMjY2prCwMMrIyKCTJ09S7dq1\nqW/fvkJ8Dw8PkkgkNGzYMEpMTKQrV67Qo0ePaNy4cWRnZ0f3798XKnXcuHFkampKO3fupJSUFAoO\nDiae5yk8PFyQx3EcmZqa0sqVKyk9PZ1SUlIoNDSUeJ6nFi1a0Llz5yg2NpYcHR2pWbNm5O7uTmfP\nnqW4uDhydnamH3/8UZB1+fJlWrlyJV26dInS09Np+fLlguOYX38jIyP65ZdfKDk5mY4cOUImJiY0\ndepUIc4ff/xBGhoaNGvWLKGMK1asEMoVEBBANjY2tHfvXrp+/Tr99ddfVLVqVZGMgty7d48kEgn9\n9NNPdOXKFYqKiqLatWuTu7s7ERG9fv2aYmJiiOM4OnDgAN2/f1/UYAvWY36HT5V627NnD+3YsYOu\nXbtGV69epUGDBpGJiQllZ2cTEdH58+dJXV2dNm3aRDdv3qTLly/TunXr6Pbt25STk0MrV64kjuPo\n/v37dP/+faWDHhHRrl27yMDAgP7880+6desWxcXF0dKlS4WH4N69e0ldXZ0WL15MKSkptG7dOpJK\npcTzfIkcvry8PJo8eTKdO3eObty4Qfv376fKlStTQECAkCYgIIB0dXVJJpPRuXPnKCUlhZ4/f04y\nmYxatGhB0dHRlJGRQWvWrCFNTU1Ru8xPYXWT3+HLzc2l/fv3E8dxdP78ebp//77oB0JBCj50bGxs\nyMjIiBYvXkxpaWk0a9Ys4nme2rZtK4TNnj2beJ4XPXQ5jiMTExNasWIFpaSk0NKlS0ldXZ327dtX\naF7e3t7k6upKR48epevXr9O2bdvIyMiI1q1bJ5JrYWFBGzdupLS0NBo+fDjp6elRmzZtaMOGDZSW\nlkYjR44kPT09oQ29evWKatSoQT169KALFy5QWloaBQUFkZaWFiUmJhLRvw8AV1dXOnz4MKWmplL/\n/v3JwMBAsNfFixeJ4zjas2ePaDwprn8/ffqU3N3dqVevXkI7lfeh/A/bvLw8cnNzo7p161J0dDRd\nvnyZfvzxRzI2NhbyUkXP4tq6MmQyGfn6+grXqoxHhbWfWbNm0cyZM6ly5cqCs/ExDl+9evXoxIkT\ndPXqVWrcuDHVrl2bmjZtSsePH6fExERq1qwZNWrUSCSb53mqX78+nTx5ki5dukQdO3YkKysrwQaZ\nmZk0Z84cunjxIl2/fp3CwsJIX19fwZkqyNKlSyk8PJyuX79Op0+fpiZNmpCHh4dwX5X6efXqFVla\nWlKHDh3o0qVLdPr0aWrYsCHp6uoW6fAlJycTx3GifpadnU1qamrFOopyLly4QBzH0Y0bN4QwZQ5f\nrVq1qGfPnkRE1LZtW4Uf0l5eXvTdd98REVFWVhapq6vTsmXLhPZN9G89eHh4UFRUFCUlJVH79u3J\nzs5OmIQo7vlD9GG81NPTo/bt21NsbCzFx8dT/fr1qXnz5oWWU1WH7/r16+Ts7EwjR44U7hV0+Ar2\nDSLlDp+BgQH5+PhQUlISHThwgLS1talt27bk7e1NSUlJdPDgQdLR0aHffvtNSOfh4SE4efJ0UqmU\nxowZQ0QfxnhjY2PasGGDkCY3N5dsbGxo3rx5hZaP6DN3+PI7CgkJCWRvb0+NGzcmog8PnYK/9CMj\nI4njOHry5AkRfTCck5OTgmz5rwM5L1++JC0tLZHRiYi6detGLVu2FK45jlPw6uUzKvHx8ULY/Pnz\nieM4io2NFcIWL15MZmZmRZa5S5cuCgNsnTp1RHGGDRsm2ICIqEqVKqKGmZ+XL1+Srq4uHT58WBS+\nYcMGMjIyKlSPKVOmUJUqVejdu3dCWHx8PHEcJ8yAyGeJoqOjiyxTwXpUpd4KkpubS8bGxsIAtHv3\nbjI0NCzUkSv4ICmMRYsWUfXq1UXlzE/Tpk3Jy8tLFDZu3LhSzfApyzv/r7GAgADieZ5u3bolhJ04\ncYK0tbXp6dOnorT9+/enrl27FipbWd3kd/iIiP755x+FQb4wlDl83bp1E67z8vLIwMCAOnfuLAoz\nNjYWzfJxHEf9+vUTye7Tp49okM6fV3p6OvE8T8nJyaI006dPF/ULjuOEwZDow8OG4zgaNWqUEPb4\n8WPiOI4OHjxIRB/qzdraWmGmu0WLFuTn50dE/9psz549wv379+8Tx3F05MgRIlKtruUU7N8FHyL5\nyyNv68eOHSOO4wQnlIjo7du3VLlyZZoxY4bKehbX1pWhzOErbjxShrxOX716RVZWVsIPnY9x+PL/\nSNixYwdxHCea+d6zZw9xHCc4l/Jx+vjx40Kcx48fk76+vujHQ0FGjRqlMPFQHLGxscRxHN29e1ek\nc1H1ExISQvr6+qIx8MqVK8RxXJGO24EDB4RJEDlnz55VyK8osrOzhRlIORzHUVhYGBERvXv3jkJC\nQojjOGHs3r17N+np6Qlj8OPHj0lXV5f27t0ryFBXVxc5JUT/1sPFixcV9L127RoRFf38+eeff4jo\nw3iprq4umoXbtm0b8TwvWjnJj6oO3507d2jfvn2kqakpzBi2atWqVA6fubm5qBwdOnSgSpUqiSZI\nunTpQj169BCuPTw8yM7OjvLy8oSwNWvWkLa2tjCrN2rUKGrWrJlw/9ChQ6SpqUlZWVmFlo+I6LPe\nwxcREQGJRAJdXV3UqlULDg4O2Lx5M7KysnDz5k2MGTMGEolE+Pvuu+/AcRxSU1MFGfXr1y82n9TU\nVOTk5MDd3V0U7u7uLux1kOPm5qaQnuM41KpVS7g2NzcHANSuXVsUlp2dLexpePXqFfz9/fHNN9/A\n1NQUEokEf/31l2gTPcdxcHV1FeVVuXJl3L9/HwDw4MED3L59G23atFFaroSEBLx+/Rrff/+9yE5D\nhw7Fs2fPkJ2dXWi6b7/9Furq6kJY7dq1YWhoiKtXrypNowqq1ltGRgb69u0LR0dHGBoawtDQEE+f\nPhVs06ZNG9jb28POzg69e/dGSEhIoWUpih9//BHv3r2DjY0N+vfvj7CwMLx48UK4n5iYiCZNmojS\nNG3atFRlDwkJQaNGjWBhYQGJRIJJkyYpHJgwNzeHtbW1cB0TE4OcnBxYWVmJ7LV582ZRGy9vCrZL\njuNQqVIlUXvnOA5SqRRZWVmitAUPSDVp0kShj8k5f/48iAj169cXlX/27NkK5c+vj5mZGdTU1ET6\nGBkZQVNTEw8ePADwwbaZmZkwMjISyY6KilKQXadOHeF/qVQKNTU1oQ8Whir9WxUSEhJgamoKZ2dn\nIUxTUxONGjVSsFtRehbX1lWhuPGoOHR0dDBz5kwsXLgQmZmZJcq7IPn1KGy8BSDUt5z87c/IyAg1\natQQxrS8vDzMmTMHderUQaVKlSCRSPD7778XW2cRERFo27YtqlatCgMDAzRv3hwAcOPGDVG8ourn\n6tWrqFmzJgwNDYU4Li4uomtlPH36FACgp6cnhFEJ980ZGBgAAJ48eSIKHzRoECQSCXR0dDB27FhM\nnDhROLXdqVMnGBoaYvPmzQA+HMAxMjJCp06dis2vYDuSHyST26Ko50/+Nm9paQlTU1ORHCIS6vzm\nzZvQ19cXPWdu3rwp6u/5n9v56dy5Mxo3bvzRJ5hr1KghKoe5uTmcnJxE5wbMzc0V2qmbm5toz2CT\nJk3w9u1bpKWlAQCGDBmC6OhoJCcnA/jwfOnSpQvMzMyK1Ee9yLsVzLfffosNGzZAXV0dlpaWguHk\nDWPZsmVo0aKFQjorKysAHxpW/o7wKVAmj+d5UeXI/1dTU1MIIyJwHIfx48dj//79WLx4MZycnKCr\nq4uxY8cKHViOpqam6JrjOJU3Psvj7dy5E9WrV1e4b2xsrDQdV0abbeX6FFdvHTt2hFQqxapVq1Cl\nShVoaGigWbNmwiEZPT09nD9/HtHR0Th27BhWr16NX3/9FeHh4ahXr57K+lhaWiIpKQknTpzA8ePH\nMXPmTEyYMAFnz54VOV5FoeyU4bt370TXO3bswM8//4y5c+fCw8MDBgYG2L59OyZPniyKV7Bt5eXl\nwdDQEOfPn1fIo2C7KG8KHnTiOE5p2Mds0penPX36NHR1dRVkF6VPYTrKZebl5aFGjRrYu3evQrqC\neSmzdXHlUrV/lxb5OKKqnp+irSvLo6R17OPjg6VLl2Lq1KmQyWSie6r0JTn561ZuB2VhxemWf5xb\nuHAh5syZgyVLlqBu3bqQSCRYtGgRDh48WGj6mzdv4rvvvoO3tzcCAwNhZmaGW7duwdPTU+FQX3Ht\nqDRjrpGREQDg5cuXwvjh6OgInueRkJCArl27FitD3iblsuQEBwejS5cu0NfXh1QqFd1TV1fHwIED\nERISgqFDh2Lt2rXo37+/SqeuC3teym2h6vNHWVvML8fKygqXLl0S7p85cwYTJkxAZGSkEFbUgc0F\nCxagUaNGiI6OVuhrPM8r6KisreZ39uQ6Kgsr2E6LK3/NmjXRrFkzrFmzBhMmTMCBAweKbKeC3sXG\nqEC0tbVhb2+PqlWrKnjJVapUQVJSEuzt7RX+SnrCzcHBAVpaWqKGAACRkZGF/gL4WP755x94eXmh\nR48eqFWrFuzs7JCcnFyik0BSqRTW1tY4fPiw0vsuLi7Q1tZGWlqaUjsV1jldXFxw5swZUQOOj4/H\n06dP8c0335SsoPlQpd6ys7ORmJgIf39/tG7dGs7OztDS0lL4BcTzPJo3b47p06fjwoULqFy5MrZu\n3Qrg34FA1UGjbdu2mDt3Li5fvoxXr15h3759AD50qujoaFH8gtdSqRS5ubki/WJjY0VxTp48ibp1\n68LPzw9169ZFtWrVkJGRUaxuDRs2xJMnT/D69WsFW5XkIa0MuY3kr2coL06fPi26PnXqFFxcXJTG\nlc/O37hxQ6H8qpy2K4qGDRsiPT0dEolEQbaFhYXKcgqzoyr9W1NTE+/fvy9SvouLi9An5Lx9+xZn\nz54tcV8sqq2XFxzHYf78+Vi/fj2uXLkiuqdKX/pY8re/J0+eICkpCTVr1gTwoZ+2b98ePj4+cHV1\nhb29Pa5du1bkmBwTE4M3b95gyZIlaNy4MRwdHUs1e+ni4oLExETRD4KEhIRifyA4OjoCEM8mmpiY\noH379lixYgWePXumkObdu3d49eqVcC1PW3BSwNzcHPb29grOnpxBgwYhPj4eq1evxuXLlzFo0CDR\nfU1NzVKNL5/q+aOmpibq1/JJo/xhVapUKTR9gwYN0KtXL4wbNw6A+HkilUoVXmUTGxur0FZK8jzP\nT0xMjMgJPHXqFLS0tFCtWjUhbMiQIdi4cSPWrFkDa2treHp6Fiv3s3b4lHH//n00bdoUurq6WLhw\nIaZMmYIrV64gOTkZe/fuxdChQ4W4pOIrQXR1dTFq1ChMnToVO3fuxLVr1xAcHIz9+/dj0qRJZVIO\nJycn7N27FzExMbh69SoGDx6Me/fuifRVRf+AgAD8/vvvmDVrFhITE5GQkIAVK1YgOzsb+vr6mDRp\nEiZNmoRVq1YhOTkZCQkJ+N///gd/f/9CZf7888949uwZfHx8kJCQgKioKPTt2xfu7u6lXtKUExQU\nhGXLliE4OFhpvRkbG6NSpUpYs2YNUlJScPr0afTu3Vv0WpB9+/ZhyZIluHDhAm7evIk9e/bg1q1b\nwsAtdwb27duHrKwsvHz5Uqku69atw9q1axEfH48bN24gLCwMz58/F+SMHTsW27Ztw7Jly5CSkoLQ\n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\n+ujH27GDtnfuGNzXNiKC9evWlaiVr7jWvbt37xIeHo69vT1z587F39+fo0ePcunSpWKPZWdnx7Rp\n06hWrRpHjhzhzTff5J133iEuLg6Ajz76iN27d7NkyRK8vb1JS0tj//79QF4LUpcuXXj11VeZNWsW\nAPv27cPOzq7I59LpdHTu3JlTp04xZcoU6tevz+nTpzn4CIXv/v37iYiI4P3332fKlClkZWUxbtw4\n2rdvz969e7GxseH27du0a9eOcePG4eDgwPLlyxkwYAA+Pj5EREQ8NO5du3bRqFEjFi5cSPPmzbGw\nsCgylnPnzvHyyy8zceJEXn75ZdLT09m9e7e+eDhz5gydO3cmMjKS+fPnc+rUKYYNGwYU/zsscH8r\nrqIofPnll/j7+3P27FlGjBhBZGRkocsBI0aM4IsvvqBevXpYWloSGxtLXFwc3377LaGhoezfv583\n3niD9PR0xo8f/9BzMNbZs2eZOnUqP/74IxYWFrz66qu8+uqrD70sPn/+fKKiokhMTCQnJ4fz58/T\nokULevTowebNm7G2tmby5MlERETw999/o9FoSE5OJioqitGjR9O3b1/279/P8OHDS9TqvXHjRj76\n6COD+2bPnk3btm1p1qxZkY9xcXHR/79OnTo4OzuTmJhoUAjez9bWlqysLAAGDx7M9OnT+ec//6nf\nPm/ePKytrenZsyddunTh2LFjVKlShW+//RYAV1dXTp8+DcDIkSP57LPPmDRpEj/88AODBg2iefPm\n1KpVC51Ox4svvkhWVhbLly/HycmJf/3rX7Rv357Dhw/j7u6uf87333+fzz//HH9/fz7++GNeeeUV\nTp48aXB+ooK4eRNmzYKLF7liaUm8lxfX69SBKlWwUBR6arUEFvO5LJ4wukrqQaf2oG2JX3+t08XE\n6HTh4QY/iR075t3/iD+JHTsWOpYuJibveUrR9OnTdba2trrTp08Xuf348eM6RVF0W7ZsKfYYCxcu\n1NnY2Ohvd+3aVRcdHV3kvleuXNEpiqJLSkoq9niKoujmzJmj0+l0urVr1+oURdElJycbczo6nU6n\nmzlzps7S0lJ/u3///rrIyEiDfdLT03V2dna6X3/9tdjjdO3aVffaa68ZFXdaWppOURTdhg0bHhjb\nrl27dIqi6E6cOFHk9tGjR+tq1Kihy8nJ0d+3bNkyg5wU9zsJCAjQjRs37qHPfebMGZ1Op9MlJibq\n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\nQmCC\n", + "png": "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\nPbSRz318fLS5GIVrSW2F/iTm+pJ460virT+Jub4u+Bq53NxcvvrqK6699lpXN0VAq3Oriq4lMdeX\nxFtfEm/9Scz11Vnx1jWRe+mllxg5ciT+/v7ccccdTZ4rKSlh2rRpBAcHk5CQwPLly7Xn/va3v3HF\nFVfw7LPPAlBRUcFtt93GW2+9JT1y3URbJ+YWnUdiri+Jt74k3vqTmOurs+KtayLXq1cvnnrqKebM\nmdPiufvvvx9/f38KCwv5z3/+w29+8xv27t0LwCOPPMK6det49NFHsdlszJw5k3nz5jFo0CA9m39W\n59tF2t7t27L+2dY503OtLW/rMj15crzPtPxCivn5xvtsz8s53vH1u/Icd/d4t/c1uireZ3ruQj/H\nPflviq6J3LRp07juuuuIiopqsry6upoPPviAp59+msDAQC655BKuu+46lixZ0uI1li9fzubNm3n6\n6ae54ooreOedd/Rq/ll58h/dtiw7duzYOdvTmTw53mdafiHFvDv+0fXkeLd1fT0TOXeLd3tfozsm\ncu4Wc/mb4uSS4Uf+8Ic/cPLkSd58800Atm3bxqWXXkp1dbW2znPPPcf69ev55JNPOrSPgQMHcvjw\n4U5prxBCCCFEV0pJSelQ3VzLAdh0YDAYmjyuqqoiNDS0ybKQkBAqKys7vI9Dhw51eFshhBBCCHfg\nkrtWm3cCBgcHU1FR0WRZeXk5ISEhejZLCCGEEMKtuCSRa94jN3jwYGw2W5NetB07djB8+HC9myaE\nEEII4TZ0TeTsdjt1dXXYbDbsdjtmsxm73U5QUBBZWVnMnTuXmpoavvvuO1auXMmtt96qZ/OEEEII\nIdyKrolcw12pzzzzDEuXLiUgIIA///nPALzyyivU1tYSGxvLLbfcwquvvsrQoUP1bJ4QQgghhFtx\nyV2rrvTEE0/www8/kJCQwL///W+8vV1yv8cFoaKigkmTJrFv3z42bdpEUlKSq5vk8TZv3szDDz+M\nj48PvXr1YvHixXKOd6GCggKysrLw9fXF19eXZcuWtRheSXS+5cuX81//9V8UFha6uike79ixY4wa\nNYrhw4djMBh45513iI6OdnWzPNr69ev505/+hMPh4KGHHuL6668/6/puO0VXR+zYsYO8vDy++eYb\nhgwZwnvvvefqJnm0wMBAPvvsM6ZPn97iBhfRNfr06cO6devYsGEDCQkJfPzxx65ukkeLiYlh48aN\n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\nAICkHiAvheE4HrYHAAAAAElFTkSuQmCC\n", "text": [ - "" + "" ] } ], - "prompt_number": 33 + "prompt_number": 69 }, { "cell_type": "code", From f3b534c3f5256699a2915e4fe91199e041601a0a Mon Sep 17 00:00:00 2001 From: rasbt Date: Thu, 8 May 2014 21:04:11 -0400 Subject: [PATCH 032/248] fixed statistics module dependend benchmark --- benchmarks/timeit_tests.ipynb | 60 +++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 14 deletions(-) diff --git a/benchmarks/timeit_tests.ipynb b/benchmarks/timeit_tests.ipynb index 601214e..1099508 100644 --- a/benchmarks/timeit_tests.ipynb +++ b/benchmarks/timeit_tests.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:e000047e484bbe1e2fa97fe4904e21d20d5a2b3caa66f25b574f10db0e4225a6" + "signature": "sha256:a4749ce2a9f843d9846081abaa9265690ebabfaf5a0aa18877f65945b1f56805" }, "nbformat": 3, "nbformat_minor": 0, @@ -2909,7 +2909,7 @@ "\n", "n = 1000000\n", "samples = list(range(n))\n", - "samples_array = np_arange(n)\n", + "samples_array = np.arange(n)\n", "\n", "assert(st_mean(samples) == np_mean(samples)\n", " == calc_mean(samples) == np_mean_ary(samples_array))\n", @@ -2923,17 +2923,38 @@ "metadata": {}, "outputs": [ { - "ename": "ImportError", - "evalue": "No module named 'statistics'", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mImportError\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 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtimeit\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mstatistics\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mstats\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mImportError\u001b[0m: No module named 'statistics'" + "output_type": "stream", + "stream": "stdout", + "text": [ + "100 loops, best of 3: 26.2 ms per loop\n", + "1 loops, best of 3: 144 ms per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "100 loops, best of 3: 3.21 ms per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "1 loops, best of 3: 1.12 s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" ] } ], - "prompt_number": 15 + "prompt_number": 2 }, { "cell_type": "code", @@ -2955,7 +2976,18 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 49 + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 6 }, { "cell_type": "code", @@ -3001,13 +3033,13 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\nR/PbFRoaSiYmJvTrr79SXl4eHTp0iDp16iQRo7a//vqLNDU1ady4cXT9+nU6ffo02dvbk6urKxER\nvXz5ktLS0ojjOPrf//5HDx8+pNLSUqmx5syZQ0KhkA4cOECZmZm0YMEC0tLSIktLS36e0NBQ/nN9\nsR88eEAcx9E333xDDx8+pJcvX9KDBw/I0NCQZsyYQdevX6dbt27RrFmzSF9fnwoKCoiI+P3j4uJC\nycnJlJubSwUFBTRhwgQSi8V0/PhxysvLo59++ol0dHRo69atEvvb0NCQvvvuO8rJyaFNmzYRx3F8\nm3jy5Al17tyZFi5cSA8fPqSHDx9SRUWF1HpITk6m7du3040bNygrK4uCg4NJSUmJbt26xc9jYmJC\nWlpaFBoaSrdu3aIdO3aQuro6RUZGNmme8PBwysrKooyMDLp69Sq1adOGb0uHDx+mTp06SRwvsuQ4\nfvx4EgqFFB8fTzk5OZSWliax7sbqjIgarfsLFy6QgoIC7dixg+7evUvXrl2jrVu3Un5+vtS6LSoq\nosjISFJQUOD3AxFRdHQ0qaqqUkxMDN2+fZs2b95MKioqEvtYWl1Jc/36dVJTU6NPPvmELl68SNnZ\n2fTzzz/TuXPniEi243nChAnk6enJf27s2HV3d6fPPvtMIo9ly5aRqakp/zk0NJQsLCz4z43lUVRU\nRK6urjRmzBi+rqqPXY7jaOfOnXLty+HDh5NIJKLk5GRKT0+niRMnko6OTp1zd02//PILaWlp0cGD\nB+nevXt05coVioyMpJcvX8pcl25ubqStrU1BQUGUlZVF27ZtI47jyNvbmxYtWkRZWVm0fft24jiO\nDh8+XGd/N3T81K73ppxDk5KSiOM46tatGyUlJdGNGzeoV69eZG9vT3369KHExETKyMigvn37kouL\nC79ceno6aWhoUFhYGGVmZtL169fpo48+oi5dutCrV6/kqp/Gvjvs7Oxo3LhxlJGRQbm5uXT48GE6\nePBgvdvUmrCOXQupfRJMT08nMzMz6tWrFxFVHaDffvutxDIpKSnEcRwVFhYSUVXjFolEdWLXPhmW\nlJSQsrIy/fe//5WYb+TIkTRgwAD+M8dxNGXKFIl5YmNjieM4unr1Kl+2evVq4jiOLl26xJetX7+e\nDAwMGtzmDz74QOKE4ubmRg4ODhLzTJ8+na8DIiJjY2OaNWuW1HglJSWkpqZGR48elSjfvn076ejo\n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\niIiIiBSCgR0RERGRQjCwIyIiIlIIBnZERERECsHAjoiIiEghGNgRERERKQQDOyIiIiKFYGBHRDTK\nhg0b8NRTT7n1Ob/3ve/hl7/8pVufk4hoNI23G0BE5GtUKtWYzbqn6o9//KNbn4+IyB6O2BER2cHd\nFonIHzGwIyKf8utf/xozZsxAZGQk8vPzUVpaCgCoqKjA4sWLERMTg9TUVGzatAnDw8OWx6nVavzx\nj39ETk4OIiMjsXnzZtTX12Px4sWIjo7G2rVrLeeXl5djxowZePrpp5GQkICZM2fijTfecNimd999\nF0VFRYiJicGtt96KL7/80uG5P/rRj5CUlISoqCgUFhbi9OnTAGynd++9915ERERYfgICAvDaa68B\nAKqrq7Fy5UrExcUhPz8fe/bscXit4uJibN68GUuWLEFkZCTuvPNOdHR0OPmXJiIlYmBHRD6jpqYG\nL774Io4dO4aenh7s378fWVlZAACNRoPf//736OjowKeffooDBw7gpZdesnn8/v37UVlZiSNHjuDX\nv/41Hn74YezatQvnz5/Hl19+iV27dlnObW1tRUdHBy5duoRXX30VjzzyCGpra8e0qbKyEt/5znfw\nyiuvoLOzE48++ij+5V/+BUNDQ2PO3bdvHw4fPoza2lp0d3djz549iI2NBWA7vbt371709vait7cX\nu3fvRkpKCkpKStDX14eVK1fi29/+Nq5cuYI333wTjz32GM6cOePwb7Zr1y7s2LEDbW1tGBoawjPP\nPOPy352IlIOBHRH5jICAAOj1epw6dQrDw8PIyMjArFmzAADXX389Fi1aBLVajczMTDzyyCM4ePCg\nzeN/9rOfITw8HHPmzMH8+fOxatUqZGVlITIyEqtWrUJlZaXN+du3b4dWq8XSpUtxzz334K233rLc\nZw7C/vSnP+HRRx/FwoULoVKp8MADDyAoKAhHjhwZ0/7AwED09vbizJkzMJlMyMvLQ3JysuX+0dO7\nZ8+exYYNG7B7926kpaXh3XffxcyZM/Hggw9CrVajqKgIa9ascThqp1Kp8NBDDyE7OxvBwcH4xje+\ngS+++MKFvzgRKQ0DOyLyGdnZ2XjuueewdetWJCUlYd26dWhpaQEggqDVq1cjJSUFUVFReOKJJ8ZM\nOyYlJVl+DwkJsbkdHBwMnU5nuR0TE4OQkBDL7czMTMu1RmpqasKzzz6LmJgYy8/Fixftnrts2TL8\n4Ac/wPe//30kJSXh0UcfRW9vr93X2t3djfvuuw+/+tWvcMstt1iudfToUZtrvfHGG2htbXX4NxsZ\nOIaEhNi8RiKafhjYEZFPWbduHQ4fPoympiaoVCr8+7//OwBRLmTOnDmoq6tDd3c3fvWrX8FkMjn9\nvKNXuV69ehX9/f2W201NTUhNTR3zuIyMDDzxxBO4evWq5Uen0+Gb3/ym3ets2rQJx44dw+nTp3H2\n7Fn85je/GXOOyWTCt771LZSUlOC73/2uzbVuv/12m2v19vbixRdfdPp1EtH0xsCOiHzG2bNnUVpa\nCr1ej6CgIAQHByMgIAAAoNPpEBERgdDQUFRXVztVPmTk1Ke9Va5btmzB8PAwDh8+jH/+85+4//77\nLeeaz3/44Yfx8ssvo6KiApIkoa+vD//85z/tjowdO3YMR48exfDwMEJDQ23aP/L6TzzxBPr7+/Hc\nc8/ZPH716tU4e/Ysdu7cieHhYQwPD+Ozzz5DdXW1U6+RiIiBHRH5DL1ej5///OdISEhASkoK2tvb\n8fTTTwMAnnnmGbzxxhuIjIzEI488grVr19qMwtmrOzf6/pG3k5OTLSts169fj//+7/9Gbm7umHNv\nuOEGvPLKK/jBD36A2NhY5OTkWFawjtbT04NHHnkEsbGxyMrKQnx8PH7605+Oec4333zTMuVqXhm7\na9cuhIeHY//+/XjzzTeRlpaGlJQU/PznP7e7UMOZ10hE049K4tc9IppmysvLsX79ely4cMHbTSEi\nciuO2BEREREpBAM7IpqWOGVJRErEqVgiIiIiheCIHREREZFCMLAjIiIiUggGdkREREQKwcCOiIiI\nSCEY2BEREREpxP8HC5XlsuQ4w4kAAAAASUVORK5CYII=\n", + "png": "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\nasewYcPYDz/80KTnVlVV8T+vWLGC3XfffQ4f98ADD7B33nmH377vvvvY+9UDZAAAIABJREFUihUr\n+L5y9epVh89bsGABe/LJJxlj5tfepUsX/r1q6H0R6q233mKzZs1y6TnWdu7cyfr379+k59r3UcYY\ni42NZUeOHOG3c3Nz2csvv9zk9jXV/PnzBR931apV7KGHHnJp/+fPn2dhYWEut8sbzi2NKSoqYpmZ\nmfz2lStXWGJiYoseMzs726XP//Tp09kHH3zQgi1qfe6KW3w2+nHlDbL/wFpvX7t2jY0YMYIlJSWx\npKQk9tJLLzHGbE8MO3fuZCkpKeypp55iycnJLCUlhR0/fpzf32uvvcbi4uLYwIED2auvvur0pDps\n2DD2yiuvsCFDhrDu3buzv/3tb/x93bp1Y0ePHnW43a1bN/bGG2+wjIwMFh0dzfLy8tjSpUvZgAED\nWFxcHPv111/519WxY0c2d+5clpyczJKSkthvv/3GGGNs1qxZbMmSJfz+CwoKWHx8vE37hB6HMca2\nbNnCBg8ezPr168cyMjLYnj17GGOMlZaWsrvvvpv169eP9e3bl7366qv8c+bPn8+mTJnCxo4dy3r3\n7s3GjRvH/9G7du0ai46OtmlPfn4+GzVqlMP30mAwsLlz57LExESWmJjIXn75ZWY0Ghlj5hPE008/\nzYYPH8569uzJHnvsMYcnX8v79frrr7O0tDQWHx/Pfv/990bfS3uW9ygtLY1lZGSwoqIi/j6O41hu\nbi4bMGAAe/PNN1l2djabOXMmu+uuu1haWhpjjLG//vWvrH///iwpKYlNnDiRVVRUMMYYGzduHNuw\nYQO/r40bN7LRo0czxsx/XHv37s1SU1NZWloau3XrVr12Wf8h3LVrF0tPT2epqamsb9++bN26dQ5f\ni3W7GwrsgoKCWHl5Ob+dnJzMNm7caPOY7OxsmxN1dXU1S05OZt9//z1jjLHt27ez3r17M7VabfO8\nL774gsnlcta9e3eWmprKtm/fzoxGo9Pfd0MWLlzIZs6cWe/2a9euscDAQFZWVsYYY+zUqVMsNjaW\nMdb4H+q+ffuyAwcO8Nvjx4/nf0/O3peamhpBrz0vL4916dKFhYeHs9TUVHb27Fmn/Uuj0bCHHnqI\n9enTh6WkpLBHHnmEMcZYnz59WGBgIEtNTWWTJ09mjDF24sQJdu+997IBAwawlJQUtmrVKv6Y1n10\n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\nXuIfaui5S+SyaUwAAAAASUVORK5CYII=\n", "text": [ - "" + "" ] } ], - "prompt_number": 51 + "prompt_number": 7 }, { "cell_type": "markdown", From 791a4fc5471f044b4f5f78f2b69728e591337645 Mon Sep 17 00:00:00 2001 From: Sebastian Raschka Date: Fri, 9 May 2014 20:28:22 -0400 Subject: [PATCH 033/248] cython_least_square V2 --- benchmarks/cython_least_squares.ipynb | 1804 +++++-------------------- 1 file changed, 302 insertions(+), 1502 deletions(-) diff --git a/benchmarks/cython_least_squares.ipynb b/benchmarks/cython_least_squares.ipynb index 1899265..5fc6944 100644 --- a/benchmarks/cython_least_squares.ipynb +++ b/benchmarks/cython_least_squares.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:f31afc5ec11e69936e14bd2ddb07709f1548a2bf4e92e6915a6fa94869a056ab" + "signature": "sha256:c63d806ef3ce407085d530f46ff34fdb5ed6bb79e32545e1ea8d5134d46bf946" }, "nbformat": 3, "nbformat_minor": 0, @@ -13,7 +13,7 @@ "metadata": {}, "source": [ "[Sebastian Raschka](http://www.sebastianraschka.com) \n", - "last updated: 05/06/2014\n", + "last updated: 05/09/2014\n", "\n", "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb) \n", "- [Link to the GitHub repository](https://github.com/rasbt/python_reference)" @@ -67,14 +67,14 @@ "source": [ "- [Introduction](#introduction)\n", "- [Least squares fit implementations](#implementations)\n", + " - [1. The matrix approach in (C)Python and NumPy](#matrix_approach)\n", + " - [2. The classic approach in (C)Python, Cython, and Numba](#classic_approach)\n", + " - [3. Using the `numpy.linalg.lstsq` function](#numpy_func)\n", + " - [4. Using the `scipy.stats.linregress` function](#scipy_func)\n", "- [Generating sample data and benchmarking](#sample_data)\n", - "- [Compiling the Python code via Cython in the IPython notebook](#cython_nb)\n", - "- [Performance growth rates for different sample sizes](#sample_sizes)\n", - "- [Bonus: How to use Cython without the IPython magic](#cython_bonus)\n", - "- [Appendix I: Cython vs. Numba](#numba)\n", - "- [Appendix II: Cython with and without type declarations](#type_declarations)\n", - "- [Appendix III: Cython performance after replacing list comprehensions by explicit for loops](#explicit_loops)\n", - "- [Final Comparison: Cython vs. NumPy vs. SciPy for least squares fitting](#showdown)" + " - [Performance growth rates: (C)Python vs. Cython vs. Numba](#performance1)\n", + " - [Performance growth rates: NumPy and SciPy library functions](#performance2)\n", + "- [Bonus: How to use Cython without the IPython magic](#cython_bonus)" ] }, { @@ -102,7 +102,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Introduction" + "# Introduction" ] }, { @@ -220,7 +220,7 @@ "metadata": {}, "source": [ "\n", - "## Least squares fit implementations" + "# Least squares fit implementations" ] }, { @@ -234,6 +234,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "\n", "
\n", "
" ] @@ -242,7 +243,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 1. The matrix approach" + "### 1. The matrix approach in (C)Python and NumPy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" ] }, { @@ -266,13 +274,20 @@ "which I will refer to as the \"matrix approach\"." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Matrix approach implemented in NumPy and (C)Python" + ] + }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np\n", "\n", - "def lin_lstsqr_mat(x, y):\n", + "def py_matrix_lstsqr(x, y):\n", " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", " X = np.vstack([x, np.ones(len(x))]).T\n", " return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)" @@ -286,6 +301,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "\n", "
\n", "
" ] @@ -294,7 +310,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 2. The classic approach" + "### 2. The classic approach in (C)Python, Cython, and Numba" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" ] }, { @@ -314,19 +337,40 @@ "$b = \\bar{y} - a\\bar{x}\\quad$ (y-axis intercept)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note: I refrained from using list comprehensions and convenience functions such as `zip()` in\n", + "order to maximize the performance for the Cython compilation into C code in the later sections.\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Implemented in (C)Python" + ] + }, { "cell_type": "code", "collapsed": false, "input": [ - "def classic_lstsqr(x, y):\n", + "def py_classic_lstsqr(x, y):\n", " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", + " len_x = len(x)\n", + " x_avg = sum(x)/len_x\n", " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", + " var_x = 0\n", + " cov_xy = 0\n", + " for i in range(len_x):\n", + " temp = (x[i] - x_avg)\n", + " var_x += temp**2\n", + " cov_xy += temp*(y[i] - y_avg)\n", " slope = cov_xy / var_x\n", " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" + " return (slope, y_interc) " ], "language": "python", "metadata": {}, @@ -337,32 +381,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3. Using the lstsq numpy function" + "#### Implemented in Cython" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "For our convenience, `numpy` has a function that can computes the least squares solution of a linear matrix equation. For more information, please refer to the [documentation](http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html)." + "Maybe we can speed things up a little bit via [Cython's C-extensions for Python](http://cython.org). Cython is basically a hybrid between C and Python and can be pictured as compiled Python code with type declarations. \n", + "Since we are working in an IPython notebook here, we can make use of the very convenient *IPython magic*: It will take care of the conversion to C code, the compilation, and eventually the loading of the function. " ] }, { "cell_type": "code", "collapsed": false, "input": [ - "def numpy_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " X = np.vstack([x, np.ones(len(x))]).T\n", - " return np.linalg.lstsq(X,y)[0]" + "%load_ext cythonmagic" ], "language": "python", "metadata": {}, @@ -370,47 +404,81 @@ "prompt_number": 3 }, { - "cell_type": "markdown", + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "def cy_classic_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " cdef double x_avg, y_avg, var_x, cov_xy,\\\n", + " slope, y_interc, x_i, y_i\n", + " cdef int len_x\n", + " len_x = len(x)\n", + " x_avg = sum(x)/len_x\n", + " y_avg = sum(y)/len(y)\n", + " var_x = 0\n", + " cov_xy = 0\n", + " for i in range(len_x):\n", + " temp = (x[i] - x_avg)\n", + " var_x += temp**2\n", + " cov_xy += temp*(y[i] - y_avg)\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" + ], + "language": "python", "metadata": {}, - "source": [ - "
\n", - "
" - ] + "outputs": [], + "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### 4. Using the linregress scipy function" + "#### Implemented in Numba" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Also scipy has a least squares function, `scipy.stats.linregress()`, which returns a tuple of 5 different attributes, where the 1st value in the tuple is the slope, and the second value is the y-axis intercept, respectively. \n", - "The documentation for this function can be found [here](http://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.stats.linregress.html)." + "Like we did with Cython before, we will use the minimalist approach to Numba and see how the two - Cython and Numba - compare against each other. \n", + "\n", + "Numba is using the [LLVM compiler infrastructure](http://llvm.org) for compiling Python code to machine code. Its strength is to work with NumPy arrays to speed-up the code. If you want to read more about Numba, please see refer to the original [website and documentation](http://numba.pydata.org/numba-doc/0.13/index.html)." ] }, { "cell_type": "code", "collapsed": false, "input": [ - "import scipy.stats\n", + "from numba import jit\n", "\n", - "def scipy_lstsqr(x,y):\n", + "@jit\n", + "def numba_classic_lstsqr(x, y):\n", " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " return scipy.stats.linregress(x, y)[0:2]" + " len_x = len(x)\n", + " x_avg = sum(x)/len_x\n", + " y_avg = sum(y)/len(y)\n", + " var_x = 0\n", + " cov_xy = 0\n", + " for i in range(len_x):\n", + " temp = (x[i] - x_avg)\n", + " var_x += temp**2\n", + " cov_xy += temp*(y[i] - y_avg)\n", + " slope = cov_xy / var_x\n", + " y_interc = y_avg - slope*x_avg\n", + " return (slope, y_interc)" ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 4 + "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ + "\n", "
\n", "
" ] @@ -419,25 +487,42 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Teaser" + "### 3. Using the `numpy.linalg.lstsq` function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", - "The following plot below should give you an impression of how the performance of the 4 different approaches will compare to each other at the end of this article.\n", - "\n", - "![Performance of the final Cython implemenation of the least squares fit](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/cython_final_leastsqr.png)\n", - "
" + "[[back to top](#sections)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "For our convenience, `numpy` has a function that can computes the least squares solution of a linear matrix equation. For more information, please refer to the [documentation](http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html)." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def numpy_lstsqr(x, y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " X = np.vstack([x, np.ones(len(x))]).T\n", + " return np.linalg.lstsq(X,y)[0]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", "
\n", "
" ] @@ -446,7 +531,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Generating sample data and benchmarking" + "### 4. Using the `scipy.stats.linregress` function" ] }, { @@ -460,28 +545,55 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In order to test our different least squares fit implementations, we will generate some sample data: \n", - "- 500 sample points for the x-component within the range [0,500) \n", - "- 500 sample points for the y-component within the range [100,600) \n", - "\n", - "where each sample point is multiplied by a random value within\n", - "the range [0.8, 12) to simulate some scatter in our dataset." + "Also scipy has a least squares function, `scipy.stats.linregress()`, which returns a tuple of 5 different attributes, where the 1st value in the tuple is the slope, and the second value is the y-axis intercept, respectively. \n", + "The documentation for this function can be found [here](http://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.stats.linregress.html)." ] }, { "cell_type": "code", "collapsed": false, "input": [ - "import random\n", - "random.seed(12345)\n", + "import scipy.stats\n", "\n", - "x = [x_i*random.randrange(8,12)/10 for x_i in range(500)]\n", - "y = [y_i*random.randrange(8,12)/10 for y_i in range(100,600)]" + "def scipy_lstsqr(x,y):\n", + " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", + " return scipy.stats.linregress(x, y)[0:2]" ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 5 + "prompt_number": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Generating sample data and benchmarking" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] }, { "cell_type": "markdown", @@ -511,20 +623,26 @@ "cell_type": "code", "collapsed": false, "input": [ - "%pylab inline" + "%matplotlib inline" ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 7 + "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "from matplotlib import pyplot as plt\n", + "import random\n", + "\n", + "random.seed(12345)\n", "\n", - "slope, intercept = lin_lstsqr_mat(x, y)\n", + "x = [x_i*random.randrange(8,12)/10 for x_i in range(500)]\n", + "y = [y_i*random.randrange(8,12)/10 for y_i in range(100,600)]\n", + "\n", + "slope, intercept = py_matrix_lstsqr(x, y)\n", "\n", "line_x = [round(min(x)) - 1, round(max(x)) + 1]\n", "line_y = [slope*x_i + intercept for x_i in line_x]\n", @@ -551,11 +669,11 @@ "output_type": "display_data", "png": "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\nRUdHU7duXf0+np6erz3CliQZg7W1tfwyWsTl5TDIkmQM+ZLo1Wo1W7duzfLZ39fpiPU8X19frl+/\nnucxSpIkSVJB5ePjw7Vr13K0b75cut+xYwc1atTAxcUF0J3FP+tZGhMTQ4kSJQDw8PDI8BzynTt3\n8PDwyFDW9evX9Y/2vIk/M2bMMHoMsv2y7bL9sv2y/fn7k5sT3HxJ9OvWrdNftgfo0KEDq1atAmDV\nqlV06tRJv3z9+vWo1Wpu3rzJ1atXqV27dn6EKEmSJElFksEv3SclJbFnzx6+//57/bLJkyfTvXt3\nQkJC9I/Xge456O7du+uHwfz2229lRxhJkiRJygWDJ3obG5sMYz2DbljIPXv2ZLn91KlTsxzeVNJp\n0qSJsUMwqje5/W9y20G2X7a/ibFDKLQMOmCOISgUCgpZyJIkSZKUK7nJfXIIXEmSJEkqwmSilyRJ\nkqQiTCZ6SZIkSSrCZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIkwmekmSJEkqwmSilyRJkqQiTCZ6\nSZIkSSrCZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIkwmekmSJEkqwmSilyRJkqQiTCZ6SZIkSSrC\nZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIszM2AFIkiRJWYuNjWXHjh2YmJjQtm1bnJycjB2SVAgp\nhBDC2EFkh0KhoJCFLEmSlG03btygdu1AUlLqAOnY2p7nzJkjuLu750v9f/75JzNnzichIYn+/bvQ\nv3/ffKlXylpucp88o5ckSSqAJk78mEePRqDVfgRAauqHTJv2KStWfGvwuv/880/q1GlCSso0wINj\nxz7m8eMERo9+z+B1S3lP3qOXJEkqgKKi7qHV1tC/Tk+vwe3bdw1e78OHDwkMbEVKyhBgAtADlWo1\n8+d/Y/C6AU6cOMHIkWMZO/Z9/v7773yps6iTiV6SJKkAatWqMUrlF8Bj4CFK5Ve0bh1o8HqnTp1N\nQoInYPrcUpN8uWW6f/9+mjZtz7JlJVm8WEmtWo25ePGiwest6mSilyRJKoA+/ngy77zjg6lpCczM\nPBgwoA7jx482eL2XLt1Aq+0P/AB8A/yCiUkPxo4dZvC6P/poHirVV8BkhJhNUtJ4Pv98scHrLepk\nopckSSqAzM3NWb36O1JTVaSkJPHttwsxMTH8n+yGDWtgbb0bCAMOYGLyPs2a+TNx4liD152cnAIU\n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\nYII=\n", "text": [ - "" + "" ] } ], - "prompt_number": 8 + "prompt_number": 14 }, { "cell_type": "markdown", @@ -586,7 +704,7 @@ "input": [ "import prettytable\n", "\n", - "params = [appr(x,y) for appr in [lin_lstsqr_mat, classic_lstsqr, numpy_lstsqr, scipy_lstsqr]]\n", + "params = [appr(x,y) for appr in [py_matrix_lstsqr, py_classic_lstsqr, numpy_lstsqr, scipy_lstsqr]]\n", "\n", "print(params)\n", "\n", @@ -605,24 +723,25 @@ "output_type": "stream", "stream": "stdout", "text": [ - "[array([ 0.95181895, 107.01399744]), (0.95181895319126741, 107.01399744459181), array([ 0.95181895, 107.01399744]), (0.95181895319126764, 107.01399744459175)]\n", - "+------------------+----------------+---------------+\n", - "| | slope | y-intercept |\n", - "+------------------+----------------+---------------+\n", - "| matrix approach | 0.951818953191 | 107.013997445 |\n", - "| classic approach | 0.951818953191 | 107.013997445 |\n", - "| numpy function | 0.951818953191 | 107.013997445 |\n", - "| scipy function | 0.951818953191 | 107.013997445 |\n", - "+------------------+----------------+---------------+\n" + "[array([ 0.95181895, 107.01399744]), (0.9518189531912674, 107.01399744459181), array([ 0.95181895, 107.01399744]), (0.95181895319126764, 107.01399744459175)]\n", + "+------------------+--------------------+--------------------+\n", + "| | slope | y-intercept |\n", + "+------------------+--------------------+--------------------+\n", + "| matrix approach | 0.951818953191 | 107.013997445 |\n", + "| classic approach | 0.9518189531912674 | 107.01399744459181 |\n", + "| numpy function | 0.951818953191 | 107.013997445 |\n", + "| scipy function | 0.951818953191 | 107.013997445 |\n", + "+------------------+--------------------+--------------------+\n" ] } ], - "prompt_number": 9 + "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ + "\n", "
\n", "
" ] @@ -631,15 +750,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "#### Initial performance comparison" + "# Performance growth rates: (C)Python vs. Cython vs. Numba" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "To get an initial impression of how the performances of the different least squares implementations compare against each other, let us do a quick benchmark using the `timeit` module via IPython's `%timeit` magic." + "Now, finally let us take a look at the effect of different sample sizes on the relative performances for each approach." ] }, { @@ -647,84 +772,88 @@ "collapsed": false, "input": [ "import timeit\n", + "import random\n", + "random.seed(12345)\n", + "\n", + "funcs = ['py_classic_lstsqr', 'cy_classic_lstsqr', 'numba_classic_lstsqr']\n", + "\n", + "orders_n = [10**n for n in range(2, 5)]\n", + "perf1 = {f:[] for f in funcs}\n", + "\n", + "for n in orders_n:\n", + " x_list = ([x_i*np.random.randint(8,12)/10 for x_i in range(n)])\n", + " y_list = ([y_i*np.random.randint(10,14)/10 for y_i in range(n)])\n", + " for f in funcs:\n", + " perf1[f].append(timeit.Timer('%s(x_list,y_list)' %f, \n", + " 'from __main__ import %s, x_list, y_list' %f).timeit(1000))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 19 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from matplotlib import pyplot as plt\n", + "\n", + "labels = [ ('py_classic_lstsqr', '\"classic\" least squares in reg. (C)Python'),\n", + " ('cy_classic_lstsqr', '\"classic\" least squares in Cython'),\n", + " ('numba_classic_lstsqr','\"classic\" least squares in Numba')\n", + " ]\n", + "\n", + "plt.rcParams.update({'font.size': 12})\n", "\n", - "for lab,appr in zip([\"matrix approach\",\"classic approach\",\n", - " \"numpy function\",\"scipy function\"],\n", - " [lin_lstsqr_mat, classic_lstsqr, \n", - " numpy_lstsqr, scipy_lstsqr]):\n", - " print(\"\\n{}: \".format(lab), end=\"\")\n", - " %timeit appr(x, y)" + "fig = plt.figure(figsize=(10,8))\n", + "for lb in labels:\n", + " plt.plot(orders_n, perf1[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", + "plt.xlabel('sample size n')\n", + "plt.ylabel('time per computation in milliseconds [ms]')\n", + "#plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", + "plt.legend(loc=4)\n", + "plt.grid()\n", + "plt.xscale('log')\n", + "plt.yscale('log')\n", + "max_perf = max( py/cy for py,cy in zip(perf1['py_classic_lstsqr'],\n", + " perf1['cy_classic_lstsqr']) )\n", + "min_perf = min( py/cy for py,cy in zip(perf1['py_classic_lstsqr'],\n", + " perf1['cy_classic_lstsqr']) )\n", + "ftext = 'Using Cython is {:.2f}x to '\\\n", + " '{:.2f}x faster than regular (C)Python'\\\n", + " .format(min_perf, max_perf)\n", + "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", + "plt.title('Performance of least square fit implementations')\n", + "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "matrix approach: 10000 loops, best of 3: 158 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "classic approach: 1000 loops, best of 3: 1.6 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "numpy function: 1000 loops, best of 3: 217 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "scipy function: 1000 loops, best of 3: 366 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", + "metadata": {}, + "output_type": "display_data", + "png": "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\nq6ysZIwxtnfvXqapqcnWrl3LUlNT2aZNm5i1tTWTSCQsNzdXuB9NTU1RvtnZ2YzjOBYbG8sYY6yh\noYEtXryYnT59mmVlZbH9+/czW1tbFhUVJZwTFRXF9PX1mVQqZadPn2apqamstLSUSaVSFhERwU6c\nOMEyMjLYxo0bmba2tui5bKq1zyYmJoZxHMdyc3NZfX09279/P+M4jiUnJ7OCggJWVFTU6vPg7OzM\nVqxYIWw7OTkxU1NTtnbtWpaens4++eQTJpFI2BNPPCGkrVq1ikkkEnb16lXhPI7jmLm5Ofvmm29Y\namoqW7duHdPU1GT79u1r9VrTp09nvr6+7MiRIywzM5P98ssvzNTUlG3atEmUb58+fdjWrVtZeno6\nmzdvHjMwMGBjxoxhW7ZsYenp6ezNN99kBgYGwjNUUVHBPD092YQJE9jZs2dZeno6W7FiBdPR0WHX\nrl1jjDHhPfP19WWHDx9maWlpbObMmczY2Fh4v86fP884jmN79uwR/T551Pe7pKSEhYWFsUmTJgnP\naeN3iOM49tNPPwnPTlBQEPP392cnTpxgly9fZhMnTmRmZmbCtRQp56OedfJ4oMCOdKvmAUFKSgpz\ndXVlw4YNY4zxf1y+++470TmxsbGM4zhWXFzMGOMDIw8PjxZ5R0VFMXd3d2G7vLyc6ejosP/+97+i\n48aNG8ciIyOFbY7j2OzZs0XHREdHM47j2MWLF4W0zz//nHEcx86dOyekrV27lllaWrZ5z88//zyb\nM2eOsB0eHs78/PxEx7z++uvCe8AYY3379mVvvvmm3PzKy8uZvr4+O3z4sCh9y5YtzNTUtNVyfPjh\nh6xv376strZWSLt48SLjOI7FxcUxxhjLyMhgHMexEydOtHlPzT9HRT635urr65mZmZnwx+63335j\nJiYmrQZs27ZtYxzHtVkuxhhbs2YN69+/v+g+mxo+fDibOnWqKG3BggVCgMSYYoFda9fu16+fsB0V\nFcUkEgnLzs4W0mJiYpiuri4rKSkRnTtz5kz2wgsvtJq3vM+maWDHGGPx8fGM4ziWlZXVaj6N5AV2\n48aNE7YbGhqYsbExe+6550RpZmZm7JtvvhHSOI5jr776qijvV155hYWGhsq91q1bt5hEImE3btwQ\nnbN8+XLR94LjODZ//nxh+969e4zjOPbWW28JaUVFRYzjOHbw4EHGGP+5OTg4sLq6OlHeERER7J13\n3mGM/f2e7dmzR9hfUFDAOI5jf/75J2NMsc+6UfPv96hRo9jMmTNbHNc0sDt69CjjOE4INhljrLq6\nmtna2rKPPvpI4XI+6lknjwdqiiXdTiaTwcjICPr6+vD29oa7uzt++ukn3Lt3D7dv38b8+fNhZGQk\nvJ5++mlwHIe0tDQhj8GDBz/yOmlpaaipqRGapxqFhYUhJSVFlBYUFNTifI7j4O3tLWzb2NgAAHx8\nfERphYWFQl+ciooKLFq0CIMGDYKFhQWMjIzwxx9/iDqzcxwHX19f0bVsbW1RUFAAALh79y5ycnIw\nZswYufeVkpKCyspKjB8/XvQ+/fOf/8TDhw9RWFjY6nnBwcHQ1Py7q62Pjw9MTExw9epVuecoQtHP\nLSMjA9OmTUO/fv1gYmICExMTlJSUCO/NmDFj4OrqChcXF0yePBnff/99q/fSlokTJ6K2thZOTk6Y\nOXMmtm/fjrKyMmH/tWvXEBISIjpn+PDhHbr377//HkOHDkWfPn1gZGSEDz74oMXABRsbGzg4OAjb\nZ86cQU1NDezt7UXv108//SR6xrta8+eS4zhYWVmJnneO42BtbS003zdqPlApJCSkxXesUXJyMhhj\nGDx4sOj+V61a1eL+m5bH0tISGhoaovKYmppCW1sbd+/eBcC/t/n5+TA1NRXlnZCQ0CJvPz8/4Wdr\na2toaGgI38HWKPL9VkRKSgosLCwwYMAAIU1bWxtDhw5t8b61Vc5HPevk8UCDJ0i3Cw4OxpYtW6Cp\nqQk7Ozsh0Gj8ZfXVV18hIiKixXn29vYA+D8uBgYGKi2TvPwkEoloJF/jzxoaGi3SGGPgOA7vvfce\n9u/fj7Vr18LDwwP6+vp49913UVJSIsq7+eAMjuOEjvWP0njc7t270b9//xb7zczM5J7HcVynDHho\nLM+jPrdnnnkG1tbW+Pbbb9G3b19oaWlhxIgRQp80AwMDJCcn48SJEzh69Cg2bNiA999/H8eOHUNA\nQIDC5bGzs8P169cRExOD48eP4+OPP8bChQuRlJQkCrDaIm9wQ21trWh7165d+Ne//oVPP/0U4eHh\nMDY2xs6dO7F48WLRcc2frYaGBpiYmCA5ObnFNbp70E7zfoUcx8lNU/RZlafx3JMnT0JfX79F3m2V\np7UyNubZ0NAAT09P7N27t8V5za8l771+1H0p+v3uqMbfI4qWUxXPOlF/VGNHup2uri5cXV3h6Ogo\nqj2ysbFB3759cf36dbi6urZ46ejotOs67u7u0NHRQWxsrCg9NjZWVBOnSvHx8Zg6dSomTJgAb29v\nuLi44MaNG+2a6sHa2hoODg44fPiw3P1eXl7Q1dVFenq63PeptRGXXl5eOHXqlChAuXjxIkpKSjBo\n0KD23WgTinxuhYWFuHbtGhYtWoTRo0cLAwkaa1oaSSQShIaGYvny5Th79ixsbW2FwS6Nf+AUCU61\ntbXxxBNP4NNPP8Xly5dRUVGBffv2AQAGDhyIEydOiI5vvm1tbY36+npR+c6dOyc6Ji4uDv7+/njn\nnXfg7+8PNzc3ZGRkPLJsgYGBKC4uRmVlZYv3Stk/xo3v0aMG0ajayZMnRduJiYnw8vKSe2xjbXtW\nVlaL+3dxcVGqHIGBgbh16xaMjIxa5N2nTx+F82ntfVTk+62trY26uro28/fy8hK+E42qq6uRlJTU\n7u9iW886eTyoXY3dw4cPMWrUKFy7dg1JSUkYOHBgdxeJdKIVK1Zg1qxZMDMzw3PPPQctLS1cu3YN\nhw4dwoYNGwAoPtWGvr4+3nrrLSxZskRoUtq9ezf279+Po0ePdkr5PTw8sHfvXowfPx4GBgZYs2YN\n7ty5I/qjokj5o6Ki8Prrr8PGxgYvvvgiGhoaEBMTg8mTJ8PCwgIffPABPvjgA3Ach5EjR6Kurg6X\nL1/GhQsXsHr1arl5/utf/8K6deswY8YMfPDBBygqKsK8efMQFhbW4abIRo/63MzMzGBlZYWNGzfC\n1dUV9+/fx/vvvw89PT0hj3379iEjIwOhoaGwsrLC2bNnkZ2dLXznG//o79u3D8OHD4e+vr7cmtZN\nmzaBMYbAwECYmpri2LFjKC0tFfJ599138dJLLyEoKAhPPfUUEhISsH37dtEf56FDh8LIyAiLFi3C\nv//9b6Snp+Ojjz4SXWfAgAH48ccfsX//fnh5eeHAgQNtjmxtFBkZiVGjRmH8+PH47LPP4O3tjaKi\nIiQmJkJPTw+zZ89u/wfwFycnJ0gkEhw8eBAvv/wydHR0YGJiIvfY5s+gvGdS0bSDBw9i/fr1GDNm\nDA4dOoSdO3di9+7dcs9xd3fHa6+9hjlz5uCzzz5DcHAwysvLcfbsWeG56KgpU6Zg7dq1GDt2LFas\nWIF+/fqhoKAAx48fx8CBA/H8888rlI+lpSUMDQ1x+PBheHp6QkdHB2ZmZgp9v11cXBATE4Nbt27B\n2NgYpqamon9gAWDkyJEICgrCK6+8gvXr18PY2Bgff/wxampq8Prrryt8v4961snjQe1q7PT19fHH\nH39gwoQJNG9WL/CoiUqnTp2KnTt34sCBAxg6dCiCgoKwfPlyUU1Ga3nIS1+xYgXmzJmDd955B97e\n3tixYwd++uknuU2G8vJrb9ratWuF6VdGjRqFvn37YsKECS2adJvn0zxt1qxZ2Lx5M3bv3g1/f3+E\nh4fj8OHDwh+IDz/8EGvWrMH3338PPz8/hIaGYt26dW3WeFhbW+PPP/9ETk4OAgMD8eyzzwrB7qPu\nUd49Nz3uUZ+bRCLBrl27kJ6eDh8fH7z22muYP3++aD42c3Nz/P7773jqqafg4eGBRYsWYcmSJcJk\nr4GBgXj77bcxd+5c2NjY4M0335RbNnNzc0RHRyMiIgIDBw7El19+ie+//174zF944QV88cUX+Oyz\nz+Dr64uff/4Zn376qej3i5mZGX7++WecOnUKvr6+WLFiBT7//HPRPc+dOxfTpk3DzJkzERAQgDNn\nzmDZsmWP/KwBYP/+/Rg/fjzmz58PT09PPPPMM/jf//4Hd3f3R77vbaXZ2Nhg1apVWL16Nezs7DBu\n3DiF8+rI895o6dKlOHr0KPz8/LB69Wp8/vnnoiCq+TkbN27E/PnzsWLFCnh5eWHUqFHYtm0b3Nzc\nWi2vIhpr6IcMGYKZM2fCw8MDL774IpKTk+Hs7NzmPTQlkUiwfv167Ny5E3379hVqGRX5fr/77ruw\ntLSEr68vrK2tkZiYKPcae/fuxYABAzB27FgEBQXh7t27OHLkCMzNzRUu56OedfJ44JiaRkczZ87E\nggULWq3eJ4SQjpLJZIiMjEROTg7s7Oy6uzhqRSKRYPv27XjllVe6uyiEPJbUrsaOEEIIIYTI122B\n3TfffIMhQ4ZAV1e3xTp6Dx48wLhx44TZxZuvDNBIndYaJISoF/r9QghRR902eMLe3h5LlizB4cOH\nUVlZKdr3xhtvQFdXF3fv3sX58+cxduxY+Pr6tugAqqatyISQHk4qlXb5SNLeQpmpTwghKtCVsyHL\n8+GHH7IZM2YI22VlZUxbW5ulpqYKaa+++ipbtGiRsP3UU08xOzs7NmzYMLZ582a5+drZ2TEA9KIX\nvehFL3rRi149/uXm5qaSuKrb+9ixZrVuN2/ehKampmg0mK+vr2j27T/++AO5ublITEzE9OnT5eab\nl5cnTCNBL+VfUVFR3V6G3nQPXVmWzrqWKvNVNq+Ont+R83rSc9QbXr3h/exJ90C/W1SbV1f+bklP\nT1dJXNXtgV3zfixlZWUwNjYWpRkZGaG0tLQri0WakUql3V0EpfWke+jKsnTWtVSZr7J5dfT8jpyX\nmZnZoWsR+XrS97KjetI90O8W1ebVlb9bVKXbpzv58MMPkZubi+joaADA+fPnMWLECJSXlwvH/Oc/\n/0FcXBz279+vcL6dtVwSIeTxNmPGDGzevLm7i0EI6WVUFbf0uBq7/v37o66uTrRA88WLF5Va4ogQ\nQlRlxowZ3V0EQghpVbcFdvX19aiqqkJdXR3q6+tRXV2N+vp6GBgYYPz48Vi6dCkqKiqQkJCA33//\nHdOmTeuuohJCiKAnNbsRQkhz3RbYffzxx9DX18enn36K7du3Q09PDytWrAAAfPvtt6isrIS1tTWm\nTp2KDRs2wNPTs7uKSgghAplM1t1FIISQVnV7H7vOwnEcoqKiIJVK6T9sQojKyGQy+p1CCFEZmUwG\nmUyG5cuXq6SPXa8O7HrprRFCCCGkl+k1gycIIYQQQohqUGBHCCHtQH3sCCE9GQV2hBBCCCG9BPWx\nI4QQQgjpZtTHjhBCCCGEiFBgRwgh7UB97AghPVmvDuyWLVtGv4QJIYQQ0mPJZDIsW7ZMZflRHztC\nCCGEkG5GfewIIYQQQogIBXaEENIO1L2DENKTUWBHCCGEENJLUB87QgghhJBuRn3sCCGEEEKICAV2\nhBDSDtTHjhDSk/XqwI7msSOEEEJIT0bz2CmI+tgRQgghRF1QHztCCCGEECJCgR0hhLQDde8ghPRk\nFNgRQgghhPQS1MeOEEIIIaSbUR87QgghhBAiQoEdIYS0A/WxI4T0ZBTYEUIIIYT0EtTHjhBCCCGk\nm1EfOwXQyhOEEEII6clo5QkFUY0dIaQzyGQySKXS7i4GIaSXoRo7QgghhBAiQjV2hBBCCCHdjGrs\nCCGEEEKICAV2hBDSDjQgixDSk1FgRwghhBDSS1AfO0IIIYSQbkZ97AghhBBCiAgFdoQQ0g7Ux44Q\n0pNRYEcIIYQQ0ktQHztCCCGEkG5GfewUQGvFEkIIIaQno7ViFUQ1doSQzkBrxRJCOgPV2BFCCCGE\nEBHN7i4AIYSoE6qtI4So0o0bWTh6NF1l+VFgRwghhBDSDW7cyMLmzWmoqhqpsjypKZYQQtqBBmQR\nQlTl11/TcePGSJw/r7o8qcaOEEIIIaQLFRYCMTFAXJwEVVWqzZsCO0IIaQfqY0cI6aiSEiA2Frhw\nAWhoACSSBpVfgwI7QgghhJBOVF4OxMcDZ84A9fV/p7u6uiEn5xj69RuJ2FjVXIsCO0IIaQeax44Q\noqiqKuDkSf5VUyPe5+oKzJnjhLIy4Nix4yq7JgV2hBBCCCEqVFsLnD4NJCQAlZXifQ4OwMiRgItL\nY4oTPDyc8MYbqrk2rTxBCCGEEKIC9fXA+fN8P7rSUvE+a2s+oOvfH+C4lueqKm6hGjtCCCGEECU0\nNABXrvAjXYuKxPvMzICICGDQIEDSBZPMUWBHCCHtQH3sCCGNGANu3gSOHQPu3hXvMzICwsMBf39A\nQ6PrykSBHSGEEEJIO2Vk8AFdTo44XU8PGDECCAoCtLS6vly9OrBbtmwZpFIp/XdNCFEZ+n1CyOMt\nN5cP6G7dEqdrawPDhvEvXV3F85PJZCpd0YYGTxBCCCGEPMK9e8Dx48C1a+J0DQ0gMBAIDQUMDDqe\nPw2eIISQbkB97Ah5vBQVATIZcOkS36euEcfx/efCwwETk24rXgsU2BFCCCGENFNayq8WcfaseLUI\nAPDy4ke6Wlp2T9naQk2xhBBCCCF/qawETpwAkpL4iYab6tcPiIwEbG1Vf11qiiWEEEIIUZGaGj6Y\nO3GCXwqsKUdHfnJhJ6fuKVt7UGBHCCHtQH3sCOld6ur45ta4OKC8XLyvTx8+oHN3l79aRE9EgR0h\nhBBCHjsNDfyACJkMKC4W77Ow4JtcBw5Un4CuEfWxI4QQQshjgzF+ypLjx4H798X7TEz4Ua5+fl2z\n/FdT1MeOEEIIIURBjAHp6XxAl5cn3qevD4SFAUOGAJpqHhmpefEJIaRrUR87QtRPdja/WkRmpjhd\nRwcICQGCg/mfewMK7AghhBDSK+Xn8zV0N2+K0zU1gaFDgeHD+dq63oT62BFCCCGkVyks5AdFXL4s\nTpdIgMGD+WZXI6NuKVqrqI8dIYQQQkgTDx8CsbHA+fP8qNdGHAd4ewNSKWBu3m3F6xIU2BFCSDtQ\nHztCep6KCn75rzNn+HnpmhowgF/+y8ame8rW1SiwI4QQQohaqq4GTp7kX9XV4n0uLvzkwg4O3VO2\n7kJ97AghhBCiVmpr+dq5hAS+tq4pe3s+oHN17Z6ydRT1sSOEEELIY6W+Hrhwge9H9/CheJ+VFR/Q\neXio12oRWTduIP3oUZXl16sDu2XLlkEqlVJ/GEKIylAfO0K6HmPAlStATAzw4IF4n6kp34fO27vr\nV4tQVtaNG9i9ZAlKr11TWZ69PrAjhBBCiHpiDEhN5ScXLigQ7zM05Jf/CggANDS6p3xKqahA+tdf\n49379wELCyxXUbZqFtt2HolEgopmDfWWlpa4fft2q+fk5eUhMjJS5WU5c+YMRo8eDXd3dwQFBWHk\nyJGIj49v85yLFy9i165dojR596RKc+bMwYkTJxQ+Pi8vDxERETA1NUVgYGCbx+7evRt+fn7w9/eH\nn58f9uzZI+y7efMmhg0bBg8PD4SEhCAtLa3dZV+2bBlqa2vbfd6+ffswZMgQeHt7Y9CgQVizZo3c\n4x48eICnn34aAwYMgI+PD1588UXcb7Io4QsvvCDc3/Dhw3HmzJl2l2Xv3r0YOHAgBg8ejJvNZ99U\nQGxsLI4cOdLu8+QpKSnBZ599JkqTSqU4ePCgSvLvLps3b8ZLL70kSutobV1BQQGGDRsmbNfW1mLp\n0qXw8PCAr68vAgICsGDBAtTV1eHAgQN44403ROdLJBL4+vrCz88PAQEBOH78+COv2fw5nzFjBtav\nX9+h8hPS1TIzgR9/BHbsEAd1enrAqFHAW28BgYFqGNRVVfFVj19+CUlamnheFlVgvVR7b43jOFZe\nXi5Ks7S0ZFlZWaos1iNdunSJWVtbsz///FNIS09PZ7/++mub50VHR7MJEyaI0jiOY2VlZZ1Szo4o\nKSlhCQkJ7ODBg2zIkCGtHldfX88MDAxYSkoKY4x/T4yMjIT9ERER7KeffmKMMbZ9+3YWGRnZ7rJ0\n9L1JSkpid+7cYYzx9+Pu7s7i4+NbHPfgwQMWGxsrbL/33nts1qxZwnZJSYnw8759+5i3t3e7y/Lk\nk0+y3bt3t/u8RlFRUWzBggUdOre+vl60nZGRwSwtLUVpUqmUHThwoMPlU6Y8qrJ58+YW36uOlmX+\n/Pls8+bNwvaUKVPYhAkThOewrq6Obdy4Udj28fFh2dnZwvFNf0ft27evxfstT/PnfMaMGeybb75p\n1/0Q0tVycxnbupWxqCjx65NPGDt2jLHKyu4tX4dVVzMWF8fY6tXCTR176inGwsMZe+aZdsctraEa\nOwUwxjBv3jx4enrCz88PI0aMAABkZmbC0tJSOE4ikWDVqlUICgqCm5sbfvvtN2Hfr7/+Ck9PTwQE\nBGDlypWt1qZ9+umnmD17NkaPHi2kubq6Yvz48di1axeeeeYZIb26uhp2dna4ffs2li5diqNHj8Lf\n3x/vvPPMN5qtAAAgAElEQVSOcMxXX30ltzyHDh1CQEAAfH19MWrUKKSnpwPg+w/5+fnhn//8p1A7\ncP36dbnvS9MamY0bN2LgwIHw9/eHr68vbty40eJ4Y2NjDB8+HPqPWL9FIpHA1tYWxcXFAICioiLY\n2dkBAO7evYvz589j8uTJAIBJkybh3LlzKCwsxPXr1+Ho6CjUsi5fvlw4rqnGmpCQkBD4+/vj4cOH\nKCgowLhx4+Dr6wsfHx9s27ZNbtmCgoLQp08f4X48PT3l1uqamZkhLCxM2B46dCiysrJE70Wj4uJi\nWFtbA4DC9zB//nwkJCTg/fffx8iRIwEAU6ZMQWBgIHx8fDB+/Hjh/btx4waGDRsGPz8/eHt744sv\nvsCVK1fw3XffYevWrfD39xdq2/744w+MGDECQ4YMQUhICJKSkgDwz4WPjw9ee+01+Pv749ChQy3e\n0+LiYvj7+wvfD4CvFQwNDYWbmxv+/e9/C+lffPEFgoKCEBAQgJCQEFy8eFHY19b3qKlly5bhpZde\nwhNPPAEvLy8UFxe3Wn4AWLx4Mfr164fg4GAsXLhQqDVuXivXdJs1GaGWn5+PyMhIeHh4YNCgQVi4\ncGGrZSkpKRGVta6uDjt27MCECRMAAKmpqdi7dy9++OEHGBgYAAA0NDQwZ84cYXv8+PHYunWr3Hsf\nNWoUCgsLkZOTAzs7O+Tn5wv73nrrLaxatQr/+te/APDPeUBAgFCmK1euYOTIkejfvz+mT58unNfW\nd8DZ2RlRUVEICQmBi4sL1fqRTnHvHrBzJ7BxI/DXnyQAfI3c0KHA228DkZGArm73lbFD6uqAU6eA\ndev4NuXKSmGX25AhONa/P9+erCoqCQ97oPbeWls1dufOnWOenp5CenFxMWOsZS0Fx3Fs/fr1jDHG\nTpw4wezt7RljjOXn5zMLCwuWlpbGGGNs7dq1cq/HGGMDBw5k+/btk1vGuro65uTkxDIyMhhjjG3d\nupWNHz+eMSa/ZqG18hQUFDArKyt27do1xhhjmzZtYkOHDmWMMRYTE8O0tLTYhQsXGGOMrVixgk2Z\nMkVueaRSKTt48CBjjDETExOWn5/PGGOspqaGVVRUyD2n8Rpt1dgxxlhiYiIzNzdnTk5OzNzcnCUl\nJTHGGEtOTmZeXl6iYwcOHMjOnz/PGGNs27ZtLDg4mB0+fJh5eHiw0tJSufk3f/9ffvlltnTpUsYY\nY3fu3GF2dnbsypUrbZbx2rVrzMrKSqjBa019fT0bOXIk+/rrr0Xps2bNYo6OjszOzk74LNpzD03f\nf8YYu3//vvDz4sWL2aJFixhjjL311lts1apVwr7G53fZsmXsvffeE9LT0tLYsGHD2MOHDxljjF25\ncoU5OjoyxvjPTENDg506dUpuWTIzM1vUIIWHh7NJkyYxxvgaSktLS+E7cO/ePeG4I0eOsODgYGG7\ntee2uaioKObo6MgKCwsfWf79+/czX19fVlFRwRoaGtj48eNZYGAgY6xlbXfT7aY/V1VVsbKyMhYT\nE8NqampYZGQkO3TokNyyNHf69Gnm7+8vbP/yyy/Mz89P7rGN/vzzT1FtdNPat+joaOHeFi1axJYv\nX84YY6y0tJRZW1sL72/z53z69OksNDSUVVdXs5qaGubl5cWOHDnCGJP/HWisNXd2dhaelczMTGZo\naCj39xchHVFUxNiePYwtWyauoVu2jLG9e/n9aqmujrHkZMa++KJl9eO6dYxdvMhYfT3LvH6dHVu/\nXmU1dr168IQqcBwHNzc31NbW4rXXXkNkZKSo1qy5SZMmAeBraPLy8lBTU4OkpCQEBATAzc0NADBz\n5kz83//9X7vLoqGhgblz52LDhg1YvXo11q9fj5UrVwJAq3PftFYeX19fDBgwAADf72bevHkoLy8H\nAKHPT+N5v//++yPLFhkZiVdffRXPPvssxo4dCxcXl3bfX6OysjJMnDgRBw4cwLBhw5CYmIiXXnoJ\nV69efeS5U6dOxdGjRzFu3DgkJCTA0NBQoWseO3YMa9euBQD06dMHTz/9NGJiYuDl5SX3+Dt37uCF\nF17Af//7X6EGrzVvvvkmjI2NhRqURj/88AMAYPv27Rg/fjxSUlLAcVy77qHp575lyxbs2LEDNTU1\nKC8vh4eHBwAgPDwc77//PioqKhAREYGIiAi55x8+fBjp6emimsb6+nrcu3cPANCvXz8MHTr0keVo\nxHGcUPPVWLuZnp4ONzc3JCcnY+XKlSgqKoJEImnRR1Dec6utrd0i/7Fjx8L8r/WBWiv/3bt3ERMT\ng4kTJ0JPTw8AMH36dHz88cdy76U1dXV1WLBgAU6ePAnGGPLz83Hx4kU88cQTACAqS3MZGRmwt7dv\n1/Xs7e1x69YtUVpISAgkEgn69OmDvXv3AuBrS0NDQ7F48WJs374dTzzxhKgloSmO4/DCCy8I72VA\nQIBwDXnfgePHj2PgwIEA/v5MnJycYGZmhpycHPTv379d90RIU2Vl/GoRycn8NCZNDRzI18618ij3\nbA0N/BBemazlEF4TE37Eh6+v0DnQycMDTh4eQLN+tR1Fgd1frKyscP/+fTg6OgLgf4mXlJTAysoK\nurq6SElJgUwmw9GjR7Fw4UKcP39ebj66f9URa/z1gdU1X9vkEQICApCUlITnnntO7v5//OMf8Pf3\nx7PPPouSkpJHDt7oSHl0m9Rza2hoKHTOb7/9hjNnzuD48eOIiIjAhg0b8OSTT8o9lnvEBENXr16F\nkZGR0NE8JCQEBgYGuH79Ovr27Yvc3FwwxsBxHOrr65GXl4e+ffsCAGpqapCSkgIzMzNR85QimgYn\njfnLc/fuXYwePRoLFy7Eiy++2GaeCxYsQHp6epvB8dSpU/GPf/wDRUVFMDc3b9c9NJYxPj4eGzZs\nwMmTJ2FhYYEdO3bg+++/B8A36YWEhODw4cNYvXo1fvzxR2zbtk1uMPbkk09iy5Ytcq+laJDclLxn\nqaamBhMmTEBCQgL8/PyQl5cHh2ZTw8t7bpsHdgCEZstHlb/5xJ9Nf9bU1ERDk87LVVVVcu9lzZo1\nKC4uxunTp6GtrY25c+cKx3Ic16Isza/flL+/P1JTU1FcXAxTU9NWz2n+GZ08ebJFVwYHBwcMGTIE\ne/fuxbfffit87q3R0dERfm7+/W7rO9CR3wuEyFNVBZw4wbdONh/D5u7OB3R/9b5RL4wB16/zAyPu\n3hXvMzAAwsKAwYMBzc4NvaiP3V9Gjx6N7777TtjeuHEjhg0bBl1dXdy/fx/l5eUYM2YMVq1aBRMT\nkxb/Sbdl6NChOHfunHBOa384AeC9997D999/j2PHjglpGRkZQj8jCwsLjBo1CpMnTxaNmjMxMWnR\nr6c1wcHBuHjxotAPbsuWLQgICGjzD1Nb6uvrkZ6ejsDAQCxcuBBjxozBhQsXWj2+tdrFRm5ubrhz\n545Qi3Pt2jUUFBTAzc0N1tbW8PPzw44dOwAAP//8MwICAmBhYQGAf/8CAwPx559/4p///Cdyc3Pl\nXsPIyEjogwbwfZYa/yDm5+fjf//7n9ygubCwEKNHj8abb76JmTNntnkfH3zwAc6dO4c9e/ZAS0tL\nSC8vL0d2draw/fvvv8POzk6o7VH0HpoqLi6GiYkJzM3NUV1djR9//FHYl5aWBmtra0yfPh1Lly4V\nRuA2f2bGjBmDQ4cOiWpGFR2ta2xsjIqKCtQ3+7db3mddVVWF+vp6IZj79ttvFbpGc83zbqv8UqkU\nu3fvRmVlJRoaGrBt2zYhaHF3d8elS5dQU1ODmpoa7N69W+71SkpKYGtri8TEROTm5mLfvn1t3mdT\nzs7Oos+xX79+eO655zB37lyUlZUB4L9HmzZtEmrOc3JyFK75fvPNN/HOO+9AW1tbVKva/Dlvi6Lf\nAUI6qqaGXyniyy/5mrqmQV3fvsCMGcDUqWoY1DXOybJxI/DLL+KgrnEI79tv8x0FOzmoA6jGTvDl\nl1/i7bffhq+vLyQSCRwdHYXOw9nZ2ZgzZw7q6upQV1eHp59+GsHBwcjMzBT9R9v8v/LGbRsbG2zY\nsAFPP/00DAwMMHbsWGhpackdRODj44Pff/8dixcvxty5c6Gvrw8rKytRs9GsWbOwa9cuUcfnkSNH\n4j//+Q/8/PwglUrx5ZdftloeKysrbNu2Da+88grq6upgbW2N7du3C8c0v6dH1bDV19dj5syZKC4u\nFt67Tz/9VO5xTk5OqKmpQUlJCfr27Ys5c+Zg6dKlSE5ORlRUFA4ePAgLCwts2rQJEydOBMD/0YyO\njhZqNjZs2IDp06fjo48+grm5udDBfO/evYiLi0NSUhK0tbURFRWFyZMnQyaTQdJs1sp3330XkZGR\n0NfXh0wmw1dffYW5c+fC19cXjDF8+umn8PT0bHEPq1evRlpaGjZs2IANGzYAAN555x1Mnz5ddA8p\nKSlYvXq1MCULwA+C+fXXX1FWVoaXX34Z5eXl0NDQgI2NjRAktOcemnrqqafw008/oX///rC0tERY\nWJgQ1OzatQs//fQTtLW1wXEc1q1bBwAYN26cMHhi8uTJeP/997F9+3bMmjULlZWVqKmpwYgRI4RB\nBm09B+bm5pgyZQq8vb1hbm6OhISEVs8xNjbGRx99hMDAQFhYWGDChAkKfY+aa/5suru7t1r+Z599\nFomJifDx8YG5uTmCg4OFgCc4OBijRo2Cl5cX7Ozs4OvrK9SUNr3GW2+9hZdeegl79+6Fh4cHRo0a\n1WpZmvPz80Nubi4qKiqE7/2WLVuwfPlyDB48GNra2mhoaMDYsWOFGrXExMQW12hNWFgY9PT0MG/e\nPFF60+c8JiamzXwU/Q4Q0l719cDZs0BcHN/82lSfPnwNXb9+6rVahCAzEzh+HGg+iE5bGxg2jH91\n8WgPWiu2i5SVlQlNWdHR0YiOjkZcXFyH8vrkk09QUFCAr7/+WpVFJKRXa/wONjQ0YPbs2XBwcMBH\nH33UZdd/55134O/vL/qHrC1+fn44cOBAi2ZqeTIyMjBixAikp6eLmkwJ6U4NDcClS3xXs+YVx+bm\nfEDn5aWmAV1uLh/QNR2+C/A1ckFBwIgRwCNmgGiO1opVM1999RV27dqFuro6WFhYPLIfTGu8vLyg\nra2Nw4cPq7iEhPRur776KjIzM1FZWYkhQ4bg/fff79Lr//vf/8YLL7ygUGB38OBBDB8+XKGgbunS\npYiOjsaaNWsoqCM9QmNXs+PH+SlMmjI25scO+Pmp4cTCAD9TckwMf4NNaWjw/edCQwEjo+4p21+o\nxo4QQtqB1oolRD7GgFu3+Kna8vLE+/T1+ZgnMLBLupmpXmEhH9ClpPA32ojj+Cg1PJxftFYJVGNH\nCCGEkB4hJ4cP6DIyxOk6On93NWsyIFt9FBcDsbHAxYstl/4aNAiQSpWek+VG2g0cSVbN8o4ABXaE\nENIuVFtHyN8KCvgm1+aLDSnR1axnKC3lh+6ePdtykj0PDyAigh/5oaTrqdfx5aEvkWeZ9+iDFUSB\nHSGEEELa5cEDflDE5cvilkmJhF8dKyyM70+ndioq+En2Tp9uOcmeqys/4kOBvq+KyCjKwCf7P0GO\nRQ5QrZIsAVBgRwgh7UJ97Mjj7OFDftqSc+fELZMcx7dMRkTwI17VTnU1cPIk/6puFmX17QuMHAk4\nO6vkUrdLbuN4xnFkFmfifuV9leTZFAV2hBBCCGlTRQU/ufDp0/ya9k15ePAVWTY23VM2pdTUAGfO\n8DdXWSneZ2vL35i7u0rmZMl5mIOYjBikF/09RYoEEnDgYGtkq3T+jWhULCGEEELkqq7ml/5KTGxZ\nkeXszFdk/bWio3qpq+P7z8XHt5w12cqKr3r09FRJQJdXmoeYjBikPkgVpUs4CSxrLJGalgoTTxMs\nj1hOo2IJIYQQonp1dXxFVnw8X1vXlJ0dH9C5uqrh5MINDcCFC/xI1+bLcJqZ8aNcvb35zoJKyi/L\nhyxThuv3xXPeceDg28cXYU5hMNczxw2XGzh27lgrubRfqzV206ZNUygDHR0d/PDDDyorkKpQjR0h\npDNQHzvSmzXGPTIZ35+uKUtLvmVSRRVZXYsx4MoV/sYKC8X7jI350R7+/iqZNflu+V3IMmW4eu+q\nKJ0Dh0HWgyB1lsJC36LFeaqKW1oN7HR0dPDBBx+0epHGAnzxxRcoLS1VuiCqRoEdIaQzUGBHeiPG\n+Ll3Y2Jaxj2mpnxFlo+PSiqyuhZj/Fwsx48Dd++K9xkY8LMmDxmiklmT71fcR2xmLK7cvQIGcfzh\nZeUFqbMUVgZWrZ7f6YGdm5sb0puvgSaHh4cHbjSfwKYHoMCOEEIIaRtjQFoaP7lwfr54n6EhX5EV\nEKCGq0U0LoNx/Di/rmtTurrA8OHA0KGAtrbSl3pQ+QCxmbG4VHCpRUA3wHIAIpwjYGP46JElnR7Y\nqTsK7AghhJDWZWXxAd3t2+J0Fcc9Xe/2bf7GsrLE6draQHAwEBLC36SSiquKEZcVhwv5F9DAxKtS\n9LfoD6mzFHZGdgrn161Lit26dQsSiQTOKprThRBC1AU1xRJ1d+cOH/ekpYnTtbT+jnv09LqnbErJ\ny+Nr6JrfmKYmv0jtiBF886uSSqpKEH87HufvnEc9E69K4W7uDqmzFA7GqpnEuCMUCuwmTZqEt956\nCyEhIYiOjsa8efPAcRy++uorzJ49u7PLSAghhBAl3b//9zr2TWloAIMH882uhobdUzal3L3L39i1\na+J0FS+DUVpdioTbCUjOS24R0LmYuiDCJQKOJo5KX0dZCjXFWllZITc3F9ra2hg0aBC+++47mJqa\n4vnnn0da88i4h+A4DlFRUZBKpfTfNSGEkMdWSQk/GPTCBfHyXxwH+PoC4eH8TB9q58EDPqC7cqVT\nb6y8phwJtxNwJu8M6hrEszM7mjgi0iUSzqbOHc5fJpNBJpNh+XLVzGOnUGBnamqK4uJi5ObmIigo\nCLl/dUQ0MjLqkSNiAepjRwgh5PFWXs7PQ3fmTMt17D09+alLrFofpNlzlZTw89BduCBe1wwAvLz4\nIbwquLGK2gokZiciKScJtQ3idWMdjB0Q4RwBVzNXcCqa+6VL+9j5+vpi1apVyMzMxNixYwEAOTk5\nMDExUboAhBCiTqiPHenpqqr4lSJOneJXzGrKzY0P6Oztu6dsSikr4yPV5OSWkWr//vxqEbbKL81V\nWVuJkzkncSrnFGrqxW+gnZEdIpwj4G7urrKATtUUCuw2bdqEJUuWQFtbG5999hkA4OTJk5gyZUqn\nFo4QQgghiqmtBZKSgBMnWi576uDArxbh4tI9ZVNKZSV/U0lJ/E025eLCR6oqWNesqq4KSTlJOJlz\nElV1VaJ9NgY2iHCJgIeFR48N6BrRdCeEEEKIGquvB86dA+LigOa9o2xs+Linf381XC2irYVqVRip\n1tTXICknCYnZiaisE0fEVvpWiHCJgKelZ6cHdF0+3Ul8fDzOnz+P0tJS4eIcx+GDDz5QuhCEEEII\naZ+GBn7cQEwMUFQk3mduzrdMDhqkhgFdbS3fMTAhoeVCtX368JFqv35K31htfS3O5J1Bwu0EVNSK\nr2OhZwGpsxRe1l6QcOq13IZCgd2bb76JnTt3IjQ0FHpqObkNIYSoBvWxI92trVWyjIz4waAqWva0\na7VV9WhpyUeqAwcqHdDVNdQhOS8ZCbcTUFZTJtpnpmsGqbMU3jbeahfQNVIosNu+fTtSUlJgZ6f4\nDMqEEEIIUa1bt/jJhZuvkqWnxy97GhjITzSsVhoagIsX+ZGuxcXifSpcqLauoQ7n75xHXFYcSmvE\ngaOprinCnMLga+MLDYm6RcRiCgV2ffv2hbZaritCCCGqRbV1pDvk5PA1dLduidO1tYFhw/iXClbJ\n6lqM8bMly2T87MlNGRn9vVCtklWP9Q31uJB/AXFZcSipLhHtM9YxRphTGPz7+Kt9QNdIocETZ86c\nwcqVK/HKK6/Axka8kG1YWFinFU4ZNHiCEEKIurt7lw/orl8Xp6t4layuxRhw8yZ/YwUF4n36+vxN\nqaDqsYE14FLBJcRmxqKoStwJ0VDbEKGOoRhsNxiakg6trqpyXTp44uzZs/jjjz8QHx/foo9ddna2\n0oUghBB1QX3sSFcoKuIHRVy+LF5UQSLh+8+FhQFqN5UsY0BGBh/Q5eSI9+no8IvUBgfzPyuhgTXg\nyt0riM2MRWFloWifgZYBRjiOwBC7IdDSULc2a8UoFNgtXrwYBw4cwOjRozu7PIQQQshjq7SUHztw\n9mzLRRUGDeLHD1hYdE/ZlJKdzXcOzMwUp2tp8cFcSAjfUVAJjDFcvXcVskwZ7lXcE+3T09TDcMfh\nCLIPgrZG7+5aplBTrKOjI9LS0tSqnx01xRJCCFEXlZX87B6nT7ecg7d/f36Gjz59uqdsSrlzh6+h\nS00Vp2to/N2WbGio1CUYY7h+/zpkmTIUlIubdnU1dRHSNwRD7YdCR1O5msDOpqq4RaHAbvPmzTh9\n+jSWLFnSoo+dRMlRKp2FAjtCCCE9XU0NPwfviRMt5+B1cuLn4HV07J6yKeXePb4t+epVcboK25IZ\nY0h9kIqYjBjcKbsj2qejoYNgh2AM6zsMuprqMaqkSwO71oI3juNQ33y9th6CAjtCSGegPnZEFerq\n+CVP4+OB8nLxPltbPqBzc1PDyYWLivhRrpcuiTsHchzg7c1PXWJurtQlGGNIL0pHTEYMckvF875o\na2hjqP1QhPQNgZ6Wes2726WDJ241H19NCCGEkHZrnLJNJgNKxDNvqHIO3q738CHfOfDcuZadAz09\n+RuztlbqEowxZBRnICYjBtkPxQM3tSRaCLIPQkjfEBhoq9swYdWitWIJIYSQTsYY3yoZE9NyyjYT\nE74iy9dX6Tl4u155OV/tmJzMV0M21a8fH9CpYHGDrOIsxGTGILM4U5SuKdHEELshGOE4AobayvXV\n626dXmO3ZMkSfPzxx4/MICoqCsuXL1e6IIQQQkhvwxiQns4PCL0j7gYGAwO+q9ngwfy8dGqlshJI\nTASSkviOgk05O/OjPVTQOTC7JBsxmTG4VSRuOdTgNBBgG4BQp1AY6xgrfZ3epNUaO0NDQ1y6dKnN\nkxljGDx4MIqbLwHSA1CNHSGkM1AfO6Ko27f5gC4rS5yuowMMH87P8qFGk03wqqv5YC4xEaiqEu+z\nt+cDOldXpduScx/mQpYpQ+oD8WhaCSeBfx9/hDmFwURX3Sbya1un19hVVFTA3d39kRnoKDmRICGE\nENKb5OfzAV3zGT60tIChQ/mgTskp27pebe3foz0qKsT7bGz4JlcPD6UDuvyyfMRkxOBG4Q1RuoST\nwNfGF2FOYTDTM1PqGr0d9bEjhBBCVKCwkO9Dd+WKOF0i4Ztbw8L4JVDVSn09cP48PzDi4UPxPgsL\nPqDz8lI6oLtbfheyTBmu3hNPj8KBg7eNN8KdwmGhr44zMyuuS0fFEkIIIUS+khIgNha4cEE8IJTj\nAB8ffmCEmbpVMjU08OuZyWT8FCZNqXC0x/2K+5BlypByNwUM4qDGy8oLUmcprAyslLrG44YCO0II\naQfqY0calZfzq0WcOdNyQOiAAXx3MyVn+Oh6bQ3fNTTkqx0DApQe7fGg8gFiM2NxqeBSi4DO09IT\nUmcpbAxtWjmbtIUCO0IIIaQdqqqAkyf5V/MBoa6u/OTC9vbdU7YOY4zvFHj8ON9JsCk9PX7pr6Ag\nvqOgEooqixCXFYeLBRfRwMTz3XlYeEDqLIWtka1S13jcUR87QgghRAG1tXztXHw8P9tHU/b2fEDn\n6to9ZVNKRgYf0GWLJ/2Fjg4wbBj/UnKgZElVCeJvx+PcnXMtAjp3c3dEOEfA3ljdomHV6tI+dnfv\n3oWenh6MjIxQV1eHrVu3QkNDA9OmTeuxa8USQgghqtA4fiA2FigtFe+ztuabXFUwILTr5eTwAV3z\n1aW0tPjaueHDAX19pS5RWl2K+NvxOJt3FvVMvASpq5krpM5SOJqo42K4PZdCNXZBQUH47rvv4O/v\nj4ULF+LAgQPQ0tKCVCrFl19+2RXlbDeqsSOEdAbqY/f4YIwfPxAT03L8gJkZPyB00CA1XC0iP58P\n6G7eFKdraABDhgChoXx/OiWU1ZThxO0TOJN3BnUN4g6ITiZOiHCJgLOps1LX6G1UFbcoFNiZmZnh\nwYMH4DgO9vb2SExMhJGREQYOHIj85m3xPQQFdoSQzkCBXe/HGB/zHD8OFBSI9xkZ/T1+QEOje8rX\nYffv81FqSoo4XSIB/Pz4GzM1VeoSFbUVOHH7BE7nnkZtQ61on4OxAyJdIuFi6gJO7ao3O1+XNsVq\naGiguroaqampMDU1hZOTE+rr61FWVqZ0AQghRJ1QUNe7ZWTwkwvn5IjTVTh+oOsVFfHtyBcv8lFr\nI47jqxylUn5OOiVU1lbiZM5JnMo5hZp68YgSOyM7RDhHwN3cnQK6LqBQYPfkk0/i5ZdfRmFhISZO\nnAgAuHr1KhwcHDq1cIQQQkhXyM3la+jS08Xp2tr80l8hIYCubveUrcNKS/mJhc+d4zsKNjVgAN+W\nbKPclCJVdVU4lXMKJ7NPorq+WrSvj2EfRDhHoL9FfwroupBCTbFVVVXYsmULtLW1MW3aNGhqakIm\nkyE/Px+TJk3qinK2GzXFEkI6AzXF9i737vEB3bVr4nQNDSAwkO9uZmDQPWXrsPJy4MQJ4PTplhPs\nubnxoz2UnI+luq4ap3NPIzE7EZV14iHC1gbWkDpL4WnpSQFdO3RpHzt1RIEdIaQzUGDXOxQX893N\nLl1q2Trp58e3Tpqo2xrzVVVAYiJw6lTLCfYcHfn5WJyclLpETX0NzuSewYnsE6ioFa8Za6lvCamz\nFF5WXhTQdUCnB3bTpk1rcUEAYIyJPrCtW7cqXYjOQIEdIYSQ5srK+NbJs2dbtk56efGtk5aW3VO2\nDqupAZKS+KCu+QR7dnZ8DZ2bm1LzsdTW1+LsnbOIz4pHeW25aJ+5njnCncLhbeMNCaduQ4R7jk4f\nPLm2TpUAACAASURBVOHm5iYEcPfv38eWLVvw7LPPwsnJCVlZWThw4ACmT5+udAEIIYSQzlZZybdO\nJiXxEw031a8fH/vYqtuCB3V1QHIyP2NyuTjYgrU1H6UOGKBUQFfXUIdzd84hPisepTXiSfxMdU0R\n7hQO3z6+FND1IAo1xY4ZMwZLlixBaGiokJaQkICPPvoIf/75Z6cWsKOoxo4Q0hmoKVa9NFZmnTjB\nt1Q2paLWya5XXw9cuMCPdH34ULzP3JxvR1Zygr36hnpcyL+AuKw4lFSXiPYZ6xgjzCkM/n38oSFR\ntzlfeq4u7WNnbGyMwsJCaDUZ411bWwtzc3OUNp+Gu4egwI4Q0hkosFMPdXV8c2tcXMvKrD59+IDO\n3V3NVotoaACuXAFkMuDBA/E+ExMgPBzw9VVqgr0G1oCL+RcRmxWL4qpi0T4jbSOEOoUiwDYAmhJa\nal7VujSwCw8PR2BgID7++GPo6emhoqICUVFRSEpKQlxcnNKF6AwU2BFCyOOnoYEfECGT8QMkmrKw\n4FsnvbzULKBjDLh+nR++e++eeJ+BAT+x8ODBgGbHg60G1oDLBZcRmxWLB5XioNFAywChTqEYbDsY\nWhrqNomf+ujSCYo3b96MV155BcbGxjAzM0NRURGGDBmCHTt2KF0AQgghRFmM8VOWHD/OL7DQlLEx\n3zrp56dmy38xBqSl8Td15454n54ev5ZrUBA/2V6HL8GQci8FskwZ7leI3zh9LX0M7zscgfaB0Nbo\n+DVI12rXdCe3b99GXl4ebG1t4dTDOyVQjR0hpDNQU2zPwhi/hv2xY0Bennifvj5fmTVkiFKVWd0j\nM5MP6G7fFqdrawPDhvEvJWZMZozh2v1rkGXKcLf8rmifrqYuQvqGYKj9UOho6nT4GqR9urTGrpGu\nri6sra1RX1+PW7duAQBcXV2VLkR7LVy4ECdPnoSzszN+/PFHaKrdN5YQQoiysrP5gC4zU5yuo8Ov\nFBEczP+sVlpbAkNTk6+dGzGCj1g7iDGGm4U3EZMZg/wy8VrvOho6GNZ3GIIdgqGrqW7LbJBGCkVE\nhw4dwqxZs3CnWVUwx3Gobz4RUCe7ePEi8vLyEBcXh5UrV2L37t09dvULQkjvQ7V13a+ggA/obt4U\np2tqAkOH8i2USsQ+3aOggA/obtwQp2toAAEBfNWjkVGHs2eMIe1BGmIyY5BXKq7a1NbQRrBDMIY5\nDIOell6Hr0F6BoUCu3nz5mHJkiV49dVXod/N35aTJ0/iiSeeAMCvYRsdHU2BHSGEPAYKC/lBEVeu\niFeLkEj+jn2MjbuteB1TWMgvgZGSIn8JjPBwwNS0w9kzxpBRnIGYjBhkP8wW7dOSaCHIPgjDHYdD\nX0vdImHSGoUCu+LiYsydO7dHLBFSVFQE279mkTQ2NsaD5kO+CSGkE1Efu6738CE/Zdv58/yo10Yc\nB3h78wMjzM27rXgdU1zM39TFi+KbAvg56KRSpZfAyCrOwvGM48gqyRKla0o0McRuCEY4joChtqFS\n1yA9j0KB3axZs/Djjz9i1qxZKrvwN998g82bN+PKlSuYPHkyoqOjhX0PHjzArFmzcOTIEVhaWmLV\nqlWYPHkyAMDU1BQP/5qQsaSkBOZq920mhBCiiIoKICFB/lr2Hh78ahE2Nt1Ttg4rLeVXipC3ppmH\nBz8fS58+Sl0iuyQbMZkxuFV0S5SuwWlgsN1ghDqGwkin4826pGdTaFTsiBEjcPr0aTg5OaFPkweO\n47gOz2O3Z88eSCQSHD58GJWVlaLArjGI27RpE86fP4+xY8ciMTERAwcOxMWLF7FmzRps2bIFK1eu\nhJubGyZOnNjyxmhULCGEqKXqauDkSf5VXS3e5+zMTy7ct2+3FK3jKir45S9On265ppmrKx+lOjgo\ndYnch7mIyYxB2oM0UbqEkyDANgChjqEw0TVR6hqk83TpqNjZs2dj9uzZcgvRUePGjQMAJCcnIycn\nR0gvLy/Hb7/9hpSUFOjr62P48OF4/vnnsW3bNqxatQq+vr6wsbFBWFgYnJyc8P7777d6jRkzZsDZ\n2RkAX9Pn5+cnNKHIZDIAoG3apm3apu0esj18uBTJycDmzTJUVwPOzvz+zEwZLC2BefOkcHEBYmNl\nSE/v/vIqtF1VBdmGDUBKCqT29vz+v4bxSkNDgZEj+e20NEj/Cuzae71f//gVF/IvQMOVX3Ei8wKf\nv6u/K3xtfCHJksAwzxAm/U26//2gbWG78efM5sO6ldSueew6w4cffojc3Fyhxu78+fMYMWIEypus\nAbNmzRrIZDLs379f4Xypxo4Q0hlkMpnwC5qoRltLn1pZ8ZVZSq5l3/VqavjauRMngMpK8T5bW/6m\nlFzTrKCsALJMGa7dvyZK58DBx8YHYU5hsNC36HD+pGt1aY0dYwzR0dHYtm0bcnNz4eDggKlTp2Lm\nzJlKD6hofn5ZWRmMmw1rMjIy6rFr0hJCCOkYxvgRrjExLZc+NTXlu5t5e6vZahGNi9TGxwNlZeJ9\nVlb8TXl6KhXQ3Su/h9isWKTcTQHD34EABw5e1l4IdwqHlYFVh/Mn6k2hwG7lypXYunUr3n33XTg6\nOuL27dv4/PPPkZeXhw8//FCpAjSPTg0NDYXBEY1KSkpgpMT8PYQQoipUW6c8xoDUVH4uuoIC8T5D\nw7+XPlViLfuu19Dwd7VjSYl4n5kZIJUqHaUWVhQiNisWlwsuiwI6ABhoNRBS5//P3n0Hx3ld98P/\nPlvQe+9YgCAJEiQagQUIgGiUbL2ykonluMiWbEdyyURWPC7JbyxZEiM51mTcLdtxYsdWZMVFticT\nS9bEjgksOrEAiEKAFSQWi957WWx53j+OSeLBgtJi+wLnM+MZ8rni7l1YAg/OveecasQFx9n9+mx/\nsCmw+9GPfoSGhgbJGLF3v/vdOHPmjMOB3c6M3ZEjR2AymTA4OIisrCwA1JT4xIkTDr0PY4wxz9Pp\nKKAbkbZUQ0AADVVwcPSp+71d2jEsjKLUggKHotSFjQU0Djeid6oXFlHaGuVo9FFUq6qRGJpo9+uz\n/cWmwG59fR0xO/rpREdHY3Nz0+43NpvNMBqNMJlMMJvNMBgMUCgUCA4OxsMPP4znnnsOP/7xj3Hx\n4kW88cYbaGtrs/u9GGPMWfiOnX3Gx2mwwqC0YBNKJY3+Ki93aPSp+4kiTYmoqwOmpbNWERxMUWpx\nsUNDapc2l9A43IjuyW6rgO5w1GFUq6qRHJZs9+uz/cmmf+MeeOABPProo3jppZeQnp4OnU6HZ555\n5s4ECHu8+OKLeOGFF+78/rXXXsO5c+fw3HPP4Qc/+AEef/xxxMXFISYmBj/84Q9x7Ngxu9+LMcaY\nZ8zMUDLr8mXpc7kcKCoCzpyh41efIYo0x7WujqLV7QICKEItKXEo7bhsWEazvhld410wi9Jed5mR\nmahR1SA13Nf6vTB3sakqdmlpCU899RR+9atfwWg0QqlU4gMf+ABefvllRDgw6sSVBEHA888/j+rq\nav7pmjHG3GxxEdBoaLDCzklZeXl05cxL//q4t+FhCuiGpZMc4OdHaceyMofSjqtbq2jWN6NzvBMm\ni7QjsypChRpVDdIj0u/xp5mv0mg00Gg0+Kd/+ienVMXuqd2J2WzG7OwsYmJiIPfyW63c7oQxxtxv\ndZUKQjs7rQcrHD9ORaGxvlawea9zZIWCjlsrKuj41U5rW2toHWmFdkwLo0XavDg1LBU1GTXIiMjw\nirGezHWcFbfYFNj953/+J/Lz85GXl3fnWW9vL/r6+vDYY485vAlX4MCOMeYKfMdud5ub1LLtwgXr\nwQpZWdS2LSnJM3uz2/Q0nSNfkfaJg0wGFBZSYcSO9lx7sWHcQOtIK9rH2rFl3pKsJYcmoyajBoci\nD3FAd0C4NbBLS0tDT0+PZC7r3NwcCgoKoNfrHd6EK3BgxxhzBQ7spG734W1upuBuu9RUGv/15wFA\nvmN+ngK6/n7rc+TcXDpHjoy0++U3TZu4MHoBbSNtMJilM9MSQxJRk1GDw1GHOaA7YNwa2EVGRmJ2\ndlZy/GoymRAdHY2lnf16vAQHdowx5jpmM/XhbWy07sMbH08B3eHDPjYtYmmJ+tD19FBfuu1yciig\nc+Ac2WAyoH2sHa0jrdg0SaPguOA41KhqkB2TzQHdAeXWyRPHjh3Db37zG3zwgx+88+y///u/uVKV\nMcYOGIsFuHSJElqLi9K1qCi6Q3fihI8FdG93MfDIEfpQifb3idsyb0E7pkXrSCvWjeuStZigGNSo\nanA89jgHdMwpbMrYNTc348EHH8T999+PzMxM3Lx5E3/605/w1ltvoaKiwh373DPO2DHGXOGgHsWK\nInD1KtUQzMxI18LCgKoqID/fx6ZFbGzQxcD2duuLgRkZdDEw1f62IkazEZ3jnWjWN2PNuCZZiwqM\nQrWqGifiTkAm+NLMNOYqbs3YVVRU4NKlS/j5z3+O0dFRqNVqfOc730GqA//CM8YY836iCAwN0bSI\nsTHpWlAQ9aErKqJGwz7DYKAqj9ZW+vV2KSkU0GVm2v3yJosJXeNdaNY3Y2VLOuc8MiASVaoq5Mbn\nckDHXGLP7U6mpqaQ5AOlTdzHjjHGHDM6SgHd0JD0uZ8ftWw7fRrw9/fM3uxiNAIdHVTpsS49EkVC\nAgV0DlwMNFvM6J7sRuNwI5YN0pnn4f7hqEyvRH5CPuQyX0prMlfzSB+7hYUFPPnkk/jNb34DhUKB\n9fV1/O53v4NWq8VXvvIVhzfhCnwUyxhj9pmaoiPXa9ekzxUKmuVaUUHZOp9xu9KjqQlYkWbQEBND\nd+iOH3cooOud6kXjcCMWN6UXD0P9QlGZXomCxAIoZPaPF2P7n1urYj/4wQ8iMjISzz//PI4fP46F\nhQXMzMzg9OnTGNzZsNFLcGDHGHOF/XzHbn6epkVcuiTt8iGT0Rz7qiqH2ra5n8VCoy8aGqwrPSIi\nqMo1N5c+oD0vL1pwaeoSGoYbML8xL1kL8QtBRVoFTiWeglLuS+fUzFPcesfu/PnzmJiYgHLbJYrY\n2FhM7xx8zBhjzOesrFDsc/GidZePkycp/omO9sjW7COKwMAARamzs9K10FBqLFxYaHelh0W0YGB6\nAA3DDZhdl75+kDIIFWkVKEoqgp/c/nmxjNnLpsAuIiICMzMzkrt1er3eJ+7aMcaYM+2nbN36+t2i\nUJN0NCmOHKErZwkJntmbXUQRuH6dzpGnpqRrQUF0hlxcbHelhyiKuDJ7BRqdBtNr0sRGoCIQZall\nUCer4a/wpYuHbL+xKbD7xCc+gb/+67/GV77yFVgsFrS1teHpp5/Gpz/9aVfvjzHGmJO9XVGoSkXN\nhX2q6cHt0t26Oqr42M7fnyo9SkvtrvQQRRHX5q5Bo9NgcnVS+vJyf5SllqEkpQQBigB7PwFjTmPT\nHTtRFPHd734X//Zv/wadToe0tDT87d/+LT772c96bUNFvmPHGHMFX75jZzJRD96mJmBN2lYNSUkU\n0GVm+lhz4ZERKt3V6aTPlUoK5srKgMBAu15aFEUMzg+iXleP8ZVxyZqf3A+lKaU4nXIagUr7Xp+x\n7dxaPOGLOLBjjLmCLwZ2FgtNydJogGVpFw7ExNCR67FjPhbQTUxQhu7GDelzuZyOWysqgJAQu15a\nFEXcWriFel09RpelGUClTImSlBKUpZYhSOlLpcHM27m1eKKurg4qlQqZmZmYmJjA//t//w9yuRwv\nvfQSErz4Asa5c+e4jx1jzKl86fvJ7RqC+npgbk66Fh5OXT4cKAr1jJkZ+kCXL0uf3y7draykD2cn\n3aIO9UP1GF4aljxXyBQoTipGeVo5QvzsCxgZ283tPnbOYlPGLjs7G3/84x+RlpaGRx55BIIgICAg\nALOzs/jd737ntM04E2fsGGMHlSgCg4N0QjkpvRKG4GCKfU6dor50PmN+nkp3+/qkvVgE4W7pblSU\n3S+vX9KjfqgeQ4vSbsxyQY6ipCJUpFUg1D/U7tdn7J249Sg2LCwMy8vLMBqNiI+Px/DwMPz9/ZGY\nmIi5nT8GegkO7BhjruDtR7HDwxTQ6fXS5wEBQHk5UFJCkyN8xvIyBXTd3da9WI4do7RjXJzdLz+2\nPIZ6XT0G56U9WeWCHAWJBTiTdgbhAfZnABmzlVuPYsPCwjA5OYmBgQHk5OQgNDQUBoMBxp1Dkxlj\njHnExAQFdDt7xiuVFMyVl9tdQ+AZa2tU5dHZad2LJSuLLgY60HJrYmUC9bp6XJ+7LnkuE2TIT8hH\nZXolIgIi7H59xjzFpsDuqaeeglqthsFgwLe//W0AQEtLC44dO+bSzTHGmLfxtmzd7CxdORsYkD6X\ny+m49cwZ6snrMzY2qA9LezuwtSVdS0+n0t20NLtffmp1ChqdBldmr0ieCxCQG5+LKlUVogLtP9Jl\nzNNsroq9du0a5HI5srKyAADXr1+HwWDAyZMnXbpBe/FRLGNsP1taohPKnh7pCaUgUEFEdTUQGemx\n7e2dwUDBXGsrsLkpXUtOpgydA71YZtZmoNFpMDAjjYAFCDgRdwJVqirEBMXYu3vGHMbtTt4BB3aM\nMVfw9B272yeUHR002347J1w5cz+j8W5zvfV16Vp8PH2go0ftDujm1ufQMNyAS1OXIEL6d8Lx2OOo\nVlUjLtiXvmBsv3L5Hbvs7GxcvXoVAJB6jxbkgiBAv/OGLmOMMafb3KRk1oUL1ieUhw5RQis52TN7\ns4vZTAURDQ00rHa76GgK6HJy7A7oFjYW0DDcgN7JXquALjsmG9WqaiSEeG+7Lsbsdc+MXVNTE86c\nOQMAb9tfxdvum9zGGTvG2H5gNAJaLdDcTNfPtktJoStnGRme2ZtdLBZqWdLQACwsSNfCw+kMOS/P\n7uZ6i5uLaBpuQvdkNyyitIr2cNRh1GTUICmU55wz78NHse+AAzvGmC8zm4GLF4HGRuuEVlwcBXRH\njvjQtAhRpKbC9fVU8bFdSAg11ysstLu53rJhGU3DTbg4cRFmUXpGfSjyEGoyapASlmLv7hlzOZcf\nxT777LP3fJPbzwVBwAsvvODwJlyFJ08wxpzN1XfsLBagv5/in50JrchIOqE8ccKHpkWIIo39qquz\n7pYcGEijv9Rq6stih9WtVTQNN6Frogsmi7QtiipChRpVDdIj0u3dPWMu57bJEx//+MchvM2PgrcD\nu5/+9KdO24wzccaOMeYKrgrsRBG4do3in+lp6VpoKFBVRROz5HKnv7XrDA3RBxoZkT739wdOn6b/\n+fvb9dJrW2toGWlBx1gHjBZpT9XUsFTUZtQiI9KXzqjZQcdHse+AAzvGmK8YGqLmwqPSefMIDKQ+\ndMXFdie0PGN0lD7QkHQ8F5RKys6VlwNBQXa99LpxHW0jbWgfa8eWWVpFkhyajNqMWmRGZr5tYoIx\nb+Tyo9hbt27Z9AKZmZkOb4Ixxg6isTGKf3Z+u/Xzu5vQCgjwzN7sMjlJGbrr0mkOkMuBoiI6drWz\nW/KmaRNtI224MHoBBrNBspYYkoiajBocjjrMAR078O6ZsZPZcIFDEASYdzZS8hKcsWOMuYIzjmKn\npyn++XNHqTsUCsrOVVQAwcEOvYV73Wv8hUwG5OdTYUSEfeO5DCYDLoxeQNtoGzZN0sbF8cHxqMmo\nwdHooxzQMZ/n8oydZeewZcYYYw5ZWAA0Gur2sf379+34p6qKOn74jIUFalvS2yv9QIJAFR7V1dST\nzg5b5i1ox7Ro0bdgwyTt8xIbFItqVTWOxx7ngI6xHfiOHWOMudjKCrUtuXjRelrE7fgnxpemWb3d\nB8rOptLd+Hi7XtpoNqJjvAMt+hasGdcka9GB0ahWVSMnLgcywVfKghmzjcszdu9+97vxhz/8AQDu\nNCrebRONjY0Ob4IxxvajjQ2gpYVGoBqlhZs4fJimRSQmemZvdllbo07JHR2ASdpaxNHxFyaLCV3j\nXWjSN2F1a1WyFhkQiSpVFXLjczmgY+wd3DOw++hHP3rn10888cSu/wynwBljB40td+y2tmj0127z\n7NPTqblwWprr9uh0bzfPLC2NPlC6fb3izBYzLk5cRJO+CcuGZclauH84qlRVyIvPg1zmS31eGPMc\nPopljLE9eLvAzmS6O89+TXqKiMREin8OHfKhaRFbW5RubGmxjlCTkihDZ+cHMlvM6J3qRYOuAUuG\nJclamH8YzqSdQUFiARQy+yZRMOZr3N7HrrGxEd3d3Vj783er2w2Kn376aYc34Qoc2DHG3MViofoB\njQZYksYoiImhK2fHj/tQQPd2EWpcHH2g7Gy7PpBFtKBvqg8NugYsbEpHa4T4heBM2hmcSjrFAR07\ncFx+x267p556Cq+//jrOnDmDwMBAh9+UMcb2g7cbf+qEefbuZzYDPT1U6bosPRZFVBR9IDvnmVlE\nCwamB6DRaTC3MSdZC1IGoSKtAsVJxVDKfakTM2Pex6bA7rXXXsPAwACSkpJcvR+n4lmxjDFn02g0\nqKqqxs2b1Fx4YkK6HhxM0yKKiuyeZ+9+twfUajTA/Lx0LSyM+rDk59s1z0wURVyeuQyNToOZ9RnJ\nWqAiEOVp5VAnq+En93PgAzDmu9w2K3a73Nxc1NXVIcaH6vH5KJYx5kzXrg3jT3+6ifb2PlgsuYiI\nOISYmLsFA/7+NCmrpMTu8afuJ4rAlSuUcpyRBl0IDqbGwqdO2RWhiqKIa3PXUD9Uj6m1KclagCIA\np1NOozSlFP4KX/liMeZabr1j19HRga9+9av48Ic/jPgdvYkqKysd3oQrcGDHGHOWa9eG8d3vDmJi\n4uydhJbJdB75+VlISEhHSQlNi/CZmyqiCAwO0viLnSnHwECKUNVqmm2255cWcWP+BuqH6jGxKn1t\nf7k/SlNKUZpSikClr3yxGHMPt96x6+rqwltvvYWmpiarO3YjIyMOb4IxxryRKAI3bgAvvngTo6Nn\nJWtK5VmYzXX47GfT7R1/6hk6HQV0er30uYMDakVRxK2FW6jX1WN0eVSyppQpUZJSgrLUMgQpgxzY\nPGPsndgU2D3zzDN48803cf/997t6P4wx5nG3r5y1tABTU8Ds7N1igcVFDY4erYZKBSQmynwnqBsb\no4Du5k3pc4WCsnPl5XYPqB1aGEK9rh76JWmwqJApoE5Wozy1HMF+vjT8ljHfZVNgFxwcjKqqKlfv\nhTHGPMpoBLq7qRfv4uLd5zKZBYJAU7Li44Fjx+i5n58PzNSemqKA7to16XO5HCgspHt0dkan+iU9\n6ofqMbQ4JH1pQY6ipCJUpFUg1N9XIl/G9geb7ti98sor0Gq1ePbZZ63u2Mm8tI6f79gxxmy1sUFT\nstrbrdu2+fkBcXHDuHx5EGFhd49jDYbz+PjHs3D0qH0TF1xubo6KIgYG6Ez5NkGgHizV1UBEhF0v\nPbo8ivqhetxckGb/5IIchYmFOJN+BmH+YQ5snrGDx63FE/cK3gRBgHnnAGgvwYEdY+ydLC/TlKzO\nTutJWUFBVOGqVlM9wbVrwzh//ia2tmTw87Pg7NlD3hnULS5SH7reXjpT3u7ECQro7OxwML4yjvqh\netyYvyF5LhNkyE/IR2V6JSIC7AsWGTvo3BrY6XS6e66pVCqHN+EKHNgxxu5ldpbuz/X1UU/e7cLD\ngbIyoKBg96JQW2bFesTKCk2K6Oqy/lBHj9K0iIQEu156cnUSGp0GV2evSp4LEJCXkIfK9EpEBUbZ\nu3PGGNxcFeutwRtjjO3F2BjQ3AxcvSo9nQRoUlZ5OSW17OjD6znr6xSlarV0SXC7zEya55qSYtdL\nT69NQ6PT4PLMZclzAQJOxJ1Ataoa0UHR9u6cMeYCNs+K9TWcsWOMARTA3bpFAd3QkPV6aipNijh8\n2IdmuQLA5ibQ1kZnyQaDdC01FTh7FrDzh/LZ9Vk06BrQP90PEdLvozmxOahWVSM2ONbOjTPGduPW\njB1jjPkai4WGKjQ3W/fgBYAjR6ipcFqa+/fmkK0tys61tFDVx3aJiZShy8qyK0qd35hHg64BfVN9\nVgFddkw2alQ1iA+Jv8efZox5Aw7sGGP7islEc+xbW63HnspkdNRaXk5tS+zhsTt2JhPdn2tqAlZX\npWuxsXSH7tgxuwK6xc1FNA43omeyBxZRWnBxJPoIqlXVSAr1rVnhjB1UHNgxxvaFzU2qbr1wwTru\nUSqpGKKszO4OH55jsVCk2tAALC1J1yIjqcr15EmKWvdo2bCMxuFGdE90wyxKCy4ORR5CTUYNUsLs\nu5/HGPMMmwK7W7du4ZlnnkFPTw9Wt33HFAQB+p1jabzIuXPnUF1d7Z0VbIwxp1hdpWCuo8P6qllg\nILUrUavtHqpgxW3fT0SRxl/U11unHsPCqLFwQYFdlR4rhhU065vROd5pFdBlRGSgJqMGaeG+dkbN\nmG/SaDTQaDROez2biidKS0uRlZWFj3zkI1azYr01aOLiCcb2t/l5Om7t6aFTyu3CwmjkaWEh4O/v\nmf3ZTRRpSkRdHTA9LV0LDqaLgUVFlIbco7WtNTTrm9Ex3gGTRfpFSwtPQ42qBhmRGY7snjFmJ7f2\nsQsLC8PCwgLkPtQDgAM7xvaniQmqG9g5UAGgvrvl5UBurutalrjsjp0o0hzXujpgfFy6FhBA58il\npbs313sH68Z1tI60on20HUaLtCVKSlgKalQ1yIzMhOBTZcGM7S9urYqtrKxEd3c3ioqKHH5Dxhjb\nK1EEdDqqcN05wx4AkpMpkZWd7WMtS24bHqaAbnhY+tzPj4K506fpXHmPNowbaBttw4XRC9gyS0dr\nJIUmoUZVg6yoLA7oGNtHbArs0tPT8cADD+Dhhx+WzIoVBAEvvPCCyzbHGDvYRJGaCTc3U3PhnbKy\nKEOnUrkvoHNqtm58nAK6wUHpc4UCKC6maNWOy4EGkwEXRi+gbbQNm6ZNyVp8cDxqMmpwNPooB3SM\n7UM2BXZra2t46KGHYDQaMTo6CgAQRZG/KTDGXMJspnFfLS00/ms7QQByciigS0z0zP4cNj1Nypee\nbgAAIABJREFURRFXrkify2R0MbCyki4K7tGWeQvto+1oHWnFhkna4y42KBY1GTU4FnOMv3czto/x\n5AnGmNcwGICLF2mgwvKydE2hAPLz6apZlAfHkjp0x25+ngK6/n7pBUFBoIuB1dXUwmSPjGYjOsY7\n0KxvxrpxXbIWHRiNalU1cuJyIBP23hKFMeYeLr9jp9Pp7syIvXXr1j1fIDMz0+FNMMYOtrU1Gqag\n1VoPU/D3p1PJ0lIgJMQz+3PY0hL1oevpob502x0/Ts2FY/c+ostkMaFzvBPN+masbkmb90UGRKJa\nVY2T8Sc5oGPsALlnxi40NBQrKysAANk9Gl8KggCz2bzrmqdxxo4x77e4SC1Lurut59eHhFAwV1RE\nRaE+aXWVJkV0dtL58naHD9P4LzvOk00WE7onutE43IiVrRXJWkRABCrTK5EXnwe5zHc6GTB20Lm1\n3Ykv4sCOMe81NUX35/r7rRNYUVF03JqfT8evPmljgz5ge7t1xJqRQQFdauqeX9ZsMaNnsgeNw41Y\nMkinUIT5h6EyvRIFCQUc0DHmg9za7oQxxpxBr6cK1+vXrdcSE6kI9Ngxu6Zjuc3b3rEzGGgMRmur\n9RiMlBQK6Oy4vmIRLeib6kODrgELmwuStRC/EJxJO4NTSaegkPG3dMYOOv4uwBhzKVEEbtyggG63\nCYQZGRTQZWb6aA86gLJyWi1l6dalxQtISKA7dEeO7PkDWkQL+qf70aBrwNzGnGQtWBmMirQKFCUV\nQSnf+xQKxtj+xEexjDGXMJtpOkRzs/VkLEGgZsIVFdRc2GeZzUBXF92jW5HedUNMDAV0x4/vOaAT\nRRGXZy5Do9NgZn1GshaoCER5WjnUyWr4yfc+hYIx5p34KJYx5pWMRmpZ0tpKxaDbyeXU1aO8nOIe\nn2WxAL29VOm6uChdi4igtiW5uXs+UxZFEVdnr0Kj02BqbUqyFqAIQFlqGUqSS+Cv8LUBuIwxd9lz\nYGfZcdP5XhWzjLGDZWODTiPb261PI/38qLq1tNSuvrteYfjaNdz8v/9DX0sLck0mHIqPR/r26DQ0\nlBoLFxbueVCtKIq4MX8D9UP1mFidkKz5y/1RmlKK06mnEaDw1fJgxpi72BTYdXV14TOf+Qx6e3ux\nuXl3PI03tzthjLnH8jI1FO7qArak40gRFETBXHGxXaNOvcZwfz8Gv/ENnJ2ehmxsDNURETg/MQHk\n5yM9LY3OlIuLAeXe7rqJooibCzdRP1SPsRXpzDQ/uR9KkktQllqGQKUPf/EYY25l0x27EydO4C//\n8i/x6KOPIigoSLJ2u4mxt+E7doy51swMHbf29Vm3aIuIoJYlBQV7jnW8y+Ii0NGBuu99D7W7nCvX\nnTyJ2n/5F+qivEdDC0Oo19VDvyStKFHKlChOLkZ5ajmC/fY+J5Yx5pvcesdOr9fjn//5n3m+IGMM\no6NUEHH1qvVaXBwlr3Jy9nwa6T1EERgaonPla9cAUYRse+sSmYxal6SmQhYbu+egbnhxGPW6eugW\ndZLnCpkCRUlFqEirQIifr47YYIx5mk2B3Xvf+1784Q9/wAMPPODq/TDGvJAoAjdvUkCn01mv3z6N\nPHzYh1uWbG1RQYRWS+nIbSwyGY2/SE6GxmBA9Z970Vn8bK9KHVkaQb2uHrcWpCMa5YIchYmFOJN+\nBmH+PnoBkTHmNWwK7DY2NvDe974XZ86cQXx8/J3ngiDg1VdfddnmHHXu3DlUV1fbP7CbsQPOYgEu\nX6aAbnLSev3oUapwTUtz/96cZn6egrmeHmDbHeI7MjNxqKQE5xsacDYg4E5ke95gQNbZs+/48uMr\n46gfqseN+RuS5zJBhoKEAlSmVyI8INwZn4Qx5oM0Gg00Go3TXs+mO3bnzp3b/Q8LAp5//nmnbcaZ\n+I4dY/YzmSjOaWkBFqSDDiCTASdPUkAXF+eZ/TlMFIHBQQrobtywXvfzA/LyALUaiI0F8Oeq2PPn\nIdvagsXPD4fOnkX60aP3fIvJ1UnUD9Xj2tw1yXMBAvIS8lCVXoXIwEinfizGmO/iWbHvgAM7xvZu\nc5Pm1V+4QPPrt1MqqZPH6dNUHOGTNjcpYu3oAObmrNejoymYy8ujo1c7TK9NQ6PT4PLMZclzAQJO\nxp9EVXoVooOi7Xptxtj+5fYGxfX19Xj11VcxNjaGlJQUPProo6itrXV4A4wxz1tZoWCus9N6xGlg\nIMU6JSXUvsQnzcxQdq6317oniyAAWVn0AQ8desdLgveaFTu7PguNToOB6QGIkH5zzonNQbWqGrHB\nsY5+EsYYe1s2BXY//vGP8fTTT+MTn/gESkpKoNfr8eEPfxgvvPACPvWpT7l6j4wxF5mfp+PWnh7r\nliVhYdSypLCQTiZ9jsUCXL9OAd2tW9brAQHUj6W4GIiKsvtt5jfm0aBrQN9Un1VAdyzmGKpV1YgP\nib/Hn2aMMeey6Sj28OHD+M1vfoO8vLw7z/r6+vDwww9jcHDQpRu0Fx/FMnZv4+MU0F2+TNfNtouJ\noQrXkyd9tGXJxgbNNOvosB73BdCduZISGvnlQMS6uLmIBl0Deqd6YRGlE3mORB9BjaoGiaGJdr8+\nY+xgcesdu+joaExMTMBv2zdBg8GApKQkzO12T8ULcGDHmJQoUkFnczO1LtkpJYUCuqNHfbRlyeQk\nZef6+qj6YztBoA9WUgKoVHZ9wGuD1/Cnrj9heWsZw4vDUMYoEZ0ovSuXFZWFGlUNksOSHfggjLGD\nyK137MrLy/H5z38e//Iv/4Lg4GCsrq7iS1/6EsrKyhzeAGPMtSwW6rPb3AyMjVmvZ2VRQJee7oMB\nndlMnZK1WmB42Ho9MBA4dYoG1TpQ8XFt8Br+/U//jsnYSQx0DyAiOwKmARPyxXzEJMUgMzIT1apq\npIX7ct8Xxth+YFNg98Mf/hAf+tCHEB4ejqioKMzPz6OsrAy/+MUvXL0/xpidTCZKXrW0WBeACgJN\nh6ioABISPLM/h6yt0XDazk4aVrtTQgJl506ccHim2bpxHS//4WVcDrkMy8rdI1dFlgKLE4v44oNf\nhCpC5dB7MMaYs9gU2CUlJaGxsREjIyMYHx9HUlISUlNTXb03xpgdDAaKedraqNp1O4WC6gVOn3ao\nXsBzxsYoO9ffb13tIZMBx49TCW9qqsPpx03TJtpG2nBh9AIGFwZhCaagLiI7AmH+YciIyIDKX8VB\nHWPMq9wzsBNF8c5sWIuFvqElJycjOTlZ8kwmk7l6j4wxG6ytAe3tFPfsHKDg73+3ZUmIr40hNZmo\nykOrpUG1OwUH01HrqVNUyuugLfMW2kfb0TrSig3TBgBABvo+F+IXgoyIDEQFRkEQBPiv7G1OLGOM\nudo9A7uwsDCs/PnHfYVi939MEASYd/7UzBhzq4UFys5dvGhdMxASQtm5U6fs7rfrOSsrdNTa1WXd\nLRkAkpMpUj1+nFKRDjJZTOgc70TTcBPWjGuStVPHT2FqZAqJuYkY7h1GdH40DDcMOFvzziPFGGPM\nne753XBgYODOr2/t1gOKMeZRU1N0f66/nwoktouKopFfeXlOiXncRxSBkRHKzl2+bP3B5HK6N6dW\nU2DnBGaLGd2T3WgcbsSyQXpfLyowCtWqapyIO4EbN2/g/MXzmJufQ9x0HM7WnMXRrHuPFGOMMU+w\nqd3J17/+dXzxi1+0ev7Nb34Tn//8512yMUdxuxO2H4kioNdThetuI04TE6kg4tgxunLmM4xGilC1\nWmBiwno9NJQaCRcWOu0s2SJacGnqEjQ6DRY2pQNxw/3DUaWqQl58HuQyX2zmxxjzNW7tYxcaGnrn\nWHa7yMhILOycEO4lOLBj+4ko0hCF5mZKaO2UmUkBXUaGj7UsWVqiRsIXLwLr69br6emUncvOdlq3\nZFEUcXnmMup19Zhdn5WshfiF4EzaGZxKOgWFzJdSnYwxX+eWPnZ1dXUQRRFmsxl1dXWStZs3byLM\nCReVGWP3ZjZTIqu5mcadbicIlJkrL3faqaR73O6UrNVSD7qd38gUCpoKoVY7tReLKIq4Pncd9bp6\nTK5OStYCFYGoSKuAOlkNpfzt26Pca1YsY4x5g7cN7B5//HEIggCDwYAnnnjiznNBEBAfH4+XX37Z\n5Rtk7CDa2gK6u4HWVkpqbSeX0925sjIa/+UztraosZ5WC0xPW69HRNBxa0EBEBTktLcVRRFDi0Oo\nG6rD6LK0qtZf7o+y1DKUppTCX8EVrowx32fTUexjjz2Gn/3sZ+7Yj9PwUSzzRevrdDLZ3m59Munn\nR109Skud0tXDfebn6UN1d1v3YQHoHFmtBo4ccfrFQP2SHnVDddAt6iTPlTIlSlJKUJZahiCl84JI\nxhizl1vv2PkiDuyYL1laopYlXV1UR7BdcDB19SgupglZPkEUaSCtVktVHjv/W/Tzo7SjWg3Exjr9\n7cdXxlE3VIfB+UHJc7kgR3FyMSrSKhDi52sN/Rhj+5lbZ8UuLS3h3LlzaGhowNzc3J3mxIIgQK/X\nO7wJxg6qmRlqWdLXZ93ZIyKC7s/l5zs8Fct9DAagp4cCup1zzADqw6JW04dyQWO96bVp1A/V48rs\nFclzmSBDQUIBKtMrER4Q7tB78B07xpg3symwe/LJJzEyMoLnnnvuzrHs1772Nbzvfe9z9f4Y25dG\nR6kg4upV67X4eKpwzcnxoZYls7MUzPX00F26nQ4fpoAuK8slZbtz63PQ6DTon+6HiLs/8QoQkBuf\niypVFaICfXGGGmOM7Y1NR7GxsbG4cuUKYmJiEB4ejqWlJYyNjeEv/uIvcPHiRXfsc8/4KJZ5G1EE\nBgcpQ6fTWa+np1NA56LYx/ksFjpm1Wrp2HUnf38qhCguBqKjXbKFxc1FNA43omeyBxZRmvLMic1B\ntaoascHOP+pljDFnc+tRrCiKCA+n44vQ0FAsLi4iMTERN3brkMoYk7BYgIEBCugmJ63Xjx6lgC41\n1f17s8vGBhVCdHTQPLOdYmMpO5eXR3fpXGDFsIImfRO6xrtgFqVjDY9EH0GNqgaJoYkueW/GGPNm\nNgV2ubm5aGxsxNmzZ1FRUYEnn3wSwcHBOHqUx+kwdi9GI51MtrZaxz8yGbVqKy93Se2Aa0xNUXau\nr8+6wkMQKEJVq13aJXnduI5mfTO0Y1qYLNLBuJmRmahR1SA13LURMt+xY4x5M5sCux/96Ed3fv2d\n73wHTz/9NJaWlvDqq6+6bGOM+arNTUpmXbgArElnyUOpBE6dAk6fBsIdu8PvHhYLXQRsbweGh63X\nAwNpzFdxMVV7uMimaRNtI21oG23Dlll6hy81LBW1GbXIiMxw2fszxpivsOmOXXt7O0pKSqyea7Va\nqNVql2zMUXzHjrnbygoFc52dVBy6XWAgtSxRq53ae9d11tZozFdHB7C8bL2ekEAf5uRJl5bsbpm3\n0D7ajtaRVmyYNiRriSGJqM2oRVZUFgSfuJTIGGP35tY7dvfdd9+us2IfeOABzM/PO7wJVzl37hyq\nq6v52IS51Nwc3Z/r7aURYNuFh1N2rrDQZdfNnGt8nI5b+/sBk/SoEzIZzTBTq4G0NJdWeJgsJnSO\nd6JpuAlrRmnaMzYoFrUZtciOyeaAjjHm8zQaDTQajdNe720zdhaLBaIoIiIiAks75hrdvHkT5eXl\nmN5tNJAX4Iwdc7XxcWpZcuWKdf/d2Fi6P3fypNNm17uO2QxcvkzHraOj1uvBwXR+XFTk8pEXZosZ\n3ZPdaBxuxLJBmimMCoxCtaoaJ+JOQCZ4rg8M37FjjLmCWzJ2CoVi118DgEwmwzPPPOPwBhjzJaII\nDA1RQHfrlvV6Sgpw5gxNx/L6ZNLKCo266OwEVlet15OTKTuXkwMobEru280iWnBp6hI0Og0WNqWV\nJuH+4ahSVSEvPg9ymbdHyYwx5llvm7HT/bnZVmVlJZqamu5EkoIgIDY2FkFefFmIM3bMmW7XEDQ3\nU6Zup8OHqWWJi08oHSeKlJVrb6cs3c5xF3I5BXJqNUWpLt+OiMszl1Gvq8fs+qxkLcQvBJXplShM\nLIRC5trAkjHGPI1nxb4DDuyYM5hM1N2jpcV6QpYgACdO0JFrQoJn9mczk4nuzbW3AxMT1uuhoXTU\neuoUEOL6GaqiKOL63HXU6+oxuSpt7heoCERFWgXUyWoo5b4yS40xxhzj1uKJxx57bNcNAOCWJ2xf\nMhjohPLCBTqx3E6hoIEKZWVAZKRn9mezpSX6IF1dwPq69XpaGmXnjh1zy2VAURQxtDiEuqE6jC5L\n7/P5y/1RllqG0pRS+Cv8Xb4Xe/EdO8aYN7MpsDt06JAkkpycnMRvf/tbfOQjH3Hp5hhzt9VVSmp1\ndFA/uu0CAqhdW0mJW5Ja9hNF6jnX3k7nxzt/AlQoqKpDrQYS3TedQb+kR91QHXSLOslzpUyJkpQS\nlKeWI1AZ6Lb9MMbYfmT3UWxnZyfOnTuHN99809l7cgo+imV7sbBAEyK6u627fISGUsuSU6do/KnX\n2toCLl2idiVTU9br4eEUmRYWurWZ3vjKOOqG6jA4Pyh5rpApUJRUhIq0CoT4eXOkzBhjrufxO3Ym\nkwmRkZG79rfzBhzYMVtMTtL9uf5+68RWdDTdn8vNdXlRqGMWFijFePGidZoRoBFfajWN/JK5r03I\n9No06ofqcWX2iuS5TJChIKEAlemVCA/whfEbjDHmem69Y3f+/HlJI9C1tTX88pe/RE5OjsMbYMzd\nRBHQ66nC9cYN6/WkJKpwzc52axy0N6JI/Vba2+lD7PxmoFQCeXkU0MXFuXVrc+tz0Og06J/uh4i7\n+xIgIDc+F1WqKkQFRrl1T87Ed+wYY97MpsDuiSeekAR2wcHByM/Pxy9+8QuXbYwxZxNF4No1Cuh2\n68ObmUkBnQtn2DvOYAB6eihDNztrvR4VRcetBQV0KdCNFjcX0TjciJ7JHlhEaRuVnNgcVKuqERsc\n69Y9McbYQcPtTti+ZzbT1bOWFmBmRromCMDx43TkmpTkmf3ZZHaW7s719loPogWArCyq6sjKcntU\numJYQZO+CV3jXTCL0plqR6KPoEZVg8RQ9xVpMMaYL3LrUSwALC4u4ve//z3Gx8eRlJSEBx98EJFe\n3+uBHWRbW3TtrK2Nun5sJ5cD+fnUsiQ62jP7e0cWCzA4SMetN29ar/v704dQqz3yIdaN62jWN0M7\npoXJIq04yYzMRI2qBqnhqW7fF2OMHWQ2Zezq6urw8MMP4+jRo0hPT8fw8DCuXr2K3/72t7jvvvvc\nsc8944zdwbW+Tsmt9nZgY0O65u9PfXhLS6na1SttbNBxq1ZLhRE7xcRQMJeX55Ey3U3TJtpG2tA2\n2oYt85ZkLTUsFbUZtciIzHD7vtyF79gxxlzBrRm7J598Ev/+7/+OD3zgA3ee/frXv8ZnPvMZXL16\n1eFNMOYMS0vUsuTiRcBolK4FB1MwV1zs9qtntpuepmi0r8/6AwgCDaAtKfHYJcAt8xbaR9vROtKK\nDZM0Yk4MSURtRi2yorIk93EZY4y5l00Zu4iICMzNzUG+rTO90WhEbGwsFhcXXbpBe3HG7uCYnqb7\nc5cuWY8+jYyk49b8fCoU9ToWC1V0tLcDf57NLBEYSIUQxcUeG3NhspjQOd6JpuEmrBnXJGuxQbGo\nzahFdkw2B3SMMeYAt48U+973vofPfvazd57967/+666jxhhzl5ERqnC9ds16LSGBCiJycry0Zcn6\nOo356uy0vgAIAPHxlJ07edJjEanZYkb3ZDcahxuxbFiWrEUFRqFaVY0TcScgE7zxC8wYYweTTRm7\n8vJyaLVaxMXFITk5GWNjY5ienkZJScmdn9IFQUBjY6PLN2wrztjtT6JI9QTNzTQ1ayeVilqWHDrk\npS1LJiYoO9ffbz3iQiaj5nklJTTD1UMfwCJa0DfVhwZdAxY2pXf8wv3DUaWqQl58HuQy18+W9UZ8\nx44x5gpuzdh98pOfxCc/+cl33BBjrmKxAAMDFNDtNi0rO5sCupQU9+/tHZnNwOXLVAwxMmK9HhRE\n88qKimjsl4eIoojLM5dRr6vH7Lq0R16IXwgq0ytRmFgIhcybx3AwxtjBxn3smFczGml+a2srsPM6\np0xG477Ky4FYb+x7u7pKR61dXcBuo/eSkig7l5Pj0Zlloiji+tx11OvqMbk6KVkLVASiIq0C6mQ1\nlHJvvKTIGGP7g9v72DU2NqK7uxtra3R5WhRFCIKAp59+2uFNMLbTxgYNV2hvB9ak9/Xh50cJrtJS\njya4dieKwNgYbfzyZcrWbSeXU0fkkhIgOdmj58WiKGJocQh1Q3UYXZaO4vCX+6MstQylKaXwV7i/\npQpjjDH72BTYPfXUU3j99ddx5swZBAYGunpP7ABbXgYuXKBE15a0RRqCgigeKi6mX3sVk4nuzWm1\nwPi49XpoKB21njoFhIS4f3876Jf0qBuqg25RJ3mulClRklKC8tRyBCr5v/Xd8B07xpg3symwe+21\n1zAwMIAkr565xHzZ7Cwdt/b2Wie5wsOpZUlBAWXrvMryMqUWu7qo0nWn1FSKRo8do2ydh42vjKNu\nqA6D84OS5wqZAkVJRahIq0CIn+cDT8YYY/axKbBLTU2Fn9f9jcr2g7Ex6kF35QqdYm4XF0f3506c\n8IqY6C5RpJJcrRa4etW6eZ5CQZsuKQESvWNG6vTaNOqH6nFl9orkuUyQoTCxEGfSziA8wNvOtb0T\nZ+sYY97MpuKJjo4OfPWrX8WHP/xhxMfHS9YqKytdtjlHcPGE9xJF4NYtqnAdGrJeT02lCtcjR7ys\nZYnRSFMhtNrdS3PDw+mcuLDQa86K59bnoNFp0D/dDxF3/3sQICA3PhdVqipEBUZ5cIeMMcYANxdP\ndHV14a233kJTU5PVHbuR3do3MLYLi4Uyc83N1M5tpyNHKKBLS3P/3t7WwgIdt3Z3Ww+fBWjEl1oN\nHD3qNd2QFzcX0aBrQO9ULyyiNKOYE5uDalU1YoO9sZTY+/EdO8aYN7MpsHvmmWfw5ptv4v7773f1\nftg+ZDLR3bmWFmB+Xromk9GpZXk5DVvwGrfTilotcP269TmxUgnk5VFAFxfnmT3uYsWwgiZ9E7rG\nu2AWpZcVj0QfQW1GLRJCEjy0O8YYY65m01FsWloaBgcHfeqeHR/Fep7BQNWtbW3U0m07hYJOLMvK\ngIgIz+xvVwYDRaFaLVV07BQZScFcfj7NcfUS68Z1NOuboR3TwmSRTrTIjMxEbUYtUsK8sXszY4wx\nwHlxi02B3SuvvAKtVotnn33W6o6dzEuOnnbiwM5zVlepjVtHB7C5KV0LCKC4qKQECA72zP52NTdH\nwVxPDwV3O2Vl0cazsrzmuBUANk2baBtpQ9toG7bM0v4wqWGpOJt5FqoIlWc2xxhjzGZuDezuFbwJ\nggDzzt4UXoIDO/ebn6eWJT091mNQQ0OB06epjZu/t/S7FUXgxg0K6AYHrdf9/SkzV1wMxMS4f39v\nY8u8hfbRdrSOtGLDJL33lxiSiNqMWmRFZfGoPxfgO3aMMVdwa/HErVu3HH4jtn9NTlJBxMCA9VW0\n6GgqiDh50qNTs6Q2N6kQoqPD+tIfQEGcWk136LwmCiUmiwmd451oGm7CmlE6kiM2KBa1GbXIjsnm\ngI4xxg6oPc2KtVgsmJqaQnx8vNcewd7GGTvXut3Krbl592RXcjIFdF5UKApMT1N2rreXWpdsJwhU\nlqtWA5mZXtZnBTBbzOie7EbjcCOWDcuStajAKFSrqnEi7gRkgrd8sRljjO2FWzN2y8vL+MxnPoNf\n/vKXMJlMUCgU+NCHPoSXX34Z4V43rJO5kigC165RQDc6ar1+6BAFdCqVl8RGFgttWKvdvWleQABV\ncRQXU2GEl7GIFvRN9aFB14CFzQXJWrh/OKpUVciLz4Nc5k0dnBljjHmKTRm7j33sY1hdXcVLL72E\ntLQ06PV6PP300wgKCsKrr77qjn3uGWfsnMtspt68LS3WxaKCQHPtKyq8ZtACjfe6eJGOW5eWrNfj\n4qiC4+RJL5xTBoiiiMszl1Gvq8fsuvQLHuIXgsr0ShQmFkIh85bz7YOD79gxxlzBrcUT8fHxuHXr\nFoK3lTGurq4iMzMT09PTDm/CFTiwc46tLRqD2tZGY1G3k8uptqCsjO7SeYWJCcrOXbpkXcEhkwHZ\n2XTcmp7uJSlFKVEUcX3uOup19ZhcnZSsBSoCUZFWAXWyGkq50kM7ZBzYMcZcwa1HsYGBgZiZmZEE\ndrOzswgICHB4A8w7ra9TyxKt1nrYgr8/nVyWlFC1q8eZzTTSQqsF9Hrr9aAgKsctKqKxX15IFEUM\nLQ6hbqgOo8vSM25/uT/KUstQmlIKf4V3FXMcRBzUMca8mU2B3Sc+8Qncf//9+MIXvoD09HTodDp8\n61vfwic/+UlX74+52eIiZecuXrSuLwgJAUpLKT7yiph+dZXSiZ2dwMqK9XpSEmXnTpzwopJca/ol\nPeqG6qBb1EmeK2VKlKSUoDy1HIFK72mGzBhjzHvZdBRrsVjwyiuv4L/+678wMTGBpKQkPPLII3j8\n8ce9tq0CH8XuzfQ0FUT091O9wXaRkTTyKz/fS+Kj0VHKzg0MULZuO5kMyMmhgC4lxSuPW28bXxlH\n3VAdBuelZcUKmQJFSUWoSKtAiF+Ih3bH7oWPYhljruDWO3beZHl5Gffddx+uXLmC9vZ2HD9+fNd/\njgM72+j1FNBdv269lpBABRHHj3tByxKTiQI5rRYYG7NeDwmhVOKpU15yPnxv02vTqB+qx5XZK5Ln\nMkGGwsRCnEk7g/AA7zwyZhzYMcZcw6137J566ik88sgjKCsru/OstbUVr7/+Or797W87vIm9CAoK\nwltvvYV/+Id/4MDNTrcHLjQ3734lLSODAjqvaOe2vExHrV1dwNqa9XpqKmXnjh+nag4vNrc+B41O\ng/7pfoi4+++uAAG58bmoUlUhKjDKgztktuCgjjHmzWzK2MXExGBsbAz+27rwb25uIjW/nmAcAAAg\nAElEQVQ1FTMzMy7d4L38zd/8Db74xS8iJydn13XO2Fkzmynp1dxMR6/bCQIVjJaX0wmmR4kiRZxa\nLRVF7DwbVijo3pxaTffovNzi5iIadA3oneqFRZR+lpzYHFSrqhEbHOuh3THGGPMGbs3YyWQyWHb8\n5WqxWDhw8hFGI03Qam2l4ojt5HIgN5cCOo+PQzUaqU2JVktzynYKC6Ny3MJCYFuFtrdaMaygSd+E\nrvEumEXpXcAj0UdQm1GLhJAED+2O2YuPYhlj3symwK6iogJf/vKX8bWvfQ0ymQxmsxnPP/88zpw5\ns6c3+973vodXXnkF/f39eOSRR/DTn/70ztr8/DyeeOIJ/N///R9iYmLw0ksv4ZFHHgEAfOtb38Lv\nfvc7PPTQQ/jCF75w5894a+GGt9jYoBipvZ3al2zn50fX0U6fpnjJoxYXqZHwxYvWvVUAGmOhVlNK\n0eOX/d7ZunEdzfpmaMe0MFmkvfQyIzNRm1GLlDBPp0UZY4ztRzYFdt/5znfw0EMPISEhAenp6dDr\n9UhMTMQbb7yxpzdLTk7Gs88+iz/84Q/Y2PEX+JNPPomAgABMT0+ju7sb73nPe5CXl4fjx4/jc5/7\nHD73uc9ZvR5nDHe3vEwtS7q6qMHwdkFB1H9OrQYCPdlBQxRpxJdWSyO/dv5/qVRSKlGtBuLjPbPH\nPdo0baJ1pBUXRi9gyyz9wqeGpeJs5lmoIlSe2RxzGs7WMca8mc1VsWazGVqtFiMjI0hNTUVJSQlk\ndmZPnn32WYyOjt7J2K2trSEqKgoDAwPIysoCQGPMkpKS8NJLL1n9+QcffBC9vb1IT0/Hpz/9aXzs\nYx+z/mAH8I7d7CyN/Orrs+4CEhFBEyIKCihm8pitLaC3lwK63e5nRkbScWtBgYcjT9ttmbfQPtqO\nlpEWbJo2JWuJIYmozahFVlQWZ5gZY4zdk1vv2AGAXC7H6dOncfr0aYffdOfGr1+/DoVCcSeoA4C8\nvDxoNJpd//xbb71l0/t8/OMfh0qlAgBEREQgPz//zk/bt197P/x+bAz4t3/TQK8HVCpa1+loXa2u\nRkUFMDOjwfo6oFR6aL//8z/AtWuoNpsBgwEanY7W//z/j2ZrC8jORvWjjwIymVd9fe/1e5PZhOAj\nwWjWN2OgYwAAoMqnz7N4dREFCQX4aNVHIQiCV+yXf++c32//vuQN++Hf8+/59775+9u/1v3570Nn\n8Ugfu50Zu6amJnzgAx/AxMTEnX/mRz/6EX7+85+jvr7ervfY7xk7UQRu3aIK16Eh6/W0NGpZcviw\nB1uWiCIwOEjZuRs3rNf9/KjrsVrtBZUbtjNbzOie7EbjcCOWDdIBulGBUahR1SAnLgcyQeahHTJX\n0mg0d75BM8aYs7g9Y+dMOzceEhKC5R0T5peWlhDq5Y1mPcFiAS5fpiPXbXHwHUeOUECXlub+vd2x\nuQn09FBANz9vvR4dTcFcfj4NnvURFtGCvqk+NOgasLC5IFkL9w9HlaoKefF5kMu8u58ecwwHdYwx\nb/aOgZ0oihgaGkJaWhoUTpontfOu0ZEjR2AymTA4OHjnOLa3txcnTpxwyvvtByYTxUqtrdaxkkwG\nnDxJLUvi4jyzPwB0Z06rpTt0O6s2BIHSh2o1cOiQF3Q+tp0oihiYGYBGp8Hs+qxkLcQvBJXplShM\nLIRC5g3z1hhjjB1kNv1NdOLECayurjr8ZmazGUajESaTCWazGQaDAQqFAsHBwXj44Yfx3HPP4cc/\n/jEuXryIN954A21tbQ6/p6/b3KTBCxcu0Mz77ZRKaul2+jQVR3iExULzyLRaOhveKSCACiGKi4Eo\n35qqIIoirs9dR91QHabWpiRrQcoglKeWQ52shlLuyWoU5m58FMsY82bvGNgJgoCCggJcu3YNx44d\nc+jNXnzxRbzwwgt3fv/aa6/h3LlzeO655/CDH/wAjz/+OOLi4hATE4Mf/vCHDr+fL1tdpWCuowMw\nGKRrgYGU+FKrPdind32duh53dFh3PQYodahWU8sSPz/3788Boiji1sIt1A3VYWxFOpfWX+6PstQy\nlKaUwl/hO8fIjDHGDgabiie+/OUv47XXXsPHP/5xpKam3rngJwgCHn/8cXfsc898tXhifp6OW3t6\n6Ph1u7Awys6dOuXBWGlykrJzfX3WG7w9l0ytpqbCPnTcept+SY+6oTroFnWS50qZEqUppShLLUOg\n0jfasDDGGPMdbi2eaG5uhkqlQkNDg9WatwZ2AHDu3DlUV1f7xLHJxARVuF6+bN2rNyaG7s/l5npo\nzr3ZDFy9SgHd8LD1elAQnQkXFwPh4e7fnxOMr4yjbqgOg/ODkucKmQJFSUWoSKtAiF+Ih3bHGGNs\nv9JoNJIWKI7ySLsTd/CFjJ0oAjodBXQ3b1qvJydThWt2toeSX2trNL6is5PGWeyUmEhjLHJyPNz1\n2H7Ta9OoH6rHldkrkucyQYbCxEKcSTuD8ADfDFaZa/AdO8aYK7i93cnc3Bx+//vfY3JyEv/4j/+I\nsbExiKKIlBSeeblXokgJsOZmYGzMej0riwK69HQPBXRjYzRgdmDAeoSFTAYcP04BXUqKTx63AsDc\n+hw0Og36p/sh4u5/SAIE5MbnokpVhahA3yr2YIwxxmzK2DU0NOB973sfioqK0NLSgpWVFWg0Gnzj\nG9/Y87xYd/HGjJ3ZTFfTWlpo/Nd2gkCJr/JySoS5nclE58Dt7btHmyEhdLmvqAjw4f6Ci5uLaNA1\noHeqFxbRIlnLic1BtaoascGxHtodY4yxg8pZcYtNgV1+fj6+/vWv47777kNkZCQWFhawubmJtLQ0\nTE9PO7wJV/CmwM5gAC5eBNrarE80FQrq01tW5qFuICsrdNTa2UlHrzulpFAxRE6Ohy74OceKYQVN\n+iZ0jXfBLEqzkEeij6A2oxYJIQke2h1jjLGDzq1HscPDw7jvvvskz5RKJcw7j+mYxNoaJcC0WupH\nt52/P9UalJZSMsytRBEYGaGNXb5Mvei2k8uBEyfouDUpyc2bc6514zqa9c3QjmlhskireDMjM1Gb\nUYuUML5OwGzHd+wYY97MpsDu2LFj+N///V888MADd56dP38eJ0+edNnGfNniIrUs6e4GjEbpWkjI\n3ZYlAQFu3pjRCPT3U7Q5OWm9HhZG0WZhoQcb5DnHpmkTrSOtuDB6AVtm6RSM1LBUnM08C1WEyjOb\nY4wxxlzEpsDum9/8Jh566CE8+OCD2NzcxKc+9Sm88cYb+J//+R9X788h7m53MjVF9+f6+62TYFFR\ndH8uL4+OX91qcZGOWi9epMbCO6WnU3YuO5uKI3zYlnkL7aPtaBlpwaZJmiZNDElEbUYtsqKyrMba\nMWYrztYxxpzJY+1OxsbG8Nprr2F4eBhpaWl49NFHvboi1p137PR6qnC9ft16LTGRKlyPHXNzzHS7\nl0p7O3DtmnVzPKWSBsyq1UCC798tM5qN6BzvRLO+GWtG6V3BuOA41KhqkB2TzQEdY4wxr+TW4onb\nLBYLZmdnERsb6/V/Qbo6sBNFCuSam+m62k4ZGRTQZWa6uSPI1haV3mq1wG6FLRERFMwVFNBsMh9n\ntpjRPdmNxuFGLBuklSlRgVGoUdUgJy4HMsG3M5HMe/AdO8aYK7i1eGJhYQF///d/j9dffx1GoxFK\npRLvf//78d3vfhdRPjbY3VFmMx21trRYx02CQJm58nJqLuxW8/MUzPX0WFdqABRhlpQAhw/7/HEr\nAFhEC/qm+tCga8DC5oJkLdw/HFWqKuTF50Eu891KXsYYY2yvbMrY/dVf/RUUCgVefPFFpKWlQa/X\n47nnnsPW1pbX3rNzdsZua4uKIVpbgaUl6ZpcTnfnyspo/JfbiCKNrGhvBwYHrY9b/fyol0pxMRC7\nP3qziaKIgZkBaHQazK5LmwGG+IWgMr0ShYmFUMjcfZGRMcYYs59bj2LDw8MxMTGBoKCgO8/W19eR\nmJiIpZ1Rjpdw1hdofR3o6KDYaWfdgZ8f9estLaWCUrcxGCgzp9UCc3PW69HRdNyal+eB0lvXEEUR\n1+euo26oDlNrU5K1IGUQylPLoU5WQyn3zdFmjDHGDja3HsVmZ2dDp9Ph+PHjd54NDw8jOzvb4Q14\nq6Ul4MIFGpW6Je2WgeBgOtUsLnbzNbWZGYoye3qsNyUINIuspAQ4dMhnR33tJIoibi3cQt1QHcZW\npBMx/OX+KEstQ2lKKfwV/h7aITto+I4dY8yb2RTY1dbW4l3vehc++tGPIjU1FXq9Hq+99hoee+wx\n/OQnP4EoihAEAY8//rir9+tyMzN0f66vz7plSUQEHbcWFLhx5r3FAty4QSnDW7es1wMCaEPFxR4a\nXeE6+iU9zt86j+GlYclzpUyJ0pRSlKWWIVDp+wUgjDHGmLPYdBR7+6fT7ZWwt4O57err6527Owfs\nNaU5OkoVrlevWq/Fx1OFa06OG+sONjao71xHB/Wh2yk2lrJzubl0JryPjK+Mo26oDoPzg5LnCpkC\nRUlFqEirQIifu8d1MMYYY67j1qNYZzbOc6d3alB8u/aguZlavu2Unk4BXVaWG082p6YoO3fpkvXY\nCkGgJsJqNaBS7Zvj1tumVqdQr6vH1VlpdC0TZChMLERleiXC/N15mZExxhhzLY81KPY1bxf5Wiw0\nIrW5effJWkePUkCXmuriTW7f0NWrFNAND1uvBwbSDLKiIjoP3mfm1ueg0WnQP90PEXf/PxMgIDc+\nF9WqakQGRnpwh4zdxXfsGGOu4NaM3X5hNAK9vXSHbkHa+gwyGQ1iKC8H4uLctKG1NarO6OwElpet\n1xMS6Lj1xAk3Xupzn8XNRTToGtA71QuLKL3QmBObg2pVNWKD90ebFsYYY8wdDkTGbnOTrqpduECx\n1HZKJc28P33ajcmw8XHKzvX3U8fj7WQy4PhxOm5NTd13x60AsGJYQeNwIy5OXIRZlH7+o9FHUZNR\ng4QQ3x9zxhhjjNmKM3Y2+MY36hAZeQhTU+kwGKRrgYGUDFOrgW3t+VzHbKbz3/Z2qtTYKTiYjlpP\nnXJzUzz3WdtaQ8tIC7RjWpgsJslaZmQmajNqkRLmvfOHGWOMMW9nc8buypUr+PWvf42pqSl8//vf\nx9WrV7G1tYXc3FxX79EugiCgulqE0Xge+flZiIlJB0AxU1kZZencUky6skJHrV1dwOqq9XpKCkWX\nx48Div0ZZ2+aNtE60ooLoxewZZb230sNS8XZzLNQRag8sznG9ojv2DHGXMGtGbtf//rX+Lu/+zs8\n/PDD+PnPf47vf//7WFlZwZe+9CX86U9/cngTriKKgEJxFkNDdTh2LB3l5XSPTu7q8aGiSFm59nbK\n0u1siCeX0705tdoDQ2XdZ8u8hfbRdrSMtGDTJJ1fmxiSiNqMWmRFZVm1zWGMMcaYfWzK2GVnZ+OX\nv/wl8vPzERkZiYWFBRiNRiQmJmJ2dvad/rhHCIKAqioRYWFATo4GX/1qteuvq5lM1KZEqwUmJqzX\nQ0OpkfCpU3T0uk8ZzUZ0jneiWd+MNaP0UmNccBxqVDXIjsnmgI4xxhj7M7dm7GZmZnY9cpW5rVuv\nffLzgfBwID7e4tqgbmmJqjMuXrQeKAtQQzy1mnrQuTxd6Dlmixndk91o0DVgZWtFshYVGIUaVQ1y\n4nIgE7z73xvGGGPMV9kU2BUWFuJnP/sZPvaxj9159qtf/QpqtdplG3OGiAjAYDiPs2eznP/iokg9\n59rbqQfdzihboaCpEGo1tS3ZxyyiBX1TfWjQNWBhU9pHJtw/HFWqKuTF50Eu279BLTs4+I4dY8yb\n2RTYvfzyy7j//vvxH//xH1hfX8e73vUuXL9+HX/84x9dvT+HdHR8DB/84P+Ho0fPOu9Ft7ZokKxW\nC0xPW69HRNBxa0GBm8ptPUcURQzMDECj02B2XXokH+IXgsr0ShQmFkIh259FIYwxxpijPDZ5Ym1t\nDW+++SaGh4eRlpaG97znPQgNDXXaRpzNWWfVdywsUDDX3U2N8XbKzKTs3JEjbhwo6xmiKOL63HXU\nDdVham1KshakDEJ5ajnUyWoo5fuvqTJjjDHmCs6KWw5Eg2K73R4mq9UCN25YH7f6+QF5eRTQxe7/\nCQmiKOLWwi3UDdVhbGVMsuYv90dZahlKU0rhr/D30A4ZY4wx3+TW4onh4WH80z/9E7q7u7G6rReb\nIAi4fv26w5vwOgYD0NNDAd3cnPV6VBQFc/n5QECA+/fnAfolPc7fOo/hJeksW6VMidKUUpSlliFQ\nGeih3THmPnzHjjHmzWwK7N7//vfj2LFjePHFFxGwnwOZ2VkK5np66C7dTocPU0CXlbUvR33tZnxl\nHHVDdRicH5Q8V8gUKEoqQkVaBUL8Qjy0O8YYY4xtZ9NRbHh4OObn5yH3oVYdNqc0LRY6ZtVq6dh1\nJ39/KoQoLgaio52/US81tTqFel09rs5elTyXCTIUJhaiMr0SYf77c/QZY4wx5m5uPYp96KGH0NDQ\ngNraWoff0GtsbFAhREcHFUbsFBtL2bm8PDfNHvMOc+tz0Og06J/uh4i7/4IJEJAbn4tqVTUiAyM9\nuEPGGGOM3YtNGbvZ2VmcPn0aR44cQVxc3N0/LAj4yU9+4tIN2uueke/UFGXn+voAo3HnHwKOHqWA\nLiPjwBy3AsDi5iIadA3oneqFRZSOQMuJzUG1qhqxwfu/QISxd8J37BhjruDWjN3jjz8OPz8/HDt2\nDAEBAXfe3GdGQlks1ERYqwV0Ouv1wECgsJCOWyMi3L49T1oxrKBxuPH/Z+/O46Kq/v+Bv+6wzMAw\nIyMyrLIjI4iQiHvIklpqLpSKaQnuWIZLll8UXBAT+wQllms6bmCffFDhr7KUVfSjqEiZiooKKIoL\npqDIfn5/+GE+XtmR3ffz8eBRc8+5Z97nzsydt+ecOxdpt9NQwSp4ZXZ6dvCw9IChTuf+gWVCCCGk\ns2jQiJ1EIkFubi6k0o6zporjOMSFh8NaLof53bvPbvv1IkPDZ6Nzjo6Axqv1m2tPSp/g2I1jSM1N\nRXllOa/MSmYFT0tPmEpN2yg6Qggh5NXSqiN2vXv3Rn5+fodK7ADA8+BBxJWWAs7OMO/W7dlGgQDo\n2fNZQmdm9kpNtwJAcXkxjt84jhM3T6C0gn/lr1kXM3haesJC16JtgiOEEELIS2lQYufp6YkRI0bA\nz88PBgYGAKCaip0+fXqLBvhSKivhpa6O+OvXYW5uDri4AH37Ah0sQW0OpRWlOHnzJI7dOIbicv6d\nM4wlxvC09IS1zLrjTK8T0kZojR0hpD1rUGJ39OhRGBsb13hv2Pac2K3MyoK7kREErq7AwoWA+qt3\nz9KyijKcvnUaKTkpeFL2hFcmF8vhYeEBRTcFJXSEEEJIG2ize8V2NBzHgS1cCEiliJfL4TlvXluH\n1KoqKiuQdjsNydnJKCwt5JV11eoKDwsPOMgdIOA6931tCSGEkI6gxdfYPX/Va2VlZW3VIGjPN7yX\nShFXUgIbL6+2jqTVVLJK/HXnLyRmJeJh8UNeWRdhF7hbuMPJ0IkSOkIIIaQTqjWxk0qlKCx8NtKj\nXssUJsdxqKioqLGsPYiXy2Hj5QVzO7u2DqXFMcZw/t55JGYl4n7RfV6ZjqYO3Mzd0MeoD9QFr950\nNCHNidbYEULas1q/5c+fP6/6/2vXrrVKMM3tVZh+ZYzhcv5lxF+Px50nd3hl2hraGGI2BK7GrtBQ\ne7V+zoUQQgh5FTVojd2//vUvfPLJJ9W2h4eHY9GiRS0S2Mtqrrnq9ooxhmv/XEP89XjkFubyyoRq\nQgzqPggDTAdAqC5sowgJIYQQ0lDNlbc0+AeKq6ZlnyeTyfBPTfdZbQc6c2KX/TAb8dfjkf0om7dd\nQ6CBAaYDMKj7IGhpaLVRdIQQQghprFb5geL4+HgwxlBRUYH4+Hhe2dWrVzvcDxZ3dLkFuUjISkDm\ng0zednWBOvoa98UQsyHQ0dRpo+gIeTXQGjtCSHtWZ2I3ffp0cByHkpISzJgxQ7Wd4zgYGBggMjKy\nxQMkwJ3Hd5CQlYCM+xm87QJOgD5GfeBm7gapkJJsQggh5FXXoKnY999/H3v27GmNeJpNZ5iKzS/K\nR0JWAs7fPQ+G//WFA4feBr3hbuEOmZasDSMkhBBCSHNo1TV2HVFHTuweFj9EUlYS0vPSeQkdADjo\nO8Ddwh36Yv02io4QQgghza1V1tiR1lVYUojk7GSk3U5DBeP/PqCdnh08LD1gqGPYRtERQgBaY0cI\nad8osWsHnpQ+wbEbx5Cam4ryynJemZXMCp6WnjCVmrZRdIQQQgjpKGgqtg0Vlxfj+I3jOHHzBEor\nSnllZl3M4GnpCQtdi7YJjhBCCCGthqZiG2DlypVwd3dvd9MmpRWlOHnzJI7dOIbi8mJembHEGJ6W\nnrCWWavu1UsIIYSQzikxMRGJiYnN1h6N2LWisooynL51Gik5KXhS9oRXJhfL4WHhAUU3BSV0hLRj\ntMaOENISaMSuA6morEDa7TQkZyejsJR/B4+uWl3hYeEBB7kDBJygjSIkhBBCSGdAI3YtqJJV4q87\nfyExKxEPix/yyroIu8Ddwh1Ohk6U0BFCCCGvOBqxa8cYYzh/7zwSsxJxv+g+r0xHUwdu5m7oY9QH\n6gI6/IQQQghpPpRZNCPGGC7nX0b89XjceXKHV6atoY0hZkPgauwKDTWNNoqQEPKyaI0dIaQ9o8Su\nGTDGcO2fa4i/Ho/cwlxemVBNiEHdB2GA6QAI1YVtFCEhhBBCXgW0xu4lZT/MRvz1eGQ/yuZt1xBo\nYIDpAAzqPghaGlotHgchhBBCOi5aY9fGcgtykZCVgMwHmbzt6gJ1uBq7YojZEIg1xW0UHSGEEEJe\nRZTYNdKdx3eQkJWAjPsZvO0CToA+Rn3gZu4GqVDaRtERQloarbEjhLRnlNg1UH5RPhKyEnD+7nkw\n/G+olAMHJ0MnDDUfCpmWrA0jJIQQQsirjtbY1eNh8UMkZSUhPS+dl9ABgIO+AzwsPdBNu9tLPw8h\nhBBCXl20xq6FFZYUIjk7GWm301DBKnhldnp28LD0gKGOYRtFRwghhBBSHSV2L3hS+gTHbhxDam4q\nyivLeWVWMit4WnrCVGraRtERQtoarbEjhLRnlNj9V3F5MY7fOI4TN0+gtKKUV2bWxQyelp6w0LVo\nm+AIIYQQQhrglU/sSitKceLmCRy/cRzF5cW8MmOJMTwtPWEtswbHcW0UISFtr2vXrvjnn3/aOgxC\nCOnQZDIZHjx40KLP8cpePFFWUYbTt07jaM5RFJUV8crkYjk8LDyg6KaghI4QtN4PfhNCSGdW17mU\nLp5ooorKCqTdTkNydjIKSwt5ZV21usLDwgMOcgcIOEEbRUgIIYQQ0jSvTGJXySrx152/kJiViIfF\nD3llXYRd4G7hDidDJ0roCCGEENJhderEbuXKlRg6dCj0HfSRcD0B+U/zeeU6mjpwM3dDH6M+UBd0\n6kNBCCGEkHYoMTERiYmJzdZep15jt3z7cgi6CsDJ+OvktDW0McRsCFyNXaGhptFGERLScdAaO0II\neXmtscauU887HlU7irgzcbh/6z4AQKgmhIeFBwL6B2BQ90GU1BFCapWVlQWBQIDjx4+32nMKBAJE\nRUW1SNvu7u6YNWtWi7RNmsbS0hJr165t6zCazfjx47F+/fpG7zds2DBs2rSpBSKq2cqVK2Fra9tq\nz9faOnViBwDqNurIuZ6D181ex4IBCzDUYiiE6sK2DosQ0kp8fX3h5+cH4FnilJyc3MYR1S4vLw/v\nvPNOg+sLBAIkJSVBqVTC0tKyzrocx7X6Vf5r1qypN65X2enTp7Fw4cK2DqNZpKSkICUlBfPnz+dt\nz8nJgb+/P6ysrCASiWBqaoo333wTP//8s6rOihUrsGrVKhQV/e8XKqr+YVX1p6uriwEDBiA2NrbB\nMd28ebPdf+ZbQqdeWCbgBDCWGMNR3RFeVl5tHQ4hndalS9k4cuQqysoE0NCoxBtvWMPOzrxdtNcW\nCU1TyeXyRu/TUfrWUZWVlUFDo2Vmd/T09Fqk3ZaMuTZff/013nvvPWhpaam2paenw9PTE1ZWVoiI\niICDgwMqKioQFxeHhQsXwsPDA1KpFEOGDIFUKsX333+v+kdYldjYWPTr1w8PHjxAWFgY3nnnHRw7\ndgz9+vVrcGyv2jKSTj1i19+kP2y62kCiKWnrUAjptC5dyoZSmYl79zzx8KE77t3zhFKZiUuXsttF\ne3Wd1O/evQs/Pz8YGhpCS0sLCoUCO3furLX+smXLYG9vD7FYDDMzM/j7+6OgoEBVXlBQAD8/PxgZ\nGUEkEsHMzAyLFy9WlaekpGDw4MGQSqWQSqVwdnbGH3/8oSp/cSr28ePHWLBgAczMzCASiWBpaYnP\nP/+8ScehJpGRkVAoFNDS0kKPHj2wdu1aVFT8797YUVFR6N+/P3R1daGvr4/Ro0fjypUrvDbWrl0L\na2triEQiyOVyvPnmmyguLoZSqURwcDCys7NVoy6rV6+uMY6ysjIsWrQI3bt3h0gkgrGxMSZPnqwq\nZ4whKCgIcrkcEokEPj4+iIiI4CUvNU2vpaSkQCAQICcnBwDw8OFDTJ06Febm5tDW1oZCoUB4eDhv\nH19fXwwbNgyRkZGwsLCASCRCSUkJ7ty5A19fX8jlclUycvTo0Qb3oSYWFhYIDQ3lPV6xYgUCAgKg\np6cHQ0NDLFq0iPeavKhqZCsqKgojR46Ejo4OgoODAQD79++Hs7MztLS0YGlpicWLF/NGxZ4+fYrZ\ns2dDV1cXXbt2xccff4zAwMBGT1M+fvwYsbGxGD9+vGobYwzTpk1D9+7dkZqairFjx8LGxgZ2dnaY\nN28e/v77b4jFYlX98ePHY+/evdXa7tq1K+RyORQKBbZt2wahUIiff/4ZSUlJUFNTw82bN3n1d+/e\nDV1dXRQVFcHMzAwA4OHhAYFAACsrK17d2NhYKBQK6OjowMPDA5mZmbzyX3/9FfxJ8yAAACAASURB\nVC4uLhCJRDAwMMCHH37IO35V75WtW7fC3NwcXbp0wdixY3H37t1GHb/m1qlH7ITqQpRcKYGXB43W\nEdJSjhy5CqHQC/yLurzw11/xcHVt/ChbaupVFBXxP7Pu7l6Ii4tv0qhdbSNaT58+xdChQyEWixEV\nFQVra2tcvXoV9+/fr7UtbW1tbNu2Dd27d0dmZiY+/PBDfPzxx1AqlQCA5cuX4+zZs4iNjYWRkRFu\n3LiBCxcuAADKy8sxZswYTJ8+Hbt37wYA/P3339DW1q7xuRhjGD16NG7evImNGzeid+/eyM3NRUZG\nRrW+NWVUcuXKlVAqlfj666/h7OyMCxcuYO7cuSguLlYlYKWlpQgODoa9vT0KCgoQHByMUaNG4fz5\n89DQ0EBMTAzCwsIQFRUFJycn5OfnIykpCQDg4+ODS5cuYd++fTh9+jQA8L7InxcZGYkffvgB+/bt\ng5WVFfLy8nhrGzds2ICIiAhs2rQJAwcOxI8//ohVq1ZV63N9x6CkpASOjo745JNPIJPJkJKSgrlz\n56Jr167w9fVV1UtNTYVUKsXBgwchEAhQXl4ODw8PODg44NChQ9DV1cX+/fsxbNgwpKenQ6FQ1NuH\nmtT0ukVGRmLp0qVITU1FWloapkyZgl69emH69Ol1tvXZZ59h/fr12LRpExhjUCqVWLRoESIjIzF4\n8GDcuHEDH330Ee7du6d6/3322WeIjY3F3r17YWdnh507d2LTpk3Q19ev87ledPz4cZSXl8PV1VW1\n7c8//8S5c+ewd+9eCATVx5BefN/3798fGzZsqHO0UU1NDWpqaigrK8PQoUPRo0cP7NixQ5XIAsC2\nbdswZcoUaGtrIy0tDX369EFMTAwGDRoENTU1Vb3bt29j8+bNiI6OhpqaGqZPn47p06erpm3/+usv\njBkzBgEBAYiOjsa1a9cwZ84cFBYWqo4fAJw6dQpyuRy//fYbCgoK8N577+GTTz7h1Wl1rJMCwL75\n/huWcSWjrUMhpMOr61QREZHAVqxgbOhQ/t+IEc+2N/ZvxIiEam2tWPHseZrT9u3bmUgkYrm5uTWW\nX79+nXEcx44dO1ZrGzExMUwoFKoejx07lvn6+tZY98GDB4zjOJaYmFhrexzHsX379jHGGDty5Ajj\nOI6dOXOmId2pl7u7O5s1axZjjLEnT54wbW1t9vvvv/Pq7Nq1i+nq6tbaRn5+PuM4jh0/fpwxxlh4\neDjr0aMHKysrq7F+SEgIs7CwqDe2gIAA5unpWWu5iYkJW758OW/bu+++yzQ0NFSPV6xYwWxsbHh1\njh49yjiOY9nZ2bW2/fHHH7Nhw4apHk+bNo3JZDL25MkT1badO3cyU1NTVl5eztvXw8ODLViwoEF9\nqImFhQULDQ1VPTY3N2djx47l1XnrrbfY5MmTa22j6n26Zs0a3nZzc3O2ZcsW3rakpCTGcRx7+PAh\ne/z4MRMKhWzHjh28OgMGDGC2traN6kdkZCTT09Pjbfv+++8Zx3Hs7NmzDWrjzJkzjOM4duXKFV6/\nUlJSGGOMPX36lK1YsYJxHKd634aHhzNzc3NWWVnJGGPs4sWLjOM4lp6ezhhj7MaNG4zjOJaUlMR7\nrhUrVjB1dXV2//59XrwCgYCVlJQwxhibOnUq69+/P2+/n3/+mQkEApaTk8MYe/ZeMTAwYKWlpao6\nYWFhzMjIqNZ+1nUuba6UrFNPxc6bOA92NnZtHQYhnZqGRmWN29XUat5eH4Gg5v00NZvWXm3OnDkD\nBwcHGBsbN3ifmJgYuLm5wcTEBBKJBFOnTkVZWRny8vIAAPPmzcOBAwfg6OiIBQsW4NChQ6qpYJlM\nhpkzZ2LEiBEYOXIkwsLCcPny5Trjk8lk6NOnz8t1tAbnz5/H06dP4e3tDYlEovqbO3cuCgoKkJ//\n7Dc/09PTMX78eFhZWUEqlcLc/NmIaXb2s2nxSZMmoaysDObm5vDz88PevXvx+PHjRsfj5+eHc+fO\nwcbGBv7+/oiJiUFZWRmAZ9Pbt27dwqBBg3j7DB48uNFrpyorK7Fu3To4OztDX18fEokEW7ZsUU3V\nVunZsydvROnUqVPIy8uDrq4u73ilpKSopu/q6kNDcRwHZ2dn3jYjIyPcuXOn3n2fX3N279495OTk\nYOHChbx4R44cCY7jkJmZiczMTJSWlmLAgAG8dgYMGNDo4/ro0SNIJPwlT41tQyqVAng2Xf684cOH\nQyKRQEdHB99++y2++uorDB8+HAAwbdo03L17F7///jsAYPv27ejbty+cnJzqfT5jY2PeGkcjIyMw\nxlTTqBcuXICbmxtvHzc3NzDGVKPwAKBQKHgjjA19vVpSp56KJYS0vDfesIZSGQd39/9Nn5aUxMHX\n1wZ2Tfh31aVLz9oTCvnteXnZNEe4PI358jl58iQmTpyIwMBAfPnll5DJZPjPf/6DadOmobS0FMCz\nL6GcnBz8/vvvSExMxNSpU+Ho6Ii4uDgIBAJs3boVAQEB+OOPP3D48GEEBQVh48aNmD17drP3rS6V\nlc+S5AMHDqBHjx7VymUyGYqKijB8+HC4ublBqVTCwMAAjDE4ODio+mtsbIyMjAwkJCQgPj4eISEh\n+Oyzz3Dy5EmYmpo2OB4nJydcv34dhw8fRkJCAgICAhAUFIQTJ040uA2BQFDt9Xwxsfryyy+xbt06\nfPXVV3jttdcgkUgQHh6OX375hVfvxWnCyspK9OzZEz/99FO1562qW1cfXkx66qKpqcl7zHGc6vWq\ny/PT3FX1N2zYAA8Pj2p1TUxMVFP6zXHxja6uLgoL+bfotPvvh//8+fPVktWaPHr0SNXW85RKJVxc\nXFTrAJ/XtWtXvPvuu9i2bRu8vLywe/fuBv98TE3HGQDvWDfk/PDitHF7+M3PTj1iRwhpeXZ25vD1\ntYFcHg9d3UTI5fH/TeqadhVrc7dXm759++LChQvIzc1tUP2UlBR069YNq1evhqurK2xsbHDjxo1q\n9WQyGXx8fLB582b88ssvSEpKwsWLF1XlDg4OWLhwIX799VfMmDEDW7durfH5XFxc8M8//+DMmTNN\n62AdHBwcIBKJcPXqVVhZWVX7EwgEuHjxIu7fv4/Q0FC4ubnBzs4ODx48qPalpampiREjRiAsLAzn\nzp1DUVGR6qcsNDU161z4/zyxWIxx48bh66+/xunTp3Hx4kUkJydDKpXCxMQEx44d49U/duwYLymR\ny+W4e/cu74s5LS2Nt09ycjLeeust+Pr6wsnJCVZWVrh8+XK9yY2rqyuuXbsGiURS7VgZGhrW24fW\nZmBggO7duyMjI6PG11coFMLGxgaamprV1gGeOHGi0cmera0t/vnnH95orbOzMxwdHREWFlbje+Dx\n48e87dnZ2RAKhaoLHqqYmJjAysqqWlJXZc6cOTh48CA2b96M4uJi3gUrVclbQ9+Dz3NwcKj22iUl\nJYHjODg4OKi2tcer0mnEjhDy0uzszJs18Wru9moyefJkrF+/HmPGjMH69ethZWWFa9euIT8/HxMn\nTqxWX6FQ4N69e9ixYwfc3d2RkpJS7UdVly1bhr59+8Le3h4CgQB79+6FRCKBmZkZMjMzsW3bNowZ\nMwampqa4desWjh49ChcXlxrj8/Lywuuvv45JkyYhPDwcjo6OuHXrFjIyMjBjxoxG95cxpkrKdHR0\nEBgYiMDAQHAcBy8vL5SXl+PcuXNIT0/HunXrYG5uDqFQiA0bNmDRokXIysrC0qVLeV9k3333HRhj\ncHV1ha6uLuLi4lBYWAh7e3sAz36ANy8vDydOnICNjQ3EYjHv5zCqfPHFFzAxMYGTkxO0tbURHR0N\ndXV11Wji4sWLERQUBIVCgf79+yM2NhZxcXG8Njw9PVFUVITg4GD4+fkhLS0N3377La+OQqHAnj17\nkJiYCGNjY+zevRupqamQyWR1HrspU6YgIiICo0aNQmhoKGxtbXHnzh3Ex8fD3t4eY8eOrbcPtb0m\ndT1+GaGhoZgxYwZkMhnGjBkDDQ0NXLx4EYcOHcLmzZshFosxZ84cLF++HAYGBrC1tcWuXbtw8eJF\nGBgYqNr58ccf8X//93+Ij4+vddnCwIEDoa6ujlOnTvFGCJVKJby8vNC/f38EBQXB3t4eFRUVSEpK\nwvr163H27FnVFOyJEycwcODAaiNp9Rk8eDDs7OywZMkSTJs2jTdy2a1bN+jo6OD3339Hz549IRQK\n632tqyxZsgR9+vTBokWLMHv2bGRlZWH+/PmYOnUqbzS6rUfnatQsK/XaoU7cNUJaXWf9POXl5bEP\nPviAdevWjYlEItazZ0+2a9cuxtizxdsCgYB38URQUBAzMDBgYrGYjRo1ikVHRzOBQKBanB8SEsJ6\n9erFdHR0WJcuXZi7u7tq/9u3bzNvb29mamrKhEIhMzY2ZrNnz2YFBQWq9p+/eIIxxgoLC9n8+fOZ\nkZER09TUZJaWliwsLKxJfX3+4okq27dvZ87OzkwkEjGZTMYGDBjANm/erCo/cOAAs7W1ZSKRiPXp\n04clJSUxdXV11TGKiYlhgwYNYjKZjGlrazNHR0feYvyysjL23nvvsa5duzKO49iqVatqjG3Lli3M\nxcWFSaVSpqOjw/r168diY2NV5ZWVlSwwMJB169aNicViNmHCBBYREcHU1dV57ezYsYNZWVkxLS0t\nNnLkSLZ//37e6/Po0SM2ceJEJpVKmZ6eHvvoo49YUFAQs7S0VLXh6+vLu5iiSn5+PvP392cmJiZM\nU1OTmZiYMG9vb9VC/fr6UJMXL5548TFjjM2cOZN5eHjU2kZN79MqP/30Exs4cCDT1tZmUqmUOTs7\ns5CQEFX506dP2ezZs5lUKmW6urps3rx5LCAggDk6Oqrq7Ny5k3cMazNhwgQ2f/78atuzsrLYnDlz\nmIWFBdPU1GTGxsZs+PDhbP/+/bx6NjY27LvvvmtQv1701VdfMY7j2OnTp6uV7d69m1laWjJ1dXXV\n67xy5cpqF4gcPXq0Wj9//fVX5uLiwoRCIdPX12fz5s1jRUVFqvKa3it79uxhAoGg1ljrOpc213m2\nU98rtpN2jZBWR58n0t4olUrMmjWr0RcokLp5enpCT08PP/zwQ6P2O3bsGMaNG4fs7Oxaf8KnNkeP\nHsW7776LrKysGkd06/Ppp58iLi6uRZYtNLfWuFcsTcUSQgghr6C///4bZ86cwcCBA1FaWqqapj50\n6FCj2xo8eDBef/11fPPNN1iyZEmj9l29ejVWrVrV6KTu0aNHuHz5MrZt24bIyMhG7duZUWJHCCGk\nQ2qPC9c7Eo7jsHnzZgQEBPCu/K36OZHGiomJadJ+hw8fbtJ+Y8eORWpqKiZPnoypU6c2qY3OiKZi\nCSH1os8TIYS8vNaYiqWfOyGEEEII6SQosSOEEEII6SQosSOEEEII6SQosSOEEEII6SQosSOEEEII\n6SQosSOEEEII6SQosSOEkBpkZWVBIBBUu0l6SxIIBIiKimqRtt3d3TFr1qwWaZs0jaWlJdauXdvW\nYdSrJd+XpPlRYkcI6dR8fX3h5+cH4NkXVHJychtHVLu8vDy88847Da4vEAiQlJQEpVIJS0vLOuty\nHNfqP+i7Zs2aeuN6lZ0+fRoLFy5slrb+85//YPz48TA0NISWlhZsbGzw/vvv4+zZsw1uY+bMmfDw\n8GiWeEjbocSOENKptUVC01RyuRxCobBR+3SUvnVULXkvWj09vSbdG/VFO3fuhJubG0QiEaKiopCR\nkYHvv/8eFhYWCAgIaIZISUfSqRO7lStXIjExsa3DIKTTu5R5Cd98/w2+2v8Vvvn+G1zKvNRu2qvr\nl9zv3r0LPz8/1SiHQqHAzp07a62/bNky2NvbQywWw8zMDP7+/igoKFCVFxQUwM/PD0ZGRhCJRDAz\nM8PixYtV5SkpKRg8eDCkUimkUimcnZ3xxx9/qMpfnPJ6/PgxFixYADMzM4hEIlhaWuLzzz9v6qGo\nJjIyEgqFAlpaWujRowfWrl2LiooKVXlUVBT69+8PXV1d6OvrY/To0bhy5QqvjbVr18La2hoikQhy\nuRxvvvkmiouLoVQqERwcjOzsbAgEAggEAqxevbrGOMrKyrBo0SJ0794dIpEIxsbGmDx5sqqcMYag\noCDI5XJIJBL4+PggIiICGhoaqjorV66Era0tr92UlBQIBALk5OQAAB4+fIipU6fC3Nwc2traUCgU\nCA8P5+3j6+uLYcOGITIyEhYWFhCJRCgpKcGdO3fg6+sLuVwOqVSKIUOG4OjRow3uQ00sLCwQGhrK\ne7xixQoEBARAT08PhoaGWLRoEe81edGtW7fg7++PWbNmITo6Gp6enjA3N4eLiwtCQkJw8OBBAM+m\n4ufMmcPblzEGa2trrFmzBqtWrcKOHTuQlJSker12796tqvvo0SO8//77kEql6N69O9atW8drq7Cw\nEHPmzIFcLodIJIKrqyvvVmFVSxt++OEHjB49GmKxGNbW1ti1a1edx+hVkJiYiJUrVzZbe536XrHN\neaAIITW7lHkJygQlhLb/G2lSJijhC1/Y2di1eXu1jWg9ffoUQ4cOhVgsRlRUFKytrXH16lXcv3+/\n1ra0tbWxbds2dO/eHZmZmfjwww/x8ccfQ6lUAgCWL1+Os2fPIjY2FkZGRrhx4wYuXLgAACgvL8eY\nMWMwffp01Rfm33//DW1t7RqfizGG0aNH4+bNm9i4cSN69+6N3NxcZGRkVOtbU0YlV65cCaVSia+/\n/hrOzs64cOEC5s6di+LiYlUCVlpaiuDgYNjb26OgoADBwcEYNWoUzp8/Dw0NDcTExCAsLAxRUVFw\ncnJCfn4+kpKSAAA+Pj64dOkS9u3bh9OnTwMAxGJxjbFERkbihx9+wL59+2BlZYW8vDze2sYNGzYg\nIiICmzZtwsCBA/Hjjz9i1apV1fpc3zEoKSmBo6MjPvnkE8hkMqSkpGDu3Lno2rUrfH19VfVSU1Mh\nlUpx8OBBCAQClJeXw8PDAw4ODjh06BB0dXWxf/9+DBs2DOnp6VAoFPX2oSY1vW6RkZFYunQpUlNT\nkZaWhilTpqBXr16YPn16jW38+9//RmlpKZYvX15jeZcuXQAAc+fOxezZsxEeHq56HeLj45GTk4OZ\nM2dCIpHgypUryMrKUt3ztWpfAFi1ahVCQ0OxevVq/Pbbb/joo4/Qr18/eHp6AgCmT5+OM2fOYN++\nfTAzM8OmTZswevRo/PXXX7Cz+9/ndunSpQgLC8OGDRvw3XffYebMmRg0aFC1pPxV4u7uDnd3d6xa\ntap5GmSdVCfuGiGtrq7P08b9G9mKhBVs6M6hvL+RISPZioQVjf57K+Stam2tSFjBvvn+m2bt0/bt\n25lIJGK5ubk1ll+/fp1xHMeOHTtWaxsxMTFMKBSqHo8dO5b5+vrWWPfBgweM4ziWmJhYa3scx7F9\n+/Yxxhg7cuQI4ziOnTlzpiHdqZe7uzubNWsWY4yxJ0+eMG1tbfb777/z6uzatYvp6urW2kZ+fj7j\nOI4dP36cMcZYeHg469GjBysrK6uxfkhICLOwsKg3toCAAObp6VlruYmJCVu+fDlv27vvvss0NDRU\nj1esWMFsbGx4dY4ePco4jmPZ2dm1tv3xxx+zYcOGqR5PmzaNyWQy9uTJE9W2nTt3MlNTU1ZeXs7b\n18PDgy1YsKBBfaiJhYUFCw0NVT02NzdnY8eO5dV566232OTJk2ttw9/fv87XrEpxcTHT19dn27dv\nV23z8fFh48aNUz2eMWMGc3d3r7Yvx3EsICCAt61nz57s//7v/xhjjF25coVxHMd+++03Xp0+ffqw\n6dOnM8b+93mKiIhQlVdUVDCJRMK2bt1ab/ydRV3n0ubKWzr1VCwhpOWVsZrXIFWg9umjulSissbt\npZWlTWqvNmfOnIGDgwOMjY0bvE9MTAzc3NxgYmICiUSCqVOnoqysDHl5eQCAefPm4cCBA3B0dMSC\nBQtw6NAh1VSwTCbDzJkzMWLECIwcORJhYWG4fPlynfHJZDL06dPn5Tpag/Pnz+Pp06fw9vaGRCJR\n/c2dOxcFBQXIz88HAKSnp2P8+PGwsrKCVCqFubk5ACA7OxsAMGnSJJSVlcHc3Bx+fn7Yu3cvHj9+\n3Oh4/Pz8cO7cOdjY2MDf3x8xMTGqtW0FBQW4desWBg0axNtn8ODBjb5hemVlJdatWwdnZ2fo6+tD\nIpFgy5YtqqnaKj179uSNpJ46dQp5eXnQ1dXlHa+UlBRkZmbW24eG4jgOzs7OvG1GRka4c+dOrfsw\nxhp0HIRCIXx9fbFt2zYAQH5+Pn766acGXyn9YlzGxsa4e/cuAKhGpd3c3Hh13NzccP78+VrbEQgE\nkMvldfaPNB4ldoSQl6LBadS4XQ1qTWpPUMtpSVOg2aT26tKYxODkyZOYOHEi3N3d8dNPP+Hs2bPY\nvHkzGGMoLX2WdA4fPhw5OTlYtmwZiouLMXXqVHh6eqKy8lmyunXrVpw5cwbDhg1DUlISevXqha1b\ntzZ7v+pTFc+BAwfw559/qv7+/vtvXLlyBTKZDEVFRRg+fDjU1NSgVCpx6tQpnDp1ChzHqfprbGyM\njIwM7NixA3K5HCEhIbCzs8PNmzcbFY+TkxOuX7+Of/3rX9DU1ERAQACcnZ1RWFjY4DYEAkG11/PF\nxOrLL7/EunXrsGDBAhw5cgR//vknZs6ciZKSEl69F6fHKysr0bNnT96x+vPPP5GRkaFKlJqjDwCg\nqcl/n3Mcp3q9aqJQKFBQUIDc3Nx6254zZw5OnTqFc+fOYc+ePZDL5XjrrbeaFBeAOuMCav58NbZ/\npPE69Ro7QkjLe8PlDSgTlHC3dVdtK7lSAl+fJq6xM62+xq7kSgm8PLyaI1yVvn37YufOncjNzYWJ\niUm99VNSUtCtWzfeBQD//ve/q9WTyWTw8fGBj48P/Pz8MHDgQFy8eBEODg4AAAcHBzg4OGDhwoXw\n9/fH1q1bMXv27GrtuLi44J9//sGZM2fg4uLyEj2tzsHBASKRCFevXsWbb75ZY52LFy/i/v37CA0N\nVa2ROn78eLUva01NTYwYMQIjRoxASEgIDAwM8PPPP+PDDz+EpqZmnQv/nycWizFu3DiMGzcOgYGB\nMDIyQnJyMkaNGgUTExMcO3aMl4QcO3aMtz5NLpfj7t27qKyshEDw7B8HaWlpvOdITk7GW2+9xVtP\nd/ny5XrX5rm6umLPnj2QSCTQ19dvUh9ayoQJE7B06VKsWbMGmzZtqlb+zz//QCaTAQCsra3h6emJ\nbdu2ISEhAdOnT+f1vTGv1/P7Vb23k5KSeK9RcnJys793Sf0osSOEvBQ7Gzv4whdxaXEorSyFpkAT\nXh5eTUrqWqK92kyePBnr16/HmDFjsH79elhZWeHatWvIz8/HxIkTq9VXKBS4d+8eduzYAXd3d6Sk\npFT7Il22bBn69u0Le3t7CAQC7N27FxKJBGZmZsjMzMS2bdswZswYmJqa4tatWzh69GitX3xeXl54\n/fXXMWnSJISHh8PR0RG3bt1CRkYGZsyY0ej+Pj9lp6Ojg8DAQAQGBoLjOHh5eaG8vBznzp1Deno6\n1q1bB3NzcwiFQmzYsAGLFi1CVlYWli5dyvtC/+6778AYg6urK3R1dREXF4fCwkLY29sDePYDvHl5\neThx4gRsbGwgFotr/HmPL774AiYmJnBycoK2tjaio6Ohrq6OHj16AAAWL16MoKAgKBQK9O/fH7Gx\nsYiLi+O14enpiaKiIgQHB8PPzw9paWn49ttveXUUCgX27NmDxMREGBsbY/fu3UhNTVUlPrWZMmUK\nIiIiMGrUKISGhsLW1hZ37txBfHw87O3tMXbs2Hr7UNtrUtfjhjA2NsbGjRsxZ84cPHz4ELNmzYKV\nlRUePHiAn3/+GYmJiaoLWoBno3ZTpkxBZWUlZs6cyWvLysoKBw4cwIULF1RX/9Y0UlcVa1W81tbW\nmDBhAubNm4ctW7aoLp64cOEC9u/fX2f8TekzqUezrNRrhzpx1whpdZ3185SXl8c++OAD1q1bNyYS\niVjPnj3Zrl27GGPPFnsLBALexRNBQUHMwMCAicViNmrUKBYdHc0EAoFqcX5ISAjr1asX09HRYV26\ndGHu7u6q/W/fvs28vb2ZqakpEwqFzNjYmM2ePZsVFBSo2n/+4gnGGCssLGTz589nRkZGTFNTk1la\nWrKwsLAm9fX5iyeqbN++nTk7OzORSMRkMhkbMGAA27x5s6r8wIEDzNbWlolEItanTx+WlJTE1NXV\nVccoJiaGDRo0iMlkMqatrc0cHR3Zjh07VPuXlZWx9957j3Xt2pVxHMdWrVpVY2xbtmxhLi4uTCqV\nMh0dHdavXz8WGxurKq+srGSBgYGsW7duTCwWswkTJrCIiAimrq7Oa2fHjh3MysqKaWlpsZEjR7L9\n+/fzXp9Hjx6xiRMnMqlUyvT09NhHH33EgoKCmKWlpaoNX19f3sUUVfLz85m/vz8zMTFhmpqazMTE\nhHl7e7P09PQG9aEmL1488eJjxhibOXMm8/DwqLMdxhhLSUlh48aNY3K5nAmFQmZlZcV8fHzYyZMn\nefXKysqYXC5no0ePrtbGgwcP2MiRI1mXLl0Yx3Gq1/nF9yVjjL3xxhvMz89P9bigoIDNmTOH6evr\nM6FQyFxdXdnhw4dV5TV9nhhjzMbGptb3RWdU17m0uc6z3H8b63Q4jqN/CRDSTOjzRNobpVKJWbNm\ntegPCHdG+fn56N69O77//nu8/fbbbR3OK6euc2lznWfp4glCCCGkkysvL0deXh6WLVsGU1NTSuo6\nMUrsCCGEdEh0O7WGS0lJgbGxMY4cOUJ3e+jkaCqWEFIv+jwRQsjLo6lYQgghhBDSYJTYEUIIIYR0\nEpTYEUIIIYR0EpTYEUIIIYR0EpTYEUIIIYR0EpTYEUIIIYR0EpTYEUIIIYR0EpTYEUJIDbKysiAQ\nCHD8+PFWe06BQICoqKgWadvd3R2zZs1qkbZJ01haWmLt2rVtHUazWLlygFt3vgAAG25JREFUJWxt\nbds6DAJK7AghnZyvry/8/PwAPEuckpOT2zii2uXl5eGdd95pcH2BQICkpCQolUpYWlrWWZfjuFa/\nU8OaNWvqjetVdvr0aSxcuPCl2xEIBFBXV8fff//N207H/9Wk3tYBEEI6vuxLl3D1yBEIyspQqaEB\n6zfegLmdXbtory0SmqaSy+WN3qej9K2jKisrg4aGRou0raen12xtCYVCLFmyBL/99luztUk6Jhqx\nI4S8lOxLl5CpVMLz3j24P3wIz3v3kKlUIvvSpXbRXl236Ll79y78/PxgaGgILS0tKBQK7Ny5s9b6\ny5Ytg729PcRiMczMzODv74+CggJVeUFBAfz8/GBkZASRSAQzMzMsXrxYVZ6SkoLBgwdDKpVCKpXC\n2dkZf/zxh6r8xanYx48fY8GCBTAzM4NIJIKlpSU+//zzJh2HmkRGRkKhUEBLSws9evTA2rVrUVFR\noSqPiopC//79oaurC319fYwePRpXrlzhtbF27VpYW1tDJBJBLpfjzTffRHFxMZRKJYKDg5GdnQ2B\nQACBQIDVq1fXGEdZWRkWLVqE7t27QyQSwdjYGJMnT1aVM8YQFBQEuVwOiUQCHx8fRERE8BKumqYC\nU1JSIBAIkJOTAwB4+PAhpk6dCnNzc2hra0OhUCA8PJy3j6+vL4YNG4bIyEhYWFhAJBKhpKQEd+7c\nga+vL+RyOaRSKYYMGYKjR482uA81sbCwQGhoKO/xihUrEBAQAD09PRgaGmLRokW816Q28+fPx+HD\nh3HkyJFa6zTkGCmVSmhoaCAxMRGOjo7Q1taGp6cn8vLykJCQAGdnZ+jo6GDYsGG4detWteeIioqC\nlZUVtLS0MHz4cGRnZ6vKrl+/Dm9vb5iYmEAsFqN3797Yu3dvvX0jjUMjdoSQl3L1yBF4CYVAYqJq\nmxeA+L/+grmra+PbS02FV1ERb5uXuzvi4+KaNGpX24jW06dPMXToUIjFYkRFRcHa2hpXr17F/fv3\na21LW1sb27ZtQ/fu3ZGZmYkPP/wQH3/8MZRKJQBg+fLlOHv2LGJjY2FkZIQbN27gwoULAIDy8nKM\nGTMG06dPx+7duwEAf//9N7S1tWt8LsYYRo8ejZs3b2Ljxo3o3bs3cnNzkZGRUa1vTRmVXLlyJZRK\nJb7++ms4OzvjwoULmDt3LoqLi1UJWGlpKYKDg2Fvb4+CggIEBwdj1KhROH/+PDQ0NBATE4OwsDBE\nRUXByckJ+fn5SEpKAgD4+Pjg0qVL2LdvH06fPg0AEIvFNcYSGRmJH374Afv27YOVlRXy8vJ4axs3\nbNiAiIgIbNq0CQMHDsSPP/6IVatWVetzfcegpKQEjo6O+OSTTyCTyZCSkoK5c+eia9eu8PX1VdVL\nTU2FVCrFwYMHIRAIUF5eDg8PDzg4OODQoUPQ1dXF/v37MWzYMKSnp0OhUNTbh5rU9LpFRkZi6dKl\nSE1NRVpaGqZMmYJevXph+vTpdbbl6OgIX19fLFmyBGlpabUei4a8TyorK7F69Wrs2LED6urqmDRp\nEiZMmACBQICtW7dCKBTCx8cHixYtwv79+1X73b59G5s3b8aBAwdQWVmJjz76CN7e3jhz5gwA4MmT\nJ3jjjTewatUq6Ojo4JdffoGfnx9MTU3h7u5eb1ykYSixI4S8FEFZWc3bGzDKUON+lZU1by8tbVJ7\nz4/AVT7XdlRUFLKysnD16lUYGxsDAMzNzetsa9myZar/NzMzw9q1azF58mRVYpeTk4PXXnsNrv9N\naE1NTTFw4EAAQGFhIR4+fIi3334b1tbWAKD6b03i4+ORnJyM06dPo0+fPgCejegMHjxYVadqJMfN\nzQ3Tpk2r+0A8p6ioCF988QV+/PFHDB8+XNX3kJAQBAQEqBK755Md4Nmx7NatG06fPo2BAwciOzsb\nhoaGGDFiBNTV1WFqagonJydVfbFYDDU1tXqnmHNyctCjRw+4ubkBeHbc+vbtqyr/4osvsHDhQrz/\n/vsAgCVLliA1NRU///wzr536bqBuYGCAzz77TPXY3NwcqampiIqK4vVVTU0Ne/bsUSXdSqUShYWF\n2L9/P9TU1AAAgYGBOHLkCLZs2YKIiIh6+9BQbm5u+PTTTwE8e3/s3LkTR44cqTex4zgOISEhsLW1\nxa5du6q9dlUacpN5xhi++uor9O7dGwAwe/ZsfPrppzhz5gxee+01AMCcOXN4o43As/eVUqmElZUV\nAGDPnj2ws7NDfHw8PD090atXL/Tq1UtV/6OPPsKRI0cQFRVFiV0zoqlYQshLqaxl/VHlf78AG92e\noObTUqWmZpPaq82ZM2fg4OCgSuoaIiYmBm5ubjAxMYFEIsHUqVNRVlaGvLw8AMC8efNw4MABODo6\nYsGCBTh06JDqi1Qmk2HmzJkYMWIERo4cibCwMFy+fLnO+GQymSqpa07nz5/H06dP4e3tDYlEovqb\nO3cuCgoKkJ+fDwBIT0/H+PHjYWVlBalUqkp8q6bXJk2ahLKyMpibm8PPzw979+7F48ePGx2Pn58f\nzp07BxsbG/j7+yMmJgZl//0HQ0FBAW7duoVBgwbx9hk8eHCDkpTnVVZWYt26dXB2doa+vj4kEgm2\nbNmimoas0rNnT95I6qlTp5CXlwddXV3e8UpJSUFmZma9fWgojuPg7OzM22ZkZIQ7d+40aH8jIyMs\nXrwYQUFBKC4ubtRzvxiHo6Oj6rGBgQEAqBK9qm35+fm810BfX1+V1AGAra0tunXrphq1LioqwtKl\nS9GrVy/o6elBIpHg119/rXb8ycuhETtCyEuxfuMNxCmV8HruX9xxJSWw8fUFmjB1an3p0rP2hEJ+\ne15ezRAtX2MSg5MnT2LixIkIDAzEl19+CZlMhv/85z+YNm0aSv87mjh8+HDk5OTg999/R2JiIqZO\nnQpHR0fExcWpprECAgLwxx9/4PDhwwgKCsLGjRsxe/bsZu9bXapGLg8cOIAePXpUK5fJZCgqKsLw\n4cPh5uYGpVIJAwMDMMbg4OCg6q+xsTEyMjKQkJCA+Ph4hISE4LPPPsPJkydhamra4HicnJxw/fp1\nHD58GAkJCQgICEBQUBBOnDjR4DYEAkG11/PFxOrLL7/EunXr8NVXX+G1116DRCJBeHg4fvnlF169\nF6fHKysr0bNnT/z000/Vnreqbl19kEgkDe6H5gv/gOE4jjfSXJ9PP/0U27Ztw5dffllt2rUhx6iq\n3vP7Vv2/2nP/WKvaxhhr8DKAJUuWIDY2FhEREbCzs4O2tjYWL17MW6dKXh6N2BFCXoq5nR1sfH0R\nL5cjUVcX8XI5bHx9m3wVa3O3V5u+ffviwoULyM3NbVD9lJQUdOvWDatXr4arqytsbGxw48aNavVk\nMhl8fHywefNm/PLLL0hKSsLFixdV5Q4ODli4cCF+/fVXzJgxA1u3bq3x+VxcXPDPP/+o1ic1JwcH\nB4hEIly9ehVWVlbV/gQCAS5evIj79+8jNDQUbm5usLOzw4MHD6olBpqamhgxYgTCwsJw7tw5FBUV\nqaZINTU1G7TwH3g2bTtu3Dh8/fXXOH36NC5evIjk5GRIpVKYmJjg2LFjvPrHjh3jJRRyuRx3797l\nJUFpaWm8fZKTk/HWW2/B19cXTk5OsLKywuXLl+tNTFxdXXHt2jVIJJJqx8rQ0LDePrQmsViMVatW\nYf369dVG+hpyjF7GvXv3cO3aNdXjy5cv4/79+7C3twfw7PhPnToV7777LhwdHWFpaYlLTbwoitSO\nRuwIIS/N3M6uWROv5m6vJpMnT8b69esxZswYrF+/HlZWVrh27Rry8/MxceLEavUVCgXu3buHHTt2\nwN3dHSkpKdi0aROvzrJly9C3b1/Y29tDIBBg7969kEgkMDMzQ2ZmJrZt24YxY8bA1NQUt27dwtGj\nR+Hi4lJjfF5eXnj99dcxadIkhIeHw9HREbdu3UJGRgZmzJjR6P4yxlRJmY6ODgIDAxEYGAiO4+Dl\n5YXy8nKcO3cO6enpWLduHczNzSEUCrFhwwYsWrQIWVlZWLp0KS8J+u6778AYg6urK3R1dREXF4fC\nwkLVF7mlpSXy8vJw4sQJ2NjYQCwWQ0tLq1psX3zxBUxMTODk5ARtbW1ER0dDXV1dNZpYNb2oUCjQ\nv39/xMbGIi4ujteGp6cnioqKEBwcDD8/P6SlpeHbb7/l1VEoFNizZw8SExNhbGyM3bt3IzU1FTKZ\nrM5jN2XKFERERGDUqFEIDQ2Fra0t7ty5g/j4eNjb22Ps2LH19qG216Sux001Y8YMfP311/juu+94\n6xsbcoxehra2Nvz8/BAeHg7GGObPn4/XXnsNnp6eAJ4d/59++gne3t4Qi8UIDw/H7du3YWRk1Gwx\nEACsk+rEXSOk1XXWz1NeXh774IMPWLdu3ZhIJGI9e/Zku3btYowxdv36dSYQCNixY8dU9YOCgpiB\ngQETi8Vs1KhRLDo6mgkEApadnc0YYywkJIT16tWL6ejosC5dujB3d3fV/rdv32be3t7M1NSUCYVC\nZmxszGbPns0KCgpU7XMcx/bt26d6XFhYyObPn8+MjIyYpqYms7S0ZGFhYU3qq7u7O5s1axZv2/bt\n25mzszMTiURMJpOxAQMGsM2bN6vKDxw4wGxtbZlIJGJ9+vRhSUlJTF1dXXWMYmJi2KBBg5hMJmPa\n2trM0dGR7dixQ7V/WVkZe++991jXrl0Zx3Fs1apVNca2ZcsW5uLiwqRSKdPR0WH9+vVjsbGxqvLK\nykoWGBjIunXrxsRiMZswYQKLiIhg6urqvHZ27NjBrKysmJaWFhs5ciTbv38/7/V59OgRmzhxIpNK\npUxPT4999NFHLCgoiFlaWqra8PX1ZcOGDasWY35+PvP392cmJiZMU1OTmZiYMG9vb5aent6gPtTE\nwsKChYaG1vqYMcZmzpzJPDw86mznxfcNY4z98ssvjOM4Xt8acox27tzJNDQ0ePvs2bOHCQQC3raq\n935FRQVjjLGVK1cyW1tbtm/fPmZhYcFEIhF74403WFZWlmqfGzdusBEjRjCxWMyMjIzYypUr2YwZ\nM+rtX2dS17m0uc6z3H8b63Q4jmu2f/0Q8qqjzxNpb5RKJWbNmtXoCxQIaUt1nUub6zxLa+wIIYQQ\nQjoJSuwIIYR0SHQ7NUKqo6lYQki96PNECCEvj6ZiCSGEEEJIg1FiRwghhBDSSVBiRwghhBDSSVBi\nRwghhBDSSXS4O0+kpqZiwYIF0NDQgImJCXbv3g119Q7XDUI6FJlMRlcgEkLIS6rvLifNocNdFZuX\nlweZTAahUIjAwEC4uLjgnXfeqVaPruIjhBBCSEfxyl4Va2hoCKFQCADQ0NCAmppaG0dECHmVJCYm\ntnUIhBBSqw6X2FXJzs7G4cOH8fbbb7d1KISQV0h6enpbh0AIIbVq1cRu48aN6Nu3L0QiEfz8/Hhl\nDx48wPjx46GjowMLCwtER0eryiIiIuDh4YEvv/wSAFBQUIAPPvgAu3btohE7QkirevjwYVuHQAgh\ntWrVxM7ExARBQUGYPn16tbIPP/wQIpEId+/exb59++Dv748LFy4AABYuXIiEhAQsXrwY5eXl8PHx\nwYoVK2Bra9ua4b/SOsP0U3vqQ2vG0lLP1ZztvmxbTd2/Pb0nXlWd4TVoT32gc0vzttURzy2tmtiN\nHz8eY8eOhZ6eHm/7kydPEBMTg5CQEGhra2Pw4MEYO3Ys9uzZU62N6OhopKamIiQkBB4eHvj3v//d\nWuG/0trTiaup2lMf6OTbvG215sk3KyurSc9FataePpdN1Z76QOeW5m2rIyZ2bXJV7PLly5Gbm4ud\nO3cCAM6ePYshQ4bgyZMnqjrh4eFITExEbGxsk57DxsYGV69ebZZ4CSGEEEJakrW1NTIzM1+6nTb5\nAbgXfw/r8ePHkEqlvG0SiQSFhYVNfo7mODiEEEIIIR1Jm1wV++IgoY6ODgoKCnjbHj16BIlE0pph\nEUIIIYR0aG2S2L04YtejRw+Ul5fzRtn+/PNP9OrVq7VDI4QQQgjpsFo1sauoqEBxcTHKy8tRUVGB\nkpISVFRUQCwWw9vbG8HBwSgqKkJKSgoOHjyI999/vzXDI4QQQgjp0Fo1sau66jUsLAx79+6FlpYW\nQkNDAQDffvstnj59CrlcjqlTp2Lz5s3o2bNna4ZHCCGEENKhdbh7xb6M1NRULFiwABoaGjAxMcHu\n3buhrt4m148QQjqRO3fuwNvbG5qamtDU1ERUVFS1n3UihJCmio6ORkBAAO7evVtv3VcqscvLy4NM\nJoNQKERgYCBcXFzwzjvvtHVYhJAOrrKyEgLBswmQXbt24fbt21i6dGkbR0UI6QwqKiowYcIE5OTk\n4PTp0/XW77D3im0KQ0NDCIVCAICGhgbdjowQ0iyqkjrg2S0PZTJZG0ZDCOlMoqOjMXHixGoXntbm\nlUrsqmRnZ+Pw4cN4++232zoUQkgn8eeff6J///7YuHEjJk+e3NbhEEI6gYqKCvzwww+YNGlSg/fp\nkIndxo0b0bdvX4hEIvj5+fHKHjx4gPHjx0NHRwcWFhaIjo7mlRcUFOCDDz7Arl27aMSOEMLzMucW\nJycnnDx5EmvWrEFISEhrhk0Iaeeaem7Zu3dvo0brgDa688TLMjExQVBQEH7//Xc8ffqUV/bhhx9C\nJBLh7t27OHv2LEaNGgUnJyfY29ujvLwcPj4+WLFiBWxtbdsoekJIe9XUc0tZWRk0NDQAAFKpFCUl\nJW0RPiGknWrqueXixYs4e/Ys9u7diytXrmDBggX46quv6nyuDn3xRFBQEG7evKm65+yTJ0/QtWtX\nnD9/HjY2NgCAadOmwdjYGJ9//jn27NmDhQsXwtHREQDg7++PiRMntln8hJD2qbHnltTUVCxZsgRq\namrQ0NDAd999B1NT07bsAiGkHWrsueV5/fr1Q2pqar3P0SFH7Kq8mJNevnwZ6urqqoMDPJseSUxM\nBAC8//779KPHhJB6Nfbc0q9fPyQlJbVmiISQDqix55bnNSSpAzroGrsqL845P378GFKplLdNIpGg\nsLCwNcMihHRwdG4hhLSE1ji3dOjE7sXMV0dHBwUFBbxtjx49gkQiac2wCCEdHJ1bCCEtoTXOLR06\nsXsx8+3RowfKy8uRmZmp2vbnn3+iV69erR0aIaQDo3MLIaQltMa5pUMmdhUVFSguLkZ5eTkqKipQ\nUlKCiooKiMVieHt7Izg4GEVFRUhJScHBgwdpXR0hpEHo3EIIaQmtem5hHdCKFSsYx3G8v1WrVjHG\nGHvw4AEbN24cE4vFzNzcnEVHR7dxtISQjoLOLYSQltCa55YO/XMnhBBCCCHkfzrkVCwhhBBCCKmO\nEjtCCCGEkE6CEjtCCCGEkE6CEjtCCCGEkE6CEjtCCCGEkE6CEjtCCCGEkE6CEjtCCCGEkE6CEjtC\nCCGEkE6CEjtCCHmBr68vgoKCmrVNf39/rFmzplnbJISQF6m3dQCEENLecBxX7WbdL2vTpk3N2h4h\nhNSERuwIIaQGdLdFQkhHRIkdIaRdCQsLg6mpKaRSKRQKBeLj4wEAqampGDhwIGQyGYyNjTF//nyU\nlZWp9hMIBNi0aRNsbW0hlUoRHByMq1evYuDAgdDV1YWPj4+qfmJiIkxNTfH5559DX18flpaWiIqK\nqjWm//f//h+cnZ0hk8kwePBgnDt3rta6CxcuhIGBAbp06YLevXvjwoULAPjTu2+//TYkEonqT01N\nDbt37wYAZGRkYNiwYdDT04NCocAPP/xQ63O5u7vj/7dzfyFNfnEcx9/Tyk1s4SjmEnSFFQhBFHUR\nUYRESFIQ9MfI/lBuUHZZIYMKQiIysAuj8qYg3LLL8qJBUewircGCKG12s4rCasl8pjAfmL+L6ME5\nA3/wg5/Mzwse2OH5nuf8ufruHM65cOECW7Zswel0snPnTpLJ5CxnWkQKkRI7EZkzPnz4QGdnJ9Fo\nlNHRUcLhMF6vF4AFCxZw48YNkskkL1++5OnTp9y8eTOnfjgcJhaL0dfXx9WrV2lubiYYDPLp0yfe\nvn1LMBi0YoeHh0kmk3z9+pV79+7h8/kYGhrK61MsFuPEiRN0dXXx69cv/H4/u3fvZmJiIi/2yZMn\nRCIRhoaGSKVSPHz4EJfLBeRu7z569AjDMDAMg56eHjweD3V1dYyNjbFjxw4OHz7Mjx8/CIVCnDp1\nioGBgb/OWTAY5O7du3z//p2JiQna29v/9byLSOFQYicic0ZxcTGZTIZ3795hmiZVVVWsXLkSgPXr\n17Np0yaKioqorq7G5/Px4sWLnPrnzp2jrKyM2tpa1q5dS319PV6vF6fTSX19PbFYLCf+8uXLLFy4\nkK1bt7Jr1y4ePHhgvfuThN25cwe/38/GjRux2WwcOXKEkpIS+vr68vq/aNEiDMNgYGCAbDbLmjVr\nqKiosN5P396Nx+McO3aMnp4eKisrefz4MStWrODo0aMUFRWxbt069u7d+9dVO5vNxvHjx6mpqcFu\nt7N//37evHnzL2ZcRAqNEjsRmTNqamro6Ojg0qVLuN1uGhsb+fbtG/A7CWpoaMDj8bBkyRICgUDe\ntqPb7bZ+OxyOnLLdbiedTlvl8vJyHA6HVa6urrbamiqRSHD9+nXKy8ut58uXLzPGbt++nZaWFk6f\nPo3b7cbv92MYxoxjTaVS7Nmzh7a2NjZv3my11d/fn9NWd3c3w8PDf52zqYmjw+HIGaOIzD9K7ERk\nTmlsbCQSiZBIJLDZbJw/fx74fV1IbW0tHz9+JJVK0dbWRjabnfV3p59yHRkZYXx83ConEgmWL1+e\nV6+qqopAIMDIyIj1pNNpDhw4MGM7Z86cIRqN8v79e+LxONeuXcuLyWazHDp0iLq6Ok6ePJnT1rZt\n23LaMgyDzs7OWY9TROY3JXYiMmfE43GePXtGJpOhpKQEu91OcXExAOl0msWLF1NaWsrg4OCsrg+Z\nuvU50ynXixcvYpomkUiE3t5e9u3bZ8X+iW9ububWrVu8evWKyclJxsbG6O3tnXFlLBqN0t/fj2ma\nlJaW5vR/avuBQIDx8XE6Ojpy6jc0NBCPx7l//z6maWKaJq9fv2ZwcHBWYxQRUWInInNGJpOhtbWV\nZcuW4fF4+PnzJ1euXAGgvb2d7u5unE4nPp+PgwcP5qzCzXTv3PT3U8sVFRXWCdumpiZu377N6tWr\n82I3bNhAV1cXLS0tuFwuVq1aZZ1gnW50dBSfz4fL5cLr9bJ06VLOnj2b981QKGRtuf45GRsMBikr\nKyMcDhMKhaisrMTj8dDa2jrjQY3ZjFFE5h/bpP7uicg88/z5c5qamvj8+fP/3RURkf+UVuxERERE\nCoQSOxGZl7RlKSKFSFuxIiIiIgVCK3YiIiIiBUKJnYiIiEiBUGInIiIiUiCU2ImIiIgUCCV2IiIi\nIgXiHzlDZFWOcLMWAAAAAElFTkSuQmCC\n", "text": [ - "\n" + "" ] } ], - "prompt_number": 10 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "The timing above indicates that the \"classic\" approach (Python's standard library functions only) is significantly worse in performance than the other implemenations - roughly by a magnitude of 10. However, we should keep in mind that this experiment was done for a fixed sample size n=500." - ] + "prompt_number": 22 }, { "cell_type": "markdown", "metadata": {}, "source": [ + "\n", "
\n", - "
\n", - "" + "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Compiling the Python code via Cython in the IPython notebook" + "# Performance growth rates: NumPy and SciPy library functions" ] }, { @@ -738,289 +867,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Maybe we can speed things up a little bit via [Cython's C-extensions for Python](http://cython.org). Cython is basically a hybrid between C and Python and can be pictured as compiled Python code with type declarations. \n", - "Since we are working in an IPython notebook here, we can make use of the very convenient *IPython magic*: It will take care of the conversion to C code, the compilation, and eventually the loading of the function. \n", - "Let us also compile the functions for the other 3 least squares approaches - those already use numpy objects and therefore we don't expect any performance gain here, but it is good to be thorough.\n", + "Okay, now that we have seen that Cython improved the performance of our Python code and that the matrix equation (using NumPy) performed even better, let us see how they compare against the in-built NumPy and SciPy library functions. \n", "\n", - "**Note** \n", - "Of course Cython has much more horsepower under its hood - more than I am showing in this section of this article (for example, I am not using Cython's type definitions via `cdef` here, but we will get to it [in a later section - Appendix II](#type_declarations)). \n", - "The focus of this section should be on how to speed up existing Python code by making only minimal changes to it. " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%load_ext cythonmagic" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 11 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%cython\n", - "import numpy as np\n", - "import scipy.stats\n", - "cimport numpy as np\n", - "\n", - "def cy_lin_lstsqr_mat(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " X = np.vstack([x, np.ones(len(x))]).T\n", - " return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)\n", - "\n", - "def cy_classic_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)\n", - "\n", - "def cy_numpy_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " X = np.vstack([x, np.ones(len(x))]).T\n", - " return np.linalg.lstsq(X,y)[0]\n", - "\n", - "def cy_scipy_lstsqr(x,y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " return scipy.stats.linregress(x, y)[0:2]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 12 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Comparing the compiled Cython code to the original Python code" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "for lab,appr in zip([\"matrix approach\",\"classic approach\",\n", - " \"numpy function\",\"scipy function\"],\n", - " [(lin_lstsqr_mat, cy_lin_lstsqr_mat), \n", - " (classic_lstsqr, cy_classic_lstsqr),\n", - " (numpy_lstsqr, cy_numpy_lstsqr),\n", - " (scipy_lstsqr, cy_scipy_lstsqr)]):\n", - " print(\"\\n\\n{}: \".format(lab))\n", - " %timeit appr[0](x, y)\n", - " %timeit appr[1](x, y)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "matrix approach: \n", - "10000 loops, best of 3: 159 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "10000 loops, best of 3: 159 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "\n", - "classic approach: \n", - "1000 loops, best of 3: 1.62 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "10000 loops, best of 3: 126 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "\n", - "numpy function: \n", - "1000 loops, best of 3: 218 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1000 loops, best of 3: 220 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "\n", - "scipy function: \n", - "1000 loops, best of 3: 372 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1000 loops, best of 3: 354 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 13 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "As we've seen before, our \"classic\" implementation of the least square method is pretty slow compared to the other approaches which use Numpy objects. This is not surprising, since Numpy is highly optimized and uses compiled C/C++ and Fortran code already. This explains why there is no significant difference if we used Cython to compile the numpy-objects-containing functions. \n", - "However, we were able to speed up the \"classic approach\" quite significantly via Cython, roughly by 1500%.\n", - "\n", - "The following 2 code blocks are just to visualize our results in a bar plot." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "funcs = ['classic_lstsqr', 'cy_classic_lstsqr', \n", - " 'lin_lstsqr_mat', 'numpy_lstsqr', 'scipy_lstsqr']\n", - "labels = ['classic approach','classic approach (cython)', \n", - " 'matrix approach', 'numpy function', 'scipy function']\n", - "\n", - "times = [timeit.Timer('%s(x,y)' %f, \n", - " 'from __main__ import %s, x, y' %f).timeit(1000)\n", - " for f in funcs]\n", - "\n", - "times_rel = [times[0]/times[i+1] for i in range(len(times[1:]))]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 14 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import matplotlib.pyplot as plt\n", - "\n", - "x_pos = np.arange(len(funcs))\n", - "plt.bar(x_pos, times, align='center', alpha=0.5)\n", - "plt.xticks(x_pos, labels, rotation=45)\n", - "plt.ylabel('time in ms')\n", - "plt.title('Performance of different least square fit implementations')\n", - "plt.grid()\n", - "plt.show()\n", - "\n", - "x_pos = np.arange(len(funcs[1:]))\n", - "plt.bar(x_pos, times_rel, align='center', alpha=0.5, color=\"green\")\n", - "plt.xticks(x_pos, labels[1:], rotation=45)\n", - "plt.ylabel('relative performance gain')\n", - "plt.title('Performance gain compared to the classic least square implementation')\n", - "plt.grid()\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\n", - "text": [ - "" - ] - }, - { - "metadata": {}, - "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAbwAAAFhCAYAAAALEB8uAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdYFOfaBvB7qALSqyBFNEZQFKyIDWOJXYMaJZagJpZE\nj8YUOcYoJ8YWNZZoTEyixJ5jjI0gNkQ9KvZOBNtiBbtUhV2e7w+/nbCAqDjMLMvzuy6vZJadmXfu\n3Zln531ndgUiIjDGGGMGzkjpBjDGGGNy4ILHGGOsUuCCxxhjrFLggscYY6xS4ILHGGOsUuCCxxhj\nrFKQteClp6ejdevWsLGxweeffy7nqiukLl26YOXKlUo3Q2/5+Phg9+7dsq3PyMgIV65cKdd1RERE\n4Kuvviq35VtbW0OlUr3SPAkJCfD09CyfBhm4evXqYd++fZIvV6VSwcjICAUFBZIvW2mjRo3CN998\nUy7LNnnRE3x8fHDnzh0YGxvDysoKnTt3xqJFi2BlZfXKK1u6dClcXFyQkZFRpsZWNrGxsUo3Qa8J\nggBBEEr8W0REBDw9PTF16tQyLTs0NBSDBg3CsGHDXqeJr6y0bZJCZmZmuS37dbzu66Wvzp07p3QT\nZPWqr2N0dDR+/fVX7N+/X3xsyZIl5dW8F5/hCYKAmJgYZGZm4sSJEzh27NgrV18iQkFBAVJTU+Hn\n51emhqrV6jLNxyoGfXt9y7PovAh/F4R+0rf3KCsDegEfHx/avXu3OP3ZZ59Rt27diIjo0KFD1Lx5\nc7Kzs6MGDRpQQkKC+Lw2bdrQl19+SS1atCALCwsaOHAgmZqakpmZGVWtWpV2795NT58+pbFjx5K7\nuzu5u7vTuHHj6OnTp0REtGfPHvLw8KBZs2aRm5sbDRo0iKKioqhPnz40cOBAsra2poCAAEpJSaHp\n06eTi4sLeXl50Y4dO8Q2LFu2jPz8/Mja2pp8fX3pp59+Ev+mXf7cuXPJxcWFqlWrRsuXLxf/npOT\nQ+PHjydvb2+ytbWlli1bUm5u7gu3u6jjx49TYGAgWVtbU9++fendd9+lSZMmERHRgwcPqGvXruTs\n7Ez29vbUrVs3unHjhk6Gv/zyCxERLV++nFq0aEGfffYZ2dvbU40aNWjbtm3PXe+1a9fonXfeIWdn\nZ3J0dKTRo0cTEZFGo6GpU6eSt7c3ubi40ODBg+nx48dERHT16lUSBIGWL19Onp6e5ODgQEuWLKEj\nR45QQEAA2dnZicvRtikkJIRGjx5Ntra2VKdOHZ33ysvkr319Bw8eTAUFBTRjxgyqWbMmOTo60rvv\nvksPHjwQ51mxYgV5eXmRo6MjTZs2rdh7U+unn37Sea/16NGDiIiSkpKoTZs2ZGdnR3Xr1qUtW7aU\nmN3EiRPJ2NiYqlSpQlWrVqUxY8YQEZEgCPTjjz/SG2+8QXZ2dvTxxx/rzPfrr7+Sn58f2dvb09tv\nv02pqanPfX32798vvoc8PT3pt99+IyKiiIiIl35/LF++nHx9fcna2ppq1KhBq1evJiKiixcvUuvW\nrcnW1pacnJyoX79+4jyCINDly5eJqPT3eGF79uyh6tWri9M3b96ksLAwcnZ2pho1atDChQvFvx0+\nfJiCg4PJzs6OqlWrRqNHj6a8vDzx7+PGjSMXFxeysbGhgIAAOnfu3HNfr6JKmpeI6N69e9S9e3ey\nsbGhpk2b0qRJk6hly5ZE9M97WqPRiMspvF9dunSJ2rZtS46OjuTk5EQDBgygR48eic/19vamWbNm\nUUBAAFWpUoU0Gs0r7f/e3t7ie3TKlCmvdPxq06YNRUZGUtOmTcnGxoZ69uwp7g9Ft+vRo0c0dOhQ\nqlatGnl4eNCkSZPEv2n3008++YTs7OyoZs2adODAAVq2bBl5enqSi4uL+P4jInry5Al9+umn5OXl\nRa6urjRy5EjxfVHacfN5r6N2n7a2tiZ/f3/auHEjET3bH6tUqULGxsZUtWpVsre3JyKi999/X9wH\niIiWLl1KtWrVIgcHB+rRowfdunVL/NuL9smiXqrg7dq1i4ieHUTr1q1LkydPphs3bpCjo6N40N25\ncyc5OjrSvXv3xBfL29ubkpKSSKPRUH5+PkVERNBXX30lLvurr76i5s2b0927d+nu3bsUEhIi/n3P\nnj1kYmJCkZGRlJeXR7m5uTRlyhSqUqUK7dixg9RqNQ0ePJi8vb1p+vTppFar6eeff6YaNWqIy//r\nr7/oypUrRES0d+9esrS0pBMnTugsf8qUKaRWqyk2NpYsLS3FN/tHH31Ebdu2pVu3bolv8qdPnz53\nu+/evVssu6dPn5KXlxctXLiQ1Go1/fnnn2RmZiZu4/379+nPP/+k3NxcyszMpL59+1KvXr3E+UND\nQ+nXX38lomdvWlNTU/rll1+ooKCAlixZQu7u7iW+Zmq1murXr0/jx4+nnJwcevLkCR04cICInh2U\n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\n", - "text": [ - "" - ] - } - ], - "prompt_number": 16 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Performance growth rates for different sample sizes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the previous section, we have seen how the different implemantations perform for a fixed sample size n=500. Now, let us take a look at the effect of different sample sizes on the relative performances for each approach. We will consider the sample sizes 10, 100, 1000, 10000, 100000, and 1000000." + "Note that we are now passing `numpy.arrays` to the NumPy, SciPy, and (C)Python matrix functions (not to the Cython implemtation though!), since they are optimized for it." ] }, { @@ -1031,48 +880,54 @@ "import random\n", "random.seed(12345)\n", "\n", - "funcs = ['cy_classic_lstsqr', \n", - " 'lin_lstsqr_mat', 'numpy_lstsqr', 'scipy_lstsqr']\n", + "funcs = ['py_matrix_lstsqr', 'cy_classic_lstsqr', \n", + " 'numpy_lstsqr', 'scipy_lstsqr']\n", + "\n", + "orders_n = [10**n for n in range(2, 5)]\n", + "perf2 = {f:[] for f in funcs}\n", "\n", - "orders_n = [10**n for n in range(1, 7)]\n", - "times_n = {f:[] for f in funcs}\n", "\n", "for n in orders_n:\n", - " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", - " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", + " x_list = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", + " y_list = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", + " x_ary = np.asarray(x_list)\n", + " y_ary = np.asarray(y_list)\n", " for f in funcs:\n", - " times_n[f].append(timeit.Timer('%s(x,y)' %f, \n", - " 'from __main__ import %s, x, y' %f).timeit(1000))" + " if f != 'cy_classic_lstsqr':\n", + " perf2[f].append(timeit.Timer('%s(x_ary,y_ary)' %f, \n", + " 'from __main__ import %s, x_ary, y_ary' %f).timeit(1000))\n", + " else:\n", + " perf2[f].append(timeit.Timer('%s(x_list,y_list)' %f, \n", + " 'from __main__ import %s, x_list, y_list' %f).timeit(1000))" ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 17 + "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ - "import matplotlib.pyplot as plt\n", - "\n", - "labels = [('cy_classic_lstsqr', 'Cython implementation'), \n", - " ('lin_lstsqr_mat', 'numpy matrix equation'),\n", - " ('numpy_lstsqr', 'numpy.linalg.lstsq()'), \n", - " ('scipy_lstsqr', 'scipy.stats.linregress()')] \n", + "labels = [ ( 'py_matrix_lstsqr', '\"matrix\" least squares in reg. (C)Python and NumPy'),\n", + " ('cy_classic_lstsqr', '\"classic\" least squares in reg. Cython'),\n", + " ('numpy_lstsqr', 'in NumPy'),\n", + " ('scipy_lstsqr','in SciPy')\n", + " ]\n", "\n", - "matplotlib.rcParams.update({'font.size': 12})\n", + "plt.rcParams.update({'font.size': 12})\n", "\n", "fig = plt.figure(figsize=(10,8))\n", "for lb in labels:\n", - " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", + " plt.plot(orders_n, perf2[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", "plt.xlabel('sample size n')\n", - "plt.ylabel('performance gain relative to the slowest approach')\n", - "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", - "plt.legend(loc=2)\n", + "plt.ylabel('time per computation in milliseconds [ms]')\n", + "#plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", + "plt.legend(loc=4)\n", "plt.grid()\n", "plt.xscale('log')\n", "plt.yscale('log')\n", - "plt.title('Performance of least square fit implementations for different sample sizes')\n", + "plt.title('Performance of least square fit implementations')\n", "plt.show()" ], "language": "python", @@ -1081,23 +936,13 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\n0/EX3NkAAAAASUVORK5CYII=\n", + "png": "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\nW4dRo0ahtLQUKSkpGD9+PG655RaD2vHx8YGLiwt27dqFcePGwd7eHp6engZ9viMiIpCamors7Gy4\nubnBw8ND9gcsAMybNw9xcXFYsmQJNmzYADc3Nzz33HNoaWnBAw88YPDj7e29TsPDoOuxc3Jywjff\nfIPbbruN62YNAb0tVLp06VJs27YNO3fuxIwZMxAXF4dnnnlG1pPRUxvdla9btw733Xcf/vjHP2Li\nxIn4+OOP8dFHH3V7ybC79vpa9uqrr+qXX5k/fz5CQkJw2223dbmk27mdzmX33nsvNm3ahO3bt2Py\n5MlITEzErl279L8gnnrqKbzyyit49913ERsbi/j4eLz22mvX7PHw8/PDd999h8LCQkyfPh2/+tWv\n9Mlub4+xu8fc8X69vW4KhQKffvopLl26hEmTJuGee+7BI488IluPzcvLC1999RVuvPFGjBkzBk88\n8QRWr16tX+x1+vTpePjhh3H//ffD398fDz30ULexeXl5YePGjUhKSsL48ePxj3/8A++++67+Nf/1\nr3+Nv//973jppZcQExODTz75BC+++KLs+8XT0xOffPIJDhw4gJiYGKxbtw4vv/yy7DHff//9WLZs\nGVasWIEpU6bg8OHDWLt2ba+vNQDs2LEDixYtwiOPPIJx48bhl7/8Jf7v//4PI0eO7PV5v1aZv78/\nXnjhBfz1r39FYGAgFi5caHBb/Xm/t3v66aexe/duxMbG4q9//StefvllWRLV+Zh33nkHjzzyCNat\nW4fo6GjMnz8fH374IaKionqM1xDtPfTTpk3DihUrMGbMGNx66604cuQIwsPDr/kYOlIoFNiwYQO2\nbduGkJAQfS+jIZ/vRx99FD4+PoiJiYGfnx/27dvX7Tm++OILjB07FjfddBPi4uJQVlaG77//Hl5e\nXgbH2dt7nYYHSQzS7GjFihV47LHHeuzeJyLqL7VajeTkZBQWFiIwMNDS4QwqCoUCW7duxZIlSywd\nCtGwNOh67IiIiIioexZL7N58801MmzYNDg4OXfbRq6ysxMKFC/Wri3feGaDdYNprkIgGF36/ENFg\nZLHJE0FBQVi9ejV27dqFxsZGWd3vf/97ODg4oKysDMePH8dNN92EmJiYLgNAB+lVZCKyciqVyuwz\nSYeKgSx9QkRGYM7VkLvz1FNPieXLl+tv19XVCTs7O3HhwgV92V133SWeeOIJ/e0bb7xRBAYGilmz\n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\n/B+P+oR2lLvXHQAAAABJRU5ErkJggg==\n", "text": [ - "" + "" ] } ], - "prompt_number": 19 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "In this performance comparison using different sample sizes, we can see that our Cython approach is actually not so fast anymore. However, this is just the simplest approach to using Cython. \n", - "There are a lot of improvements that can be made. In a [later section](#showdown) we will come back to this comparison and see how the Cython version of our simple least squares implementation holds up against the other approaches, after we tweaked it a little bit.\n", - "
" - ] + "prompt_number": 15 }, { "cell_type": "markdown", @@ -1112,7 +957,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Bonus: How to use Cython without the IPython magic" + "# Bonus: How to use Cython without the IPython magic" ] }, { @@ -1381,7 +1226,7 @@ "input": [ "import ccy_classic_lstsqr\n", "\n", - "%timeit classic_lstsqr(x, y)\n", + "%timeit py_classic_lstsqr(x, y)\n", "%timeit cy_classic_lstsqr(x, y)\n", "%timeit ccy_classic_lstsqr.ccy_classic_lstsqr(x, y)" ], @@ -1422,1051 +1267,6 @@ "
\n", "
" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Appendix I: Cython vs. Numba" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Like we did with Cython before, we will use the minimalist approach to Numba and see how the two - Cython and Numba - compare against each other. \n", - "\n", - "Numba is using the [LLVM compiler infrastructure](http://llvm.org) for compiling Python code to machine code. Its strength is to work with NumPy arrays to speed-up the code. If you want to read more about Numba, please see refer to the original [website and documentation](http://numba.pydata.org/numba-doc/0.13/index.html)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "Here is our \"classic\" approach in Python, where I removed the list comprehensions, since they caused errors in the Numba compilation." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = 0\n", - " for x_i in x:\n", - " var_x += (x_i - x_avg)**2\n", - " cov_xy = 0\n", - " for x_i, y_i in zip(x,y):\n", - " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 22 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The Cython-compiled version of it:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%load_ext cythonmagic" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%cython\n", - "\n", - "def cy_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = 0\n", - " for x_i in x:\n", - " var_x += (x_i - x_avg)**2\n", - " cov_xy = 0\n", - " for x_i, y_i in zip(x,y):\n", - " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 26 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And now the Numba-compiled version:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from numba import jit\n", - "\n", - "@jit\n", - "def nmb_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = 0\n", - " for x_i in x:\n", - " var_x += (x_i - x_avg)**2\n", - " cov_xy = 0\n", - " for x_i, y_i in zip(x,y):\n", - " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", - " \n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 27 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "Now, let us see how the different approaches compare against each other for different sample sizes." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "import random\n", - "random.seed(12345)\n", - "\n", - "funcs = ['lstsqr', 'cy_lstsqr', 'nmb_lstsqr'] \n", - "orders_n = [10**n for n in range(1, 7)]\n", - "times_n = {f:[] for f in funcs}\n", - "\n", - "for n in orders_n:\n", - " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", - " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", - " for f in funcs:\n", - " times_n[f].append(timeit.Timer('%s(x,y)' %f, \n", - " 'from __main__ import %s, x, y' %f).timeit(1000))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 28 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%pylab inline" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.figure(figsize=(10,8))\n", - "\n", - "for f in times_n.keys():\n", - " plt.plot(orders_n, times_n[f], alpha=0.5, label=f, marker='o', lw=2)\n", - "\n", - "plt.xlabel('sample size n')\n", - "plt.ylabel('time in ms')\n", - "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", - "plt.legend(loc=2)\n", - "plt.grid()\n", - "\n", - "plt.title('Performance of a simple least square fit implementation')\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAH4CAYAAAACdDpdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl4k2XW+PFv0n1vKV2A0gUKhULZBRSQQhFwYRlBliKL\nivO6jCvzc3RUFp0RxhnfcfB1m2GpClhABWRHliqiUtmkUKC00AJtKS2lQOmSNrl/fzxDpFCgSNts\n53Ndva4+SZ7kJCdPcnLfd050SimFEEIIIYRoVHpLByCEEEII4YikCBNCCCGEsAApwoQQQgghLECK\nMCGEEEIIC5AiTAghhBDCAqQIE0IIIYSwACnChM0pKCjg7rvvxtfXl//3//6fpcOxuPLycoYNG4a/\nvz9jx45tsNu57777+OyzzxrkuvV6PceOHbvl/ZKSkujXr18DRGT/duzYQZs2bfD19WXVqlXcd999\nfPrpp3Xe3xqfD9Zu9uzZPP7445YOQ1gRZ0sHIBxDZGQkZ86cwcnJCS8vL+69917+7//+Dy8vr1u+\nrn//+98EBwdz4cKFBojU9nzxxRecOXOG4uJi9PqG+1y1bt26BrtuaxYfH8/EiRN57LHHLB1KvZo+\nfTrPPvsszzzzDAAjRowwn5eUlMT8+fPZvn37dfd3tOfDzJkzycrKqnPhmZKSwsSJEzl58qT5tFde\neaWhwhM2SkbCRKPQ6XSsWbOGixcvsmfPHnbt2sVf/vKXW7oOpRQmk4mcnBzat2//m+Korq7+TftZ\ns5ycHNq2bdugBZgj0+l0lg7hpn7L8/rEiRPExsY2QDRCiDpTQjSCyMhItWXLFvP2H//4R/XAAw8o\npZT68ccf1Z133qn8/f1V586dVUpKivly/fv3V6+++qrq06eP8vDwUA8//LBycXFRrq6uytvbW23Z\nskVVVlaq5557TjVv3lw1b95cPf/886qyslIppdS2bdtUixYt1N/+9jcVGhqqJk6cqGbOnKlGjx6t\nHn74YeXj46Pi4uJURkaGeuutt1RwcLAKDw9XmzZtMsewYMEC1b59e+Xj46NatWqlPv74Y/N5l6//\nnXfeUcHBwapZs2Zq4cKF5vPLysrUiy++qCIiIpSfn5/q27evKi8vv+n9vlp6errq37+/8vf3Vx06\ndFBff/21Ukqp6dOnK1dXV+Xi4qK8vb3VggULrtl3586dqnfv3srf3181a9ZM/eEPf1AGg6HW2ykv\nL1cTJkxQgYGByt/fX91xxx3qzJkz5lzMmzdPKaXUwoUL1V133aVeeOEF5e/vr1q3bq127NihFixY\noFq2bKmCg4PVJ598Yr7eyZMnq//5n/9R99xzj/Lx8VH9+/dXOTk55vN1Op3KyspSSilVUVGhpk2b\npsLDw1VISIh64oknzI/Z1RYuXKj69u1r3j506JAaNGiQatKkiYqJiVHLli0zn7dmzRrVpUsX5evr\nq1q2bKlmzpx5w/tdUFCg/vznPysnJyfl7u6uvL291TPPPFOnx6ygoEAppdSxY8fU3XffrXx8fNQ9\n99yjnn76afXwww8rpbTnTlhYWI3rioiIMB8nN8ubTqdT77//voqOjlatWrVSSim1evVq1blzZ+Xv\n76/uuusutX///loft1atWim9Xq88PDyUj4+PqqysNOf30KFDys3NTTk5OSlvb28VEBBQ63VYw/Ph\n8vH39ttvq6CgINWsWTO1YsUKtXbtWtWmTRvVpEkTNXv2bPP1mkwmNXv2bNW6dWsVGBioxowZo4qL\ni5VSSh0/flzpdDr1ySefqPDwcNW0aVP117/+VSml1Pr162scZ126dFFKXf+1obS0VLm7uyu9Xq+8\nvb2Vj4+PysvLUzNmzDDnXymlVq1apWJjY5W/v7+Kj49Xhw4dqvFc+Mc//qE6deqk/Pz81NixY1VF\nRUWtuRC2S4ow0SgiIyPV5s2blVJKnThxQnXo0EFNnz5dnTp1SgUGBqr169crpZT65ptvVGBgoCoq\nKlJKaS/0ERERKj09XRmNRlVVVaWmTJmiXn/9dfN1v/766+rOO+9UhYWFqrCwUN11113m87dt26ac\nnZ3Vyy+/rAwGgyovL1czZsxQ7u7uatOmTaq6ulpNmjRJRUREqLfeektVV1er//znPyoqKsp8/WvX\nrlXHjh1TSin17bffKk9PT7Vnz54a1z9jxgxVXV2t1q1bpzw9PVVJSYlSSqmnnnpKDRgwQOXl5Smj\n0ah+/PFHVVlZed37XVhYeM1jZzAYVOvWrdXs2bNVVVWV2rp1q/Lx8VFHjhxRSik1c+ZMNXHixOs+\n9rt371Y7d+5URqNRZWdnq/bt26t333231st+9NFHatiwYaq8vFyZTCa1Z88edeHCBaWUUvHx8Wr+\n/PlKKe1N19nZWSUlJSmTyaRee+011aJFC3OhsGnTJuXj46MuXbqklNLedH18fNT27dvNRfOVxdOV\n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\n888cPnwY0B6HgIAAXF1dSU1NZcmSJeY3thvd75CQELKysq57u9fbNzw8nB49ejBjxgyqqqr4/vvv\nWbNmjXm/tm3bUlFRwbp166iqquIvf/kLlZWV5vNvJW8Ajz/+OB999BGpqakopbh06RJr16694UjO\n9YSEhHDq1Cmqqqpued+6aujnQ22eeOIJ/vznP3PixAlAG2n7+uuv67RvaGgo2dnZ5tePm702hISE\ncPbs2esWjA899BBr165l69atVFVV8c477+Du7s5dd91V6+Vv5XVL2A4pwoRFhYWFsWrVKt566y2C\ng4MJDw/nnXfeqfGCU9tI1pWnvfbaa/To0YNOnTrRqVMnevTowWuvvVbn/a93GQAfHx/mzp3LmDFj\naNKkCZ9//nmNfkq17Xulf/zjH8TFxXHHHXcQGBjIK6+8gslkuu79rm2EysXFhdWrV7N+/XqCgoL4\nwx/+wGeffUbbtm2ve3+ujmHJkiX4+vry+9//nnHjxl338qdPn+ahhx7Cz8+P2NhYc4+sq9XlMbz6\nvMTERGbNmkVgYCB79+5l0aJFte77t7/9jejoaHr37o2fnx/33HMPGRkZ173eK3O1adMmkpOTadGi\nBc2aNeOVV17BYDAA8MEHHzB9+nR8fX158803a4wQ3eh+P/fcc3zxxRc0adKE559//pYesyVLlrBz\n506aNGnCG2+8waRJk8zPbT8/Pz744AOmTp1KWFgY3t7eNaYXb5a3qx/v7t2785///Ic//OEPNGnS\nhDZt2vzmUcyEhAQ6dOhAaGhojan767Hk8+FWbve5555j+PDhDB48GF9fX+68805SU1PrtO9DDz0E\naNOfPXr0uOlrQ7t27Rg/fjytWrWiSZMm5Ofn13icYmJiWLRoEc888wxBQUGsXbuW1atX1zr1fzk2\nGQ2zPzrVwOW10WikR48ehIWFsXr1aoqLixk7diw5OTlERkaybNky/P39Aa2b8IIFC3BycmLu3LkM\nHjy4IUMTQjSSRx55hLCwMN58801Lh2JRs2bNIjMzs8E6zdsKeT4IoWnwkbB//etfxMbGmiv4OXPm\nmD/JJCQkMGfOHADS09NZunQp6enpbNiwgaeeeqpOi3GFENZPplI08jho5HEQQtOgRdipU6dYt24d\nU6dONR90X3/9NZMnTwZg8uTJrFy5EoBVq1Yxfvx4XFxciIyMJDo6usYwsRDCdslUikYeB408DkJo\n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\nSUVORK5CYII=\n", - "text": [ - "" - ] - } - ], - "prompt_number": 32 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Without making any modifications to the original Python code - thereby we are not accounting for the particular strengths of Numba (Numpy) and Cython (static type declarations), we see that Cython performs significantly better than Numba." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Appendix II: Cython with and without type declarations" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the sections above, we have been using the simplest approach to Cython without using static type declarations and thereby neglecting one of its major strengths. \n", - "Now, let us see how and if we can further improve the Cython implementation of our \"classic least squares approach\" by adding those type declarations." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here is our \"classic\" approach in Python:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 21 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The Cython-compiled version of it:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%load_ext cythonmagic" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 23 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%cython\n", - "def cy_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 24 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And now, the same code with static type declarations:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%cython\n", - "def static_type_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " cdef double x_avg, y_avg, var_x, cov_xy, slope, y_interc, x_i, y_i\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 25 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "Now, let us see how the two functions (with and without static type declarations) compare against each other for different sample sizes." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "import random\n", - "random.seed(12345)\n", - "\n", - "funcs = ['cy_lstsqr', 'static_type_lstsqr'] \n", - "labels = ['simple Cython', 'Cython w. type declarations']\n", - "orders_n = [10**n for n in range(1, 7)]\n", - "times_n = {f:[] for f in funcs}\n", - "\n", - "for n in orders_n:\n", - " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", - " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", - " for f in funcs:\n", - " times_n[f].append(timeit.Timer('%s(x,y)' %f, \n", - " 'from __main__ import %s, x, y' %f).timeit(1000))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 26 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%pylab inline" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.figure(figsize=(10,8))\n", - "\n", - "for f in times_n.keys():\n", - " plt.plot(orders_n, times_n[f], alpha=0.5, label=f, marker='o', lw=2)\n", - "\n", - "plt.xlabel('sample size n')\n", - "plt.ylabel('time in ms')\n", - "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", - "plt.legend(loc=2)\n", - "plt.grid()\n", - "\n", - "plt.title('Performance of a simple least square fit implementation')\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\nBf2Ep79PRkYGHo+HRYsW0dbWxne+8x2+9rWv8eabbwLQ09NDSkpK4OuTk5M/kbUmInIuHR3wzDPQ\n2goJCWbj8unT7a5KROTMzro4W79+fWBx9vTTT4/Z4uz0K2cJCQks/mgn4czMTB555BFycnLo7e0l\nISGBxMREurq6Al/f2dlJYmLiGd977dq15OXlAZCamsqiRYsCq+uTT3foWMfhfnzdddc5qp7xPj5y\nBH72s3IGB6Gs7Dq++lXYubOcgwedUd+pxyc5pR4d69iJxyfPOaWeC/l8l5eXU19fz6eZ8I3Pf/jD\nH3Ls2LHAAwGna25uJicnh87OTpKSkrj66qu56667AjNvTzzxBE888QTvvffeqO/TAwEicrrqanjl\nFfD5ID8fvvIViIuzuyoRkTHIORsLPp+PgYEBRkZG8Pl8DA4OMjIywt/+9jdqa2vx+/20t7fzve99\nj6VLl5KUlATAN77xDX7xi1/g9XppaGjgF7/4xZjOwMn4Ov2KgNgvHHpiWWYbpo0bzcLsiivM5uVO\nXpiFQ1+CjXriTOHQlwvaW/NS/PSnP+UnP/lJ4Pg///M/efjhhykoKOB//I//QUtLC8nJyXz+859n\n/fr1ga+79957OXjwIAsWLADgm9/8Jt/61rcmqmwRCTLDw/Dyy2YD88hIuPFGszgTEQkWE35bc7zo\ntqaIdHfDs89CQwPExsJtt5nbmSIiTnPJOWciIk7X1GSeyOzqgtRUcxszM9PuqkRELtx5z5zt3buX\nn/zkJ3znO98BYN++fVRXV49bYRIawmE2INiEYk9qa+HJJ83CbPp0sxVTsC3MQrEvwU49caZw6Mt5\nLc5eeOEFrr32WhoaGvh//+//AdDd3c0PfvCDcS1ORORcLAvee8/cyhwaMqGy3/iGyTITEQlW5zVz\nNnfuXJ599lkWLVrElClT6OjoYHh4mJycHNra2iaizk+lmTOR8OLzwR//CFVV5njZMrjmGm3FJCLB\n4ZJnzlpbW1l4hn1OIiMnLIlDRCSgvx+efx4OHYJJk2DlSrOBuYhIKDiv1dXixYt5+umnR5177rnn\nuELPp8unCIfZgGAT7D1pb4fHHzcLs8REuOuu0FiYBXtfQpF64kzh0JfzunL2m9/8huXLl/PEE0/Q\n19fH5z//efbv38/bb7893vWJiAQcOmSumPX3Q3Y2rFkDp2y9KyISEs4756y3t5fXXnuNw4cPM336\n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\n9cRGU6ZM4bLLLjvja+qLPdra2qisrOS73/0u0dHRTJ06lbVr1/L666+rJzY4/cqZU3tQVFREdXX1\nqFqrq6sD720rG+fdxsTq1autNWvWWL29vdaWLVuslJQUa8+ePXaXFZTuvfde68orrxw1eGlZHz9p\ns2HDBqu/v9964IEHrCVLlgRef/TRR6158+ZZDQ0N1rFjx6zCwkLrscceC7x+5ZVXWvfff7/V3///\nt3dvIVF1bRzA/6P16ngYdTLGEx7CSoJCkoJKUhEJyUqi0qnsrJIpEVQqkholIhnphdnhpiJmTC/T\nCyXF8CIzQSEys4KsqDR1sDFrGvH5Ll7aNKl8vt/X24z2/8EGF3ud9lo3j2vN2vuLctJmaGhIRESe\nPHkiGo1GOWmj1+tFr9crZfPy8iQmJkZMJpP09PSIn5+fNDY2/ssj4RjGx8dlYGBABgYG5MOHD3Ly\n5EnZsWOHDA0NcU7srLCwUNasWSODg4MyMjIi0dHRUlhYyHmxk8nJSQkICJCysjKZmJgQk8kkycnJ\nsmfPHs7JbzQxMSFfvnyRvLw8SUtLk69fv8rExITDzoHFYpGQkBCprKyUr1+/SmVlpYSGhorVav1N\nIzazOR+cjYyMSHJysri7u0tISIgYjUZ7d2lOevXqlahUKlGr1eLh4aFcBoNBRETu3bsnERERolar\nJS4uTnnlxnenT58WrVYrWq1WcnNzp9QdGxsrarVaIiIipLm52ea+wWCQ4OBgcXd3l+TkZDGZTMo9\ni8Uihw4dEo1GIzqdTi5duvQvjYDjKy4uVl6lIcI5sSer1SpZWVni7e0tfn5+cvz4cbFYLCLCebGX\n9vZ2iY6OFm9vb/H19ZWUlBQZHBwUEc7J71JUVCQqlcrmOnv2rIg47hx0dXVJVFSUqNVqiYqKku7u\n7l85JP8zfr6JiIiIyIHM6d+cEREREc03DM6IiIiIHAiDMyIiIiIHwuCMiIiIyIEwOCMiIiJyIAzO\niIiIiBwIgzMiIiIiB8LgjIj+eAcOHMCZM2d+aZ1Hjx7F+fPnf2mdRPRnWGDvDhAR2ZtKpZryPcD/\nV3V19S+tj4j+HFw5IyICwI+lEJGjYHBGRHZVVlaGoKAgaDQaREREoKWlBQDQ0dGBdevWwcfHBwEB\nAcjJyYHValXKOTk5obq6GkuXLoVGo0FhYSFevnyJdevWwdvbG6mpqUr+1tZWBAUFobS0FIsXL0ZY\nWBgMBsOMfaqvr0dkZCR8fHywYcMGPH78eMa8J06cgE6ng5eXF1atWoWenh4AtlulW7Zsgaenp3I5\nOzvj1q1bAIDe3l4kJCRg0aJFiIiIQF1d3YxtxcbGorCwENHR0dBoNNi0aROGh4dnOdJENFcwOCMi\nu3n27BmqqqrQ2dmJT58+oampCaGhoQCABQsWoLKyEsPDw3jw4AGam5tx+fJlm/JNTU3o6upCe3s7\nysrKkJ6eDqPRiNevX+Px48cwGo1K3oGBAQwPD+Pdu3e4efMmMjIy8Pz58yl96urqwuHDh3H9+nWM\njIwgMzMTW7duxbdv36bkbWxsRFtbG54/f47R0VHU1dVBq9UCsN0qvXv3LsxmM8xmM2pra+Hv74/4\n+Hh8/vwZCQkJ2Lt3Lz5+/IiamhpkZWXh6dOnM46Z0WjEjRs3MDg4iG/fvqG8vPwfjzsROTYGZ0Rk\nN87OzrBYLHjy5AmsViuCg4OxZMkSAMDq1auxdu1aODk5ISQkBBkZGbh//75N+dOnT8PDwwMrVqzA\nypUrkZiYiNDQUGg0GiQmJqKrq8sm/7lz57Bw4UJs3LgRmzdvxp07d5R73wOpa9euITMzE2vWrIFK\npcK+ffvg4uKC9vb2Kf3/66+/YDab8fTpU0xOTmL58uXw8/NT7v+8VdrX14cDBw6gtrYWgYGBqK+v\nR1hYGPbv3w8nJydERkZi+/btM66eqVQqHDx4EOHh4XB1dcWuXbvQ3d39D0aciOYCBmdEZDfh4eGo\nqKhAcXExdDod9Ho93r9/D+DvQCYpKQn+/v7w8vJCQUHBlC08nU6n/K1Wq23Srq6uGBsbU9I+Pj5Q\nq9VKOiQkRGnrR/39/bh48SJ8fHyU6+3bt9PmjYuLQ3Z2No4dOwadTofMzEyYzeZpn3V0dBTbtm1D\nSUkJ1q9fr7T18OFDm7YMBgMGBgZmHLMfgz+1Wm3zjEQ0PzA4IyK70uv1aGtrQ39/P1QqFXJzcwH8\n/SqKFStW4MWLFxgdHUVJSQkmJydnXe/Ppy9NJhPGx8eVdH9/PwICAqaUCw4ORkFBAUwmk3KNjY0h\nJSVl2nZycnLQ2dmJnp4e9PX14cKFC1PyTE5OYvfu3YiPj8eRI0ds2oqJibFpy2w2o6qqatbPSUTz\nD4MzIrKbvr4+tLS0wGKxwMXFBa6urnB2dgYAjI2NwdPTE25ubujt7Z3Vqyl+3Eac7vRlUVERrFYr\n2tra0NDQgJ07dyp5v+dPT0/HlStX0NHRARHB58+f0dDQMO0KVWdnJx4+fAir1Qo3Nzeb/v/YfkFB\nAcbHx1FRUWFTPikpCX19fbh9+zasViusVisePXqE3t7eWT0jEc1PDM6IyG4sFgvy8/OxePFi+Pv7\nY2hoCKWlpQCA8vJyGAwGaDQaZGRkIDU11WY1bLr3kv18/8e0n5+fcvIzLS0NV69exbJly6bkjYqK\nwvXr15GdnQ2tVoulS5cqJyt/9unTJ2RkZECr1SI0NBS+vr44derUlDpramqU7cvvJzaNRiM8PDzQ\n1NSEmpoaBAYGwt/fH/n5+dMePpjNMxLR/KAS/htGRPNca2sr0tLS8ObNG3t3hYjov+LKGREREZED\nYXBGRH8Ebv8R0VzBbU0iIiIiB8KVMyIiIiIHwuCMiIiIyIEwOCMiIiJyIAzOiIiIiBwIgzMiIiIi\nB/IfaLkgtnNsZy4AAAAASUVORK5CYII=\n", - "text": [ - "" - ] - } - ], - "prompt_number": 27 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "The improvement is pretty significant when static type declarations are used. \n", - "One more experiment to see by how much we could improve our \"classic least squares\" code via Cython compared to the initial Python implementation:\n", - "
\n", - "
" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import random\n", - "random.seed(12345)\n", - "\n", - "x = [x_i*random.randrange(8,12)/10 for x_i in range(500)]\n", - "y = [y_i*random.randrange(8,12)/10 for y_i in range(100,600)]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 30 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "funcs = ['classic_lstsqr', 'cy_lstsqr', 'static_type_lstsqr', \n", - " 'lin_lstsqr_mat', 'numpy_lstsqr', 'scipy_lstsqr']\n", - "labels = ['classic approach','classic approach (cython)', \n", - " 'classic approach (cython + type decl.)',\n", - " 'matrix approach', 'numpy function', 'scipy function']\n", - "\n", - "times = [timeit.Timer('%s(x,y)' %f, \n", - " 'from __main__ import %s, x, y' %f).timeit(1000)\n", - " for f in funcs]\n", - "\n", - "times_rel = [times[0]/times[i+1] for i in range(len(times[1:]))]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 31 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%pylab inline" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import matplotlib.pyplot as plt\n", - "\n", - "x_pos = np.arange(len(funcs[1:]))\n", - "plt.bar(x_pos, times_rel, align='center', alpha=0.5, color=\"green\")\n", - "plt.xticks(x_pos, labels[1:], rotation=90)\n", - "plt.ylabel('rel. performance gain')\n", - "plt.title('Performance gain compared to the classic least square'\\\n", - " '(n={})'.format(len(x)))\n", - "plt.grid()\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAdUAAAHnCAYAAADuC8dRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdUFPcWB/DvIEhHepGuIGAJaNBn1NhiLyHYY8WWRJNn\nNM0WItanSSwxaiwxYkQxsUejGGM3MZYoJCoqlgUsoKCiokjxvj88zDICiro4uz/u5xzOYX87O3vv\nlrk7c6dIRERgjDHG2AszUjsAxhhjTBRcVBljjDEd4aLKGGOM6QgXVcYYY0xHuKgyxhhjOsJFlTHG\nGNMRVYtqfn4+Bg0aBEdHRxgZGWHfvn1qhiOsPXv2wMjICFeuXFE7FKFERESgdevWqsYQFRUFf39/\nVZ7bx8cHU6dOfWnP17x5c7zzzjvP/XiNRgMjIyP8+eefOoyKPY6I8Oqrr2LNmjVqh6IzMTExaNiw\nYZmmfWpRjYiIgJGREYyMjGBiYgIfHx8MGzYMN27ceOFA161bh9jYWGzZsgVpaWl47bXXXnierLjG\njRsjLS0Nbm5uaociHEmSSr3v0qVLOvuxqMt56YokSU/MX9c2btyIWbNmvbTn0xU/Pz9MnDhR7TBe\nmlWrVuHBgwfo3r17uT5P0dpU+FepUiU8fPhQMd3WrVsREhICMzMz+Pr6Yvbs2cXmdejQITRq1Ajm\n5uaoWrUqxo0bp5hP7969cfPmTaxbt+6pcZVpTbVp06ZIS0tDcnIy5s6di/Xr16N///5leWiJcnNz\nAQBJSUlwd3dHw4YN4ezsDBMTkxeaHyuZiYkJnJ2dX+oC0FDk5+e/0OPLcu4UXZ5fpSKfq8XW1hZW\nVlZqh/HMRPjePcsyds6cORg8eHA5RvOIJElybSr8u3r1KoyMtGXt6NGjCAsLQ8eOHZGQkICoqCiM\nGzcOixYtkqdJTU1F69atERQUhGPHjuG7777DokWLMH78eHkaIyMjDBgwAHPnzn16YPQUAwYMoFat\nWinGpk6dSpUqVaKcnBwiIoqNjaXg4GAyMzMjHx8f+uijjyg7O1uevlmzZjR48GD6/PPPyc3NjVxd\nXal58+YkSZL85+vrS0REubm5NHr0aHJ3d6fKlStTzZo1adWqVYrnlySJ5s6dS2+//TZVqVKFevbs\nScuWLSNjY2PavXs31a5dm8zNzalFixZ09epV2rVrFwUHB5OlpSW1atWKLl++LM/rwoULFB4eTlWr\nViULCwuqU6cOrVixQvF8zZo1oyFDhtCkSZPI1dWV7O3tqX///nT37l3FdKtXr6Z69eqRmZkZOTg4\nUPv27enmzZvy/XPnzqWAgAAyMzMjf39/mjp1KuXn5z/x9f/999+pdu3aZGZmRiEhIbRv3z6SJIli\nYmLkacaNG0dBQUFkYWFBnp6e9N5771FWVpZ8/+7du0mSJDnvwts7duyg119/nSwsLKhmzZq0bdu2\nJ8ZCRLRjxw5q0qQJWVhYUJUqVahZs2Z0/vx5+f6vvvqKfH19qXLlylS9enWaM2eO4vHe3t4UGRlJ\n7733HlWpUoVcXFxowYIFdP/+fRo+fDjZ2dmRu7s7zZs3T/E4SZLom2++oS5dupClpSW5u7vTN998\no5hmzpw5FBISQlZWVuTq6kq9evWiq1evFnsdfv31V2rcuDGZmZnRwoULy/TeZGZmUo8ePcjS0pJc\nXFzo888/p/79+xf7bjwec0mfcSKi6OhoCgoKosqVK5OHhwd9/vnnT/wslDavCRMmkJ+fH23atIkC\nAgLI0tKSmjdvTklJSYrHHz16lFq3bk1WVlbk5OREXbp0oeTk5FKfj4goLy+PoqKiqFq1amRqakru\n7u703//+V77fx8eHpk6dKt9euXIlNWjQgKpUqUKOjo7UsWNHOnv2rGKeU6dOlefn5OREbdu2pfv3\n7xMRUWpqKnXp0oUcHR3JzMyMqlWrRl999ZX82MLvYVHz5s2joKAgMjU1JWdnZ+ratWup+Vy8eJEk\nSaI//vhDHktLS6MBAwaQk5MTWVtbU+PGjWnfvn2Kxw0ZMoSqV69O5ubmVK1aNRo3bhw9ePBAvv9J\ncTdr1qzYe1fa637ixAlq06YN2drakqWlJQUFBSmWRRqNhtq2bUvm5ubk6elJc+fOLfaaeHt705Qp\nUxTzHTx4MDVv3ly+/dtvv1GzZs3I3t5e/g4fPnxY8ZjHl7G9evWSH9uoUSMyNzcnd3d3GjhwIGVm\nZsqPO3PmDEmSRBcvXiw2vwULFlDfvn3J2tqaPDw86H//+1+Jr0NZlVSbHvf2229T48aNFWOffvop\n+fj4yLfHjh1Lnp6eimnmz59PlpaWdO/ePXns5MmTJEkSpaSkPPE5y1RUW7durRibOXMmSZJEd+/e\npWXLlpGdnR3FxMTQxYsXad++ffTKK69Qv3795OmbNWtG1tbWNGzYMEpMTKQTJ07QjRs36JNPPiFf\n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\n", - "text": [ - "" - ] - } - ], - "prompt_number": 35 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is a pretty significant performance gain. The \"Cython + type declarations\" approach sped up our initial Python code 25 times." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Appendix III: Cython performance after replacing list comprehensions by explicit for loops" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In Python, we have those wonderful list, set, and dictionary comprehensions, which do not only look prettier and are easier to read (at least most of the time) than nested loop structures, but they also additionally come with some small performance benefits. \n", - "Does this also apply in Cython? Let's check it out." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "This is the code for our \"classic\" least squares approach that we have been using in the previous sections:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def lstsqr_comprehensions(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 46 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "And here is a version where I replaced the list comprehensions by for-loops:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def lstsqr_loops(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = 0\n", - " for x_i in x:\n", - " var_x += (x_i - x_avg)**2\n", - " cov_xy = 0\n", - " for x_i, y_i in zip(x,y):\n", - " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 48 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "Finally, the Cython versions of the two functions (with and without using list comprehensions) that we have defined above:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%load_ext cythonmagic" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%cython\n", - "\n", - "def cy_lstsqr_comprehensions(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " cdef double x_avg, y_avg, var_x, cov_xy, slope, y_interc, x_i, y_i\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = sum([(x_i - x_avg)**2 for x_i in x])\n", - " cov_xy = sum([(x_i - x_avg)*(y_i - y_avg) for x_i,y_i in zip(x,y)])\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 49 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%cython\n", - "\n", - "def cy_lstsqr_loops(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " cdef double x_avg, y_avg, var_x, cov_xy, slope, y_interc, x_i, y_i\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = 0\n", - " for x_i in x:\n", - " var_x += (x_i - x_avg)**2\n", - " cov_xy = 0\n", - " for x_i, y_i in zip(x,y):\n", - " cov_xy += (x_i - x_avg)*(y_i - y_avg)\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 50 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "
\n", - "We will generate some sample data for different sample sizes and take a look at the results for the regular Python functions, and the Cython code separately." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "import random\n", - "random.seed(12345)\n", - "\n", - "funcs = ['lstsqr_comprehensions', 'lstsqr_loops',\n", - " 'cy_lstsqr_comprehensions', 'cy_lstsqr_loops'] \n", - "\n", - "orders_n = [10**n for n in range(1, 6)]\n", - "times_n = {f:[] for f in funcs}\n", - "\n", - "for n in orders_n:\n", - " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", - " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", - " for f in funcs:\n", - " times_n[f].append(timeit.Timer('%s(x,y)' %f, \n", - " 'from __main__ import %s, x, y' %f).timeit(1000))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 52 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "plt.figure(figsize=(8,6))\n", - "plt.plot(orders_n, times_n['lstsqr_comprehensions'], alpha=0.5, \n", - " label='list comprehensions', marker='o', lw=2)\n", - "plt.plot(orders_n, times_n['lstsqr_loops'], alpha=0.5, \n", - " label='for-loops', marker='o', lw=2)\n", - "plt.xlabel('sample size n')\n", - "plt.ylabel('time in ms')\n", - "plt.legend(loc=2)\n", - "plt.grid()\n", - "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", - "plt.title('Performance comparison list comprehensions and for-loops')\n", - "plt.show()\n", - "\n", - "plt.figure(figsize=(8,6))\n", - "plt.plot(orders_n, times_n['cy_lstsqr_comprehensions'], alpha=0.5, \n", - " label='list comprehensions (Cython', marker='o', lw=2)\n", - "plt.plot(orders_n, times_n['cy_lstsqr_loops'], alpha=0.5, \n", - " label='for-loops (Cython)', marker='o', lw=2)\n", - "plt.xlabel('sample size n')\n", - "plt.ylabel('time in ms')\n", - "plt.legend(loc=2)\n", - "plt.grid()\n", - "plt.xlim([0,max(orders_n) + max(orders_n) * 0.1])\n", - "plt.title('Performance comparison list comprehensions and for-loops in Cython')\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\nURKDPTGQxwAAAABJRU5ErkJggg==\n", - "text": [ - "" - ] - }, - { - "metadata": {}, - "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAGJCAYAAABFDXDOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8TXf++PFXQoJE9kgiO0ntgtZSFLG2lNYoKtagqr/B\nTKtT7bSKKqodVBedfnVUSmyli30pGqNUaRGqxJpYEksESSSyfn5/nMltQja5N7n3JO/n4+Eh5957\nznmf9z03n5zz/tzPx0oppRBCCCGERbI2dwBCCCGEKJo01EIIIYQFk4ZaCCGEsGDSUAshhBAWTBpq\nIYQQwoJJQy2EEEJYMGmoi3Ht2jU6d+6Mo6Mjr732mrnDEUXYu3cvjRo1qtB9hoaGsmTJEgBWrFjB\nk08+WaH7tyT5c1FR+vTpw/Llyyt0n6YUGBjIrl27Cn0uPT2dfv364ezszPPPP2/0vmbMmMGIESOM\n3o6pWNJ7Fx4ezttvv23uMEpU6RrqwMBA7OzscHBwwMvLi9GjR3P37t0ybWvx4sV4eHiQnJzMv/71\nLxNHKkylU6dOnDp1qkL3aWVlhZWVFQDDhg1j+/btJa6jl18KDyt/LirKli1bLKrxeVjF5WzdunVc\nv36dpKQk1qxZY5J9WRJj37uVK1fSunVrHBwc8Pb2pk+fPuzbt6/E9SIiIujUqVOBx8xx7pZFpWuo\nrays2LRpEykpKRw+fJhff/2VWbNmPdQ2lFLk5uYSFxdH48aNyxRHdnZ2mdYTD0fyXL4kvxUvLi6O\nBg0aYG398L+eC3u/KtOYVgsWLOCVV15h6tSpXL9+nUuXLjFhwgQ2bNhg7tDKVaVrqPPz9vbmqaee\n4vfffwfgwIEDdOjQARcXF1q2bMmePXsMrw0NDWXq1Kk88cQT2NvbM2rUKJYtW8YHH3yAg4MDu3fv\nJjMzk5dffhkfHx98fHx45ZVXyMzMBCAqKgpfX18++OAD6taty5gxY3jnnXcYNGgQI0aMwNHRkZCQ\nEM6cOcN7772Hp6cnAQEB/PDDD4YYli5dSpMmTXB0dCQoKIjFixcbnsvb/oIFC/D09MTb25uIiAjD\n8+np6bz66qsEBgbi7OxMp06duHfvXonHfb9Lly4xYMAAPDw8cHd3Z9KkSQDk5uYya9YsAgMD8fT0\nZNSoUSQnJwMQGxuLtbU1ERER+Pv74+bmxueff86hQ4cICQnBxcXFsB3Q/rLt2LEjkyZNwtnZmcaN\nG7N79+6HykNenseOHUtUVBR+fn6G17z//vv4+vri6OhIo0aNDNvOyMgo8f0rKr/Fyf+XulKKV155\nBU9PT5ycnAgJCeHEiRMsXryYlStXGs6nZ599ttBtnThxgp49e+Lm5oaXlxfvvfdeqWP/17/+hYeH\nB97e3nz//fds2bKFBg0a4Obmxty5cw37mDFjBgMHDmTIkCE4Ojry2GOPcezYMcPzgYGBfPDBB4SE\nhODg4EBubm6J51BsbCxPPPEEjo6OPPnkk9y8edPwXEmfu2nTphW67r179xg+fDju7u64uLjQtm1b\nbty4YVgv73a7UqrEc3PZsmUEBARQp04d5syZY9j/wYMHad26NU5OTnh5efHqq68W+r7cvn2bvn37\n4uHhgaurK/369ePKlSulOg6A5cuXExAQgLu7e4H932/69Om8++67rFmzBgcHB5YuXVqq4/vyyy8J\nCAigR48eRW47z4YNG2jatCkuLi507dq1wN2okydPEhoaiouLC82aNWPjxo2G58LDw3nppZfo1asX\njo6OhIaGcvHiRcPzhZ33hcn/3kVERPDEE0/w2muv4erqSv369dm2bVuh6925c4fp06fz2Wef0b9/\nf2rVqkW1atV4+umnef/997l69Sr29vYkJSUZ1jl8+DAeHh78/vvvvPTSS/z88884ODjg6upqeE1S\nUhJ9+/bF0dGRxx9/nPPnzxue279/P23atMHZ2Zm2bdvy888/FziO4t5zk1KVTGBgoNq5c6dSSqmL\nFy+qpk2bqmnTpqnLly8rNzc3tXXrVqWUUj/88INyc3NTiYmJSimlunTpogICAtQff/yhcnJyVFZW\nlgoPD1dvv/22Ydtvv/22at++vbpx44a6ceOG6tChg+H5H3/8UVWvXl298cYbKjMzU6Wnp6vp06er\nmjVrqh07dqjs7Gw1cuRIFRAQoObMmaOys7PVF198oerVq2fY/ubNm9X58+eVUkrt2bNH2dnZqcOH\nDxfY/vTp01V2drbasmWLsrOzU7dv31ZKKfXXv/5Vde3aVcXHx6ucnBz1888/q4yMjCKP+8aNGw/k\nLjs7W4WEhKjJkyertLQ0de/ePbVv3z6llFJLlixRwcHB6sKFCyo1NVUNGDBAjRgxQiml1IULF5SV\nlZX6f//v/6mMjAy1Y8cOZWtrq/r3769u3Lihrly5ojw8PNSePXuUUkotXbpUVa9eXS1cuFBlZ2er\nNWvWKCcnJ5WUlFTqPOTP848//qh8fX2VUkqdOnVK+fn5qYSEBKWUUnFxcercuXOlfv+Kyu/9QkND\n1ZIlSwzH88QTTyillNq2bZt67LHH1J07dwzx5MVy//l0v+TkZOXl5aUWLFigMjIyVEpKivrll19K\nHfu7775rOK/c3NzU0KFDVWpqqjpx4oSqVauWio2NVUopNX36dGVjY6O++eYblZ2drebNm6fq1aun\nsrOzlVJKBQQEqFatWqnLly+re/fuleqzExQUpM6cOaPS09NVaGioeuONN5RSqlTrBgcHF7ru559/\nrvr166fS09NVbm6uOnz4sEpOTn4g/6U5N1988UV17949FR0drWrUqKFOnTqllFLq8ccfV5GRkUop\npe7evasOHDhQ6Htz8+ZN9e2336r09HSVkpKiBg0apPr37294vrjjOHHihKpdu7bau3evysjIUJMn\nT1bVq1dXu3btKnRfM2bMMMRf2uMbNWqU4TN7v+nTp6vhw4crpZSKiYlR9vb2aufOnSo7O1t98MEH\nKjg4WGVlZanMzEwVFBSk3nvvPZWVlaV2796tHBwcVExMjFJKqVGjRikHBwfDcfz9738v1Xl/v/s/\nOzY2Nuo///mPys3NVf/+97+Vt7d3oett3bpVVa9eXeXk5BT6vFJK9enTR/373/82LL/88svqb3/7\nm1JKqYiICEO8eUaNGqXc3NzUoUOHVHZ2tho2bJgaMmSIUkp7z52dnVVkZKTKyclRq1atUi4uLobf\nU8W956ZW6RrqgIAAVbt2beXs7KwCAgLUhAkTVHp6upo7d26Bk18ppZ588kn11VdfKaW0k2f69OkF\nng8PD1dTp041LAcFBRl+4Sil1Pbt21VgYKBSSvtlaWtrqzIyMgzPT58+XfXq1cuwvGHDBlW7dm2V\nm5urlNJ+MVtZWRlO7vv1799fffTRR4bt16pVq8BJ6uHhoX755ReVk5OjatWqpY4dO/bANko67vz2\n79+v6tSpU+gHoVu3bgU+ADExMcrGxkbl5OQYflnEx8cbnndzc1Nff/21Yfm5555TCxcuVEppH877\nP4xt27ZVy5cvL1Ue7s9z/ob6zJkzysPDQ+3cuVNlZmYW2E5J719R+S1MUQ31rl27VIMGDdSBAwce\nyOP959P9Vq5cqR599NFCnytN7PefVwcPHjS8/rHHHlPr169XSmnnZfv27Q3P5ebmqrp166qffvpJ\nKaX9sbt06VLD86X57MyePdvw3Geffaaeeuopo9f98ssvVYcOHQo9r/PnvzTn5pUrVwzPt23bVq1Z\ns0YppVTnzp3V9OnTC/3DtThHjhxRLi4uBeIp6jjeeecdFRYWZnju7t27ytbWtsiGOn/DWtrju3Dh\nQpGx5t/ezJkz1fPPP294Ljc3V/n4+KioqCj13//+V3l5eRVYNywsTM2YMUMppTVq+Y8jNTVVVatW\nTV2+fFnt3r27yPP+fvd/doKDgwvkxsrKSl27du2B9SIjIx+I736rV69WHTt2VEppFx5eXl7q0KFD\nhn3d31CHh4ercePGGZa3bNmiGjVqpJRSatmyZapdu3YFXt++fXsVERFhOI6i3nNTq3S3vq2srFi/\nfj23bt0iNjaWTz/9lJo1axIXF8fatWtxcXEx/Nu3bx9Xr141rJv/9mlh4uPjCQgIMCz7+/sTHx9v\nWK5Tpw62trYF1vHw8DD8XKtWLdzd3Q2dF2rVqgVAamoqAFu3buXxxx/Hzc0NFxcXtmzZUuBWipub\nW4G6lZ2dHampqSQmJnLv3j2CgoIeiLk0x53n0qVLBAQEFFobS0hIeODYs7OzuXbtmuExT0/PAsd6\n/3L+Tn0+Pj4Fth8QEEBCQkKp8lBYnvMEBwezcOFCZsyYgaenJ2FhYYbtlvT+FZXfh9GtWzcmTpzI\nhAkT8PT0ZPz48aSkpJRq3UuXLlG/fv1CnytN7PefV/fnP/+x+Pr6Gn62srLC19e3wPbyfxZKcw55\neXkVui9j1h0xYgRPPvkkQ4YMwcfHh9dff73QGmxpzs38+8j/vi5ZsoTTp0/TuHFj2rZty+bNmx/Y\nPkBaWhrjx48nMDAQJycnunTpwp07dwrUf4s6jvj4+AL5trOzw83NrdD9FKY0x5f3fq1YsQIHBwcc\nHBx4+umnH9hWfHw8/v7+hmUrKyv8/Py4cuUKCQkJD/wODAgIMJwXeedJHnt7e1xdXYmPj6dr165l\nPu/vf2+AQj93bm5uJCYmkpubW+S2nn32Wf744w9iY2P54YcfcHJyonXr1sXuv6jPyf25goL5uD/2\n+z9jplTpGuqi+Pv7M2LECG7dumX4l5KSwpQpUwyvKan3n7e3N7GxsYblixcv4u3tXeT6D9ObMCMj\ng+eee44pU6Zw/fp1bt26RZ8+fUrVEcTd3Z2aNWty9uzZB54rzXHn8fPz4+LFi+Tk5DzwXGHHXr16\n9QIn+cPIX98D7Re6t7d3qfJQUl7DwsLYu3cvcXFxWFlZ8frrrxd5DPnfP1OZNGkSv/76K3/88Qen\nT582fGOgpLj9/f0L1MfyM3Xsly5dMvycm5vL5cuXizyXH+Ycup8x61avXp1p06Zx4sQJ9u/fz6ZN\nm1i2bNkDrzPm3AwODmblypXcuHGD119/nYEDB5Kenv7A6+bPn8/p06c5ePAgd+7cYc+ePSjtjmSJ\n+/D29i6Q77S0tGJrmfefJ6U5vvzfQEhJSSElJaXQPzp8fHyIi4szLCuluHTpEr6+voY48x9TXFyc\n4Y/qvNfmSU1NJSkpyXDeFHXem0r79u2pUaMG3333XZGvqVmzJoMGDSIyMpLIyEhGjhxpeO5he3ff\nnysomI+KVGUa6uHDh7Nx40Z27NhBTk4O9+7dIyoqqkCDcf+H7v7lsLAwZs2aRWJiIomJicycObPY\nrxmU5kOcJzMzk8zMTNzd3bG2tmbr1q3s2LGjVOtaW1szZswYJk+eTEJCAjk5Ofz8889kZmaW6rjz\ntGvXjrp16/LGG2+QlpbGvXv32L9/v+HYP/zwQ2JjY0lNTeXNN99kyJAhD9UzNX8+rl+/zscff0xW\nVhZr167l1KlT9OnTx6g8AJw+fZrdu3eTkZFBjRo1qFmzJtWqVTMcw8O8f2Xx66+/8ssvv5CVlYWd\nnV2B/Xt6ehbZEAP07duXhIQEPvroIzIyMkhJSeHgwYPlEvtvv/3Gd999R3Z2NgsXLqRmzZo8/vjj\nhb62LJ8dU6z7448/cvz4cXJycnBwcMDGxsaQy/yMOTcjIyMNHdScnJywsrIqdL3U1FRq1aqFk5MT\nSUlJvPPOOw+8pqjjeO6559i0aRP79u0jMzOTadOmFXtVWNjvHWM/e3kGDRrE5s2b2b17N1lZWcyf\nP5+aNWvSoUMH2rZti52dHR988AFZWVlERUWxadMmhgwZYlh/y5YthuN4++23ad++PT4+PsWe96bi\n5OTEzJkzmTBhAuvXryctLY2srCy2bt1q+GMcYOTIkSxdupQNGzYU+Ix4eXlx+fJlsrKyDI8V9zu6\nd+/enD59mlWrVpGdnc2aNWs4deoUffv2LdX6plRlGmpfX1/Wr1/PnDlz8PDwwN/fn/nz5xd7pXb/\nd+ymTp1K69atCQkJISQkhNatWzN16tRSr1/UawAcHBz4+OOPGTx4MK6urqxateqBnsHF/UU4b948\nmjdvTps2bXBzc+Of//wnubm5RR53Yb8orK2t2bhxI2fPnsXf3x8/Pz++/vprAMaMGcOIESPo3Lkz\n9evXx87Ojk8++aRUsRX2mnbt2nHmzBnq1KnD22+/zTfffIOLi0uZ85D3WEZGBv/85z+pU6cOdevW\nJTEx0dBz+mHfv9LK/z4nJyfz4osv4urqSmBgIO7u7obBcsaOHcsff/yBi4sLAwYMeGA7tWvX5ocf\nfmDjxo3UrVuXBg0aEBUVVabYizsWKysrnn32WdasWYOrqysrVqzg22+/LfIX68N+dvLnw5h1r127\nxqBBg3BycqJJkyaEhoYW+seJMefm9u3badasGQ4ODrzyyiusXr2aGjVqPPC6l19+mfT0dNzd3enQ\noQO9e/cuNuf5j6Np06YsWrSIoUOH4u3tjaura7Fltvt/bxj72cu/vYYNGxIZGcmkSZOoU6cOmzdv\nZuPGjVSvXh1bW1s2btzI1q1bqVOnDhMnTmT58uU0aNDAsJ2hQ4fyzjvv4ObmxpEjR4iMjASKP+9L\nG1tpjmfy5MksWLCAWbNmGc6nzz77jL/85S+G13Ts2BFra2see+yxAnnu1q0bTZs2xcvLy1CSLG7/\nbm5ubNq0ifnz5+Pu7s68efPYtGlTgR7jRb3npmalyulPgjFjxrB582Y8PDw4fvw4AK+99hqbNm3C\n1taWoKAgli5dipOTU3nsXliwiIgIlixZwt69e80dSpX0zjvvcPbsWYsZHUrow+jRo/H19eXdd981\ndygl6tGjB0OHDmXMmDHmDsUkyu2KevTo0Q98H65Xr16cOHGC6OhoGjRoYLjSEUJUnIq6XScqF72c\nN4cOHeLw4cMmGX7VUpRbQ92pUydcXFwKPNazZ09DXaVdu3Zcvny5vHYvLJhehu2rrCT/oiz0cN6M\nGjWKnj17snDhQuzt7c0djsmU261v0EbN6devn+HWd379+vUjLCyMoUOHltfuhRBCCN0zS2ey2bNn\nY2trK420EEIIUYLqFb3DiIgItmzZUuQUb6B9fy3/l8qFEEKIyqxFixYcPXq00Ocq9Ip627Zt/Otf\n/2L9+vXUrFmzyNfFx8cbBhOQf2X7N336dLPHoPd/kkPJo6X8kxxW/hxGR0cX2SaWW0MdFhZGhw4d\niImJwc/Pjy+//JJJkyaRmppKz549adWqFX/961/La/dVXv6RjETZSA5NQ/JoPMmh8fScw3K79b1q\n1aoHHqss32kTQgihDzExcezceY4//rjKokW76dEjiIYNA0pe0YJUmZHJqprw8HBzh6B7kkPTkDwa\nT3JYNjExcUREnCUhoRsNG77BjRvdiIg4S0xMXMkrW5By/XpWWVlZWWGBYQkhhNCRRYt2c/FiN37/\nHWrVgqZNwcoKPDx289e/djN3eAUU1+5VeK9vY7i6unLr1i1zhyFEpeLi4kJSUlK5bT8qKorQ0NBy\n235VIDksm2vXrDl8GLKyIDExigYNQrG1hcxMfd1M1lVDfevWLbnSFsLELH20KSHK4rff4LffcsnK\nAldXsLeHvGnsbW2Lnr3MEunq1rfcEhfC9ORzJSqT3FzYvh1++QUSE+NITDxLw4bdyft7NCNjF+Hh\nwRbXoay4z6E01EJUcfK5EpVFejqsWwfnzkG1atC3L9jZxbFr1zkyM62xtc2le3fL7PUtDbUQokjl\n/bmS+qrxJIclS0yEVavg5k3tNvfzz4O//5/PW3oOi/sc6quibsECAwPZvXs3AHPmzGHcuHFmjsh8\nAgMDix0itjw0a9aM//73vxW6zxs3btC4cWMyMjLKZfszZsxgxIgR5bJtISqTs2fhP//RGmkvLxg3\nrmAjrXfSUJtI/g45b775Jl988UWJ64SGhrJkyZLyDMsszDEd3u+//07nzp0rdJ9z585l9OjR1KhR\nw/DY9u3b6dy5M46Ojnh4eBAaGsrGjRtL3FZUVBR+fn4FHqssnbws+SpGLySHhVMKDhyAFSvg3j1o\n3BjGjAFn5wdfq+ccSkNtRnr8RZydnW3uECxCRkYGy5YtY/jw4YbH1q1bx+DBgwkPD+fKlStcv36d\nmTNnlqqhLoyUeYQoWnY2bNgA27ZpDXaXLjB48J89uyuTStFQx8TEsWjRbhYujGLRot1lGnXGFNvI\nk/+W5b179xg+fDju7u64uLjQtm1brl+/zltvvcXevXuZOHEiDg4O/O1vfyt0Wz/99BMdOnTAxcUF\nf39/vvrqKwDu3LnDyJEj8fDwIDAwkNmzZxt+sUdERNCxY0cmT56Mi4sLwcHB7N+/n6VLl+Lv74+n\npyfLli0z7CM8PJyXXnqJXr164ejoSGhoKBcvXjQ8b21tzWeffcYjjzxCw4YNAdi0aRMtW7bExcWF\njh07PjDn+JEjR2jRogXOzs4MGTKkwO3h4tYNDAxk/vz5ha6bmJhI3759cXFxwc3NrcAVdP7b7RkZ\nGbz88sv4+Pjg4+PDK6+8QmZmJqBdufr6+rJgwQI8PT3x9vYmIiLCsJ0tW7bQtGlTHB0d8fX1Zf78\n+YW+L7/88gvOzs54e3sDWqM6efJkpk2bxpgxY3BwcACgc+fOLF68mMzMTNzc3Pj9998N27h+/Tr2\n9vZcvHiR3r17Ex8fj4ODA46OjiQkJGBlZUVmZiajRo3C0dGRZs2a8dtvvxnWP3nyJKGhobi4uNCs\nWbMCfxCEh4czYcIE+vbti6OjI48//jjnz58v9FjKW1RUlFn2W5lIDgu6exeWLYMjR8DGBgYNgq5d\nobhrHz3nUPcNdd4QcTdudOP27dAyDRFnim3kl//W71dffUVycjKXL18mKSmJ//u//6NWrVrMnj2b\nTp06sWjRIlJSUvj4448f2E5cXBx9+vTh73//O4mJiRw9epSWLVsCMGnSJFJSUrhw4QJ79uxh2bJl\nLF261LDuwYMHadGiBUlJSYSFhTF48GAOHz7MuXPniIyMZOLEiaSlpRlev3LlSqZNm0ZiYiItW7Zk\n2LBhBWJZv349hw4d4o8//uDIkSOMHTuWL774gqSkJMaPH88zzzxDVlYWoDVaa9euZfv27Vy4cIFj\nx44ZGsOS1rWysipy3fnz5+Pn50diYiLXr1/nvffeKzTns2fP5uDBg0RHRxMdHc3BgweZNWuW4bXX\nrl0jOTmZ+Ph4lixZwoQJE7hz5w4AY8eOZfHixSQnJ3PixAm6dSt89KLjx48b/mgBiImJ4fLlywwc\nOLDQ19va2jJkyBAiIyMNj61atYoePXrg7+/Ptm3b8Pb2JiUlheTkZOrWrYtSig0bNhAWFsadO3d4\n5plnmDhxIgBZWVn069ePp556ihs3bvDJJ58wbNgwTp8+bdj+mjVrmDFjBrdu3SI4OJi33nqr0NiE\n0JOrV2HxYrh4ERwdYfRobcSxykxXA54UZufOc9So0Z2Cfyx159ix3bRpU7ou+AcPniMtrbthOTQU\natTozq5du8vUjT9v2jLQfkHfvHmTM2fO0Lx5c1q1avXAa4uycuVKevbsyfPPPw9oI7O5urqSk5PD\nmjVriI6Oxt7eHnt7e1599VWWL19umPikXr16jBo1CoDBgwcze/Zspk2bho2NDT179sTW1pazZ88S\nEhICQN++fXniiScAraFzcnLiypUr+Pj4APDPf/4T5/8VfhYvXsz48eNp06YNACNHjmTOnDkcOHCA\nTp06YWVlxd/+9je8vLwA6Nevn2Ge1ZLWBYpc19bWloSEBGJjYwkKCqJjx45F5u3TTz/F3d0dgOnT\npzN+/HhmzpwJgI2NDdOmTcPa2prevXtTu3ZtYmJiaNu2Lba2tpw4cYLmzZvj5OT0wPuV5/bt24ar\nZoCbN28CULdu3SLfz5EjRzJ48GDmzp0LwPLly3njjTeAos+DTp068dRTTwEwfPhwFi5cCMCBAwe4\ne/euYf2uXbvSt29fVq1axfTp0wEYMGAArVu3BmDYsGFMnjy5yNjKk55rg5ZCcqg5eRK++w4yM8HX\nV+vZne9jWCw951D3V9RZWYUfQk5O6Q8tN7fw15pimLkRI0bw5JNPMmTIEHx8fHj99dcL1HmLq1Nf\nvnyZ+vXrP/B4YmIiWVlZBAT8+UeEv78/V65cMSx7enoafq5VqxYAderUKfBYamqqIQZfX1/Dc/b2\n9ri6uhIfH294LH9Hp7i4OObPn4+Li4vh3+XLlwu8Pq+hvX9fxqz72muvERwcTK9evQgKCuL9998v\nNG/x8fEP5Cb/9t3c3LC2/vO9tbOzM+zjm2++YcuWLQQGBhIaGsqBAwcK3YerqyspKSkFtgmQkJBQ\n6OsB2rVrR61atYiKiuLUqVOcO3eOZ555psjXQ8H30c7Ojnv37pGbm0t8fPwDnc8CAgIMx2llZfXA\nOZB3jELojVLw3//CmjVaI92iBYSHl76R1jvdX1Hb2GhDwd3/x5KHRy6lne560aJcbtx48HFTDDNX\nvXp1pk2bxrRp0wy3shs2bMiYMWNK7Ezm5+fHwYMHH3jc3d0dGxsbYmNjady4MQAXL14s0Ng+DKUU\nly5dMiynpqaSlJRkqL9CwT8o/P39eeutt3jzzTdLvY+89R923fz7rV27NvPmzWPevHmG29Jt27al\na9euBdbx9vZ+IDf5j6U4rVu35vvvvycnJ4dPPvmEwYMHF6jX5wkJCeHDDz80LDds2BA/Pz/WrVvH\nq6++WuT2R40aRWRkJJ6engwaNAjb//V8KexcKO788Pb25tKlSyilDK+Li4ujUaNGpTrOimTp31/V\ng6qcw6wsWL8efv9dq0H36AEdOhRfjy6MnnOo+yvqHj2CyMgo+J3djIxddO8eVKHbKEpUVBTHjx8n\nJycHBwcHbGxsqFatGqBdLZ07d67IdYcNG8bOnTtZu3Yt2dnZ3Lx5k+joaKpVq8bgwYN56623SE1N\nJS4ujg8//LBAD+SHtWXLFvbt20dmZiZvv/027du3N9z2vt+4ceP4/PPPOXjwIEop7t69y+bNm4u9\nYsu7tfubivxFAAAgAElEQVSw6+a/Jbxp0ybOnj2LUgpHR0eqVatW4Mo4T1hYGLNmzSIxMZHExERm\nzpxZqu8jZ2VlsWLFCu7cuUO1atVwcHAwvFf3a9OmDbdv3y5wBbtgwQLeffddIiIiSE5OJjc3l59+\n+onx48cb1hs+fDjffvstK1asYOTIkYbHPT09uXnzJsnJyYUe+/3atWuHnZ0dH3zwAVlZWURFRbFp\n0yaGDBlS4rpC6EVyMixdqjXStrYQFgYdOz58I613um+oGzYMIDw8GA+P3Tg7R+Hhsfuhx3E1xTby\ny9+x6erVqwwaNAgnJyeaNGlCaGioodH4+9//zrp163B1deXll19+YDt+fn5s2bKF+fPn4+bmRqtW\nrTh27BgAn3zyCfb29tSvX59OnToxbNgwRo8e/cD+88dUXLxDhw7lnXfewc3NjSNHjhTo9HT/uo89\n9hhffPEFEydOxNXVlUceeYRly5YVuY/88Riz7tmzZ+nZsycODg506NCBCRMm0KVLlwfWmTp1Kq1b\ntyYkJISQkBBat27N1KlTS5WLyMhI6tWrh5OTE4sXL2bFihWFvs7W1pbw8PACeXruuedYs2YNX375\nJT4+Pnh5eTFt2jT69+9veI2fnx+PPvoo1tbWhj4BAI0aNSIsLIz69evj6upq6PVd1Ptoa2vLxo0b\n2bp1K3Xq1GHixIksX76cBg0aPJC30hx3edLrVYwlqYo5vHxZ6zQWHw8uLvDCC/C/07tM9JxDGUJU\nMHr0aHx9fXn33XfNHYquJCYm0qlTJ44ePVpg0JOSjB07Fh8fH0PnNnOTz5WwNMeOad+Rzs6GwEDt\n+9F2duaOqnzJEKKiWPJLumzc3d05efLkQzXSsbGxfPvtt4wdO7YcI7Msev7+qqWoKjlUCnbuhG+/\n1Rrp1q1hxAjTNNJ6zqE01MIsQ35WRW+//TbNmzdnypQpBXqlCyEgIwNWr4affgJra3j6aW32qyK6\niVQpcutbiCpOPlfC3G7d0ma+un4datXSRhor5JuplVpxn0Pdfz1LCCGEfsXGwtdfQ1oauLvD0KHg\n6mruqCyL3PoWQpQrPdcGLUVlzeFvv2ljdqelwSOPaD27y6uR1nMO5YpaCCFEhcrJge3bIW88pw4d\ntIFMChkWQSA1aiGqPPlciYqUng5r18L581pHsX794H9zDVVpUqMWQghhdjduaJ3GkpLA3h6GDIH7\nhqwXhZAbDSYSExNDy5YtcXR05NNPPzV6e6GhoSxZssQEkZlOWFgY69evL5dtx8bGYm1tTW6u8eOr\n3+8f//gHn3/+ucm3K0pHz7VBS1EZcnjmDPznP1oj7eUFL75YsY20nnMoDbWJfPDBB3Tv3p3k5GTD\nnMHGsLTvNh87doxjx47x7LPPGh5LSEhg7NixeHt74+joSOPGjZkxY0aBea6LEhgYyO7du8szZIN/\n/OMfzJkzxzDntRCi4igF+/fDypXad6WbNIExY8DJydyR6Yc01CYSFxdHkyZNyrRuTk6OiaMxvf/7\nv/8rMOlHUlIS7du3JyMjgwMHDpCcnMwPP/zAnTt3ip1oJE9F1kW9vLxo1KgRGzZsqJD9iYL0PMay\npdBrDrOztZmvduzQGuzQUO070v+bNK5C6TWHUEka6pizMSxas4iFqxeyaM0iYs7GVOg2unXrRlRU\nFBMnTsTR0ZGzZ89y584dRo4ciYeHB4GBgcyePdvQMEVERNCxY0cmT56Mu7s777zzTrHbV0oxa9Ys\nAgMD8fT0ZNSoUQVmWdqwYQNNmzbFxcWFrl27curUKcNzgYGBzJ07l6ZNm+Lq6sqYMWPIyMgAtLGq\n+/bti4uLC25ubnTu3LnIxnPbtm0FJsBYsGABTk5OREZG4u/vD4Cvry8ffvghzZs3Z8KECfzjH/8o\nsI1nnnmGhQsXMnLkSC5evEi/fv1wcHBg3rx5htdERkYSEBBAnTp1mDNnjuHxjIwMXn75ZXx8fPDx\n8eGVV14hMzMT0G5p+fr6smDBAjw9PfH29iYiIqLAvkNDQ9m8eXOxeRZCmE5qKnz1FRw9CjY2WgMd\nGlr1Zr4yBd031DFnY4j4MYIbnje47XWbG543iPgx4qEaWmO3sXv3bjp16sSiRYtITk4mODiYSZMm\nkZKSwoULF9izZw/Lli1j6dKlhnUOHjxIUFAQ169fL3Fu5qVLl/LVV18RFRXF+fPnSU1NNdxeP336\nNEOHDuXjjz8mMTGRPn360K9fP7Kzsw3rr1y5kh07dnDu3DlOnz7NrFmzAJg/fz5+fn4kJiZy/fp1\n3nvvvUJvt9+9e5cLFy7QsGFDw2M7d+5kwIABRcYcHh7OqlWrDA1/YmIiu3btYtiwYSxbtgx/f382\nbdpESkpKgQZ93759nD59ml27djFz5kxiYrT3YPbs2Rw8eJDo6Giio6M5ePCg4TgArl27RnJyMvHx\n8SxZsoQJEyZw584dw/ONGjUiOjq62DyL8qHn2qCl0FsOExLgiy/g0iVwdNRudTdtat6Y9JbD/HTf\n63vnbzup8UgNomKj/nzQBo6tPkabJ9qUahsHfzpImm8axGrLoYGh1HikBrsO76JhcMNi180vr1HK\nyclhzZo1REdHY29vj729Pa+++irLly9nzJgxAHh7ezNhwgQAatasWex2V6xYwauvvkpgYCAA7733\nHs2aNWPp0qWsWbOGvn370r17d0Crx3700Ufs37+fzp07Y2VlxcSJEw1zS7/11ltMmjSJd999F1tb\nWxISEoiNjSUoKIiOHTsWuv/bt28D4ODgYHgsKSmJunXrFhlzmzZtcHJyYteuXfTo0YPVq1fTtWtX\n6tSpU+yxTp8+nRo1ahASEkKLFi2Ijo6mYcOGrFy5kk8//RR3d3fD68aPH2+YgcrGxoZp06ZhbW1N\n7969qV27NjExMbRt29YQe95xCCHKzx9/wHffQVYW+PpqPbtr1zZ3VPqm+yvqLFV4B6EcSl/3zaXw\nnsaZuZkPFUve1WhiYiJZWVkFJl7w9/fnypUrhmW/fN0dX3rpJRwcHHBwcGDu3LkPbDchIeGBbWVn\nZ3Pt2jUSEhIMt57zYvDz8ytyX/7+/sTHxwPw2muvERwcTK9evQgKCuL9998v9LicnZ0BSElJMTzm\n5uZm2E5RRo4caZivOTIy0jAPd3G8vLwMP9vZ2ZGamgpAfHz8AznIv383Nzes842WkH/dvNjzjkNU\nLD3XBi2FHnKoFOzZow0HmpUFLVpAeLjlNNJ6yGFRdH9FbWNlA2hXwfl52Hnw19C/lmobi64t4obn\njQcet7UuW48Hd3d3bGxsiI2NpXHjxgBcvHgRX19fw2vy32L+/PPPi/36kLe3N7GxsYblixcvUr16\ndby8vPD29ub48eOG55RSXLp0yXAFnff6/D97e3sDULt2bebNm8e8efM4ceIE3bp1o02bNnTr1q3A\n/u3t7QkKCiImJoYOHToA0KNHD7777jumT59eZO/04cOH07x5c6Kjozl16hT9+/cv9PhLIy8H+fOZ\ndxylcfLkSVrKqApClIusLPj+ezhxQqtB9+wJ7dtLPdpUdH9F3eOxHmScySjwWMaZDLo/2r1CtwF/\n3vquVq0agwcP5q233iI1NZW4uDg+/PDDAr2mH0ZYWBgffvghsbGxpKam8uabbzJkyBCsra0ZNGgQ\nmzdvZvfu3WRlZTF//nxq1qxpaFCVUnz22WdcuXKFpKQkZs+ezZAhQwDYtGkTZ8+eRSmFo6Mj1apV\no1oRc8r16dOHPXv2GJYnT55McnIyo0aNMvwhcOXKFV599VXDHw6+vr60bt2akSNHMnDgwALzNnt6\nepaqd3j+HMyaNYvExEQSExOZOXNmqa7Q8+zZs4fevXuX+vXCdPRcG7QUlpzDO3fgyy+1RrpGDW1S\njQ4dLK+RtuQclkT3DXXD4IaEdw3H47oHzled8bjuQXjX8IeqLZtiG1DwKvGTTz7B3t6e+vXr06lT\nJ4YNG8bo0aMNr3uYK8oxY8YwYsQIOnfuTP369bGzs+OTTz7RYm/YkMjISCZNmkSdOnXYvHkzGzdu\npHr16oZ9DR061HB7+5FHHmHq1KkAnD17lp49e+Lg4ECHDh2YMGFCgZ7d+b344ousWLHCsOzi4sL+\n/fuxsbGhXbt2ODo60qNHD5ydnQkODja8btSoURw/fvyBRvWf//wns2bNwsXFhQULFjyQv/tNnTqV\n1q1bExISQkhICK1btzYcR0nrJiQkcPLkyQJX9EII412+rHUaS0jQJtN44QVtcg1hWjLWdyVXr149\nlixZ8sDt7LIYNmwYgwcPLjDoSUn27t3L8OHDiYuLM3r/ZfWPf/yD4OBgXnrpJbPFYMnkcyXKIjoa\nNmzQJtioV0/7+pWdnbmj0i8Z61uYRP4r6tLIyspi4cKFjBs3rpwiKp3839MWQhgnNxd27YJ9+7Tl\ntm3hySe1CTZE+dD9rW9hmU6ePImLiwvXrl3j5ZdfNnc4woz0XBu0FJaSw4wMWL1aa6StraFvX+jT\nRx+NtKXksCzkirqSu3Dhgln227hx4wJfjxJC6FtSkjbz1Y0bUKsWDB6s3fIW5U9q1EJUcfK5EiW5\ncEH7fnR6OtSpA2FhWucxYTpSoxZCCFEmhw7B1q1abbpBA3juOe1rWKLiSI1aCFGu9FwbtBTmyGFO\nDmzerP3LzYWOHbXhQPXaSOv5PJQraiGEEAWkpcHatdot72rV4JlntCFBhXnoqkbt6urKrVu3zBCR\nEJWXi4sLSUlJ5g5DWIgbN7ROY0lJ2jjdQ4Zok2uI8lVcjVpXDbUQQojyc+YMrFunfQ2rbl2tkXZy\nMndUVUNx7Z7UqCspPddjLIXk0DQkj8Yr7xwqBfv3w8qVWiPdtKk2h3RlaqT1fB6WW0M9ZswYPD09\nad68ueGxpKQkevbsSYMGDejVq5fMDyyEEGaWna3NfLVjh9Zgd+0KAweCjY25IxN5yu3W9969e6ld\nuzYjR440zKY0ZcoU3N3dmTJlCu+//z63bt0qdP5lufUthBDlLzVVG2ns8mWtYf7LX6BJE3NHVTWZ\nrUYdGxtLv379DA11o0aN2LNnD56enly9epXQ0FBOnTr1UAELIYQwXkKC1mksOVm7xR0WBl5e5o6q\n6rKYGvW1a9fw9PQEtPmIr127VpG7r1L0XI+xFJJD05A8Gs/UOTxxQptDOjkZ/Pxg3LjK30jr+Tw0\n2/eoH3ZOZiGEEMZRCvbsgbw2q1UrePppqC4jali0Cn178m55e3l5kZCQgIeHR5GvDQ8PJzAwEABn\nZ2datmxJaGgo8OdfRrJc/HIeS4lHlqvmct5jlhKPXpfzlHX9Dh1C+f572LJFWx4/PpTHH4c9eyzj\n+Kract7PsbGxlKRCa9RTpkzBzc2N119/nblz53L79m3pTCaEEOXszh2tHn31qjYE6MCB8Mgj5o5K\n5GeWGnVYWBgdOnQgJiYGPz8/li5dyhtvvMEPP/xAgwYN2L17N2+88UZ57b7Ku/+vcPHwJIemIXk0\nnjE5vHQJFi/WGmlXV3jhharZSOv5PCy3W9+rVq0q9PGdO3eW1y6FEELkc/QobNyoTbBRvz4MGqTN\nJS30RYYQFUKISiY3F3bu1EYbA2jbFp58UptgQ1gmmY9aCCGqiHv34JtvtHG7ra2hTx9o3drcUQlj\nyFjflZSe6zGWQnJoGpJH45U2hzdvwn/+ozXSdnYwcqQ00nn0fB7KFbUQQlQC589rc0inp4OHhzbS\nmIuLuaMSpiA1aiGE0DGl4NAh2LZNq003bAgDBmhfwxL6ITVqIYSohHJyYOtW+PVXbfmJJ6BbN602\nLSoPeTsrKT3XYyyF5NA0JI/GKyyHaWmwfLnWSFevrl1F9+ghjXRR9HweyhW1EELozPXr2khjt26B\ngwM8/zz4+po7KlFepEYthBA6EhOjff0qMxO8vWHIEHB0NHdUwlhSoxZCCJ1TCvbtg127tJ+bNYNn\nnwUbG3NHJsqbVDMqKT3XYyyF5NA0JI/G27Uriu++00YbU0rrMPbcc9JIPww9n4dyRS2EEBYsJUX7\n6pW9Pdjawl/+Ao0bmzsqUZGkRi2EEBYqPh5Wr4bkZHB21gYx8fQ0d1SiPEiNWgghdOb332H9esjK\nAn9/rWe3vb25oxLmIDXqSkrP9RhLITk0Dcnjw1EKfvwR1q3TGulHH4WAgChppI2k5/NQGmohhLAQ\nmZnw9dewZw9YWcFTT0G/fjI9ZVUnNWohhLAAt29rg5hcuwY1a8LAgRAcbO6oREWRGrUQQliwixdh\nzRq4exfc3LROY+7u5o5KWAq59V1J6bkeYykkh6YheSzekSPw1VdaIx0UBC+88GAjLTk0np5zKFfU\nQghhBrm58MMP8PPP2vLjj0OvXjKphniQ1KiFEKKC3bun9eo+e1brKPb001rvblF1SY1aCCEsxM2b\nWqexxESws9O+Hx0QYO6ohCWTmyyVlJ7rMZZCcmgaksc/nTsHX3yhNdKenvDii6VrpCWHxtNzDuWK\nWgghyplScPAgbN+u1aYbNdLG7K5Rw9yRCT2QGrUQQpSjnBzYsgV++01b7tRJm/3Kysq8cQnLIjVq\nIYQwg7Q07fvRcXFQvbo2f3Tz5uaOSuiN1KgrKT3XYyyF5NA0qmoer12DxYu1RtrBAUaPLnsjXVVz\naEp6zqFcUQshhImdOgXffquN3e3jA0OGaI21EGUhNWohhDARpeCnn2D3bu3n5s3hmWfAxsbckQlL\nJzVqIYQoZ1lZsGEDHD+uLXfvDk88IZ3GhPGkRl1J6bkeYykkh6ZRFfKYkgIREVojbWur3eru1Ml0\njXRVyGF503MO5YpaCCGMcOUKrF6tNdbOztrMV56e5o5KVCZSoxZCiDI6fhzWr4fsbG2EscGDwd7e\n3FEJPZIatRBCmJBSWoexvXu15Ucf1SbWqFbNvHGJyklq1JWUnusxlkJyaBqVLY8ZGdogJnv3ajXo\n3r2hX7/ybaQrWw7NQc85lCtqIYQopdu3tZmvrl2DmjVh0CAICjJ3VKKykxq1EEKUQlycdiWdlgZu\nbjB0qPa/EKYgNWohhDDC4cOwebM2wUZwMAwcqF1RC1ERpEZdSem5HmMpJIemoec85ubCtm3aQCY5\nOdC+vXYlXdGNtJ5zaCn0nEO5ohZCiEKkp8O6dXDunNZRrG9faNXK3FGJqkhq1EIIcZ/ERK3T2M2b\n2vein38e/P3NHZWozKRGLYQQpXTuHKxdC/fugZeXNhyos7O5oxJVmdSoKyk912MsheTQNPSSR6Xg\nwAGIjNQa6caNYcwYy2ik9ZJDS6bnHMoVtRCiysvJ0Xp1Hz6sLXfpAqGhMvOVsAxSoxZCVGl372rf\nj754EapXh/79oVkzc0clqhqpUQshRCGuXdM6jd2+DY6OWj3a29vcUQlRkNSoKyk912MsheTQNCw1\nj6dOwZIlWiPt4wPjxlluI22pOdQTPefQLA31e++9R9OmTWnevDlDhw4lIyPDHGEIIaogpeC//9Xm\nkM7MhJAQGD0aHBzMHZkQhavwGnVsbCzdunXj5MmT1KhRg+eff54+ffowatSoP4OSGrUQohxkZWnz\nR//+u9ZRrHt36NhROo0J87OoGrWjoyM2NjakpaVRrVo10tLS8PHxqegwhBBVTHKydhUdHw+2tvDc\nc9CwobmjEqJkFX7r29XVlVdffRV/f3+8vb1xdnamR48eFR1GpafneoylkByahiXk8coV+OILrZF2\ncYEXXtBXI20JOdQ7Peewwhvqc+fOsXDhQmJjY4mPjyc1NZUVK1ZUdBhCiCri+HFYuhRSUiAwUOs0\n5uFh7qiEKL0Kv/X966+/0qFDB9z+N5HrgAED2L9/P8OGDSvwuvDwcAIDAwFwdnamZcuWhIaGAn/+\nZSTLxS/nsZR4ZLlqLuc9VtH779IllF27IDJSWx44MJTevWHvXvPmQz7PspwnKiqK2NhYSlLhncmi\no6MZNmwYhw4dombNmoSHh9O2bVsmTJjwZ1DSmUwIYYSMDPj2W4iJAWtreOopaNNGOo0Jy1Vcu1fh\nt75btGjByJEjad26NSEhIQC8+OKLFR1GpXf/X+Hi4UkOTaOi83jrlvb96JgYqFULhg+Htm313UjL\nuWg8PefQLCOTTZkyhSlTpphj10KISiw2Fr7+GtLSwN0dwsLgf1U2IXRLxvoWQlQKv/2mTayRmwvB\nwTBwINSsae6ohCgdi/oetRBCmFJuLmzbBgcPassdOkCPHlptWojKQE7lSkrP9RhLITk0jfLMY3q6\nNn/0wYNQrZo281WvXpWvkZZz0Xh6zqFcUQshdCkxEVauhKQksLfXZr7y8zN3VEKYntSohRC6c+YM\nrFunfQ3Ly0vrNObkZO6ohCg7qVELISoFpeDAAdixQ/u5SRPtdretrbkjE6L8VLJKjsij53qMpZAc\nmoap8pidrc18tX271kh36QKDBlWNRlrORePpOYdyRS2EsHipqbBmDVy6BDY22lV006bmjkqIiiE1\naiGERbt6FVatgjt3wNFRq0fXrWvuqIQwLalRCyF06eRJbczurCzw9dV6dteube6ohKhYUqOupPRc\nj7EUkkPTKEselYI9e7Tb3VlZ0KIFhIdX3UZazkXj6TmHckUthLAoWVnw/fdw4oQ2kUaPHtpoY3qe\nVEMIY0iNWghhMZKTtXp0QgLUqAHPPQcNGpg7KiHKn9SohRAW7/JlWL1a6+Ht6qp1GqtTx9xRCWF+\nUqOupPRcj7EUkkPTKE0eo6MhIkJrpOvVgxdekEY6PzkXjafnHMoVtRDCbHJzYdcu2LdPW27TBp56\nSptgQwihkRq1EMIsMjLgm2/g9GlttqvevbWGWoiqSGrUQgiLcuuWNvPVjRtQqxYMHqzd8hZCPEhq\n1JWUnusxlkJyaBr35/HCBVi8WGuk69SBceOkkS6JnIvG03MO5YpaCFFhfv0VtmzRatMNGmhfv6pR\nw9xRCWHZpEYthCh3OTmwbRscOqQtd+wI3btrtWkhhNSohRBmlJ4OX3+t3fKuVg2eeUYbElQIUTry\n92wlped6jKWQHBrvxg2YMiWKCxe0cbrDw6WRLgs5F42n5xzKFbUQolycOQPr1kFKCjRrps185eRk\n7qiE0B+pUQshTEop+Pln+OEH7eemTeHZZ8HW1tyRCWG5pEYthKgQ2dmwaRMcPaotd+0KnTvLzFdC\nGKPEGnVqaio5OTkAxMTEsGHDBrKysso9MGEcPddjLIXk8OGkpsJXX2mNtI2NNohJly6wZ0+UuUPT\nPTkXjafnHJbYUHfu3JmMjAyuXLnCk08+yfLlywkPD6+A0IQQepGQAF98AZcuaXXosWOhSRNzRyVE\n5VBijbpVq1YcOXKETz75hPT0dKZMmUKLFi2Ijo4uv6CkRi2EbvzxB3z3HWRlgZ8fPP+81sNbCFF6\nRteof/75Z1asWMGSJUsAyM3NNV10QghdUgr27IG8O4otW0LfvlBder4IYVIl3vpeuHAh7733Hn/5\ny19o2rQp586do2vXrhURmzCCnusxlkJyWLTMTFi7VmukraygVy+tZ3dhjbTk0XiSQ+PpOYcl/u3b\npUsXunTpYlgOCgri448/LteghBCW684dWL1aq0vXqAEDB8Ijj5g7KiEqrxJr1IcOHWLOnDnExsaS\nnZ2trWRlxbFjx8ovKKlRC2GRLl3SGum7d8HVFcLCtBmwhBDGKa7dK7GhbtCgAfPmzaNZs2ZY5xtB\nPzAw0KRBFghKGmohLM7Ro7BxozbBRv36MGiQNpe0EMJ4xbV7Jdao69SpwzPPPEP9+vUJDAw0/BOW\nTc/1GEshOdTk5sKOHfD991oj3bYtDBtW+kZa8mg8yaHx9JzDEmvU06dPZ+zYsfTo0QPb/40BaGVl\nxYABA8o9OCGEed27B998o43bbW0NffpA69bmjkqIqqXEW9/Dhg0jJiaGpk2bFrj1vXTp0vILSm59\nC2F2SUmwapU2A1atWtr3o+VmmhDlw6gadcOGDTl16hRWFThYrzTUQpjXhQvaHNLp6eDhoXUac3Ex\nd1RCVF5G1ag7dOjAH3/8YfKgRPnScz3GUlTVHB46BMuXa410gwbacKDGNNJVNY+mJDk0np5zWGKN\n+ueff6Zly5bUq1ePGjVqAOX/9SwhRMXLyYGtW+HXX7XlJ56Abt202rQQwnxKvPUdGxtb6OPy9Swh\nKo+0NO1Wd2ysNrrYM89ASIi5oxKi6jCqRm0O0lALUXGuX9c6jd26pU2mMWQI+PqaOyohqhajatRC\nn/Rcj7EUVSGHp0/DkiVaI+3tDS++aPpGuirksbxJDo2n5xzKPDdCVEFKwf79sHOn9nOzZtqkGjY2\n5o5MCHE/ufUtRBWTna0NBZo3pXy3btCpkzYLlhDCPIy69f3NN9/wyCOP4OjoiIODAw4ODjg6Opo8\nSCFE+UtJgYgIrZG2tdUGMencWRppISxZiQ31lClT2LBhA8nJyaSkpJCSkkJycnJFxCaMoOd6jKWo\nbDmMj4cvvoDLl8HJCcaMgcaNy3+/lS2P5iA5NJ6ec1hiQ+3l5UVjE3+ab9++zcCBA2ncuDFNmjTh\nwIEDJt2+EKKgEydg6VJITgZ/f63TmJeXuaMSQpRGiTXqv//971y9epX+/fubbFKOUaNG0aVLF8aM\nGUN2djZ3797Fycnpz6CkRi2ESSgFUVGwZ4+23KoVPP209l1pIYTlMOp71OHh4YaN5FfWSTnu3LlD\nq1atOH/+fJGvkYZaCONlZsJ338HJk1oN+sknoV07qUcLYYksasCTo0ePMn78eJo0aUJ0dDSPPfYY\nH330EXZ2dn8GJQ210aKioggNDTV3GLqm5xzevg2rV8PVq1CzJgwcCMHB5olFz3m0FJJD41l6Dotr\n94q8Afb+++/z+uuvM2nSpEI3+PHHH5cpmOzsbA4fPsynn35KmzZtePnll5k7dy4zZ84s8Lrw8HDD\nMKXOzs60bNnSkOS8TgGyXPTy0aNHLSoePS7nsZR4Sru8Zk0UP/4IXl6huLmBv38Uly9DcLB54jl6\n9KHJ3WgAACAASURBVKhZ81EZluXzXPk+z3k/FzVMd35FXlFv3LiRfv36ERERUeC2t1IKKysrRo0a\nVeLGC3P16lXat2/PhQsXAPjpp5+YO3cumzZt+jMouaIWokyOHIFNm7QJNurXh0GDtLmkhRCWrUxX\n1P369QP+rFGbipeXF35+fpw+fZoGDRqwc+dOmjZtatJ9CFHV5ObCDz/Azz9ry+3aaTVpaxkkWAjd\nM8vH+JNPPmHYsGG0aNGCY8eO8eabb5ojjErt/ts94uHpJYf37sHKlVojbW0N/fpB796W00jrJY+W\nTHJoPD3n0Cxf0mjRogWHDh0yx66FqFRu3tRmvkpMBDs7baSxgABzRyWEMCUZ61sInTp/HtauhfR0\n8PCAsDBwcTF3VEKIsjBqrO+YmBi6d+9uqCMfO3aMWbNmmTZCIUSpKQUHD0JkpNZIN2wIY8dKIy1E\nZVViQz1u3DjmzJljGJWsefPmrFq1qtwDE8bRcz3GUlhiDnNytF7dW7ZoHcg6dYIhQ6BGDXNHVjRL\nzKPeSA6Np+ccllijTktLo127doZlKysrbGTSWiEqXFoafP01xMZqQ4A++yw0b27uqIQQ5a3EhrpO\nnTqcPXvWsLxu3Trq1q1brkEJ4+V9uV6UnSXl8Pp1rdPYrVvg4KBdRfv4mDuq0rGkPOqV5NB4es5h\niZ3Jzp07x4svvsj+/ftxcXGhXr16rFixwjBqWLkEJZ3JhDCIiYFvvtHG7vb21hppmRJeiMrFqM5k\nQUFB7Nq1i8TERGJiYti3b1+5NtLCNPRcj7EU5s6hUrB3rzZmd2YmNGsGo0frr5E2dx4rA8mh8fSc\nwxJvfd+6dYtly5YRGxtLdnY2YNxY30KIkmVlwYYNcPy4tty9OzzxhMx8JURVVOKt7/bt29O+fXua\nN2+OtbW10WN9lyooufUtqrCUFO0q+soVsLWFAQOgUSNzRyWEKE9GTXP56KOPcvjw4XIJrCjSUIuq\nKj5e6zSWkgLOztogJp6e5o5KCFHejKpRDx06lMWLF5OQkEBSUpLhn7Bseq7HWIqKzuHvv8OXX2qN\ndEAAjBtXORppOReNJzk0np5zWGKNumbNmrz22mvMnj0b6/+N8m9lZcX58+fLPTghqgKl4Mcf4b//\n1ZYffRSefhqqVTNvXEIIy1Dire969epx6NAh3N3dKyomufUtqozMTPj2Wzh1Suso9tRT0LatdBoT\noqop03zUeR555BFqyczzQpjc7dtaPfraNahZEwYNgqAgc0clhLA0Jdao7ezsaNmyJS+++CKTJk1i\n0qRJ/O1vf6uI2IQR9FyPsRTlmcO4OFi8WGuk3dy0enRlbaTlXDSe5NB4es5hiVfU/fv3p3///gUe\ns5L7ckKU2eHDsHmzNsFGcDAMHKhdUQshRGFkPmohKkhuLuzYAQcOaMuPPw69eoF1ife1hBCVXZlq\n1IMGDWLt2rU0L2R6HisrK44dO2a6CIWo5O7dg7Vr4dw5rTd3377QqpW5oxJC6EGRV9Tx8fF4e3sT\nFxf3QCtvZWVFQEBA+QUlV9RGi4qK0vVsMZbAVDm8eRNWrtT+t7eH558Hf3/j49MLOReNJzk0nqXn\nsEwDnnh7ewPw2WefERgYWODfZ599Vj6RClHJnDsHX3yhNdKenlqnsarUSAshjFdijbpVq1YcOXKk\nwGPNmzfneN5sAeURlFxRC51TCn75BbZv135u1Egbs9vW1tyRCSEsUZlq1P/+97/57LPPOHfuXIE6\ndUpKCh07djR9lEJUEjk5Wq/uvCHyO3eGrl1lEBMhRNkUeUV9584dbt26xRtvvMH7779vaOkdHBxw\nc3Mr36Dkitpoll6P0YOy5PDuXfj6a+170tWrQ//+2jzSVZmci8aTHBrP0nNYpitqJycnnJycWL16\ndbkFJkRlcu2aNtLY7dvg4KDNfPW/rh5CCFFm8j1qIUzg1CltzO7MTPDxgSFDtMZaCCFKw6ixvoUQ\nRVMKfvoJdu3SlkNCoF8/sLExb1xCiMpDxkSqpPQ8rq2lKCmHWVnaVfSuXVpHsR494C9/kUb6fnIu\nGk9yaDw951CuqIUog+RkWL0a4uO1r1w99xw0bGjuqIQQlZHUqIV4SFeuaI10Sgo4O8PQoeDhYe6o\nhBB6JjVqIUzk+HFYvx6ysyEwEAYPBjs7c0clhKjMpEZdSem5HmMp8udQKa0W/c03WiP92GMwYoQ0\n0qUh56LxJIfG03MO5YpaiBJkZMB332lfwbK2hqeegjZtZKQxIUTFkBq1EMW4dUsbxOT6dahZU7vV\nXb++uaMSQlQ2UqMWogzi4mDNGkhLA3d3baSxch49VwghHiA16kpKz/UYS/DbbzBjRhRpaRAcDC+8\nII10Wcm5aDzJofH0nEO5ohYin9xcbWrKX37ROpC1bw89e2q1aSGEMAepUQvxP+npsHYtnD8P1apB\n377QqpW5oxJCVAVSoxaiBImJWqexmzfB3h6efx78/c0dlRBCSI260tJzPaainT0L//mP1kh7ecG4\ncVojLTk0Dcmj8SSHxtNzDuWKWlRZSsGBA7Bjh/Zz48bapBq2tuaOTAgh/iQ1alElZWfD5s3/v707\nj26ruvYH/pUseR5kyfEQybFsWXYGJ7HJSPgBDm4IFBICSchQoCF9PEpb2rR9Hd5qu1Zf14KE1RFW\nWavrteW5tIUQhkLCkIYMJpiQAEn8mhJe4siSLc+OZFmWrPme3x+3OUFkwI5s3Stpf/7y1ZGsox3H\n2+fufe8BTp4Uj2++GWhspJuYEEKkQTVqQj7F6xWvj+7qErekXLMGmDNH6lkRQqbCmXNnsP/4foRY\nCGqFGl9Y8AXUVifWVndUo05SiVyPmUr9/cB//7eYpPPzgQcfvHKSphhODopj7CiG1+bMuTNoPtSM\nvml9eN/+PoZKhtB8qBlnzp2RemoTQitqkjI++QR45RUgFAIMBrGzOy9P6lkRQqaC0+fE7/f/HhaN\nBa4uF3wuH2ZhFjLMGThw4kBCraqpRk2SHmPA4cPAoUPi8fz5wKpVgIr+TCUkaUSECLpGutDubMdZ\nx1mcHzuPo61H4Tf4AQAFGQWYVzIPaco0aPo12LZxm8QzjkY1apKyQiFx/+h//lNsFPvCF4Bly6hp\njJBk4A16cc55DmcdZ3HOeQ6BSICPZaoyYcg1QF2khjZLC3Wamo+lKxPr0g7JEnUkEsHChQthMBiw\nZ88eqaaRtFpaWtDY2Cj1NCTldgM7dwK9vUBGBrB2LVBTM/7XUwwnB8UxdhRDEWMMA94BnHWcxVnH\nWfS4e8BwcRU6LXsaanQ1qNHVoLygHO2l7Wg+1Ay1WQ1bmw3GeiMC7QE0LW+S8FNMnGSJ+sknn8Ts\n2bMxOjoq1RRIEuvuFpO0xwMUFoo7XxUXSz0rQshEBSNBWIetOOs4i3ZnO9wBNx9LU6ShsrASZq0Z\nNboaFGYVRr22troWW7AFB04cwHnneRQPFqNpeVNC1acBiWrU3d3d2LJlC370ox/hV7/61SUraqpR\nk1j84x/A7t3itdJGo7iHdHa21LMihIyXy+8SE7OjHVaXFWEhzMfy0vNg1omJuaqwCulpiXUa+0pk\nV6P+9re/jZ///Odwu92f/2RCxkkQgIMHgdZW8XjRIuC228QNNggh8iUwAfYRO28EG/QO8jEFFNDn\n6fkp7dLcUihSrMkk7on69ddfR3FxMRoaGujawCmUajWtQAB4+WXg7FlxS8rbbxcTdSxSLYZTheIY\nu2SMoS/ki2oE84V9fCwjLQMmrQk1uhpUa6uRm54b8/slcgzjnqiPHDmC3bt3480334Tf74fb7cYD\nDzyAZ599Nup5W7ZsgdFoBABoNBrU19fzIF9I8HR85eO2tjZZzWcqj/fsacGBA4BG04isLGDGjBZ4\nvQAQ2/e/QOrPl+jHbW1tsppPIh4nw//nm2++GUNjQ3jh9Rdgd9uRY84BA4OtzQYAWHD9AtToauD4\nxIGSnBI0zWma1Pe/QC7xuPC1zWbD55H0Oup33nkHv/jFL6hGTa6ZzQbs2gWMjQHTpolNY1qt1LMi\nhABAWAhHNYK5/C4+plQoYdQYeSOYLlsn4UylJ7sa9aelWq2BTJ6PPgLefFOsTZvN4uVXmZlSz4qQ\n1OYOuNHuEGvNHcMdCAkhPpajzolqBMtU0X/Y8aA7kyWplgSux3yeSAT4+9+BDz4Qj5ctE29kopzk\nO9cncwzjieIYOznHUGACekd7+bXN/Z7+qPGy3DLeCDY9b7pkizM5xxCQ+YqakInw+YAXXwQ6OsRu\n7lWrgPp6qWdFSGrxh/2wOC38lPZYaIyPpaelo6qwCjW6Gpi1ZuRl0A31Y0UrapIwhoaA558HnE4g\nN1fcVKO8XOpZEZL8GGNw+Bx81dw10gWBCXy8MLNQTMw6M4waI1RKWgNOFK2oScJrbwdeekm8DKus\nDNi4ESgokHpWhCSvsBBGp6uTX9vs9Dn5mFKhREVBBT+lXZRdRP1GU4gSdZKSez1mvBgD3n8fePtt\n8evZs4E1a4D0ONyMKFliKDWKY+ziFUNP0MMbwSzDFgQjQT6WpcrijWCmQhOy1FlTPp/JlMg/h5So\niWyFw8DrrwP/ugwXjY3AzTfTzleETBbGGPo8ffyUdu9ob9R4SU4JXzXr8/VQKia5Y5OMC9WoiSx5\nPMALLwB2O6BWA3ffLa6mCSGxCYQD6Bju4I1gnqCHj6mUKlQVVvFrmwsyqb4UL1SjJgmlr0/c+Wpk\nRKxDb9wo1qUJIdfG6XPyTS5sLhsiLMLHCjIK+CntSk1l1L7NRB4oUSepRK3HnD4N/O1vQCgkdnRv\n2CB2eEshUWMoNxTH2E00hhEhArvbzk9pnx87z8cUUKA8v5yf0i7OKU6JRrBE/jmkRE1kgTHg8GHg\n0CHxuL4euPNOQEU/oYSMizfo5ZtcWIYt8If9fCxTlYlqbTXf5CJbTfu+JhKqURPJhULAq68CH38s\nNoqtWAFcfz01jRFyNYwxDHgH+Kq5x90Dhou/N6dlT+PXNpfnlyNNSfu9yhnVqIlsjYyI9ei+PiAj\nA1i3TrxvNyHkUqFIKKoRzB1w87E0RRoqCyt5I1hhVqGEMyWTiRJ1kkqEeozdLnZ2ezzijlebNok7\nYMlFIsQwEVAcY+Pyu7Bzz07k1ebB6rIiLIT5WF56XtQmF+lpcbjBQIJK5J9DStREEm1twJ494gYb\nlZXA+vVANpXNCIHABHS7u/kp7UHvIGw9NhinGQEA+jw9bwQrzS1NiUawVEc1ahJXggDs3w8cOSIe\nL14MrFwpbrBBSKryhXy8Eeyc8xx8YR8fy0jLgElr4o1guekSXQZBphTVqIksBALi/brb28UtKb/4\nRWDhQqlnRUj8McYwNDbEV832EXtUI5guS8cbwSoKKqgRLMVRok5ScqvHOJ3izldDQ0BWFnDvveIp\nbzmTWwwTFcVRFBbCsA5b+SYXLr+LjykVShgLjPyUti5bF/VaimHsEjmGlKjJlLNagV27xL2kp00T\nm8a0WqlnRcjUcwfcfJOLjuEOhIQQH8tR50Q1gmWqMiWcKZEzqlGTKfXhh8Bbb4m16ZoaYO1a8TIs\nQpKRwAT0jvbyU9r9nv6o8bLcMr5qnp43nRrBCEc1ahJ3kQiwd6+YqAHghhuApiaxNk1IMvGH/bA4\nLfza5rHQGB9TK9UwaU0wa80w68zIz8iXcKYkUVGiTlJS1mPGxoAXXxRPeatUwOrVwLx5kkwlJolc\n05KTZIsjYwwOn4NvctE50gmBCXxck6nhq2ajxgiVMvZfs8kWQykkcgwpUZNJNTQEPPccMDwsbqax\ncSNgMEg9K0JiExbC6HR18kYwp8/Jx5QKJSoKKnhyLsouolPaZFJRjZpMmrNngZdfFi/DKisTm8by\n6UwfSVCeoIc3glmGLQhGgnwsS5XFG8FMhSZkqbMknClJBlSjJlOKMfEGJvv3i1/PmQOsWQOoaVtb\nkkAYY+jz9PFGsN7R3qjxkpwSvmrW5+uhVFDDBYkPStRJKl71mHBYvBXo//6veHzLLcCNNybHzleJ\nXNOSEznHMRAORG1y4Ql6+JhKqUJVYRXf5KIgs0Cyeco5hokikWNIiZpcM49H3Pmqu1tcPd9zDzBr\nltSzIuTqnD4nbwSzuWyIsAgfK8go4Ke0KzWVUKfRaSEiPapRk2vS1yfeacztBgoKxHp0aanUsyLk\nUhEhArvbzk9pnx87z8cUUMCQb+CntItziqkRjEiCatRkUn38MfDqq0AoBMyYAWzYAOTkSD0rQi7y\nBr18kwvLsAX+sJ+PZaoyUa2t5ptcZKtp2zYib5Sok9RU1GMYA1pagHfeEY8bGoA77hCvlU5GiVzT\nkpN4xJExhgHvAF8197h7oja5mJY9jW9yUZ5fnnCbXNDPYuwSOYZJ+iuWTLZgUFxFnz4tNordeiuw\ndGlyNI2RxBSKhNAx3MGvbXYH3HwsTZEGo+biJheFWYUSzpSQ2FCNmnyukRGxHt3fL96ne/16oLpa\n6lmRVOTyu/i1zVaXFWEhzMfy0vOiNrlIT0uXcKaETAzVqMk1s9vFzm6vV9zxavNmoKhI6lmRVCEw\nAd3ubn5Ke9A7GDWuz9PzVXNpbik1gpGkRIk6SU1GPaatTbxGOhIBqqrElXRWCt2AKZFrWnIy0Tj6\nQj7eCHbOeQ6+sI+PZaRlwKQ18Uaw3PTcKZix/NDPYuwSOYaUqMklBEG8y9iRI+LxkiXAypW08xWZ\nGowxDI0N8Wubu0a6ohrBtFlavmquKKhIuEYwQmJFNWoSxe8X79fd3i4m5jvuABYskHpWJNmEhTCs\nw1beCObyu/jYZze50GXrJJwpIfFBNWoyLg6H2DR2/jyQnQ3cey9gNEo9K5Is3AE3bwTrGO5ASAjx\nsRx1TlQjWKYqU8KZEiIvlKiT1ETrMR0d4h7SPh9QXCzeaawwxa9oSeSalhwITEDvaC92vbEL2eZs\n9Hv6o8bLcsv4tc36PD01gl0F/SzGLpFjSIk6xTEGfPghsHevWJuurRXv2Z2RIfXMSCLyh/2wOC28\nEcwb8sI2YIOxzAi1Ug2T1gSz1gyzzoz8DNoDlZDxoBp1CotEgLfeAj76SDy+8UZx9yta2JDxYozB\n4XPwRrDOkU4ITODjmkwNrzUbNUaolLQ2IORyqEZNLjE2BuzaBdhs4i1AV68G5s2TelYkEUSECDpH\nOvm1zU6fk499thGsKLuITmkTEiNK1EnqavWYwUGxaWx4GMjLAzZuBPT6+M4vESRyTWuyeYIe3ghm\nGbYgGAnysSxVFm8EMxWakKWOvtie4hg7imHsEjmGlKhTzJkz4uVXwSAwfbqYpPOpVEg+gzGGPk8f\nXzX3jvZGjZfklPBGMEO+AUoFXWRPyFShGnWKYAx47z3gwAHx67o64K67ALVa6pkRuQiEA1GbXHiC\nHj6mUqpQqankp7QLMgsknCkhyYdq1CkuHAZ27wb+8Q/x+JZbxMYxKh0Sp8/JT2nbXDZEWISP5Wfk\n88RcqamEOo3+qiNECpSok9SFeszoqLipRk8PkJ4O3H03MGuW1LNLDIlc07qSiBCB3W3np7TPj53n\nYwooUJ5fzpNzcU7xpDSCJWMc441iGLtEjiEl6iTW2ysmabcb0GjEm5iUlEg9KxJv3qCXb3JhGbbA\nH/bzsUxVJqq11XyTi2x1toQzJYRcDtWok9Q//wm8+qp42nvGDGDDBiAnR+pZkXhgjGHAO8BXzT3u\nnqhNLqZlT+Nd2uX55bTJBSEyQDXqFMIYcOgQcPiweHzddeLGGmn0uziphSKhqEYwd8DNx9IUaTBq\njPyUdmFWit8blpAEE/dEbbfb8cADD2BwcBAKhQL//u//jm9+85vxnkZSCgaBv/0N+OQTwGZrwVe/\n2oglS6hp7FrJvabl8rt4I5jVZUVYCPOxvPS8qE0u0tPSJZun3OOYCCiGsUvkGMY9UavVavz6179G\nfX09PB4PFixYgBUrVmAWdTjFxOUSb2IyMABkZgIrVgBLl0o9KzKZBCag293NT2kPegejxvV5er5q\nLs0tpTuCEZIkJK9Rr1mzBo8++iiampr4Y1SjnpiuLuCFFwCvF9DpxKaxoiKpZ0Umgy/k441g55zn\n4Av7+Fh6WjqqtdV8k4vc9FwJZ0oIiYVsa9Q2mw0nT57EkiVLpJxGQjtxAnjjDXGDDZMJWLcOyMr6\n/NcReWKMYWhsiG9y0TXSFdUIps3S8lVzRUEFNYIRkgIkS9Qejwfr1q3Dk08+idxcWglMlCAA+/YB\nR4+Kx0uXArfeCij/dSfHRK7HyEW8YhgWwrC5bPyUtsvv4mNKhRLGgouNYLps3ZTPZ7LRz2LsKIax\nS+QYSpKoQ6EQ1q5di/vuuw9r1qy57HO2bNkCo9EIANBoNKivr+dBbmlpAYCUPd63rwXvvAOo1Y1I\nSwNKSlqQmQkolRef39bWJpv5JurxBVPx/b1BL0rrSnHWcRb7D+5HhEVgrDcCAPpP9cNQYMA9t9+D\nqsIqHG09ioArAF25TlbxGe9xW1ubrOaTiMf0/1ne/5+vdT4tLS2w2Wz4PHGvUTPG8OUvfxk6nQ6/\n/vWvLz8pqlFfkcMhNo2dPw9kZ4vXR1dUSD0r8nkEJqB3tJevmvs9/VHjZbllfJMLfZ6eGsEISTFX\ny3txT9Stra246aabMG/ePP7LaPv27bjtttsuTooS9WVZLMCLLwJ+v3iHsU2bxDuOEXnyh/2wOC28\nEcwb8vIxtVKNqsIqnpzzM2gLM0JSmawS9XhQoo7GGPDBB8Df/y7WpmfOBO65R7x395W0JHA9Ri4m\nGkPGGBw+B7+2uXOkEwIT+LgmU8NrzUaNESplatxviH4WY0cxjJ3cYyjbrm/y+SIR4M03gePHxeOb\nbgKWL6ebmMhFRIigc6STn9J2+px8TKlQoqKggifnouwiOqVNCJkwWlHLmNcL7NoFdHYCKpW4f/Tc\nuVLPiniCHr5qtgxbEIwE+ViWKgtmnRlmrRnV2mpkqelaOULI56MVdQIaGBCbxlwuIC8P2LgR0Oul\nnlVqYoyhz9PHr23uGe2JGi/JKeG36zTkG6BUKCWaKSEkGVGilqH/+z/glVfEe3fr9WKSzsub2PeQ\nez1G7gLhAHa+vhOFswpx1nEWnqCHj6mUKlRqKnkjmCaTOvquhn4WY0cxjF0ix5AStYwwBrS2AgcP\nil/PnQusXg2o1VLPLDU4fU5+StvmssFis8CoMQIA8jPyea25UlMJdRr9oxBC4oNq1DIRCgG7dwOn\nTomNYk1NwA03UNPYVIoIEdjddt4Idn7sPB9TQAFDvoEn5+KcYmoEI4RMGapRy9zoKLBzJ9DTI15y\ntXYtUFsr9ayS01hoLKoRzB/287FMVSbf5KJaW42c9BwJZ0oIISJK1BLr6RGT9OioePOSTZvEm5nE\nKpHrMZOJMYYB7wBvBOt2d0dtcjEtexpvBCvPL4/a5IJiODkojrGjGMYukWNIiVpCp04Br70GhMPi\nbUDvvRfIoUVczEKREDqGO9DuFFfO7oCbj6Up0mDUXNzkojCrUMKZEkLI56MatQQYExvG3n1XPF6w\nAPjiF4E02rHwmrn8Ln5K2+qyIiyE+Vhuei5PzFWFVUhPu8ot3QghRAJUo5aRQAD429/ES7CUSmDl\nSmDxYmoamyiBCeh2d/NGsEHvYNS4Pk/PL58qyy2jRjBCSMKiRB1HLpd4E5OBASAzE1i/HjCZpua9\nErkecyW+kA/nnOf4Jhe+sI+Ppael80Yws86M3PTY9zhPxhhKgeIYO4ph7BI5hpSo46SzE3jhBWBs\nDCgqEpvGdDqpZyVvjDEMjQ3xRrCuka6oRjBtlpaf0q4oqIhqBCOEkGRBNeo4OHECeOMNcYON6mpg\n3TpxRU0uFRbCsLls/JS2y+/iY5/d5EKXTX/pEEKSA9WoJSII4taUx46Jx9dfD6xYIdamyUXugJs3\ngnUMdyAkhPhYjjqHXz5VVViFTBX9hUMISS2UqKeIzwe89BJgsYjd3HfeCTQ0xO/95VyPEZiA3tFe\nvmru9/RHjZfllvHkrM/TS9YIJucYJhKKY+wohrFL5BhSop4C58+LTWMOh3hd9IYNwIwZUs9KWv6w\nHxanBe3OdrQ72uENefmYWqlGVWEV79LOz8iXcKaEECIvVKOeZOfOiStpvx8oLRV3vtKk4OZKjDE4\nfA5+SrtzpBMCE/i4JlPDa81GjREqJf3NSAhJXVSjjgPGxFr03/8ufj1rFnD33eK9u1NFRIigc6ST\nn9J2+px87NONYGadGdOyp9G1zYQQMg6UqCdBOCx2dZ88KR7ffDPQ2CjtTUziVY/xBD1RjWCBSICP\nZamyYNaZ+SYXWeqsKZ/PZErkmpacUBxjRzGMXSLHkBJ1jLxe8frori5ApQLWrAHq6qSe1dRhjKHP\n08evbe4Z7YkaL8kp4Y1ghnwDlApqcSeEkFhQjToG/f1i09jICJCfL9ajp0+XelaTLxAORG1y4Ql6\n+JhKqUKlppKf0tZkpmBBnhBCYkQ16kl05kwn9u+3wG5X4vRpATNmmFBfX4ENG4C8PKlnN3mcPic/\npW1z2RBhET6Wn5HPG8EqNZVQp6klnCkhhCQ3StQTcOZMJ5qbz6G/vwlWq/hYb+8BPPIIkJdXIe3k\nPmOi9ZiIEIHdbeeNYOfHzvMxBRQozy/nq+aSnJKUaARL5JqWnFAcY0cxjF0ix5AS9QS89poFn3zS\nBNe/7mpZVQWUlzfhnXcOYs4ceSXq8RgLjfFVs2XYAn/Yz8cyVZl8k4tqbTVy0mmjbEIIkQLVqMeB\nMeDDD4Gf/rQFY2ONUKuBmTMvbqqh0bRg27ZGSec4HowxDHgHeCNYt7s7apOLouwifkq7PL+cNrkg\nhJA4oRp1DJxO4LXXxN2vAAHFxeLGGp++Pjo9XbjSyyUXioRgdVn5KW13wM3H0hRpMGqM/JS2Nksr\n4UwJIYRcDiXqK7hwA5MDB4BQSLwV6Ne/bkJr6wGkpzfx5wUCB9DUVC3hTC/l8ruwc89O5NXmkFMO\nXwAAEZhJREFUweqyIiyE+Vhuei5fNVcVViE9LYXuyDJBiVzTkhOKY+wohrFL5BhSor4Mh0NcRXd1\nicdz5wK33w5kZ1eguho4cOAggkEl0tMFNDVVo7ZW2vq0wAR0u7v5qnnQOwhbjw3GaUYAgD5Pz69t\nLsstS4lGMEIISRZUo/4UQbi4ig6HgdxccdermTPjPpXP5Qv5cM55jm9y4Qv7+Fh6WjpMhSZ+Sjs3\nPVfCmRJCCPk8VKMeh/PnxVW03S4ez58P3HYbkCWTu14yxjA0NsS7tO1ue9QmF9osLT+lPaNgBm1y\nQQghSSLlf5sLAvD++8ChQ+IqOi8PWLUKqKmRemZAWAjD5rLxU9ouv4uPKRVKfkewGl0NdNm6qNcm\ncj1GLiiGk4PiGDuKYewSOYYpnaiHhoBXXwV6/nW76vp6YOVKaVfR7oA7apOLkBDiYznqHL7JhUlr\nQqYqU7qJEkIIiYuUrFELAnDkiLiKjkTE+3SvWgWYzVP2llfEGEPPaA+/trnP0xc1XpZbxhvB9Hl6\nagQjhJAkRDXqTxkcFFfRvb3i8XXXAbfeCmTGcXHqD/thcVp4I5g35OVjaqUaVYVVvBEsPyM/fhMj\nhBAiOymTqCMR4L33gHfeEb8uKBBX0dVxugTaMebgtebOkc6oRjBNpobXmo0a46Q0giVyPUYuKIaT\ng+IYO4ph7BI5himRqAcGxFV037/OKi9cCKxYAWRkTN17RoQIOkc6eXJ2+px8TKlQoqKggq+ap2VP\no1PahBBCLiupa9SRCNDaChw+LH6t0QCrV4ubaUwFT9AT1QgWiAT4WJYqizeCVWurkaWWyXVfhBBC\nJJeSNer+fnEV3d8vHi9aBHzhC7Gvos+cO4P9x/cjxEJQQYV5s+ZBKBDQ7mhHz2hP1HOLc4r5KW1D\nvgFKhTK2NyeEEJJykm5FHYmIK+h33xW7uwsLxVV0ZWXs8zpz7gz+cOAPGDOMwelzwuFzYOzMGOpn\n16NoehFUShW/ttmsM0OTqYn9Ta9RItdj5IJiODkojrGjGMZO7jFMmRV1X5+4ih4YEI+XLAGamqJ3\nupqoiBBBz2gPOoY78PtXf4/eol6woYvBzKnNQcQRweaVm1GpqYQ6TR3jpyCEEEIuSooVdTgsrqJb\nW8VVtFYrrqKNxom/N2MMDp8DHcMdsDgtsLlsvNZ8tPUoAoYA8jPyoc3SQpetQ446B4UDhdi2cdvE\n34wQQghBkq+oe3vFVfTgIKBQAEuXArfcMrFV9FhoDB3DHTw5jwRGosaLsotQVVgFoUyAMEO45PKp\ndCVtFUkIIWRqJGyiDoeBlhbxDmOCAOh0wF13ATNmjOO1QhhdI108Mfd7+sFw8S+ZbHU2qgqrUFVY\nBVOhCQWZBQAAk8KE5kPNUJkvhi3QHkDT8qZL3kNqcq/HJAKK4eSgOMaOYhi7RI5hQibq7m5xp6uh\nIXEVvWwZsHw5oL5CeZgxhkHvICzDFnQMd6DT1Rl1D+00RRoqNBU8MZfmll72uuba6lpswRYcOHEA\nQSGIdGU6mpY3oba6dqo+KiGEkBSXUDXqUOjiKpoxoKhIXEWXl1/6PUYDozwxdwx3wBP0RI2X5JTA\npDWhqrAKFQUV1ARGCCFEMglboz5zphP791sQCinh8Qjw+01QqSqgUAA33AA0Nl5cRQcjQXS6Only\nHvQORn2vvPQ8npirCquQm54b/w9ECCGETJAkiXrv3r3Ytm0bIpEI/u3f/g0/+MEPLnnOmTOdaG4+\nB5WqCVareLo7HD6A5cuBhx+uwHS9gL7RPlh6xcRsH7EjwiL89WqlGkaNkSfnVLtNZyLXY+SCYjg5\nKI6xoxjGLpFjGPdEHYlE8I1vfAP79++HXq/HokWLsHr1asyaNSvqeZs2/Q90JY3oHXsagUgICkGN\nav0i+LVv4ciIFlabFb6wjz9fAQX0eXqxzqw1oTy/HGnKtHh/PNloa2tL2B9KuaAYTg6KY+wohrFL\n5BjGPVF/8MEHqK6uhvFfFzlv3LgRr7322iWJ+p+eNxDxtUKz0IAMTRDpBcP4uOt5jPYVIWeoHoC4\n65Sp0AST1oRKTSXdP/tTXC6X1FNIeBTDyUFxjB3FMHaJHMO4J+qenh6Uf6r7y2Aw4NixY5c8LzTP\nAuSFMcJs0OsMAABVVSaEPj/uMN8Bk9aEwszClDqdTQghJPXEPVGPO7GqI0BZBLC7UIj/hyxokRYZ\nwo2zK7FIv2hqJ5kEbDab1FNIeBTDyUFxjB3FMHaJHMO4X5519OhR/PSnP8XevXsBANu3b4dSqYxq\nKFMWZIG5/fGcFiGEECKZ+fPno62t7bJjcU/U4XAYtbW1OHDgAKZPn47Fixfj+eefv6RGTQghhBAJ\nTn2rVCr89re/xcqVKxGJRPCVr3yFkjQhhBByBbK8MxkhhBBCREqpJ/BZe/fuxcyZM2E2m/HEE09I\nPR1J2e12LF++HHPmzEFdXR2eeuopAIDT6cSKFStQU1ODW2+9Neqyg+3bt8NsNmPmzJnYt28ff/z4\n8eOYO3cuzGYzvvWtb/HHA4EANmzYALPZjKVLl6KzszN+HzCOIpEIGhoasGrVKgAUw4lyuVxYt24d\nZs2ahdmzZ+PYsWMUwwnavn075syZg7lz52Lz5s0IBAIUw3HYunUrSkpKMHfuXP5YvOL2pz/9CTU1\nNaipqcGzzz47xZ/0KpiMhMNhZjKZmNVqZcFgkM2fP5+dPn1a6mlJpq+vj508eZIxxtjo6Cirqalh\np0+fZt/73vfYE088wRhjbMeOHewHP/gBY4yxjz/+mM2fP58Fg0FmtVqZyWRigiAwxhhbtGgRO3bs\nGGOMsdtvv5299dZbjDHGnn76afbII48wxhjbuXMn27BhQ1w/Y7z88pe/ZJs3b2arVq1ijDGK4QQ9\n8MAD7I9//CNjjLFQKMRcLhfFcAKsViurrKxkfr+fMcbYvffey5qbmymG43D48GF24sQJVldXxx+L\nR9wcDgerqqpiw8PDbHh4mH8tBVkl6iNHjrCVK1fy4+3bt7Pt27dLOCN5ueuuu9jbb7/NamtrWX9/\nP2NMTOa1tbWMMcYef/xxtmPHDv78lStXsvfff5/19vaymTNn8seff/559vDDD/PnHD16lDEm/gIu\nKiqK18eJG7vdzpqamtjBgwfZnXfeyRhjFMMJcLlcrLKy8pLHKYbj53A4WE1NDXM6nSwUCrE777yT\n7du3j2I4TlarNSpRxyNuzz33HPvqV7/KX/Pwww+z559/foo+4dXJ6tT35W6G0tPTI+GM5MNms+Hk\nyZNYsmQJBgYGUFJSAgAoKSnBwMAAAKC3txcGg4G/5kL8Pvu4Xq/ncf10zFUqFQoKCuB0OuP1seLi\n29/+Nn7+859Dqbz4404xHD+r1Ypp06bhwQcfxHXXXYeHHnoIXq+XYjgBWq0W3/3udzFjxgxMnz4d\nGo0GK1asoBheo6mOm8PhuOL3koKsEjXdZezyPB4P1q5diyeffBJ5eXlRYwqFguJ2Fa+//jqKi4vR\n0NBwxS3kKIZXFw6HceLECXzta1/DiRMnkJOTgx07dkQ9h2J4dRaLBb/5zW9gs9nQ29sLj8eDv/zl\nL1HPoRhem1SIm6wStV6vh91u58d2uz3qL5pUFAqFsHbtWtx///1Ys2YNAPEvyP7+fgBAX18fiouL\nAVwav+7ubhgMBuj1enR3d1/y+IXXdHV1ARB/IY+MjECr1cbls8XDkSNHsHv3blRWVmLTpk04ePAg\n7r//forhBBgMBhgMBixaJN4RcN26dThx4gRKS0sphuP00UcfYdmyZdDpdFCpVLjnnnvw/vvvUwyv\n0VT//9XpdLLKR7JK1AsXLkR7eztsNhuCwSBeeOEFrF69WuppSYYxhq985SuYPXs2tm3bxh9fvXo1\n/vSnPwEQuxIvJPDVq1dj586dCAaDsFqtaG9vx+LFi1FaWor8/HwcO3YMjDH8+c9/xl133XXJ93rp\npZfQ1NQU5085tR5//HHY7XZYrVbs3LkTt9xyC/785z9TDCegtLQU5eXlOHv2LABg//79mDNnDlat\nWkUxHKeZM2fi6NGj8Pl8YIxh//79mD17NsXwGsXj/++tt96Kffv2weVyYXh4GG+//TZWrlwpwaeF\nvLq+GWPszTffZDU1NcxkMrHHH39c6ulI6t1332UKhYLNnz+f1dfXs/r6evbWW28xh8PBmpqamNls\nZitWrIjqRHzssceYyWRitbW1bO/evfzxjz76iNXV1TGTycQeffRR/rjf72fr169n1dXVbMmSJcxq\ntcbzI8ZVS0sL7/qmGE5MW1sbW7hwIZs3bx67++67mcvlohhO0BNPPMFmz57N6urq2AMPPMCCwSDF\ncBw2btzIysrKmFqtZgaDgT3zzDNxi9szzzzDqqurWXV1NWtubo7L570cuuEJIYQQImOyOvVNCCGE\nkGiUqAkhhBAZo0RNCCGEyBglakIIIUTGKFETQgghMkaJmhBCCJExStSEpKjGxkYcP348pu+xZ8+e\nlN+OlpCpppJ6AoQQaUzGPZJXrVrF9/gmhEwNWlETIhNerxd33HEH6uvrMXfuXLz44osAgJ/97GdY\nvHgx5s6di4cffpg/v7GxEd/5znewaNEizJo1Cx9++CHuvvtu1NTU4Cc/+QkAcde1mTNn4r777sPs\n2bOxfv16+Hy+S9573759WLZsGRYsWIB7770XXq/3kuc89dRTmDNnDubPn4/NmzcDAJqbm/Hoo48C\nAOrr69HQ0ICGhgZkZ2fj3XffhdfrxdatW7FkyRJcd9112L179yXft6WlBY2NjVi/fj1mzZqF++67\nL/ZgEpJMJLsnGiEkyksvvcQeeughfjwyMsIYY8zpdPLH7r//frZnzx7GGGONjY3shz/8IWOMsSef\nfJKVlZWx/v5+FggEmMFgYE6nk1mtVqZQKNiRI0cYY4xt3bqV/eIXv+CvP378OBsaGmI33XQTGxsb\nY4wxtmPHDvazn/3skvlNnz6dBYPBqLk1Nzezb3zjG1HP2717N7vppptYKBRi//mf/8n+8pe/MMYY\nGx4eZjU1Nczr9UY9/9ChQ6ygoID19PQwQRDY9ddfz1pbW68lhIQkJVpREyIT8+bNw9tvv40f/vCH\naG1tRX5+PgDg4MGDWLp0KebNm4eDBw/i9OnT/DUXNq2pq6tDXV0dSkpKkJ6ejqqqKr7zT3l5Oa6/\n/noAwH333YfW1lb+esYYjh49itOnT2PZsmVoaGjAs88+y3cT+uz8Nm/ejL/+9a9IS0u77Gdob2/H\n97//fezatQsqlQr79u3Djh070NDQgOXLlyMQCETtSHTB4sWLMX36dCgUCtTX18Nms11bEAlJQlSj\nJkQmzGYzTp48iTfeeAM//vGP0dTUhO9///v4+te/juPHj0Ov1+O//uu/4Pf7+WsyMjIAAEqlkn99\n4TgcDgOI3uedMXbZuvSKFSvw3HPPXXV+b7zxBg4fPow9e/bgsccew6lTp6L2+PZ4PNiwYQP+8Ic/\noKSkhD/+yiuvwGw2X/V7f3ruaWlpfO6EEKpREyIbfX19yMzMxJe+9CX8x3/8B06ePMmTsk6ng8fj\n4XXriejq6sLRo0cBAM899xxuvPFGPqZQKLB06VK89957sFgsAMRaeXt7e9T3YIyhq6sLjY2N2LFj\nB0ZGRuDxeKKes3XrVjz44IO44YYb+GMrV67EU089xY9Pnjw54fkTkupoRU2ITJw6dQrf+973oFQq\noVar8bvf/Q4FBQV46KGHUFdXh9LSUixZsuSyr71aB3dtbS2efvppbN26FXPmzMEjjzwSNV5UVITm\n5mZs2rQJgUAAAPDYY49FrYIjkQjuv/9+jIyMgDGGb33rWygoKODv29XVhZdffhnt7e145plnAAB/\n/OMf8ZOf/ATbtm3DvHnzIAgCqqqqLmkou9zcY+1GJySZ0DaXhCQxm82GVatW4dSpU1JPhRByjejU\nNyFJjlanhCQ2WlETQgghMkYrakIIIUTGKFETQgghMkaJmhBCCJExStSEEEKIjFGiJoQQQmSMEjUh\nhBAiY/8fzj2UNX7XML4AAAAASUVORK5CYII=\n", - "text": [ - "" - ] - } - ], - "prompt_number": 71 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "As we can see in the first plot, the list comprehensions lead to a slightly increased performance in regular Python code. \n", - "But the second plot is quite interesting: List comprehensions in Cython are significantly slower than the regular for-loop structures. \n", - "Apparently, Cython has no difficulties turning the explicit for-loop into for-loop in C with basic float arithmetic. However, the list comprehension version is constantly writing to memory while it is iterating and appending new values.\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "Let us do a quick comparison by how much we were able to improve the performance of the simple least square implementation using Cython so far:\n", - "
" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import random\n", - "random.seed(12345)\n", - "\n", - "x = [x_i*random.randrange(8,12)/10 for x_i in range(500)]\n", - "y = [y_i*random.randrange(8,12)/10 for y_i in range(100,600)]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 72 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "funcs = ['lstsqr_comprehensions', 'cy_lstsqr_comprehensions', \n", - " 'cy_lstsqr_loops'] \n", - "labels = ['list comprehensions', 'list comprehensions (Cython)', \n", - " 'for-loops (Cython)']\n", - "\n", - "times = [timeit.Timer('%s(x,y)' %f, \n", - " 'from __main__ import %s, x, y' %f).timeit(1000)\n", - " for f in funcs]\n", - "\n", - "times_rel = [times[0]/times[i+1] for i in range(len(times[1:]))]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 73 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "#%pylab inline\n", - "#import matplotlib.pyplot as plt\n", - "\n", - "plt.figure(figsize=(8,6))\n", - "x_pos = np.arange(len(funcs[1:]))\n", - "plt.bar(x_pos, times_rel, align='center', alpha=0.5, color=\"green\")\n", - "plt.xticks(x_pos, labels[1:], rotation=90)\n", - "plt.ylabel('relative performance gain')\n", - "plt.title('Performance gain compared to the classic least square implementation')\n", - "ftext = 'For-loops in Cython are {:.2f}x faster then list comprehensions'\\\n", - " .format(times[1]/times[2],1)\n", - "plt.figtext(.15,.8, ftext, fontsize=11, ha='left')\n", - "plt.xlim([-1,len(funcs[1:])])\n", - "plt.ylim([0,max(times_rel)*1.2])\n", - "plt.grid()\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\nxoyR1NRUSUtLk3379olIVkKpXr26nD9/XpKTk6V79+4yYMAAEfnfCeDtt9+Whw8fytatW8XR0VG6\ndesmN27ckCtXroi3t7fs3r1bialEiRIyd+5cMRgMsmrVKnF1dVVOKEXZ/jn379y5c+X555+XK1eu\nSHp6ugwbNkz69u0rIiInT54UZ2dn2bt3rzx8+FDGjBkjJUqUyDdZi0ietpaeni7VqlWT6dOnS0ZG\nhuzYsUNcXFwkNjY23+lzbvtsOp1OXnrpJbl7965cvHhRvLy8ZMuWLSIisn79eqlevbrExMSI0WiU\nTz/9VJo3b57vvOPj48XFxUVWrlwpBoNBbt26Jf/8848Sd/aJqrD2kZycLGXLlpW4uDgREUlISJCT\nJ0+KiEifPn1k2rRpIpLVBrP3ffY6ZCfrgtp4bjmTtdFolIYNG8rUqVMlIyNDzp07J1WrVpXffvtN\nRLK+nB48eFCMRqPEx8dL7dq1Ze7cuSIismXLFmnUqJHy5TAmJkauXbuW7/7KrbBpe/fuLb1795bU\n1FQ5ceKEVKxYUVq2bCki+SfrnPv2zJkzsm3bNklPT5cbN25Iq1atZPTo0cpn/f39JSgoSC5fvixp\naWmPdPyLmHZ2HvX8FRwcLBUrVpSTJ09KSkqK9OjRQ/r375/venXr1k3eeustSU1NlevXr0uTJk2U\nL8fZx2lkZKRkZmbKpEmTpGLFisoXqa1bt4qLi4ukpKSISNaXopdfflnu3Lkj9+/fl5deekk+/PBD\npS0Udt7Mbz+uWbNG2VerVq0SJycnSUhIEBGRyMhI5YtVtpzz2L59u3h6esrRo0fl4cOH8u6770qr\nVq2UzxZ2TD6OpzpZ+/v7i7Ozs7i5uYm/v7+888478uDBA5kxY4Zyks/WoUMH5RtaSEiITJkyxWR8\nzhORiEi1atVMeoe//fab6PV6EclqFI6OjiYnjylTpkj79u2V4aioKHF2dpbMzEwREbl3757odDrl\ngM6tW7du8tVXXynzL126tMlB7O3trZxoSpcuLcePH88zD3PrndPu3bulYsWKJn9r0aJFgSelo0eP\nKt8uRfIm6+rVqyvjUlJSRKfTSWJiYp75/Pnnn+Ll5WWybtlat24t3377rTIcGxsrDg4OYjQalRNA\nzm+uHh4esnr1amW4R48eysl38eLFeb4wNGnSRJYtW5bv+uXe/rn3b+3atU2S79WrV8XBwUEMBoN8\n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\nZ2dnh+nTp+fZH6mpqejZsyfq1q2LBg0aoHfv3gCyzmM5v9gsXboU9erVQ/369dG9e3fcuHEDQOHn\nj/z2BVkJsVJPEpq/v7/UqlVLGjRoIA0aNJCtW7dKYmKieHl5yalTp0REZNGiRdK0aVMREdm5c6fY\n29vLgQMH8p3f4sWL5dVXXxURkc2bN0tAQIDcv39fREQGDhwo48ePFxGRDz74QMLCwkRE5N69e1K3\nbl359ddfRUQkODhYOnToIEajUZKTkyUwMFA2bdokt27dEjc3N0lLSxMRkeTkZDEYDHliCA8Pl7Fj\nxyrxuLu7y+XLl0VE5M0335SPPvoozzQHDx4UNze3ArfTli1bJDQ0VBlu3bq1REVFiYhISEiI/PLL\nLybboKBlfvPNN9K2bVvJyMiQ9PR0adOmjXz77bciIjJo0CBp2bKlPHz4UNLT06Vu3bry+++/5xvP\nrVu3REQkMzNTBg4cKN99952ybGdnZzl37pyIiNy5c0eCgoLk2rVrIiJy9epVqVSpkiQlJRW4riIi\n48ePl0aNGuU7zmg0SnBwsBw7dkzOnz8vnp6eyrgdO3ZIzZo15ebNm5KRkSG9e/eWsmXLKuNff/11\nef/99+WTTz6R3r17F7h8nU4nKSkpIiKSlpYmycnJIiKSnp4urVu3li1btoiISP369ZW2mJmZKffu\n3RORvPtk2bJlMnToUMnMzBSRrP3Qr18/ERGZMmWK+Pn5Kds0t8jISKVN54xv/vz5IiKyb98+qVix\noogUvL3v3r0r58+fF51Op8S1YsUKeeGFF/JdZlhYmDL/8PBwGTdunIiIdO3aVX766Sflc9n7Mefn\n8xMSEiKzZ89Whm/evCkiIr169ZKPP/5YRESuXbsmvr6+cvLkSRER0ev18sEHH4iIyF9//SWlS5eW\nb775RkREVq9eLS1atBARUdZr2bJlIiKya9cuqVSpkqSnpyvjpkyZoiy7bdu2smfPHhERefjwobRo\n0UJp53q9XlnX+Ph4cXZ2lpSUFMnIyJCGDRtKTEyMiGSdM2rWrCmxsbGF7o+ff/5ZOnTokGd77dy5\nUxo3biwiIv/++6/4+vpKQkKCiIhMnjxZaZuFHcsvv/xyvvuCtFFY3rOZy+AbN25E/fr1UatWLQBZ\nPb7hw4crveIaNWqgadOmZue9bds29O3bF87OzgCAoUOHYtSoUQCA7du3IyIiAgDg4uKCvn37Ytu2\n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\nRkSqmRA+AQlJCcUdBlmAj5sPZoTzUVtLKizv2cyvbhGR5SUkJUDfTV/cYZAFxK+PL+4QbBpfN0o2\ngzVGUlP8P/HFHQLZECZrIiIiK8dkTTYj+xlHIjXoG+iLOwSyIUzWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUtM\n1kRERFaOyZpsBmvWpCbWrElLTNZERERWjsmabAZr1qQm1qxJS0zWREREVo7JmmwGa9akJtasSUsl\nzH0gNjYWs2fPRnx8PAwGAwBAp9Nhx44dFg+OiIiIipCse/bsibfffhtvvPEG7O3tAWQla6Knza5d\nu9i7JtXE/xPP3jVpxmyydnBwwNtvv61FLERERJQPszXrl156CfPnz8e1a9dw+/Zt5R/R04a9alIT\ne9WkJbM968jISOh0OsyePdvk7+fPn7dYUERERPQ/ZpN1fHy8BmEQWR5r1qQm1qxJSwUm6+3bt6NN\nmzZYu3ZtvjeUde/e3aKBERERUZYCk/WePXvQpk0bbNy4kcmangnsVZOa2KsmLRWYrD/55BMAWTVr\nIiIiKj5ma9YAsGnTJkRHRyMtLU3528cff2yxoIgsgTVrUhNr1qQls49uDRs2DKtXr0ZERAREBKtX\nr8aFCxe0iI2IiIhQhGT9559/YunSpShXrhymTJmCAwcOIDY2VovYiFTFXjWpib1q0pLZZF26dGkA\nQJkyZXDlyhWUKFECCQkJFg+MiIiIsphN1l26dMGdO3cwbtw4NGrUCHq9Hn379i3yApKSkvDqq6+i\n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\nYiLKly8PAChfvjwSExO1CoOIiOipU0KLhSQnJ6NHjx746quv4OLiYjJOp9NBp9PlO11YWBj0ej0A\nwM6JhrcAABkuSURBVM3NDQ0aNEBISAgAYNeuXQDA4ScYTricAD30AP7XS8iuwz2rw9msJR5LDSdc\nTsCuXbs0b1/Zinv92Z7UH064nKCsrzWcv56F4ez/x8fHwxydiIjZTz2BjIwMdOnSBZ06dcLo0aMB\nALVq1cKuXbvg4+ODa9euITQ0FDExMaaB6XSwcGg2L2x0GPTd9MUdBllA/Pp4RM6N1Hy5bFPPruJq\nU7aksLxn0cvgIoLXX38dderUURI1AHTt2hVLliwBACxZsgTdunWzZBhEAFhjJHWxPZGWLHoZfN++\nfVi+fDnq1auHoKAgAMD06dMxYcIE9OrVC4sWLYJer8fq1astGQYREdFTzaLJukWLFsjMzMx33LZt\n2yy5aKI8+FwsqYntibTEN5gRERFZOSZrshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRER\nkZVjsiabwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWRERE\nVo7JmmwGa4ykJrYn0hKTNRERkZVjsiabwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZ\nOSZrshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRERkZVjsiabwRojqYntibTEZE1ERGTl\nmKzJZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRERkZVj\nsiabwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWREREVo7J\nmmwGa4ykJrYn0hKTNRERkZVjsiabwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZOSZr\nshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRERkZVjsiabwRojqYntibTEZE1ERGTlmKzJ\nZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWREREVo7JmmwGa4ykJrYn0hKTNRERkZVjsiab\nwRojqYntibTEZE1ERGTlmKzJZrDGSGpieyItMVkTERFZOSZrshmsMZKa2J5IS0zWREREVo7JmmwG\n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\n", - "text": [ - "" - ] - } - ], - "prompt_number": 88 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
\n", - "
\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Final Comparison: Cython vs. NumPy vs. SciPy for least squares fitting" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To wrap it up, let us compare the Cython code of our simple least squares fit implementation to the Numpy and Scipy functions - after we made some improvements by adding static type declarations and explicit for loops." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%load_ext cythonmagic" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 1 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%cython\n", - "\n", - "def cy_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " cdef double x_avg, y_avg, temp, var_x, cov_xy, slope, y_interc, x_i, y_i\n", - " x_avg = sum(x)/len(x)\n", - " y_avg = sum(y)/len(y)\n", - " var_x = 0\n", - " cov_xy = 0\n", - " for x_i, y_i in zip(x,y):\n", - " temp = (x_i - x_avg)\n", - " var_x += temp**2\n", - " cov_xy += temp*(y_i - y_avg)\n", - " slope = cov_xy / var_x\n", - " y_interc = y_avg - slope*x_avg\n", - " return (slope, y_interc)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 2 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import numpy as np\n", - "import scipy.stats" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 3 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def lin_lstsqr_mat(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " X = np.vstack([x, np.ones(len(x))]).T\n", - " return (np.linalg.inv(X.T.dot(X)).dot(X.T)).dot(y)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 4 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def numpy_lstsqr(x, y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " X = np.vstack([x, np.ones(len(x))]).T\n", - " return np.linalg.lstsq(X,y)[0]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 5 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def scipy_lstsqr(x,y):\n", - " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", - " return scipy.stats.linregress(x, y)[0:2]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 6 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "import random\n", - "random.seed(12345)\n", - "\n", - "funcs = ['cy_lstsqr', 'lin_lstsqr_mat',\n", - " 'numpy_lstsqr', 'scipy_lstsqr'] \n", - "\n", - "orders_n = [10**n for n in range(1, 6)]\n", - "times_n = {f:[] for f in funcs}\n", - "\n", - "for n in orders_n:\n", - " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", - " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", - " for f in funcs:\n", - " times_n[f].append(min(timeit.Timer('%s(x,y)' %f, \n", - " 'from __main__ import %s, x, y' %f)\n", - " .repeat(repeat=3, number=1000)))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 7 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%pylab inline" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 9 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import matplotlib.pyplot as plt\n", - "\n", - "labels = [('cy_lstsqr', 'Cython implementation'), \n", - " ('lin_lstsqr_mat', 'numpy matrix equation'),\n", - " ('numpy_lstsqr', 'numpy.linalg.lstsq()'), \n", - " ('scipy_lstsqr', 'scipy.stats.linregress()')] \n", - "\n", - "matplotlib.rcParams.update({'font.size': 12})\n", - "\n", - "fig = plt.figure(figsize=(10,8))\n", - "for lb in labels:\n", - " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", - "plt.xlabel('sample size n')\n", - "plt.ylabel('time per computation in milliseconds [ms]')\n", - "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", - "plt.legend(loc=2)\n", - "plt.grid()\n", - "plt.xscale('log')\n", - "plt.yscale('log')\n", - "plt.title('Performance of least square fit implementations for different sample sizes')\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\nhIWFoVGjRlBTU4Oenp5c9dvS0hLh4eG4c+cOtLW1oaurW6r97NatG9q0aYOhQ4fC398f2traWLhw\nIXJyckQOUEVUVNblobrbybLqV0WUVdaKh79L3amud4uVlRX27NmDGzduQCqVQltbW2av1Zw5c9Cq\nVSs4ODiA53mEhIRAS0sLDRo0gEQiqbA9fFc2bdoEe3t7tGzZEiEhITh37hz8/f1lxu3WrVuV7PrN\nN9+gd+/eaNiwId68eYO9e/eiQYMGghNX3J4xMTEYPnw4fH190bBhQ6SkpAAoHOEyMjLCN998g40b\nN6Jfv36YO3cu6tWrh/v37+Pff/9Fnz590L59+3JtWuMoZipe9fHo0SNhK5BZs2bRnj17qk22l5dX\nqVWrJQkNDaX27duTpqYmaWtrU7NmzWjhwoXC9bImUPr6+oommhMR5ebm0syZM4Vl9Y6OjqJVNUSl\nl2ETFU6aVlFREYUFBwcTz/OisO3btxPP85Sfn09EhZOke/bsSRKJhExNTcnX15fGjh0r2gZClv6L\nFi0StgIoYuvWreTk5ERqampkYGBAffr0ES0c+OOPP6hZs2akrq5Oenp61K5dO9qwYUMpuxTn3Llz\n5OzsTBoaGqSrq0vDhg0TVgQRFU6U5Xm+wsUOsp5jRc8tMjJSWPpvb29Pf/75J9nY2JCfnx8REZ04\ncYK6du1KRkZGpK6uTg0bNqTly5eL7jFlyhSSSqXlbj+yd+9e6tChA+np6QlbRGzatEkUZ82aNWRm\nZkYaGhrUvXv3UtsjEBEdPHiQGjVqRBoaGtSpUycKCwsjnueFCfC5ubk0YcIE0tfXJ21tbRo2bBit\nW7dOVEZklUmiwlWoM2fOJEtLS1JVVSUTExNyd3cXrW4uiaxnEx4eLloNSES0YsUKMjMzIyUlpXK3\nHyk5uVzWZPPiz6cIe3t70eroou1HvvjiC9LU1KS6devS6tWry71Xfn4+rVixguzt7UlVVZUMDQ3J\nxcVF1NbIqpfKysqltntQV1cXrXZ98uQJTZw4UajzZmZmNGDAALpy5UqZNpMlOygoiCwtLUlZWVmo\nm/LU7zt37pCzszPVqVOn3O1HHj16RB4eHqLtR6Kjo4Xr8ugpT1kvSXW2k2Uhq36VXLVaMm/yLHYg\nqrjulNeGVeXdUrJtfvr0KfXq1Yt0dHTK3X5k4cKF1LhxY6pTpw7p6OiQi4uLSKeK2kOiqtWB4tuP\n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\n86c//YkDBw7g5eXF119/jSRJDB48GCcnJ/bv309xcbG+hrF79+7cvHmTEydOEBwcjK2tLf7+/lha\nWvKPf/yDV155hZSUFN544416/19dXV2xs7Njz5499OrVC0tLS9RqNX/4wx+YPHkyPXv2pKKigm3b\ntuHn56ffJuNPf/oTp0+fZt++fa2KeVNGOVevXs0jjzzCq6++ysKFC7G3t+fatWts3bqVzz77DCsr\nK1599VVWrFhBaGgogwcP5pdffmHv3r0P3Fpk/PjxPPTQQ8yYMYMPP/yQPn36kJ+fz7Fjx7C2tmbp\n0qUPjP2DYjV27Nh7rkKWJIlTp07x4YcftiBygtD1lFeXs/7CejKK5X9QWxeWMetMOUEqN6oVCra6\nu5MwcCC4uQHQ29aWGeLcVKGVjPbT4+Pjw/Lly1m8ePFdX3vxxRexsrIiOzubDRs28F//9V9cunTp\nru/ramc32trakpiYyNy5cwkJCWHWrFmMGjWKzz77DGtraw4ePEh4eDhz586ld+/eLFu2TL8FBdw7\n8f3rX//KF198QUREBBs2bGDDhg316sQAnnjiCZycnJg0aZJ+w9jCwkKuXbtGdbW8PMTZ2Zlvv/2W\ncePG0bt3b/73f/+XL7/8Ul9EP336dJ588kkmT56Mu7s7//M//4Orqyvr169n7969hIeH89prr/HR\nRx/VS26USiX//Oc/2bJlC926dWNgnenpl19+mT59+jB27FjKy8vZvXu3/ms3b94kucH2Lg3f/4Ou\nG2trKDIykqioKC5cuMCYMWOIiIjglVdewcHBQb+9yMsvv8wf/vAHXnrpJQYMGMCpU6d49dVXsayz\nMk2hUNzzeT///DMzZszgj3/8I7169WLKlCns3r2b4DtbFTwo9g+K1cyZM8nOzubcuXP1nnvs2DFK\nSkqYMWPGA2PQFYj6IcPrTDEvrSplTcwafRJnU1DK3NPlBKlcqFAqWe/lRcLgwfokboC9PbPc3DpU\nEteZ4m0K2ireCsnI2dDy5ctJT0/Xj8iVlpbi7OxMfHy8/i+qZ555Bm9vb95//30AHnvsMWJjY/H3\n9+f555/X7+VV1/1qxsQB3vK+aYGBgRw5coQRI0bc93tzc3Pp1q0bmzdvZurUqQbqoelbvHgxFy9e\n5PTp08buCs899xwqlYp//etf+rYlS5ZgbW3NZ5991ur7iz9zgikrqixibexacsrk7Z7s8kqYe64K\n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\nRU5ErkJggg==\n", - "text": [ - "" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "So, using a few tweaks, such as static type declarations and explicit for-loops instead of list comprehensions, we managed to increase the performance of our least squares fit implementation quite significantly - it outperforms the alternative functions in Numpy and Scipy now." - ] } ], "metadata": {} From 604053e9b86940587e728e6c050928ff05d9f6ff Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 10 May 2014 12:05:43 -0400 Subject: [PATCH 034/248] upd cython article --- benchmarks/cython_least_squares.ipynb | 57 +++++++++++++-------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/benchmarks/cython_least_squares.ipynb b/benchmarks/cython_least_squares.ipynb index 5fc6944..c71c137 100644 --- a/benchmarks/cython_least_squares.ipynb +++ b/benchmarks/cython_least_squares.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:c63d806ef3ce407085d530f46ff34fdb5ed6bb79e32545e1ea8d5134d46bf946" + "signature": "sha256:5d04280c23460c2481423dabf313f3ad28f40fb4ad915967d83e3a08231c8b3d" }, "nbformat": 3, "nbformat_minor": 0, @@ -295,7 +295,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 1 + "prompt_number": 9 }, { "cell_type": "markdown", @@ -375,7 +375,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 2 + "prompt_number": 1 }, { "cell_type": "markdown", @@ -401,7 +401,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 3 + "prompt_number": 2 }, { "cell_type": "code", @@ -429,7 +429,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 4 + "prompt_number": 3 }, { "cell_type": "markdown", @@ -472,7 +472,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 5 + "prompt_number": 4 }, { "cell_type": "markdown", @@ -516,7 +516,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 7 + "prompt_number": 5 }, { "cell_type": "markdown", @@ -562,7 +562,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 8 + "prompt_number": 6 }, { "cell_type": "markdown", @@ -628,7 +628,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 11 + "prompt_number": 7 }, { "cell_type": "code", @@ -669,11 +669,11 @@ "output_type": "display_data", "png": "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\nRUdHU7duXf0+np6erz3CliQZg7W1tfwyWsTl5TDIkmQM+ZLo1Wo1W7duzfLZ39fpiPU8X19frl+/\nnucxSpIkSVJB5ePjw7Vr13K0b75cut+xYwc1atTAxcUF0J3FP+tZGhMTQ4kSJQDw8PDI8BzynTt3\n8PDwyFDW9evX9Y/2vIk/M2bMMHoMsv2y7bL9sv2y/fn7k5sT3HxJ9OvWrdNftgfo0KEDq1atAmDV\nqlV06tRJv3z9+vWo1Wpu3rzJ1atXqV27dn6EKEmSJElFksEv3SclJbFnzx6+//57/bLJkyfTvXt3\nQkJC9I/Xge456O7du+uHwfz2229lRxhJkiRJygWDJ3obG5sMYz2DbljIPXv2ZLn91KlTsxzeVNJp\n0qSJsUMwqje5/W9y20G2X7a/ibFDKLQMOmCOISgUCgpZyJIkSZKUK7nJfXIIXEmSJEkqwmSilyRJ\nkqQiTCZ6SZIkSSrCZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIkwmekmSJEkqwmSilyRJkqQiTCZ6\nSZIkSSrCZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIkwmekmSJEkqwmSilyRJkqQiTCZ6SZIkSSrC\nZKKXJEmSpCJMJnpJkiRJKsJkopckSZKkIszM2AFIkiRJWYuNjWXHjh2YmJjQtm1bnJycjB2SVAgp\nhBDC2EFkh0KhoJCFLEmSlG03btygdu1AUlLqAOnY2p7nzJkjuLu750v9f/75JzNnzichIYn+/bvQ\nv3/ffKlXylpucp88o5ckSSqAJk78mEePRqDVfgRAauqHTJv2KStWfGvwuv/880/q1GlCSso0wINj\nxz7m8eMERo9+z+B1S3lP3qOXJEkqgKKi7qHV1tC/Tk+vwe3bdw1e78OHDwkMbEVKyhBgAtADlWo1\n8+d/Y/C6AU6cOMHIkWMZO/Z9/v7773yps6iTiV6SJKkAatWqMUrlF8Bj4CFK5Ve0bh1o8HqnTp1N\nQoInYPrcUpN8uWW6f/9+mjZtz7JlJVm8WEmtWo25ePGiwest6mSilyRJKoA+/ngy77zjg6lpCczM\nPBgwoA7jx482eL2XLt1Aq+0P/AB8A/yCiUkPxo4dZvC6P/poHirVV8BkhJhNUtJ4Pv98scHrLepk\nopckSSqAzM3NWb36O1JTVaSkJPHttwsxMTH8n+yGDWtgbb0bCAMOYGLyPs2a+TNx4liD152cnAIU\n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\nYII=\n", "text": [ - "" + "" ] } ], - "prompt_number": 14 + "prompt_number": 10 }, { "cell_type": "markdown", @@ -735,7 +735,7 @@ ] } ], - "prompt_number": 15 + "prompt_number": 12 }, { "cell_type": "markdown", @@ -777,7 +777,7 @@ "\n", "funcs = ['py_classic_lstsqr', 'cy_classic_lstsqr', 'numba_classic_lstsqr']\n", "\n", - "orders_n = [10**n for n in range(2, 5)]\n", + "orders_n = [10**n for n in range(1, 7)]\n", "perf1 = {f:[] for f in funcs}\n", "\n", "for n in orders_n:\n", @@ -790,7 +790,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 19 + "prompt_number": 14 }, { "cell_type": "code", @@ -832,13 +832,13 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\nq6ysZIwxtnfvXqapqcnWrl3LUlNT2aZNm5i1tTWTSCQsNzdXuB9NTU1RvtnZ2YzjOBYbG8sYY6yh\noYEtXryYnT59mmVlZbH9+/czW1tbFhUVJZwTFRXF9PX1mVQqZadPn2apqamstLSUSaVSFhERwU6c\nOMEyMjLYxo0bmba2tui5bKq1zyYmJoZxHMdyc3NZfX09279/P+M4jiUnJ7OCggJWVFTU6vPg7OzM\nVqxYIWw7OTkxU1NTtnbtWpaens4++eQTJpFI2BNPPCGkrVq1ikkkEnb16lXhPI7jmLm5Ofvmm29Y\namoqW7duHdPU1GT79u1r9VrTp09nvr6+7MiRIywzM5P98ssvzNTUlG3atEmUb58+fdjWrVtZeno6\nmzdvHjMwMGBjxoxhW7ZsYenp6ezNN99kBgYGwjNUUVHBPD092YQJE9jZs2dZeno6W7FiBdPR0WHX\nrl1jjDHhPfP19WWHDx9maWlpbObMmczY2Fh4v86fP884jmN79uwR/T551Pe7pKSEhYWFsUmTJgnP\naeN3iOM49tNPPwnPTlBQEPP392cnTpxgly9fZhMnTmRmZmbCtRQp56OedfJ4oMCOdKvmAUFKSgpz\ndXVlw4YNY4zxf1y+++470TmxsbGM4zhWXFzMGOMDIw8PjxZ5R0VFMXd3d2G7vLyc6ejosP/+97+i\n48aNG8ciIyOFbY7j2OzZs0XHREdHM47j2MWLF4W0zz//nHEcx86dOyekrV27lllaWrZ5z88//zyb\nM2eOsB0eHs78/PxEx7z++uvCe8AYY3379mVvvvmm3PzKy8uZvr4+O3z4sCh9y5YtzNTUtNVyfPjh\nh6xv376strZWSLt48SLjOI7FxcUxxhjLyMhgHMexEydOtHlPzT9HRT635urr65mZmZnwx+63335j\nJiYmrQZs27ZtYxzHtVkuxhhbs2YN69+/v+g+mxo+fDibOnWqKG3BggVCgMSYYoFda9fu16+fsB0V\nFcUkEgnLzs4W0mJiYpiuri4rKSkRnTtz5kz2wgsvtJq3vM+maWDHGGPx8fGM4ziWlZXVaj6N5AV2\n48aNE7YbGhqYsbExe+6550RpZmZm7JtvvhHSOI5jr776qijvV155hYWGhsq91q1bt5hEImE3btwQ\nnbN8+XLR94LjODZ//nxh+969e4zjOPbWW28JaUVFRYzjOHbw4EHGGP+5OTg4sLq6OlHeERER7J13\n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\nIgXiHzlDZFWOcLMWAAAAAElFTkSuQmCC\n", + "png": "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\n40wV6QAAAABJRU5ErkJggg==\n", "text": [ - "" + "" ] } ], - "prompt_number": 22 + "prompt_number": 15 }, { "cell_type": "markdown", @@ -880,13 +880,12 @@ "import random\n", "random.seed(12345)\n", "\n", - "funcs = ['py_matrix_lstsqr', 'cy_classic_lstsqr', \n", + "funcs = ['cy_classic_lstsqr', 'py_matrix_lstsqr',\n", " 'numpy_lstsqr', 'scipy_lstsqr']\n", "\n", - "orders_n = [10**n for n in range(2, 5)]\n", + "orders_n = [10**n for n in range(1, 7)]\n", "perf2 = {f:[] for f in funcs}\n", "\n", - "\n", "for n in orders_n:\n", " x_list = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", " y_list = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", @@ -895,24 +894,24 @@ " for f in funcs:\n", " if f != 'cy_classic_lstsqr':\n", " perf2[f].append(timeit.Timer('%s(x_ary,y_ary)' %f, \n", - " 'from __main__ import %s, x_ary, y_ary' %f).timeit(1000))\n", + " 'from __main__ import %s, x_ary, y_ary' %f).timeit(1000))\n", " else:\n", " perf2[f].append(timeit.Timer('%s(x_list,y_list)' %f, \n", - " 'from __main__ import %s, x_list, y_list' %f).timeit(1000))" + " 'from __main__ import %s, x_list, y_list' %f).timeit(1000))\n" ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 14 + "prompt_number": 35 }, { "cell_type": "code", "collapsed": false, "input": [ - "labels = [ ( 'py_matrix_lstsqr', '\"matrix\" least squares in reg. (C)Python and NumPy'),\n", - " ('cy_classic_lstsqr', '\"classic\" least squares in reg. Cython'),\n", + "labels = [ ('cy_classic_lstsqr', '\"classic\" least squares in Cython (numpy arrays)'),\n", + " ('py_matrix_lstsqr', '\"matrix\" least squares in (C)Python and NumPy'),\n", " ('numpy_lstsqr', 'in NumPy'),\n", - " ('scipy_lstsqr','in SciPy')\n", + " ('scipy_lstsqr','in SciPy'),\n", " ]\n", "\n", "plt.rcParams.update({'font.size': 12})\n", @@ -936,13 +935,13 @@ { "metadata": {}, "output_type": "display_data", - "png": "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\nW4dRo0ahtLQUKSkpGD9+PG655RaD2vHx8YGLiwt27dqFcePGwd7eHp6engZ9viMiIpCamors7Gy4\nubnBw8ND9gcsAMybNw9xcXFYsmQJNmzYADc3Nzz33HNoaWnBAw88YPDj7e29TsPDoOuxc3Jywjff\nfIPbbruN62YNAb0tVLp06VJs27YNO3fuxIwZMxAXF4dnnnlG1pPRUxvdla9btw733Xcf/vjHP2Li\nxIn4+OOP8dFHH3V7ybC79vpa9uqrr+qXX5k/fz5CQkJw2223dbmk27mdzmX33nsvNm3ahO3bt2Py\n5MlITEzErl279L8gnnrqKbzyyit49913ERsbi/j4eLz22mvX7PHw8/PDd999h8LCQkyfPh2/+tWv\n9Mlub4+xu8fc8X69vW4KhQKffvopLl26hEmTJuGee+7BI488IluPzcvLC1999RVuvPFGjBkzBk88\n8QRWr16tX+x1+vTpePjhh3H//ffD398fDz30ULexeXl5YePGjUhKSsL48ePxj3/8A++++67+Nf/1\nr3+Nv//973jppZcQExODTz75BC+++KLs+8XT0xOffPIJDhw4gJiYGKxbtw4vv/yy7DHff//9WLZs\nGVasWIEpU6bg8OHDWLt2ba+vNQDs2LEDixYtwiOPPIJx48bhl7/8Jf7v//4PI0eO7PV5v1aZv78/\nXnjhBfz1r39FYGAgFi5caHBb/Xm/t3v66aexe/duxMbG4q9//StefvllWRLV+Zh33nkHjzzyCNat\nW4fo6GjMnz8fH374IaKionqM1xDtPfTTpk3DihUrMGbMGNx66604cuQIwsPDr/kYOlIoFNiwYQO2\nbduGkJAQfS+jIZ/vRx99FD4+PoiJiYGfnx/27dvX7Tm++OILjB07FjfddBPi4uJQVlaG77//Hl5e\nXgbH2dt7nYYHSQzS7GjFihV47LHHeuzeJyLqL7VajeTkZBQWFiIwMNDS4QwqCoUCW7duxZIlSywd\nCtGwNOh67IiIiIioexZL7N58801MmzYNDg4OXfbRq6ysxMKFC/Wri3feGaDdYNprkIgGF36/ENFg\nZLHJE0FBQVi9ejV27dqFxsZGWd3vf/97ODg4oKysDMePH8dNN92EmJiYLgNAB+lVZCKyciqVyuwz\nSYeKgSx9QkRGYM7VkLvz1FNPieXLl+tv19XVCTs7O3HhwgV92V133SWeeOIJ/e0bb7xRBAYGilmz\n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\n/B+P+oR2lLvXHQAAAABJRU5ErkJggg==\n", + "png": "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\nJzAwkLi4ONLS0tQ/YD/77DNmzZrF4sWLAdXfEUtLS9atW4elpSWnTp1i0KBB6ASL1c8AACAASURB\nVOnpERUVhYODA23btkWhUPDee+9plLNdu3bUrFmTY8eOMWTIEL7//nu8vb15/Pgxhw8f1ii3TCbD\nzc2NPXv28P777+f7nr81ygqqIl1aaqpSeeCAUvnf/yqVkya9+TdlilK5a5dS+fJlGRfwLYiLiyvr\nImST1zM1d26cctIkpdLbW/Nfu3ZxGvesMP/atYvLlt+kSapzlZRly5YpDQ0Nlbdu3cpx+7Vr15QS\niUS5b9++XPPYtGmT0sDAQP26a9euyqCgoBz3ffjwoVIikSjj4+NzzU8ikSjXrFmjVCqVyt27dysl\nEony2LFjBbmcfPn4+CjDwsKUSqVS+ezZM6WxsbFyx44dGvusWLFCaW5unmseDx48UEokEuX+/fuV\nSqVSGR0draxTp44yJSUlx/2nTp2qtLe3z7dsI0aMULZu3TrX7TY2NsovvvhCI61Xr15KPT099etJ\nkyYpnZycNPb57bfflBKJRHnjxo1c8x4+fLiyTZs26tf9+/dXWlhYKJ89e6ZO+/7775U1atRQpqam\nahzr6+urHDlyZIGuISf29vbK6dOnq1/b2dkpu3btqrFPhw4dlH379s01jyFDhuR5zzK8fPlSWa1a\nNeWyZcvUaQEBAcpu3bqpXw8YMEDp4+OT7ViJRKIcMWKERlrdunWVn3/+uVKpVCovXbqklEgkym3b\ntmns07BhQ2VISIhSqXzzeZo7d656e1pamlImkymXLl2aa7l//vlnpUQiUT59+lQj3dvbW+np6amR\nNmTIEOV7772nft2/f3+lv7+/xj6rVq1SSiQS9etJkyYpdXV1lQ8ePFCnDR06VKmjo6O8f/++Om3E\niBHKxo0ba+Qtk8mUT548Uaft3LlTKZFIlFeuXFEqlarPh52dnTI9PV2pVCqV58+fV0okEuXJkydz\nvd6cdO3aVf3Zzbh2Z2dnjX0y3t9p06blm190dLSydu3a6tebNm1SmpiYqK/l77//VhobGyu3bNmi\n3l6pUiWNa81Jly5dlB999FGu2/P6HimpuEU0xZZzV6/CkiWqKUxevnyTXqcOhIerauoMDMqufIKK\nnl56juk6OjmnF4RUmvOx+vpFzzOrY8eO4ebmVqh+O5s2baJVq1bY2Nggk8kIDAwkJSWF5ORkAMLD\n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\n", "text": [ - "" + "" ] } ], - "prompt_number": 15 + "prompt_number": 36 }, { "cell_type": "markdown", From 9166f5d3ba8a4ffe6d4be89d77c8241a60f4ec33 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 11 May 2014 12:33:58 -0400 Subject: [PATCH 035/248] surprise --- funstuff/happy_mothers_day.ipynb | 119 +++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 funstuff/happy_mothers_day.ipynb diff --git a/funstuff/happy_mothers_day.ipynb b/funstuff/happy_mothers_day.ipynb new file mode 100644 index 0000000..85ef519 --- /dev/null +++ b/funstuff/happy_mothers_day.ipynb @@ -0,0 +1,119 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:eeeed0cea91d7503e20b21f6a2e90637fbd3a9ae171e49fc645e45d9e2f77b8c" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sebastian Raschka\n", + "last updated: 05/11/2014\n", + "\n", + "- Link to the GitHub Repository" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Happy Mother's Day!" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import numpy as np" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "x = np.arange(-1,1.001,0.001)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "y1 = (x**2)**(1.0/3) + np.sqrt(1-x**2)\n", + "y2 = (x**2)**(1.0/3) - np.sqrt(1-x**2)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 4 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%matplotlib inline" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 5 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.rcParams.update({'font.size': 12})\n", + "fig = plt.figure(figsize=(8,8))\n", + "plt.plot(x, y1, lw=15, color='r')\n", + "plt.plot(x, y2, lw=15, color='r')\n", + "plt.xlim(-1.2, 1.2)\n", + "plt.title(\"Happy Mother's Day\")\n", + "\n", + "ftext = 'x = np.arange(-1,1.001,0.001)'\\\n", + " '\\ny1 = (x**2)**(1.0/3) + np.sqrt(1-x**2) '\\\n", + " '\\ny2 = (x**2)**(1.0/3) - np.sqrt(1-x**2)'\\\n", + " '\\n\\n\\n[inspired by a MATLAB impl. by TU Delft]'\n", + "plt.figtext(.32,.45, ftext, fontsize=11, ha='left')\n", + "\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nSZOoRYsW5O7uTtOnTy+wjaNHj1LTpk1JqVSSp6cnbd68mYiI7t27R+3ataPGjRtT586d6d1336Vl\ny5YREdHgwYNp2LBh1KpVK1IqlTRu3DhSKBTk4+NDSqWSkpKSJL3eP/30E/n7+1NGRgZlZWXRW2+9\nRd9//z0RFf65+eOPP6hcuXI0cODAQtv19vZW68EfHBxMGzdu1BhLmZKVReTqKu37VsMkNsZCU97j\n0+BSSD0V/sMP4mNUCg0fPhzbt29XnYr+4Ycf0L9//xIfKZS0bvijR48QFxeH+vXrAxC9qkNDQ/HB\nBx/gxIkTCAkJwc8//wwzMzNMmTIFXl5e6N+/P1JTU7Fw4ULcvHkTU6ZMwYQJEzBmzBgsWrQIERER\navt49eoV1q1bh65du6oea9GiBY4fP47MzEycOHECixYtwvjx4zFu3DhMnjwZsbGxWLhwITIyMtC/\nf380btxYNZ1kziQhJZWYmAgiQrVq1VSP5a6THRMTAwcHB7Xe5507d4aDgwM2bdqkVpAld/yaUDE/\nr5rqpSsUCly6dAnHjx/HuXPn8Pvvv6tNc5lj4cKFmDJlCiIjIxEdHY133nkHADBhwgQEBQUhJiYG\ny5Ytwz///KM2AuD8+fPYu3cvIiMjsWzZMgCiEl5kZCQqV66s9esNiPK1Xl5emDp1KubNm4caNWpg\n5MiRiI2NLfBzs27dOkRGRuL9999H//79MWLECGRnZ6u1GRYWhmfPnqmqwwFAy5Yt8Tf3a/nXwYOi\n+qO2mjQBGjeWLx5D0NtPhhIy4tD+lZ1N5OYm7dfeP/8Y+lnozMiRI+m7776jjIwMcnJyouvXr6st\n18WRdUREhFrRjxwhISFkYWFBf/zxR75lBR0phoWFUWhoaL7HMzIy6P/+7/9owoQJ+ZbVrFlT7Ygq\nNDSUwsLCitzf2LFjafHixfnWK+pI7/Hjx2RlZaX2WOfOnWnnzp1ERDR//nz63//+l2+77Oxsmj9/\nfr4xx3njzxEZGUlKpZKUSiW5u7tTtWrVVPfnzp1bYGxBQUG0fft21f1WrVrR3r17Vcs2bdqkWjZ/\n/nz66KOP8rXxzTffkKenJ82bN48iIiJUj1erVo3i4+NV97t166aaDjM4OJgWLFig1o5CoVBNr0mk\n/eud49WrV9SoUSPy8PCgFy9eqC0r7HNT2NmImJgYcnJyyjcu/s8//6SgoKAiYykzeveW9j371VeG\n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\nLNa5wFaqhhEXF5f6vD1jb2+f5XPo4eGByMhI3L59G1u3bkVQUBA+/fRTQ5yqScvL88zXtYy8POd8\nXcvK6f3bVF7jFlusPT09YWVllelX+vtDubmytrOzw8OHD1O/j4mJAaD+QZKS03Nub2+f5jkE1POY\n1XNYtWpVVKlSBQBQv359zJo1C999912+/zlMXfrXKpD188zXtYy8POd8XcvK6f3bVF7jFlusQ0JC\nkJKSkulX+pmXeWml+kx2rVQtVU7Pec2aNZGUlIRLly6l/k5ERATq16+f68fIzQcrS1erVq1cP898\nXcvIy3OeGb6uX1xO79+m8hq32GKdG2ylaljFihVDr169MGvWLDx69AiHDx9GcHAwhgwZkunxu3bt\nQnR0NADg/PnzmDt3Lnr06GHIUzZJeXme+bqWkZfnnK9rGbl9/zaZ13hBzm4zdv7+/hl2G5szZ45e\nr9fro6Ki9HZ2dvo///wz9fjPPvtM7+joqC9evLh+5MiR+sTExII6dZN17949fY8ePfTFihXTV6lS\nRR8UFJT6/9I/55MnT9Y7OjrqixUrpq9WrZre399fn5SUVFCnblKyep75us4/uX3O+bqWkdX7t6m+\nxtlulIiIyMhxGJyIiMjIsVgTEREZORZrIiIiI8diTUREZORYrImIiIwcizUREZGRY7EmIiIycizW\nRERERu7/AP8FKy4MQovVAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Source: Equation was adopted from a [MATLAB implementation](https://twitter.com/tudelft/status/465500616891330561/photo/1) by researches from Delft University of Technology]" + ] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file From 5e75fec086321629d92f9e67d02b42a778787301 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 11 May 2014 12:38:08 -0400 Subject: [PATCH 036/248] Happy Mother's Day --- README.md | 1 + funstuff/happy_mothers_day.ipynb | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c970e0e..a6a6686 100755 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ Useful functions, tutorials, and other Python-related things - [Benchmarks of different palindrome functions](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/palindrome_timeit.ipynb?create=1) - [A collection of not so obvious Python stuff you should know!](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb?create=1) - [Python's scope resolution for variable names and the LEGB rule](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb?create=1) +- [Happy Mother's Day](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/funstuff/happy_mothers_day.ipynb?create=1) ### Links to Markdown files - [A thorough guide to SQLite database operations in Python](./sqlite3_howto/README.md) diff --git a/funstuff/happy_mothers_day.ipynb b/funstuff/happy_mothers_day.ipynb index 85ef519..f076f11 100644 --- a/funstuff/happy_mothers_day.ipynb +++ b/funstuff/happy_mothers_day.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:eeeed0cea91d7503e20b21f6a2e90637fbd3a9ae171e49fc645e45d9e2f77b8c" + "signature": "sha256:1e7add170bf70122859ff2c20df61a8aa1e1cd07c56d24b3aef9b53159412581" }, "nbformat": 3, "nbformat_minor": 0, @@ -15,7 +15,8 @@ "Sebastian Raschka\n", "last updated: 05/11/2014\n", "\n", - "- Link to the GitHub Repository" + "- Link to [this IPython Notebook](https://github.com/rasbt/python_reference/blob/master/funstuff/happy_mothers_day.ipynb) on GitHub\n", + "- Link to the [GitHub repository](https://github.com/rasbt/python_reference/tree/master/funstuff)" ] }, { From 829a260c9a8557403f54cef949f0bff3f2ea5bc3 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 11 May 2014 12:44:26 -0400 Subject: [PATCH 037/248] Happy Mother's Day --- funstuff/happy_mothers_day.ipynb | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/funstuff/happy_mothers_day.ipynb b/funstuff/happy_mothers_day.ipynb index f076f11..9a3acd6 100644 --- a/funstuff/happy_mothers_day.ipynb +++ b/funstuff/happy_mothers_day.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:1e7add170bf70122859ff2c20df61a8aa1e1cd07c56d24b3aef9b53159412581" + "signature": "sha256:22eebfc6362172b18bd5f7cf4997f70cd1453ec5eccf2c962aa66119c70cc82d" }, "nbformat": 3, "nbformat_minor": 0, @@ -12,13 +12,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Sebastian Raschka\n", + "Sebastian Raschka \n", "last updated: 05/11/2014\n", "\n", "- Link to [this IPython Notebook](https://github.com/rasbt/python_reference/blob/master/funstuff/happy_mothers_day.ipynb) on GitHub\n", "- Link to the [GitHub repository](https://github.com/rasbt/python_reference/tree/master/funstuff)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, { "cell_type": "markdown", "metadata": {}, From 31a40c29bbaf93d8de59dd834683c1eae958d03e Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 11 May 2014 13:13:47 -0400 Subject: [PATCH 038/248] link upd. --- funstuff/happy_mothers_day.ipynb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/funstuff/happy_mothers_day.ipynb b/funstuff/happy_mothers_day.ipynb index 9a3acd6..de8f0db 100644 --- a/funstuff/happy_mothers_day.ipynb +++ b/funstuff/happy_mothers_day.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:22eebfc6362172b18bd5f7cf4997f70cd1453ec5eccf2c962aa66119c70cc82d" + "signature": "sha256:c47e61a194d5b7fe9015e4a6494048a41f535f22a9a874def78f1a7fc13b1243" }, "nbformat": 3, "nbformat_minor": 0, @@ -12,11 +12,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Sebastian Raschka \n", + "[Sebastian Raschka](http://sebastianraschka.com) \n", "last updated: 05/11/2014\n", "\n", "- Link to [this IPython Notebook](https://github.com/rasbt/python_reference/blob/master/funstuff/happy_mothers_day.ipynb) on GitHub\n", - "- Link to the [GitHub repository](https://github.com/rasbt/python_reference/tree/master/funstuff)" + "- Link to the [GitHub repository](https://github.com/rasbt/python_reference)" ] }, { From 061975b72aa424bd28b01860b1a49ddfc8e831fe Mon Sep 17 00:00:00 2001 From: Sebastian Raschka Date: Mon, 12 May 2014 15:25:31 -0400 Subject: [PATCH 039/248] reorganized Readme --- README.md | 43 ++++++++++----- useful_scripts/fix_tab_csv.ipynb | 94 ++++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+), 13 deletions(-) create mode 100644 useful_scripts/fix_tab_csv.ipynb diff --git a/README.md b/README.md index a6a6686..8dcdf81 100755 --- a/README.md +++ b/README.md @@ -4,16 +4,33 @@ Python Tutorials and References Useful functions, tutorials, and other Python-related things -###Links to view the IPython Notebooks - -- [Python benchmarks via `timeit`](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/timeit_tests.ipynb?create=1) -- [Implementing the least squares fit method for linear regression and speeding it up via Cython](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb?create=1) -- [Benchmarks of different palindrome functions](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/palindrome_timeit.ipynb?create=1) -- [A collection of not so obvious Python stuff you should know!](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb?create=1) -- [Python's scope resolution for variable names and the LEGB rule](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb?create=1) -- [Happy Mother's Day](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/funstuff/happy_mothers_day.ipynb?create=1) - -### Links to Markdown files -- [A thorough guide to SQLite database operations in Python](./sqlite3_howto/README.md) -- [Unit testing in Python - Why we want to make it a habit](./tutorials/unit_testing.md) -- [Installing Scientific Packages for Python3 on MacOS 10.9 Mavericks](./tutorials/installing_scientific_packages.md) +###Links to view the IPython Notebooks and Markdown files + +
+
+
+ +**// Python tips and tutorials** + +- A collection of not so obvious Python stuff you should know! [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb?create=1) +- Python's scope resolution for variable names and the LEGB rule [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb?create=1) +- A thorough guide to SQLite database operations in Python [[Markdown]](./sqlite3_howto/README.md) +- Unit testing in Python - Why we want to make it a habit [[Markdown]](./tutorials/unit_testing.md) +- Installing Scientific Packages for Python3 on MacOS 10.9 Mavericks [[Markdown]](./tutorials/installing_scientific_packages.md) + +**// benchmarks** + +- Python benchmarks via `timeit` [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/timeit_tests.ipynb?create=1) +- Implementing the least squares fit method for linear regression and speeding it up via Cython [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb?create=1) +- Benchmarks of different palindrome functions [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/palindrome_timeit.ipynb?create=1) + + + +**// other** + +- Happy Mother's Day [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/funstuff/happy_mothers_day.ipynb?create=1) + + +**// useful snippets** + +- convert 'tab-delimited' to 'comma-separated' CSV files [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/useful_scripts/fix_tab_csv.ipynb?create=1) diff --git a/useful_scripts/fix_tab_csv.ipynb b/useful_scripts/fix_tab_csv.ipynb new file mode 100644 index 0000000..496f89f --- /dev/null +++ b/useful_scripts/fix_tab_csv.ipynb @@ -0,0 +1,94 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:996358a25da6fc77c66d183e79209307af06bd2f9abb0656d3bb70cfc2fe597a" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sebastian Raschka 05/09/2014" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Fixing CSV files" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have a directory `../CSV_files_raw/` with CSV files where some of them have 'tab-separated' and some of them 'comma-separated' columns. \n", + "Here, we will 'fix' them, i.e., have them all comma-separated, and save them to a new directory `../CSV_fixed`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, we create a dictionary with the file basenames as keys. The values are lists of the file paths to the raw and new fixed CSV files. e.g., \n", + "\n", + " {\n", + " 'abc.csv': ['../CSV_files_raw/abc.csv', '../CSV_fixed/abc.csv'], \n", + " 'def.csv': ['../CSV_files_raw/def.csv', '../CSV_fixed/def.csv'], \n", + " ...\n", + " }" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import sys\n", + "import os\n", + "\n", + "raw_dir = '../CSV_files_raw/'\n", + "fixed_dir = '../CSV_fixed'\n", + "\n", + "if not os.path.exists(fixed_dir):\n", + " os.mkdir(fixed_dir)\n", + "\n", + "f_dict = {os.path.basename(f):[os.path.join(raw_dir, f),\n", + " os.path.join(fixed_dir, f)]\n", + " for f in os.listdir(raw_dir) if f.endswith('.csv')} " + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we can replace the tabs with commas for the new files very easily:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for f in f_dict.keys():\n", + " with open(f_dict[f][0], 'r') as raw, open(f_dict[f][1], 'w') as fixed:\n", + " for line in raw:\n", + " line = line.strip().split('\\t')\n", + " fixed.write(','.join(line) + '\\n')" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 11 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file From df97f1b70c7e5c535a7689b8454a07ba71aed81a Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 13 May 2014 22:41:40 -0400 Subject: [PATCH 040/248] sorting csvs --- README.md | 3 +- tutorials/scope_resolution_legb_rule.md | 579 +++++++++++++++++++++++ tutorials/sorting_csvs.ipynb | 585 ++++++++++++++++++++++++ 3 files changed, 1166 insertions(+), 1 deletion(-) create mode 100644 tutorials/scope_resolution_legb_rule.md create mode 100644 tutorials/sorting_csvs.ipynb diff --git a/README.md b/README.md index 8dcdf81..0d2e24c 100755 --- a/README.md +++ b/README.md @@ -17,13 +17,14 @@ Useful functions, tutorials, and other Python-related things - A thorough guide to SQLite database operations in Python [[Markdown]](./sqlite3_howto/README.md) - Unit testing in Python - Why we want to make it a habit [[Markdown]](./tutorials/unit_testing.md) - Installing Scientific Packages for Python3 on MacOS 10.9 Mavericks [[Markdown]](./tutorials/installing_scientific_packages.md) +- Sorting CSV files using the Python csv module [](./tutorials/http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb?create=1) **// benchmarks** - Python benchmarks via `timeit` [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/timeit_tests.ipynb?create=1) - Implementing the least squares fit method for linear regression and speeding it up via Cython [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb?create=1) - Benchmarks of different palindrome functions [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/palindrome_timeit.ipynb?create=1) - +- (#marking) **// other** diff --git a/tutorials/scope_resolution_legb_rule.md b/tutorials/scope_resolution_legb_rule.md new file mode 100644 index 0000000..6722604 --- /dev/null +++ b/tutorials/scope_resolution_legb_rule.md @@ -0,0 +1,579 @@ +# A Beginner's Guide to Python's Namespaces, Scope Resolution, and the LEGB Rule # + + +This is a short tutorial about Python's namespaces and the scope resolution for variable names using the LEGB-rule. The following sections will provide short example code blocks that should illustrate the problem followed by short explanations. You can simply read this tutorial from start to end, but I'd like to encourage you to execute the code snippets - you can either copy & paste them, or for your convenience, simply [download it as IPython notebook](https://raw.githubusercontent.com/rasbt/python_reference/master/tutorials/scope_resolution_legb_rule.ipynb). + +
+
+ +## Objectives +- Namespaces and scopes - where does Python look for variable names? +- Can we define/reuse variable names for multiple objects at the same time? +- In which order does Python search different namespaces for variable names? + +
+
+ +## Sections +- [Introduction to namespaces and scopes](#introduction) +- [1. LG - Local and Global scopes](#section_1) +- [2. LEG - Local, Enclosed, and Global scope](#section_2) +- [3. LEGB - Local, Enclosed, Global, Built-in](#section_3) +- [Self-assessment exercise](#assessment) +- [Conclusion](#conclusion) +- [Solutions](#solutions) +- [Warning: For-loop variables "leaking" into the global namespace](#for_loop) + + +
+
+ +##Introduction to Namespaces and Scopes + +
+ +###Namespaces +
+ +Roughly speaking, namespaces are just containers for mapping names to objects. As you might have already heard, everything in Python - literals, lists, dictionaries, functions, classes, etc. - is an object. +Such a "name-to-object" mapping allows us to access an object by a name that we've assigned to it. E.g., if we make a simple string assignment via `a_string = "Hello string"`, we created a reference to the `"Hello string"` object, and henceforth we can access via its variable name `a_string`. + +We can picture a namespace as a Python dictionary structure, where the dictionary keys represent the names and the dictionary values the object itself (and this is also how namespaces are currently implemented in Python), e.g., + +
a_namespace = {'name_a':object_1, 'name_b':object_2, ...}
+ + +Now, the tricky part is that we have multiple independent namespaces in Python, and names can be reused for different namespaces (only the objects are unique, for example: + +
a_namespace = {'name_a':object_1, 'name_b':object_2, ...}
+b_namespace = {'name_a':object_3, 'name_b':object_4, ...}
+ +For example, every time we call a `for-loop` or define a function, it will create its own namespace. Namespaces also have different levels of hierarchy (the so-called "scope"), which we will discuss in more detail in the next section. + +
+
+ +### Scope + + +In the section above, we have learned that namespaces can exist independently from each other and that they are structured in a certain hierarchy, which brings us to the concept of "scope". The "scope" in Python defines the "hierarchy level" in which we search namespaces for certain "name-to-object" mappings. +For example, let us consider the following code: + +`Input:` +
i = 1
+
+def foo():
+    i = 5
+    print(i, 'in foo()')
+print(i, 'global')
+
+foo()
+
+ +`Output:` +
1 global
+5 in foo()
+
+ +
+
+Here, we just defined the variable name `i` twice, once on the `foo` function. + +- `foo_namespace = {'i':object_3, ...}` +- `global_namespace = {'i':object_1, 'name_b':object_2, ...}` + +So, how does Python now which namespace it has to search if we want to print the value of the variable `i`? This is where Python's LEGB-rule comes into play, which we will discuss in the next section. + +
+### Tip: +If we want to print out the dictionary mapping of the global and local variables, we can use the +the functions `global()` and `local() + +`Input:` +
#print(globals()) # prints global namespace
+#print(locals()) # prints local namespace
+
+glob = 1
+
+def foo():
+    loc = 5
+    print('loc in foo():', 'loc' in locals())
+
+foo()
+print('loc in global:', 'loc' in globals())    
+print('glob in global:', 'foo' in globals())
+
+ +`Output:` +
loc in foo(): True
+loc in global: False
+glob in global: True
+
+ +
+
+ +### Scope resolution for variable names via the LEGB rule. + +We have seen that multiple namespaces can exist independently from each other and that they can contain the same variable names on different hierachy levels. The "scope" defines on which hierarchy level Python searches for a particular "variable name" for its associated object. Now, the next question is: "In which order does Python search the different levels of namespaces before it finds the name-to-object' mapping?" +To answer is: It uses the LEGB-rule, which stands for + +**Local -> Enclosed -> Global -> Built-in**, + +where the arrows should denote the direction of the namespace-hierarchy search order. + +- *Local* can be inside a function or class method, for example. +- *Enclosed* can be its `enclosing` function, e.g., if a function is wrapped inside another function. +- *Global* refers to the uppermost level of the executing script itself, and +- *Built-in* are special names that Python reserves for itself. + +So, if a particular name:object mapping cannot be found in the local namespaces, the namespaces of the enclosed scope are being searched next. If the search in the enclosed scope is unsuccessful, too, Python moves on to the global namespace, and eventually, it will search the global namespaces (side note: if a name cannot found in any of the namespaces, a *NameError* will is raised). + +**Note**: +Namespaces can also be further nested, for example if we import modules, or if we are defining new classes. In those cases we have to use prefixes to access those nested namespaces. Let me illustrate this concept in the following code block: + +`Input:` +
import numpy
+import math
+import scipy
+
+print(math.pi, 'from the math module')
+print(numpy.pi, 'from the numpy package')
+print(scipy.pi, 'from the scipy package')
+
+ +`Output:` +
3.141592653589793 from the math module
+3.141592653589793 from the numpy package
+3.141592653589793 from the scipy package
+
+
+
+(This is also why we have to be careful if we import modules via "`from a_module import *`", since it loads the variable names into the global namespace and could potentially overwrite already existing variable names) + +
+ +
+
+![LEGB figure](../Images/scope_resolution_1.png) +
+
+ + +
+
+ +## 1. LG - Local and Global scopes + + +**Example 1.1** +As a warm-up exercise, let us first forget about the enclosed (E) and built-in (B) scopes in the LEGB rule and only take a look at LG - the local and global scopes. +What does the following code print? + +
a_var = 'global variable'
+
+def a_func():
+    print(a_var, '[ a_var inside a_func() ]')
+
+a_func()
+print(a_var, '[ a_var outside a_func() ]')
+
+ +**a)** +
raises an error
+ +**b)** +
+global value [ a_var outside a_func() ]
+ +**c)** +
global value [ a_var in a_func() ]  
+global value [ a_var outside a_func() ]
+ +[[go to solution](#solutions)] + +### Here is why: + +We call `a_func()` first, which is supposed to print the value of `a_var`. According to the LEGB rule, the function will first look in its own local scope (L) if `a_var` is defined there. Since `a_func()` does not define its own `a_var`, it will look one-level above in the global scope (G) in which `a_var` has been defined previously. +
+
+ + +**Example 1.2** +Now, let us define the variable `a_var` in the global and the local scope. +Can you guess what the following code will produce? + +
a_var = 'global value'
+
+def a_func():
+    a_var = 'local value'
+    print(a_var, '[ a_var inside a_func() ]')
+
+a_func()
+print(a_var, '[ a_var outside a_func() ]')
+
+ +**a)** +
raises an error
+ +**b)** +
local value [ a_var in a_func() ]
+global value [ a_var outside a_func() ]
+ +**c)** +
global value [ a_var in a_func() ]  
+global value [ a_var outside a_func() ]
+ + +[[go to solution](#solutions)] + +### Here is why: + +When we call `a_func()`, it will first look in its local scope (L) for `a_var`, since `a_var` is defined in the local scope of `a_func`, its assigned value `local variable` is printed. Note that this doesn't affect the global variable, which is in a different scope. + +
+However, it is also possible to modify the global by, e.g., re-assigning a new value to it if we use the global keyword as the following example will illustrate: + +`Input:` +
a_var = 'global value'
+
+def a_func():
+    global a_var
+    a_var = 'local value'
+    print(a_var, '[ a_var inside a_func() ]')
+
+print(a_var, '[ a_var outside a_func() ]')
+a_func()
+print(a_var, '[ a_var outside a_func() ]')
+
+ +`Output:` +
**a)**
+<pre>raises an error</pre>
+
+**b)** 
+<pre>
+global value [ a_var outside a_func() ]</pre>
+
+**c)** 
+<pre>global value [ a_var in a_func() ]  
+global value [ a_var outside a_func() ]</pre>
+
+ +But we have to be careful about the order: it is easy to raise an `UnboundLocalError` if we don't explicitly tell Python that we want to use the global scope and try to modify a variable's value (remember, the right side of an assignment operation is executed first): + +`Input:` +
a_var = 1
+
+def a_func():
+    a_var = a_var + 1
+    print(a_var, '[ a_var inside a_func() ]')
+
+print(a_var, '[ a_var outside a_func() ]')
+a_func()
+
+`Output:` +
---------------------------------------------------------------------------
+UnboundLocalError                         Traceback (most recent call last)
+<ipython-input-4-a6cdd0ee9a55> in <module>()
+      6 
+      7 print(a_var, '[ a_var outside a_func() ]')
+----> 8 a_func()
+
+<ipython-input-4-a6cdd0ee9a55> in a_func()
+      2 
+      3 def a_func():
+----> 4     a_var = a_var + 1
+      5     print(a_var, '[ a_var inside a_func() ]')
+      6 
+
+UnboundLocalError: local variable 'a_var' referenced before assignment
+
+1 [ a_var outside a_func() ]
+
+ +
+
+ + +
+
+ +## 2. LEG - Local, Enclosed, and Global scope + + + +Now, let us introduce the concept of the enclosed (E) scope. Following the order "Local -> Enclosed -> Global", can you guess what the following code will print? + + +**Example 2.1** + +
a_var = 'global value'
+
+def outer():
+    a_var = 'enclosed value'
+    
+    def inner():
+        a_var = 'local value'
+        print(a_var)
+    
+    inner()
+
+outer()
+
+**a)** +
global value
+ +**b)** +
enclosed value
+ +**c)** +
local value
+ +[[go to solution](#solutions)] + +### Here is why: + +Let us quickly recapitulate what we just did: We called `outer()`, which defined the variable `a_var` locally (next to an existing `a_var` in the global scope). Next, the `outer()` function called `inner()`, which in turn defined a variable with of name `a_var` as well. The `print()` function inside `inner()` searched in the local scope first (L->E) before it went up in the scope hierarchy, and therefore it printed the value that was assigned in the local scope. + +Similar to the concept of the `global` keyword, which we have seen in the section above, we can use the keyword `nonlocal` inside the inner function to explicitly access a variable from the outer (enclosed) scope in order to modify its value. +Note that the `nonlocal` keyword was added in Python 3.x and is not implemented in Python 2.x (yet). + +`Input:` +
a_var = 'global value'
+
+def outer():
+       a_var = 'local value'
+       print('outer before:', a_var)
+       def inner():
+           nonlocal a_var
+           a_var = 'inner value'
+           print('in inner():', a_var)
+       inner()
+       print("outer after:", a_var)
+outer()
+
+`Output:` +
outer before: local value
+in inner(): inner value
+outer after: inner value
+
+ + +
+
+
+ + +## 3. LEGB - Local, Enclosed, Global, Built-in + +To wrap up the LEGB rule, let us come to the built-in scope. Here, we will define our "own" length-function, which happens to bear the same name as the in-built `len()` function. What outcome do you expect if we'd execute the following code? + + + +**Example 3** + +
a_var = 'global variable'
+
+def len(in_var):
+    print('called my len() function')
+    l = 0
+    for i in in_var:
+        l += 1
+    return l
+
+def a_func(in_var):
+    len_in_var = len(in_var)
+    print('Input variable is of length', len_in_var)
+
+a_func('Hello, World!')
+
+ +**a)** +
raises an error (conflict with in-built `len()` function)
+ +**b)** +
called my len() function
+Input variable is of length 13
+ +**c)** +
Input variable is of length 13
+ +[[go to solution](#solutions)] + +### Here is why: + +Since the exact same names can be used to map names to different objects - as long as the names are in different name spaces - there is no problem of reusing the name `len` to define our own length function (this is just for demonstration purposes, it is NOT recommended). As we go up in Python's L -> E -> G -> B hierarchy, the function `a_func()` finds `len()` already in the global scope first before it attempts + + + +
+
+ +# Self-assessment exercise + +Now, after we went through a couple of exercises, let us quickly check where we are. So, one more time: What would the following code print out? + +
a = 'global'
+
+def outer():
+    
+    def len(in_var):
+        print('called my len() function: ', end="")
+        l = 0
+        for i in in_var:
+            l += 1
+        return l
+    
+    a = 'local'
+    
+    def inner():
+        global len
+        nonlocal a
+        a += ' variable'
+    inner()
+    print('a is', a)
+    print(len(a))
+
+outer()
+
+print(len(a))
+print('a is', a)
+
+ + +
+ +[[go to solution](#solutions)] + +# Conclusion + +I hope this short tutorial was helpful to understand the basic concept of Python's scope resolution order using the LEGB rule. I want to encourage you (as a little self-assessment exercise) to look at the code snippets again tomorrow and check if you can correctly predict all their outcomes. + +#### A rule of thumb + +In practice, **it is usually a bad idea to modify global variables inside the function scope**, since it often be the cause of confusion and weird errors that are hard to debug. +If you want to modify a global variable via a function, it is recommended to pass it as an argument and reassign the return-value. +For example: + +`Input:` +
a_var = 2
+
+def a_func(some_var):
+    return 2**3
+
+a_var = a_func(a_var)
+print(a_var)
+
+`Output:` +
8
+
+ + +
+
+
+ +## Solutions + +In order to prevent you from unintentional spoilers, I have written the solutions in binary format. In order to display the character representation, you just need to execute the following lines of code: + +
print('Example 1.1:', chr(int('01100011',2)))
+
+ +[[back to example 1.1](#example1.1)] + +
print('Example 1.2:', chr(int('01100001',2)))
+
+ +[[back to example 1.2](#example1.2)] + +
print('Example 2:', chr(int('01100011',2)))
+
+ +[[back to example 2](#example2)] + +
print('Example 3:', chr(int('01100010',2)))
+
+ +[[back to example 3](#example3)] + +
# Solution to the self-assessment exercise
+sol = "000010100110111101110101011101000110010101110010001010"\
+"0000101001001110100000101000001010011000010010000001101001011100110"\
+"0100000011011000110111101100011011000010110110000100000011101100110"\
+"0001011100100110100101100001011000100110110001100101000010100110001"\
+"1011000010110110001101100011001010110010000100000011011010111100100"\
+"1000000110110001100101011011100010100000101001001000000110011001110"\
+"1010110111001100011011101000110100101101111011011100011101000100000"\
+"0011000100110100000010100000101001100111011011000110111101100010011"\
+"0000101101100001110100000101000001010001101100000101001100001001000"\
+"0001101001011100110010000001100111011011000110111101100010011000010"\
+"1101100"
+
+sol_str =''.join(chr(int(sol[i:i+8], 2)) for i in range(0, len(sol), 8))
+for line in sol_str.split('\n'):
+    print(line)
+
+ +[[back to self-assessment exercise](#assessment)] + + + + +
+
+ + +## Warning: For-loop variables "leaking" into the global namespace + +In contrast to some other programming languages, `for-loops` will use the scope they exist in and leave their defined loop-variable behind. + +`Input:` +
for a in range(5):
+    if a == 4:
+        print(a, '-> a in for-loop')
+print(a, '-> a in global')
+
+`Output:` +
4 -> a in for-loop
+4 -> a in global
+
+ +**This also applies if we explicitely defined the `for-loop` variable in the global namespace before!** In this case it will rebind the existing variable: + +`Input:` +
b = 1
+for b in range(5):
+    if b == 4:
+        print(b, '-> b in for-loop')
+print(b, '-> b in global')
+
+ +`Output:` +
4 -> b in for-loop
+4 -> b in global
+
+ +However, in **Python 3.x**, we can use closures to prevent the for-loop variable to cut into the global namespace. Here is an example (exectuted in Python 3.4): + +`Input:` +
i = 1
+print([i for i in range(5)])
+print(i, '-> i in global')
+
+`Output:` +
[0, 1, 2, 3, 4]
+1 -> i in global
+
+ +Why did I mention "Python 3.x"? Well, as it happens, the same code executed in Python 2.x would print: + +
+4 -> i in global
+
+ +This goes back to a change that was made in Python 3.x and is described in [What’s New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html) as follows: + +"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope." \ No newline at end of file diff --git a/tutorials/sorting_csvs.ipynb b/tutorials/sorting_csvs.ipynb new file mode 100644 index 0000000..9aaf2f2 --- /dev/null +++ b/tutorials/sorting_csvs.ipynb @@ -0,0 +1,585 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:c498612c4d414160d8e015bc6858051328e51cd00e56b3215dca53652ee7c936" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Sebastian Raschka](http://sebastianraschka.com) \n", + "last updated: 05/13/2014\n", + "\n", + "- Open in [IPython nbviewer](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb?create=1) \n", + "- Link to this [IPython notebook on Github](https://github.com/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb) \n", + "- Link to the GitHub Repository [`python_reference`](https://github.com/rasbt/python_reference)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "I am looking forward to comments or suggestions, please don't hesitate to contact me via\n", + "[twitter](https://twitter.com/rasbt), [email](mailto:bluewoodtree@gmail.com), or [google+](https://plus.google.com/118404394130788869227).\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Sorting CSV files using the Python `csv` module" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "I wanted to summarize a way to sort CSV files by just using the [`csv` module](https://docs.python.org/3.4/library/csv.html) and other standard library Python modules \n", + "(you probably also want to consider using the [pandas](http://pandas.pydata.org) library if you are working with very large CSV files - I am planning to make this a separate topic)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "
\n", + "## Sections\n", + "- [Reading in a CSV file](#reading)\n", + "- [Printing the CSV file contents](#printing)\n", + "- [Sorting the CSV file](#sorting)\n", + "- [Marking min/max values in particular columns](#marking)\n", + "- [Writing out the modified table to as a new CSV file](#writing)\n", + "
\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Objective:\n", + "\n", + "Let us assume that we have an [example CSV](../Data/test.csv) file formatted like this:\n", + " \n", + "
name,column1,column2,column3\n",
+      "abc,1.1,4.2,1.2\n",
+      "def,2.1,1.4,5.2\n",
+      "ghi,1.5,1.2,2.1\n",
+      "jkl,1.8,1.1,4.2\n",
+      "mno,9.4,6.6,6.2\n",
+      "pqr,1.4,8.3,8.4
\n", + "\n", + "And we want to sort particular columns and eventually mark min- of max-values in the table.\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Reading in a CSV file" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because we will be iterating over our CSV file a couple of times, let us read in the CSV file using the `csv` module and hold the contents in memory using a Python list object (note: be careful with very large CSV files and possible memory issues associated with this approach).\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import csv\n", + "\n", + "def csv_to_list(csv_file, delimiter=','):\n", + " \"\"\" \n", + " Reads in a CSV file and returns the contents as list,\n", + " where every row is stored as a sublist, and each element\n", + " in the sublist represents 1 cell in the table.\n", + " \n", + " \"\"\"\n", + " csv_content = []\n", + " with open(csv_file, 'r') as csv_con:\n", + " reader = csv.reader(csv_con, delimiter=delimiter)\n", + " for row in reader:\n", + " csv_content.append(row)\n", + " return csv_content" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "csv_cont = csv_to_list('../Data/test.csv')\n", + "\n", + "print('first 3 rows:')\n", + "for row in range(3):\n", + " print(csv_cont[row])" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "first 3 rows:\n", + "['name', 'column1', 'column2', 'column3']\n", + "['abc', '1.1', '4.2', '1.2']\n", + "['def', '2.1', '1.4', '5.2']\n" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Printing the CSV file contents" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Also, let us define a short function that prints out the CSV file to the standard output screen in a slightly prettier format:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def print_csv(csv_content):\n", + " \"\"\" Prints CSV file to standard output.\"\"\"\n", + " print(50*'-')\n", + " for row in csv_content:\n", + " print('\\t'.join(row))\n", + " print(50*'-')" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "csv_cont = csv_to_list('../Data/test.csv')\n", + "\n", + "print('\\n\\nOriginal CSV file:')\n", + "print_csv(csv_cont)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "Original CSV file:\n", + "--------------------------------------------------\n", + "name\tcolumn1\tcolumn2\tcolumn3\n", + "abc\t1.1\t4.2\t1.2\n", + "def\t2.1\t1.4\t5.2\n", + "ghi\t1.5\t1.2\t2.1\n", + "jkl\t1.8\t1.1\t4.2\n", + "mno\t9.4\t6.6\t6.2\n", + "pqr\t1.4\t8.3\t8.4\n", + "--------------------------------------------------\n" + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Sorting the CSV file" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the very handy [`operator.itemgetter`](https://docs.python.org/3.4/library/operator.html#operator.itemgetter) function, we define a function that returns a CSV file contents sorted by a particular column (column index or column name)." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import operator\n", + "\n", + "def sort_by_column(csv_cont, col, reverse=False):\n", + " \"\"\" \n", + " Sorts CSV contents by column name (if col argument is type ) \n", + " or column index (if col argument is type ). \n", + " \n", + " \"\"\"\n", + " header = csv_cont[0]\n", + " body = csv_cont[1:]\n", + " if isinstance(col, str): \n", + " col_index = header.index(col)\n", + " else:\n", + " col_index = col\n", + " body = sorted(body, \n", + " key=operator.itemgetter(col_index), \n", + " reverse=reverse)\n", + " body.insert(0, header)\n", + " return body" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To see how (and if) it works, let us sort the CSV file in [../Data/test.csv](../Data/test.csv) by the column name \"column3\"." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "csv_cont = csv_to_list('../Data/test.csv')\n", + "\n", + "print('\\n\\nOriginal CSV file:')\n", + "print_csv(csv_cont)\n", + "\n", + "print('\\n\\nCSV sorted by column \"column3\":')\n", + "csv_sorted = sort_by_column(csv_cont, 'column3')\n", + "print_csv(csv_sorted)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "Original CSV file:\n", + "--------------------------------------------------\n", + "name\tcolumn1\tcolumn2\tcolumn3\n", + "abc\t1.1\t4.2\t1.2\n", + "def\t2.1\t1.4\t5.2\n", + "ghi\t1.5\t1.2\t2.1\n", + "jkl\t1.8\t1.1\t4.2\n", + "mno\t9.4\t6.6\t6.2\n", + "pqr\t1.4\t8.3\t8.4\n", + "--------------------------------------------------\n", + "\n", + "\n", + "CSV sorted by column \"column3\":\n", + "--------------------------------------------------\n", + "name\tcolumn1\tcolumn2\tcolumn3\n", + "abc\t1.1\t4.2\t1.2\n", + "ghi\t1.5\t1.2\t2.1\n", + "jkl\t1.8\t1.1\t4.2\n", + "def\t2.1\t1.4\t5.2\n", + "mno\t9.4\t6.6\t6.2\n", + "pqr\t1.4\t8.3\t8.4\n", + "--------------------------------------------------\n" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Marking min/max values in particular columns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To visualize minimum and maximum values in certain columns if find it quite useful to add little symbols to the cells (most people like to highlight cells with colors in e.g., Excel spreadsheets, but CSV doesn't support colors, so this is my workaround - please let me know if you figured out a better approach, I would be looking forward to your suggestion)." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def mark_minmax(csv_cont, col, mark_max=True, marker='*'):\n", + " \"\"\"\n", + " Sorts a list of CSV contents by a particular column \n", + " (see sort_by_column function).\n", + " Puts a marker on the maximum value if mark_max=True,\n", + " or puts a marker on the minimum value mark_max=False\n", + " (modifies input CSV content list).\n", + " \n", + " \"\"\"\n", + " \n", + " sorted_csv = sort_by_column(csv_cont, col, reverse=mark_max)\n", + " if isinstance(col, str): \n", + " col_index = sorted_csv[0].index(col)\n", + " else:\n", + " col_index = col\n", + " sorted_csv[1][col_index] += marker\n", + " return None" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 28 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def mark_all_col(csv_cont, mark_max=True, marker='*'):\n", + " \"\"\"\n", + " Marks all maximum (if mark_max=True) or minimum (if mark_max=False)\n", + " values in all columns of a CSV contents list - except the first column.\n", + " Returns a new list that is sorted by the names in the first column\n", + " (modifies input CSV content list).\n", + " \n", + " \"\"\"\n", + " for c in csv_cont[0][1:]:\n", + " mark_minmax(csv_cont, c, mark_max, marker)\n", + " marked_csv = sort_by_column(csv_cont, 0, False)\n", + " return marked_csv" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 29 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import copy\n", + "csv_cont = csv_to_list('../Data/test.csv')\n", + "\n", + "csv_marked = copy.deepcopy(csv_cont)\n", + "mark_all_col(csv_marked, mark_max=True, marker='*')\n", + "mark_all_col(csv_marked, mark_max=False, marker='^')\n", + "print_csv(csv_marked)\n", + "\n", + "print('^: min-value\\n*: max-value')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "--------------------------------------------------\n", + "name\tcolumn1\tcolumn2\tcolumn3\n", + "abc\t1.1^\t4.2\t1.2^\n", + "def\t2.1\t1.4\t5.2\n", + "ghi\t1.5\t1.2\t2.1\n", + "jkl\t1.8\t1.1^\t4.2\n", + "mno\t9.4*\t6.6\t6.2\n", + "pqr\t1.4\t8.3*\t8.4*\n", + "--------------------------------------------------\n", + "^: min-value\n", + "*: max-value\n" + ] + } + ], + "prompt_number": 32 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Writing out the modified table to as a new CSV file" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After the sorting and maybe marking of minimum and maximum values, we likely want to write out the modified data table as CSV file again." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def write_csv(dest, csv_cont):\n", + " \"\"\" Writes a comma-delimited CSV file. \"\"\"\n", + "\n", + " with open(dest, 'w') as out_file:\n", + " writer = csv.writer(out_file, delimiter=',')\n", + " for row in csv_cont:\n", + " writer.writerow(row)\n", + "\n", + "write_csv('../Data/test_marked.csv', csv_marked)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 34 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us read in the written CSV file to confirm that the formatting is correct:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "csv_cont = csv_to_list('../Data/test_marked.csv')\n", + "\n", + "print('\\n\\nWritten CSV file:')\n", + "print_csv(csv_cont)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "Written CSV file:\n", + "--------------------------------------------------\n", + "name\tcolumn1\tcolumn2\tcolumn3\n", + "abc\t1.1^\t4.2\t1.2^\n", + "def\t2.1\t1.4\t5.2\n", + "ghi\t1.5\t1.2\t2.1\n", + "jkl\t1.8\t1.1^\t4.2\n", + "mno\t9.4*\t6.6\t6.2\n", + "pqr\t1.4\t8.3*\t8.4*\n", + "--------------------------------------------------\n" + ] + } + ], + "prompt_number": 35 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file From db164b70b9bd961fea3eaf40ccbdf50b18dbdae8 Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 13 May 2014 22:42:29 -0400 Subject: [PATCH 041/248] sorting csvs --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0d2e24c..ef89f87 100755 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Useful functions, tutorials, and other Python-related things - A thorough guide to SQLite database operations in Python [[Markdown]](./sqlite3_howto/README.md) - Unit testing in Python - Why we want to make it a habit [[Markdown]](./tutorials/unit_testing.md) - Installing Scientific Packages for Python3 on MacOS 10.9 Mavericks [[Markdown]](./tutorials/installing_scientific_packages.md) -- Sorting CSV files using the Python csv module [](./tutorials/http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb?create=1) +- Sorting CSV files using the Python csv module [IPython nb](./tutorials/http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb?create=1) **// benchmarks** From ac10148e8b322d763ea88e7e57289b0da0e7e02b Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 13 May 2014 22:43:03 -0400 Subject: [PATCH 042/248] sorting csvs --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ef89f87..28d72c5 100755 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ Useful functions, tutorials, and other Python-related things

+ + **// Python tips and tutorials** - A collection of not so obvious Python stuff you should know! [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb?create=1) @@ -17,14 +19,17 @@ Useful functions, tutorials, and other Python-related things - A thorough guide to SQLite database operations in Python [[Markdown]](./sqlite3_howto/README.md) - Unit testing in Python - Why we want to make it a habit [[Markdown]](./tutorials/unit_testing.md) - Installing Scientific Packages for Python3 on MacOS 10.9 Mavericks [[Markdown]](./tutorials/installing_scientific_packages.md) -- Sorting CSV files using the Python csv module [IPython nb](./tutorials/http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb?create=1) +- Sorting CSV files using the Python csv module [[IPython nb](./tutorials/http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb?create=1)] + + **// benchmarks** - Python benchmarks via `timeit` [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/timeit_tests.ipynb?create=1) - Implementing the least squares fit method for linear regression and speeding it up via Cython [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb?create=1) - Benchmarks of different palindrome functions [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/palindrome_timeit.ipynb?create=1) -- (#marking) + + **// other** From e20369a6a1b89d290dcfe430b8ec5e431dcfed5f Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 13 May 2014 22:44:46 -0400 Subject: [PATCH 043/248] sorting csvs --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 28d72c5..aa31d3b 100755 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Useful functions, tutorials, and other Python-related things - A thorough guide to SQLite database operations in Python [[Markdown]](./sqlite3_howto/README.md) - Unit testing in Python - Why we want to make it a habit [[Markdown]](./tutorials/unit_testing.md) - Installing Scientific Packages for Python3 on MacOS 10.9 Mavericks [[Markdown]](./tutorials/installing_scientific_packages.md) -- Sorting CSV files using the Python csv module [[IPython nb](./tutorials/http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb?create=1)] +- Sorting CSV files using the Python csv module [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb)] From cb155d03111bcad41142ef13155a47d7aabee76b Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 13 May 2014 22:57:30 -0400 Subject: [PATCH 044/248] added data files for csv file sorting article --- test.csv | 7 +++++++ test_marked.csv | 7 +++++++ 2 files changed, 14 insertions(+) create mode 100644 test.csv create mode 100644 test_marked.csv diff --git a/test.csv b/test.csv new file mode 100644 index 0000000..7c8d315 --- /dev/null +++ b/test.csv @@ -0,0 +1,7 @@ +name,column1,column2,column3 +abc,1.1,4.2,1.2 +def,2.1,1.4,5.2 +ghi,1.5,1.2,2.1 +jkl,1.8,1.1,4.2 +mno,9.4,6.6,6.2 +pqr,1.4,8.3,8.4 diff --git a/test_marked.csv b/test_marked.csv new file mode 100644 index 0000000..86dfd82 --- /dev/null +++ b/test_marked.csv @@ -0,0 +1,7 @@ +name,column1,column2,column3 +abc,1.1^,4.2,1.2^ +def,2.1,1.4,5.2 +ghi,1.5,1.2,2.1 +jkl,1.8,1.1^,4.2 +mno,9.4*,6.6,6.2 +pqr,1.4,8.3*,8.4* From e43265cb579a623c3b733958032c4fff5bbfd516 Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 13 May 2014 23:44:33 -0400 Subject: [PATCH 045/248] datafiles --- Data/test.csv | 7 +++++++ Data/test_marked.csv | 7 +++++++ tutorials/sorting_csvs.ipynb | 13 +++++-------- 3 files changed, 19 insertions(+), 8 deletions(-) create mode 100644 Data/test.csv create mode 100644 Data/test_marked.csv diff --git a/Data/test.csv b/Data/test.csv new file mode 100644 index 0000000..7c8d315 --- /dev/null +++ b/Data/test.csv @@ -0,0 +1,7 @@ +name,column1,column2,column3 +abc,1.1,4.2,1.2 +def,2.1,1.4,5.2 +ghi,1.5,1.2,2.1 +jkl,1.8,1.1,4.2 +mno,9.4,6.6,6.2 +pqr,1.4,8.3,8.4 diff --git a/Data/test_marked.csv b/Data/test_marked.csv new file mode 100644 index 0000000..86dfd82 --- /dev/null +++ b/Data/test_marked.csv @@ -0,0 +1,7 @@ +name,column1,column2,column3 +abc,1.1^,4.2,1.2^ +def,2.1,1.4,5.2 +ghi,1.5,1.2,2.1 +jkl,1.8,1.1^,4.2 +mno,9.4*,6.6,6.2 +pqr,1.4,8.3*,8.4* diff --git a/tutorials/sorting_csvs.ipynb b/tutorials/sorting_csvs.ipynb index 9aaf2f2..04e99ab 100644 --- a/tutorials/sorting_csvs.ipynb +++ b/tutorials/sorting_csvs.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:c498612c4d414160d8e015bc6858051328e51cd00e56b3215dca53652ee7c936" + "signature": "sha256:683cfd7e6b5fd1dca9cd2028b294ec8ae44a175b613eb3c037d365a28957a987" }, "nbformat": 3, "nbformat_minor": 0, @@ -133,12 +133,9 @@ " in the sublist represents 1 cell in the table.\n", " \n", " \"\"\"\n", - " csv_content = []\n", " with open(csv_file, 'r') as csv_con:\n", " reader = csv.reader(csv_con, delimiter=delimiter)\n", - " for row in reader:\n", - " csv_content.append(row)\n", - " return csv_content" + " return list(reader)" ], "language": "python", "metadata": {}, @@ -169,7 +166,7 @@ ] } ], - "prompt_number": 4 + "prompt_number": 3 }, { "cell_type": "markdown", @@ -215,7 +212,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 2 + "prompt_number": 4 }, { "cell_type": "code", @@ -248,7 +245,7 @@ ] } ], - "prompt_number": 3 + "prompt_number": 5 }, { "cell_type": "markdown", From ed0eb89f62135e64fd0e6df324c0c78b9725dfdd Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 14 May 2014 01:34:47 -0400 Subject: [PATCH 046/248] added conversion to float --- tutorials/sorting_csvs.ipynb | 102 ++++++++++++++++++++++++++++++----- 1 file changed, 90 insertions(+), 12 deletions(-) diff --git a/tutorials/sorting_csvs.ipynb b/tutorials/sorting_csvs.ipynb index 04e99ab..237db52 100644 --- a/tutorials/sorting_csvs.ipynb +++ b/tutorials/sorting_csvs.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:683cfd7e6b5fd1dca9cd2028b294ec8ae44a175b613eb3c037d365a28957a987" + "signature": "sha256:13c10e46fea51bcbbf203261897bb4d8ea2087e39925e077d452778f78d62b1e" }, "nbformat": 3, "nbformat_minor": 0, @@ -56,6 +56,7 @@ "## Sections\n", "- [Reading in a CSV file](#reading)\n", "- [Printing the CSV file contents](#printing)\n", + "- [Converting numeric cells to floats](#floats)\n", "- [Sorting the CSV file](#sorting)\n", "- [Marking min/max values in particular columns](#marking)\n", "- [Writing out the modified table to as a new CSV file](#writing)\n", @@ -140,7 +141,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 1 + "prompt_number": 4 }, { "cell_type": "code", @@ -166,7 +167,7 @@ ] } ], - "prompt_number": 3 + "prompt_number": 5 }, { "cell_type": "markdown", @@ -212,7 +213,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 4 + "prompt_number": 6 }, { "cell_type": "code", @@ -245,7 +246,76 @@ ] } ], - "prompt_number": 5 + "prompt_number": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Converting numeric cells to floats" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To avoid problems with the sorting approach that can occur when we have negative values in some cells, let us define a function that converts all numeric cells into float values." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def convert_cells_to_floats(csv_cont):\n", + " \"\"\" \n", + " Converts cells to floats if possible\n", + " (modifies input CSV content list).\n", + " \n", + " \"\"\"\n", + " for row in range(len(csv_cont)):\n", + " for cell in range(len(csv_cont[row])):\n", + " try:\n", + " csv_cont[row][cell] = float(csv_cont[row][cell])\n", + " except ValueError:\n", + " pass " + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 8 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('first 3 rows:')\n", + "for row in range(3):\n", + " print(csv_cont[row])" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "first 3 rows:\n", + "['name', 'column1', 'column2', 'column3']\n", + "['abc', 1.1, 4.2, 1.2]\n", + "['def', 2.1, 1.4, 5.2]\n" + ] + } + ], + "prompt_number": 9 }, { "cell_type": "markdown", @@ -304,7 +374,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 5 + "prompt_number": 10 }, { "cell_type": "markdown", @@ -360,7 +430,7 @@ ] } ], - "prompt_number": 6 + "prompt_number": 11 }, { "cell_type": "markdown", @@ -425,7 +495,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 28 + "prompt_number": 12 }, { "cell_type": "code", @@ -447,7 +517,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 29 + "prompt_number": 13 }, { "cell_type": "code", @@ -484,7 +554,7 @@ ] } ], - "prompt_number": 32 + "prompt_number": 14 }, { "cell_type": "markdown", @@ -533,7 +603,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 34 + "prompt_number": 15 }, { "cell_type": "markdown", @@ -573,7 +643,15 @@ ] } ], - "prompt_number": 35 + "prompt_number": 16 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [] } ], "metadata": {} From 8f0944c7cfe389623062058fa365e4a04ce46592 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 14 May 2014 01:51:10 -0400 Subject: [PATCH 047/248] added conversion to float --- Data/test.csv | 4 +- Data/test_marked.csv | 10 ++--- tutorials/sorting_csvs.ipynb | 81 ++++++++++++++++++------------------ 3 files changed, 48 insertions(+), 47 deletions(-) diff --git a/Data/test.csv b/Data/test.csv index 7c8d315..74aa781 100644 --- a/Data/test.csv +++ b/Data/test.csv @@ -1,7 +1,7 @@ name,column1,column2,column3 abc,1.1,4.2,1.2 def,2.1,1.4,5.2 -ghi,1.5,1.2,2.1 -jkl,1.8,1.1,4.2 +ghi,1.5,1.2,-2.1 +jkl,1.8,-1.1,4.2 mno,9.4,6.6,6.2 pqr,1.4,8.3,8.4 diff --git a/Data/test_marked.csv b/Data/test_marked.csv index 86dfd82..69ef554 100644 --- a/Data/test_marked.csv +++ b/Data/test_marked.csv @@ -1,7 +1,7 @@ name,column1,column2,column3 -abc,1.1^,4.2,1.2^ +abc,1.1*,4.2,1.2 def,2.1,1.4,5.2 -ghi,1.5,1.2,2.1 -jkl,1.8,1.1^,4.2 -mno,9.4*,6.6,6.2 -pqr,1.4,8.3*,8.4* +ghi,1.5,1.2,-2.1* +jkl,1.8,-1.1*,4.2 +mno,9.4,6.6,6.2 +pqr,1.4,8.3,8.4 diff --git a/tutorials/sorting_csvs.ipynb b/tutorials/sorting_csvs.ipynb index 237db52..e0ff384 100644 --- a/tutorials/sorting_csvs.ipynb +++ b/tutorials/sorting_csvs.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:13c10e46fea51bcbbf203261897bb4d8ea2087e39925e077d452778f78d62b1e" + "signature": "sha256:7ce6d9e0e1dc3da5c31fc5f3a5ab7687870a76cd4adaedd6da95bc6451755b12" }, "nbformat": 3, "nbformat_minor": 0, @@ -141,7 +141,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 4 + "prompt_number": 1 }, { "cell_type": "code", @@ -167,7 +167,7 @@ ] } ], - "prompt_number": 5 + "prompt_number": 2 }, { "cell_type": "markdown", @@ -207,13 +207,14 @@ " \"\"\" Prints CSV file to standard output.\"\"\"\n", " print(50*'-')\n", " for row in csv_content:\n", + " row = [str(e) for e in row]\n", " print('\\t'.join(row))\n", " print(50*'-')" ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 6 + "prompt_number": 3 }, { "cell_type": "code", @@ -238,15 +239,15 @@ "name\tcolumn1\tcolumn2\tcolumn3\n", "abc\t1.1\t4.2\t1.2\n", "def\t2.1\t1.4\t5.2\n", - "ghi\t1.5\t1.2\t2.1\n", - "jkl\t1.8\t1.1\t4.2\n", + "ghi\t1.5\t1.2\t-2.1\n", + "jkl\t1.8\t-1.1\t4.2\n", "mno\t9.4\t6.6\t6.2\n", "pqr\t1.4\t8.3\t8.4\n", "--------------------------------------------------\n" ] } ], - "prompt_number": 7 + "prompt_number": 4 }, { "cell_type": "markdown", @@ -291,7 +292,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 8 + "prompt_number": 5 }, { "cell_type": "code", @@ -310,12 +311,12 @@ "text": [ "first 3 rows:\n", "['name', 'column1', 'column2', 'column3']\n", - "['abc', 1.1, 4.2, 1.2]\n", - "['def', 2.1, 1.4, 5.2]\n" + "['abc', '1.1', '4.2', '1.2']\n", + "['def', '2.1', '1.4', '5.2']\n" ] } ], - "prompt_number": 9 + "prompt_number": 6 }, { "cell_type": "markdown", @@ -374,7 +375,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 10 + "prompt_number": 7 }, { "cell_type": "markdown", @@ -393,6 +394,7 @@ "print_csv(csv_cont)\n", "\n", "print('\\n\\nCSV sorted by column \"column3\":')\n", + "convert_cells_to_floats(csv_cont)\n", "csv_sorted = sort_by_column(csv_cont, 'column3')\n", "print_csv(csv_sorted)" ], @@ -410,8 +412,8 @@ "name\tcolumn1\tcolumn2\tcolumn3\n", "abc\t1.1\t4.2\t1.2\n", "def\t2.1\t1.4\t5.2\n", - "ghi\t1.5\t1.2\t2.1\n", - "jkl\t1.8\t1.1\t4.2\n", + "ghi\t1.5\t1.2\t-2.1\n", + "jkl\t1.8\t-1.1\t4.2\n", "mno\t9.4\t6.6\t6.2\n", "pqr\t1.4\t8.3\t8.4\n", "--------------------------------------------------\n", @@ -420,9 +422,9 @@ "CSV sorted by column \"column3\":\n", "--------------------------------------------------\n", "name\tcolumn1\tcolumn2\tcolumn3\n", + "ghi\t1.5\t1.2\t-2.1\n", "abc\t1.1\t4.2\t1.2\n", - "ghi\t1.5\t1.2\t2.1\n", - "jkl\t1.8\t1.1\t4.2\n", + "jkl\t1.8\t-1.1\t4.2\n", "def\t2.1\t1.4\t5.2\n", "mno\t9.4\t6.6\t6.2\n", "pqr\t1.4\t8.3\t8.4\n", @@ -430,7 +432,7 @@ ] } ], - "prompt_number": 11 + "prompt_number": 8 }, { "cell_type": "markdown", @@ -489,13 +491,13 @@ " col_index = sorted_csv[0].index(col)\n", " else:\n", " col_index = col\n", - " sorted_csv[1][col_index] += marker\n", + " sorted_csv[1][col_index] = str(sorted_csv[1][col_index]) + marker\n", " return None" ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 12 + "prompt_number": 9 }, { "cell_type": "code", @@ -509,7 +511,7 @@ " (modifies input CSV content list).\n", " \n", " \"\"\"\n", - " for c in csv_cont[0][1:]:\n", + " for c in range(1, len(csv_cont[0])):\n", " mark_minmax(csv_cont, c, mark_max, marker)\n", " marked_csv = sort_by_column(csv_cont, 0, False)\n", " return marked_csv" @@ -517,21 +519,21 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 13 + "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "import copy\n", + "\n", "csv_cont = csv_to_list('../Data/test.csv')\n", "\n", "csv_marked = copy.deepcopy(csv_cont)\n", - "mark_all_col(csv_marked, mark_max=True, marker='*')\n", - "mark_all_col(csv_marked, mark_max=False, marker='^')\n", + "convert_cells_to_floats(csv_marked)\n", + "mark_all_col(csv_marked, mark_max=False, marker='*')\n", "print_csv(csv_marked)\n", - "\n", - "print('^: min-value\\n*: max-value')" + "print('*: min-value')" ], "language": "python", "metadata": {}, @@ -542,19 +544,18 @@ "text": [ "--------------------------------------------------\n", "name\tcolumn1\tcolumn2\tcolumn3\n", - "abc\t1.1^\t4.2\t1.2^\n", + "abc\t1.1*\t4.2\t1.2\n", "def\t2.1\t1.4\t5.2\n", - "ghi\t1.5\t1.2\t2.1\n", - "jkl\t1.8\t1.1^\t4.2\n", - "mno\t9.4*\t6.6\t6.2\n", - "pqr\t1.4\t8.3*\t8.4*\n", + "ghi\t1.5\t1.2\t-2.1*\n", + "jkl\t1.8\t-1.1*\t4.2\n", + "mno\t9.4\t6.6\t6.2\n", + "pqr\t1.4\t8.3\t8.4\n", "--------------------------------------------------\n", - "^: min-value\n", - "*: max-value\n" + "*: min-value\n" ] } ], - "prompt_number": 14 + "prompt_number": 12 }, { "cell_type": "markdown", @@ -603,7 +604,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 15 + "prompt_number": 13 }, { "cell_type": "markdown", @@ -633,17 +634,17 @@ "Written CSV file:\n", "--------------------------------------------------\n", "name\tcolumn1\tcolumn2\tcolumn3\n", - "abc\t1.1^\t4.2\t1.2^\n", + "abc\t1.1*\t4.2\t1.2\n", "def\t2.1\t1.4\t5.2\n", - "ghi\t1.5\t1.2\t2.1\n", - "jkl\t1.8\t1.1^\t4.2\n", - "mno\t9.4*\t6.6\t6.2\n", - "pqr\t1.4\t8.3*\t8.4*\n", + "ghi\t1.5\t1.2\t-2.1*\n", + "jkl\t1.8\t-1.1*\t4.2\n", + "mno\t9.4\t6.6\t6.2\n", + "pqr\t1.4\t8.3\t8.4\n", "--------------------------------------------------\n" ] } ], - "prompt_number": 16 + "prompt_number": 14 }, { "cell_type": "code", From efa50ac899e6b5b2e46d66f17823353babfaea13 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 14 May 2014 08:55:21 -0400 Subject: [PATCH 048/248] batch processing csvs --- tutorials/sorting_csvs.ipynb | 100 ++++++++++++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 2 deletions(-) diff --git a/tutorials/sorting_csvs.ipynb b/tutorials/sorting_csvs.ipynb index e0ff384..df1b182 100644 --- a/tutorials/sorting_csvs.ipynb +++ b/tutorials/sorting_csvs.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:7ce6d9e0e1dc3da5c31fc5f3a5ab7687870a76cd4adaedd6da95bc6451755b12" + "signature": "sha256:f56b7081a6e5b63610100fcfa0a226c7a0184dfe0d63128614a7a68555653428" }, "nbformat": 3, "nbformat_minor": 0, @@ -60,6 +60,7 @@ "- [Sorting the CSV file](#sorting)\n", "- [Marking min/max values in particular columns](#marking)\n", "- [Writing out the modified table to as a new CSV file](#writing)\n", + "- [Batch processing CSV files](#batch)\n", "
\n", "
\n", "
" @@ -646,10 +647,105 @@ ], "prompt_number": 14 }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Batch processing CSV files" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Usually, CSV files never come alone, but we have to process a whole bunch of similar formatted CSV files from some output device. \n", + "For example, if we want to process all CSV files in a particular input directory and want to save the processed files in a separate output directory, we can use a simple list comprehension to collect tuples of input-output file names." + ] + }, { "cell_type": "code", "collapsed": false, - "input": [], + "input": [ + "import os\n", + "\n", + "in_dir = '../Data'\n", + "out_dir = '../Data/processed'\n", + "csvs = [\n", + " (os.path.join(in_dir, csv), \n", + " os.path.join(out_dir, csv))\n", + " for csv in os.listdir(in_dir) \n", + " if csv.endswith('.csv')\n", + " ]\n", + "\n", + "for i in csvs:\n", + " print(i)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "('../Data/test.csv', '../Data/processed/test.csv')\n", + "('../Data/test_marked.csv', '../Data/processed/test_marked.csv')\n" + ] + } + ], + "prompt_number": 12 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "Next, we can summarize the processes we want to apply to the CSV files in a simple function and loop over our file names:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def process_csv(csv_in, csv_out):\n", + " \"\"\" \n", + " Takes an input- and output-filename of an CSV file\n", + " and marks minimum values for every column.\n", + " \n", + " \"\"\"\n", + " csv_cont = csv_to_list(csv_in)\n", + " csv_marked = copy.deepcopy(csv_cont)\n", + " convert_cells_to_floats(csv_marked)\n", + " mark_all_col(csv_marked, mark_max=False, marker='*')\n", + " write_csv(csv_out, csv_marked)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 18 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for inout in csvs:\n", + " process_csv(inout[0], inout[1])" + ], "language": "python", "metadata": {}, "outputs": [] From ce93c395968eebdb482912ab5445f83eab7b4e5c Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 18 May 2014 19:20:21 -0400 Subject: [PATCH 049/248] Creating a table of contents with internal links in IPython Notebooks and Markdown documents --- README.md | 1 + tutorials/table_of_contents_ipython.ipynb | 224 ++++++++++++++++++++++ 2 files changed, 225 insertions(+) create mode 100644 tutorials/table_of_contents_ipython.ipynb diff --git a/README.md b/README.md index aa31d3b..26facab 100755 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ Useful functions, tutorials, and other Python-related things **// other** +- Creating a table of contents with internal links in IPython Notebooks and Markdown documents [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/table_of_contents_ipython.ipynb)] - Happy Mother's Day [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/funstuff/happy_mothers_day.ipynb?create=1) diff --git a/tutorials/table_of_contents_ipython.ipynb b/tutorials/table_of_contents_ipython.ipynb new file mode 100644 index 0000000..88df370 --- /dev/null +++ b/tutorials/table_of_contents_ipython.ipynb @@ -0,0 +1,224 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:3c2a446633991d2794356f74854558a9fa03bb10b4498bc2f618afc26fedddcb" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Sebastian Raschka](http://sebastianraschka.com) \n", + "last updated: 05/18/2014\n", + "\n", + "- [Link to this IPython notebook on Github](https://github.com/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day4_2_cython_numba_parakeet.ipynb) \n", + "- [Link to the GitHub Repository One-Python-benchmark-per-day](https://github.com/rasbt/One-Python-benchmark-per-day)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "I would be happy to hear your comments and suggestions. \n", + "Please feel free to drop me a note via\n", + "[twitter](https://twitter.com/rasbt), [email](mailto:bluewoodtree@gmail.com), or [google+](https://plus.google.com/118404394130788869227).\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Creating a table of contents with internal links in IPython Notebooks and Markdown documents" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Many people have asked me how I create the table of contents in my IPython notebooks and Markdown documents with links. Well, no (IPython) magic is involved, it is just a little bit of HTML, but I thought it might be worthwhile to write up this little tutorial. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For example, [click this link](#bottom) to jump to the bottom of the page." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The two components to create an internal link" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So how does it work? Basically, all you need are those two components: \n", + "1. the destination\n", + "2. an internal hyperlink to the destination" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###1. The destination" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To define the destination (i.e., the section on the page or the cell you want to jump to), you just need to insert an empty HTML anchor tag and give it an **`id`**, \n", + "e.g., **``** \n", + "\n", + "This anchor tag will be invisible if you render it as Markdown in the IPython notebook. \n", + "Note that it would also work if we use the **`name`** attribute instead of **`id`**, but since the **`name`** attribute is not supported by HTML5 anymore, I would suggest to just use the **`id`** attribute, which is also shorter to type." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###2. The internal hyperlink" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we have to create the hyperlink to the **``** anchor tag that we just created. \n", + "We can either do this in ye goode olde HTML where we put a fragment identifier in form of a hash mark (`#`) in front of the name, \n", + "for example, **`Link to the destination'`**\n", + "\n", + "Or alternatively, we can just use the slightly more convenient Markdown syntax: \n", + "**`[Link to the destination](#the_destination)`**\n", + "\n", + "**That's all!**\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### One more piece of advice" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Of course it would make sense to place the empty anchor tags for you table of contents just on top of each cell that contains a heading. \n", + "E.g., " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`` \n", + "`###Section 2` \n", + "`some text ...` " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And I did this for a very long time ... until I figured out that it wouldn't render the Markdown properly if you convert you IPython notebook to HTML (for example, via the print preview option). \n", + "\n", + "Instead of " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###Section 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "it would be rendered as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`###Section 2`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which is certainly not what we want (note that it looks normal in the IPython notebook, but not in the converted HTML version).\n", + "
\n", + "
\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[Click this link and jump to the top of the page](#top)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can't see it, but this cell contains a \n", + "`` \n", + "anchor tag just below this text.\n", + "" + ] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file From bdf3ef28b922999f03a33e3080a57b6abc1a870b Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 18 May 2014 19:23:26 -0400 Subject: [PATCH 050/248] Creating a table of contents with internal links in IPython Notebooks and Markdown documents --- tutorials/table_of_contents_ipython.ipynb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tutorials/table_of_contents_ipython.ipynb b/tutorials/table_of_contents_ipython.ipynb index 88df370..ac7705a 100644 --- a/tutorials/table_of_contents_ipython.ipynb +++ b/tutorials/table_of_contents_ipython.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:3c2a446633991d2794356f74854558a9fa03bb10b4498bc2f618afc26fedddcb" + "signature": "sha256:4b74fea5930fc3c6164ec6082de5aa8dc334699cf4ad1d5775c8062e59d92027" }, "nbformat": 3, "nbformat_minor": 0, @@ -48,7 +48,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Many people have asked me how I create the table of contents in my IPython notebooks and Markdown documents with links. Well, no (IPython) magic is involved, it is just a little bit of HTML, but I thought it might be worthwhile to write up this little tutorial. \n" + "Many people have asked me how I create the table of contents with internal links for my IPython notebooks and Markdown documents on GitHub. \n", + "Well, no (IPython) magic is involved, it is just a little bit of HTML, but I thought it might be worthwhile to write this little how-to tutorial." ] }, { From d2b526cd430885b4e37610a1d63c91e29ec420d1 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 18 May 2014 19:24:32 -0400 Subject: [PATCH 051/248] moved csv files to the correct location --- Data/test.csv | 4 ++-- Data/test_marked.csv | 10 +++++----- test.csv | 7 ------- test_marked.csv | 7 ------- 4 files changed, 7 insertions(+), 21 deletions(-) delete mode 100644 test.csv delete mode 100644 test_marked.csv diff --git a/Data/test.csv b/Data/test.csv index 74aa781..7c8d315 100644 --- a/Data/test.csv +++ b/Data/test.csv @@ -1,7 +1,7 @@ name,column1,column2,column3 abc,1.1,4.2,1.2 def,2.1,1.4,5.2 -ghi,1.5,1.2,-2.1 -jkl,1.8,-1.1,4.2 +ghi,1.5,1.2,2.1 +jkl,1.8,1.1,4.2 mno,9.4,6.6,6.2 pqr,1.4,8.3,8.4 diff --git a/Data/test_marked.csv b/Data/test_marked.csv index 69ef554..86dfd82 100644 --- a/Data/test_marked.csv +++ b/Data/test_marked.csv @@ -1,7 +1,7 @@ name,column1,column2,column3 -abc,1.1*,4.2,1.2 +abc,1.1^,4.2,1.2^ def,2.1,1.4,5.2 -ghi,1.5,1.2,-2.1* -jkl,1.8,-1.1*,4.2 -mno,9.4,6.6,6.2 -pqr,1.4,8.3,8.4 +ghi,1.5,1.2,2.1 +jkl,1.8,1.1^,4.2 +mno,9.4*,6.6,6.2 +pqr,1.4,8.3*,8.4* diff --git a/test.csv b/test.csv deleted file mode 100644 index 7c8d315..0000000 --- a/test.csv +++ /dev/null @@ -1,7 +0,0 @@ -name,column1,column2,column3 -abc,1.1,4.2,1.2 -def,2.1,1.4,5.2 -ghi,1.5,1.2,2.1 -jkl,1.8,1.1,4.2 -mno,9.4,6.6,6.2 -pqr,1.4,8.3,8.4 diff --git a/test_marked.csv b/test_marked.csv deleted file mode 100644 index 86dfd82..0000000 --- a/test_marked.csv +++ /dev/null @@ -1,7 +0,0 @@ -name,column1,column2,column3 -abc,1.1^,4.2,1.2^ -def,2.1,1.4,5.2 -ghi,1.5,1.2,2.1 -jkl,1.8,1.1^,4.2 -mno,9.4*,6.6,6.2 -pqr,1.4,8.3*,8.4* From b79dc17e0a13a0765ad70a97ed8faa0a98b28529 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 18 May 2014 19:35:27 -0400 Subject: [PATCH 052/248] fixed typos --- tutorials/table_of_contents_ipython.ipynb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tutorials/table_of_contents_ipython.ipynb b/tutorials/table_of_contents_ipython.ipynb index ac7705a..6390393 100644 --- a/tutorials/table_of_contents_ipython.ipynb +++ b/tutorials/table_of_contents_ipython.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:4b74fea5930fc3c6164ec6082de5aa8dc334699cf4ad1d5775c8062e59d92027" + "signature": "sha256:19987eb5b732fc336836589fd9ab146141494c84bb74435e60e69fab53bf0781" }, "nbformat": 3, "nbformat_minor": 0, @@ -164,9 +164,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "And I did this for a very long time ... until I figured out that it wouldn't render the Markdown properly if you convert you IPython notebook to HTML (for example, via the print preview option). \n", + "And I did this for a very long time ... until I figured out that it wouldn't render the Markdown properly if you convert the IPython Notebook into HTML (for example, for printing via the print preview option). \n", "\n", - "Instead of " + "But instead of " ] }, { From d51771eb9376f2129450279da9b75802d48bfc0b Mon Sep 17 00:00:00 2001 From: rasbt Date: Mon, 19 May 2014 12:47:17 -0400 Subject: [PATCH 053/248] images for clarity --- Images/ipython_links_ex.png | Bin 0 -> 93970 bytes Images/ipython_links_format.png | Bin 0 -> 150759 bytes Images/ipython_links_overview.png | Bin 0 -> 24323 bytes Images/ipython_links_remedy.png | Bin 0 -> 10566 bytes tutorials/table_of_contents_ipython.ipynb | 33 +++++++++++++++++++--- 5 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 Images/ipython_links_ex.png create mode 100644 Images/ipython_links_format.png create mode 100644 Images/ipython_links_overview.png create mode 100644 Images/ipython_links_remedy.png diff --git a/Images/ipython_links_ex.png b/Images/ipython_links_ex.png new file mode 100644 index 0000000000000000000000000000000000000000..6b3dacfce11af014afb01650a3dcd449cb6a3a15 GIT binary patch literal 93970 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

T8=c71_rsd2n~LloI4nFa;e$*W4%7z-ry1 zaFGDkHEA-bjb&5-!4%v%I7r)Su+E0XHo+U_ z886*uU4Up_azOv9k2--UVq}lgvRB%c#z5n$zPYi+wx#jZb*b%H@MX8r#BiL9^lC%Y zM7lmbTj~p@F6?)~eN;T6`n7{)tN5=pD$(~s{g0LVGXkFrf#oNL9yDJxSNzZD?|%R0 z&%gy82p4Y{70yQ!O|5Fbwnw)m0p@Ty?2q2Awtanl_hl8qq6gRUowITCF{&56ZS!~S z_t&KFcP*P{L~w0^$I2fQ-L|%E{(Y-nfUELjqI$k;?#tcU@b&NXxuFrWGy1#gZvO4J zX}WJdceE7nef&@z*XF&A;ce&MG@k0m$CXbq79ZDUZ2!lPz~@3>ef(wIs_{jom$`L? zv2U>v`0|c`)-|8o5~U2dx3wfgjOxZ~fwJZMebQ_dK!9rB(XB^kw})+&?% zAP8??8pNZdj50y#8=S(mPL_a385^ImSKjTiU!EJZn;2(hf4bK)0t`aN^-og#b$pUz zHy<;HM@#k=UmU{)AvV$FPUo9s42Kl-ys1pFyza*P`B5eMK56OIg^@dYTlBI1+}eMq zf2te3J^FX_ci+CRyLsQoZTI^>>T`3O`W-8u?Fc;7u!fJj^jix=395izW_Va!=0(^U zZqdtVvQ1*pJ`KH$jNNdwI79p#+uyqu(8~zlGm5cx7~^bJL51UIKaT5K^fI+X_pjpN z6HodcpcJWi2RreiwIZ~ND{}0~t+~**48tanXfHvha_$P$Fog0xOF{xs%fyG$tO(E4 z0>ZB!=RhjK%X`a11Y8f>Qev|GLBy+h2BF$F2Ym`$?QLQpSctP1_LtyxPq3S0e!18; zM?iBn_%6J9xZt0}!#07Sy$pWqaAScjfjjF5A`k*fFaXc^(`3N8gzJBNInIvY{TxOB zcVUOC#>Up!HD=@qvb6Ojd$VKS{vDpgW^95L6?wLg#10Cyma{?B%Ax|6_bdkk_|?`~ zm=TQj@~j<$`MYg1_6Q!mk>Rj)5Lmno52%*Ja~S7E1B{u-wgGu)?HIKtAR;^9*%}9D zCPTck9qp~lwNb8Tl_2hC=`Snv=+)mHAA#umt_sn=qrZRLKHvD}WBm4e`TR7;-b?$j zI=7F&L+d5Hy_@&;tEs8!&h#?SlN7*Ia0PmqtuO$HUPhQH(aY?O(97gQ_Y%LdWKF}% zc4!O96To}rLGOY$8-bN>Q!qL-_srW%`-@CjXQuILt>C#*@(9txlvU+gP0G6cAHQz5 zx-CUkk+^2Z05B@yLm0!ZOtD=A{APpQS_TmMTJr?%_X7C4pi#j~n3J?-C$5cK2kZwE z2-LZFf{NKTiH*9F__=0ypRVJf>O`YiVc%mlnRephpuuBjFYJQbs(HY!jgstP1!;m8 za~s@UuY53QsqjHPQl4h71EA${5!h+KBfu#kP%h${FQn}fJeRG|w_E`T+e4*8cpb+P zgulKpVwdQ17)(C1 zc3uGaxcn9L{Xz4fT_SCnc;i!wi2jRCBjY4jC1D);<%{+y_Up|{!p8#wcCZuO46L^+orpw%n#?=oPvlUF((|{Il zc8pmE7^LmwpX+A1lbo9DQiqAhcmY?txUodje2nmuvm?t^PuA*1+7i>I7&g=Cn;;BY zjtM5P!Z8Zb5hMW|wVfr`-U#@k8bFg*z#@rEu)Z|QrOR4p8K+oDmxLA4z1N#Y-SW2q zfv_%E0769`K~Xg8KhfXJrXMzC`U0wR`EVZJmz4)%cye~S7A2&q0O zq??sQ6z;1jfSAgyxSfpKvNNR9UOw;%ygD|AhSsa)Hphu`YMphWC}gxWOd-rjAwBB% zUg)a@m(U{bP98viPh+27-Vyl1c?s`yE5(MXcrq2{or}G5-}xck%)ih*mPnIDcrIU8 zbS|nVT9RNw1?_mvPW82flrE;YGe?iYccpmWfD7YLyf()1KFD2$O3oQj=u8QNzFuHw8@Cm4j^QlC}V;i%x3!XyVNU<%ixv{m#Q zEl?OFeOKRvEmHqE{l=%mO0mt+(nPik8|99pqRyedXuKp}G*)q3zXYAIPZ|rpy7ttT z>Wj!v+x&p5El-o9ZE8mxT>-vL6=Nkf0v{fMFPy+qNRN*<{P5+*w!}stHUgjL5%@yb zu>1{>#v@_nH6OoSpOY-9Wb5%oS&g+M*(fa06n!rwvoF(VC>u}&+IG~zEb#_dMs6;m zQt7bv|r;v6HCL+ zx_sM10QDKN#$4&2bKK+4?JNKSFlldcOd=sMPwg)w6HJ2r=4>w+S<*;Sk>)ZcYmGCH zeWnR-TTNjKadISufV$T$&5%a22PGp2!x*NMF+{)D61Jy-Da7H8Tu(@JS*Azfm_O4x zW!vinpMc62%e}HmOF&4dD2uVYn!bo)MH!8Y^GTl$rOE^W;ECAfJ|GV7Nmv$Sgm*%h zi&yq%g%rudxN}D_^g4Jw>F;$Q2CL~IJ5ZSgCGnCKVe}SV%>wo_8NkEDP$sZE9YZjS zUMG`nviVh#-fWd+Xb5%#3|ek!s@OfhO!j?@ea1%Mvl@XfguwFNKw+>1ZP>kgx5Hw2 zgGnJCszcaTetKry#TBN5(RzGmku|lAIM@LuV%t`mhwxdptH27L+i7^+z)>N%j-4BF zTvke5C7$&>1Xnh=sMk(*TQ@L)J;kYZxn}{xG-`0UFP^G30xuD$?0%*4tq(H;6WX<4{w$_8AA`tuN)k$b;QplP!LGbY+fw?*M-6JqV zxF-O>D}DZ1(NLL3pG{_EJE6%>`<{18-dSq1ilbULa$MEc6QqN^XE;Uu1LM2 zOv1C23pdub0urVoP(-@c3UG2hDaD@O$;8JXJ&hr|qBO%+F%k>Vor%l;RLdxsssh`N zYach63$j(xhIE2$D}gMOQYVhwgYpdKgDV=HShA-9mOj>)V=wM2v0S*X2B+7+EkQ~L zr@J&afmP#Dk}VI0gkuP&7YLhV45lxg{E;B336>0n5m^G##C9%<>jlF zckt%8t$;84<`d;sOVWtLfLHT?Ku9y2<(L7O8j8^bSI~%Xc)EOjBVeow3bXBdN6IV= zfng`9#YCxc1Fz}6hC+J*pzAnewFdzvvc7)4@2bnT$Dp=Zf_dWo_9@^BA#xi+2uR>~ zISdEGFk%EHYP}iR68nga!2KS9FO-J0Yu7GtMIo!Jt8?SzHLox^=#JhXu_w!y$?<7> z1Jw9gmQY*BJJ$lPY6TvxVFXzZ98^{CCN+cG8Y7hEDj_GS84Ca*(-8)E&5(a>Ai!6q z!AhZZh`v{zvN76U0<%@1O3Yg&uF$!YB|s2j6QIsR8Ee+h@-G9;Dt}=P61-IVIvB2B z5b84k1mYXz!Gsr`OE31dLWJQZmXgXsBN~({G_7hlsituIO_Fo46yB$`>3REq-srS_ z(5-|?gO!9JJ#i&$Yd{4G>5rfZf=TGDBvyg~+CF`A!2Y&l1=^P!E8#o?aCq$kPQXgi zC3eU}@Xo>NAc~tb`k$JxYS*FS5o76#JMzddw1}{Vi2|yXVfrU8qe@JEe&^BIr8 z7tTv~r|}vfZ(s`ymKjVsOiUQxgN(}aq8t$ffPb>}$OxZ}y-1l}WP5iQB7{;pI3&RY zL`0ZxLZM!!e>F7Ui;|YXLkeoR#mh@MTG8p~8X*QV~Ek#MB8m6s%S{wz_r3Xqt1? zz`s=s_tu??AB#Kfi*1XIz$Y1jFOD7sC* zKe~QE^P)Wg@bOOPiryw+Ac3Od&*7wwlXxFKpYNkPAnH$aAN=Oc!b0s!Bzb}8#tKa^ zaw>OPe{9gBNT2u-{oAdwqb}l3eTv%cG|fAWn?Kis_;h0%bsZ1loUwC!HY4zb5?C6d z%{Z*+$@AF^VXRdzw47jII3lLQje+q3HG2Q;-vi;i`Cdid6RthKFM69!u(5sPi`(j6 zE}Mn+hwA$m3p>0}R-IURct_w1C$OT2+CQ+fBt*Cf^>7Y}B9v-fF>qI~3qfOU`?usd zYT!Zm(65o*xUM`4J60N@G6V+`_L58>@lMj5Cu6g@%rSkFDk!z`^+bk4{%E9(qvY7##LW8lvt z1pWz_D8`{2-UEmG7P(6Au?&)UL%j0JQ2kM528^SoLCu%wWkYA*$tX zIS`FI75}WhKJ95MS6%;)ugL3T-|-V<$VN$#PTda9{78>#?TEbt}Mf zwR%0pUf5IQ`gMvrhj$eN6(HRgLD}Ld--^eOC}ZoGST^8S_9nQk#~N}iBWczpSy*$n zDH3u()v`vGnKt-e3P>;iX4{ng;F&7x?HacPC~fM<0;BX>*9R8uFTT0WlJSnddc4c> z%d_ps)*R~?oVEdkoami9pp%(UXb)Lt8VQKL-Ww(@TB0@Lp*)L+QL%!TJ4l&ToM%sz zr`Sp2Fdu^-URh(_CH>lZR;KMOFjyF-;ksY3^FTW)$mUZ>e4$c&O<*q^BmQuBG0t{Z zgsg?J&CNwnaSs(rrPORiB&Nv4n|hjKw-C5}2#=+_p6@pg+nLTe+lw#^PfWW65)A~l zD;Y&L_e#kxT5uF73CKDxhM(h6O~gxlkmIMoo3#-LznA#OeiB=ZEyvrljJ zc;@Suz9(OZ;Ah=M*-4`5Wt6Z&+q4`BiC!j@U`=pXZLPumkHMKaW8DBFcW=pu(j>v9 zZ&F5_E6~e43cXA^%m|uX*WjfpBe1vt?A7JAQL@XRwUFwmj!AL0b<(P5mM5yI)N@cQlDk-5Y#=#cuf<4 z-8VdkL7m`a1lARV+cM`B#a}LCGDtcw{c8tMnvKD|9IVz+0?XS;STRjDp}nwEynlJj zo<2~5M|Q@paJ_M8oNc7pYL##YFsq>Gvm}2|VE7O$6lY!81RS#Q{jTk8UwVo3F$3_0(6Ib9rjxoV zCkJ7}r;4|o+yHDj#RT3C$a9dldi-3R{rGr~ZQE94B?vMxiC$+pC~sjg*rIL{c+OA4 z5Q^ii1|buyk)U7!gZ13*3adgm+=Q`o5P=krKwM=KZZAo9NjNh|(WP0EfETcyZM#Sd z)sMEIrJI7Gg@jir1p?7CGfNP2I#e?0c6xrC)1+7yAWzZ4s1yLhsN?iS2q|T~8ANc+ zW2n!i&q{odfroNCkc4@16;_d!>?&}LeuAO%5h7X!>0HTcNmfmJ;_b>|NwmUJ6-T3` z(w|iN9Y=fo?nuy)JSICUJJMbOY-O4JX8#n4OF`-5LCmI4 ziCkw1{mg+Eu@=?|m7P^-b`ox{TEMo0ur$yWlE@}oJet!I2>EM3L*fzCJD{++idHwl zIPZhluNN&hIXM}R=&Fkvkk>Q~0PlWqU&PB$5z6|<*IKH{g+gq!Bv2^`Z8 z<;zblj=71b$uUI2(;k+K$-o%|_LO!Z4AcM`PZ6NZIP5Q4q6|4X2Mr?#ldGHZs3wQgH5aEnwA#Hqu6sXyw60H`XOFq-s=2NY&Yum@_p zb7{ZR8daB#`mW>MG1O39eOF65w~B*WXk(;5p87`1E>%$)F6|XXjE>PZPV25m7&Yxv zar^ny@hY3o;i+nb*^>QGn6W^^mFG4%K*!Ks*G~sHb&UkqtnL0>YF|IxZaU@0mTPl; z;95k(qh9E@uc*5Et!K&M;dCKv^!PH3O)ypwD2H~lU;W5b3@F-StUUZ9@W2F?CWD(d zkukZ`?_j#<(R0&_`g-Dm@3-(nK|6XLKfF)N8)1!tN#!cgM$n=Th?Up~#75xrJOX}Z z-?wWBv?eD`Hrm_}PJ9X8ihzf1UNsiWU2(ffQt zO$j*Jj#MZ37kQiB-kqR}c5VQes;q)5Av*0H&W>@b>U$DdDjGu?yVw)o?9oFC`S zZD>g=&Gq9-@O%Yht#l>i=>ymwIpc7kshYq38H=#R>Nw*gnN=rCYg{E(Gd@Z7YH#Sbv@_0 z(H*w)9kS!3Thompd*{Zq<9Qz?15F9s<&y{zO|)6;D!LZgQIw5Y%cC234lhAjoQ)w@ zM(#<3@D%lwL3nHe$`<>3I zfNp7n?gm?19|Ap|@EqA#9ETTPEwxQA?AK@dY=pSNRt(Z{Nu;EQ!Uj{3V{aIT|4ZkY zWsGF6o5x^|X^my5VF-trfs0Uo^4%nm5_pasl~3_y#lubi%hLl6^A=C=x3WuzIO!1QT%yipl2Z)8>#p?jN<2G= zjZQ1+E;0(G()JAJQRt9+VX<8tV_MEBgh}B{F2sqx=|0@Ae>4{>pOX=|?+f?0-+tR& z`t#2}f7=i=w~pE%GiD!lB9(LCiw-oF*v`^4ymWJR>`cG)AW(`iFwbL*9mHT<1uaYx z5B(UEqXrK33EcL-XDN~&e}o(Aw()nH&>M}YL;$y!SW;6#zI*+bTwN2`*~b1eFesb8wiqg@IP?` z5O))7y&pJ3&!AlWOZLO(s%;xy%Tred?PC8tUMdn~j7(W^4R|a{3x?(4RfG_N`Z5ON z10=jqDy{d(-1EJss`*Va2{fw$(ql<@UP0)do|v(Pq>yb*N9f=!d<34a*UpaEquX+A z7?{O0Chu~L+M=`xAz)wHTVknP*Cjx;qEH^f##Wt`WLvaYBQwvRK3iqN zt=@VOy5Wlb`I3yleOVGpO;=f5T(rOZ%fEF0^j$@7!G+m*JJA}()3atbz|E+HcstAU zqjD8seQhr+223uMX=Ye8F71Ba)M=R+a7>jU6yS?uVtoJU za$Nkbnlso6ez4{eK!5>a!aljPkYH!LVtDlOC9H7Ew}CrS(uy1e&2wOzzOp;dj$InV zU7rXvBEe3R6=qv~p?&Q@k*y&d-?=#rn?e$O7A;LYfz}$Ib-PYG-+Z##^5R#aen|&J z89*}j0Spzr%wDeJn~xNe*Ds7fUv-|o5j<)t3dkPD8+HW1=B|QdOXS>09t7E%ee+Nm z-c6`)_L6c8Sv-uURF)oRmk^dOKUQIN1!#2SA-n=+D}%B9fNSYQm|g?^UkN;+m%N8B zJW@{n#8mqgv5J z%9YJ=|4wx<&b%}d(cY9jNF{jU+}GHjFVP6x7Y)lV0aJL}|LkW!bKW6+_a%|KIa$?G= zrR1^=ik3Q4yz_uABtcLM=$l08Jf&Em0-GH>0D)5s$6?BGZ640xRmrE z2UNCFY1Q%lRP&&DZ% z#JTM$4cU+1YPWi{wVE6<aku>}-)4NF#O!5Ij2 z2AdbkqOGxPt;wN1mf+udyvW`?*XN)fd9bj`E+R= z_#L~@hsKy>Ux7#LS{LR3Fl)k~sRVku`x^W6B^rUx)Jy2qcG-WF+TFRO8C+#c5iDR9 zd{7wMQ#o3UG=pK5TsbTaG*RTSb}oH{jW9epgn~$0lifo$4$-vR2mTd~T z1d^S7ObXRkQ9BXcl)500Wv)svMa>%|TLw;a5hbD%J zrVKEy@S4{tg!7Vc6ozPqWt#dVH@R$1vK3{5mr^|$xs~Qi@`|XZ!+w|@B zvbpbW9I2xAf-%)7MGjVn^h?*T&QLT){<|9=H+ZTTjD-$$`-4sHn9bv&x+=jrZ&mbT zsdMl@PK^(rGw7o`Joe{HI0B!6z|sS#hcS5AzDQ$wYifOwt}1pdu@U(Ej6h^M?zMcB2wrCS*E4wMwxktoE+cp}tsZO_6CeS4IkA8&O zK@98TBa_6a!MzU0lI%=9-Q(5+uIEV%vjcb)o5(`Na{R3p}8jEHdp(_G8TxmJchyGrNmyeSY3P=$Ns?yNj&^+g4le zl(T)!Bbl;`lB#yfZX?|CMe%Bp$o_Ep8`EPmXog0j8{lbjEeGyn*FfHTC{;R+G zD>pbl`q7Wz1rH+N*LZ#JL)c8B?VN2Jw?EidxYP5P-Ve1iR2X z?F3dSZuW%KWLpqZ0UoP=I^K!baovGU^VxS8ftU|0p*%m)E~90HU@z#T%bf)67K16; zjyLhIU%SCf1h9y3d#8zvG7Wh)LBDrxgS}v466%(D2QIye5XdGu!y%|zUOCp`0&)d8 zgB!yB+rwn3LFk+TU>aVHcU)PE7@*4$1X~3HMR+9B$ICaToWL4KK(`|hCwgb?AOdR` zoLEV2I6PD1v#vJx+Mgh^nvf&k#>W190DKx|5aOix*}CMaK?roZb;OZGSCChf1kx7}tYrtF{2j*^2g#eRdpdkI*^Fv2PW zFJ2e4EvMkZn!xzqf&ebAfTAX1XZpg-h}eZZ)FW_T1eU)-1-)+Dw$1%?1bUGj@(KzL zkbtJqAIS=(K;vh4!#`4(V1IYC*Rr8*DZmpLFBcko|a z*(48N0s^iQbo!2Jc&2)09HM%i)nz)KFqH~2;Pe2XEGfvaZIvn3$?`G-EJOy$M8QFRZLN zXqx#jJShKRcNf=Gnr%0`Cy5wHwp_e-Nt|av*Xw#5`x6_12QvZ*|AF#pPvvb^5>iKw z9C82j-D_TYs83%Vu`|8%wi7&&Fbkq15nRB<;-Ls+B*#H1vTivbI8R+0bK1dnuvf`U z&}Al(LU4+C>#w2>oFqSXHa`f6+irBD*tMP57wyf_Bvv$9$j0?nvksqHgA$ChuOb|%G+|F{vjuU(!vNJ!dSZ5?AH0RNBMo-F9g;YD3p7x)U|#jq8d> z)OC2*zwl$iifJs=Pk~04ImXk#xQ@_-8(-?EJ&lp-di<1!S@`kM&}qL;tPd^0wN2`g zYa5M8=M|5YAZG5eTy4fF(*DNyvt0s8b@VCZzs~<@%B}w0-pbv!-(KsZf8A>v_gc@N zExLa6cfWu0r-u8}jnb_aKdP;J>C3H_f^VPXn9XfGsNeThV5!so!Tz)l@q-$G*m*wv z2>5#*w8XU3%=EKBvrCduLN%xmEF;}^x7lq~8*U;>_~}?`dpYO?ua0)@MjBC#NQ1%o z{r=!sUtP5~_6KK(v~&A8d_8RqUXX5!JBd4Oq}ibJQRk*wu>bb<{5gFeefzFmuzpG*xUVI6+iP@hFM0-V z{})90YtW*%>!<}Z90m6JH@&twMgUcelzu#AT29@MA}wm8aE|%t-y1uEFSoi7Xp5V6 zN3Mk>EK8_cz1>`kv2ZB#sPlffifii*oA0_w5e3n-Fwqq?&U(nBi|A>huhmB)s800Q z>o93@V%F%x0f54ITk-ci_zWhn`%W!Q7XLlaNd5j`pDt2#Hmaius3*s_qo8gTw_WYH zeZg^RS4Ca%^`no~chU6->A$gG?Xx4gp4w0!6cXk8piQox>T9?E?LXP5<+O_SE7ZuJ z!w<3ltvY&kQOq~$=opoabFe|j`D23Zx9`_6+OBKTz45}z*HwGE$NpLN+x4k(tL3d| z4BFec^>+h#(D%Ng*gqPzsr0B}bb1IlBS1iI$5?+_*4QHQfZ>DlB9SJDaF#X7IR;Oh>XX)1gZ+I9%@| zEg0cONpO(oV9QaM&;;iZosCS3=k7}lGqqf}tZAd|*% zN?kQc7?SKuvKOUMUww^ZskV--Nl6pZpe{ajbr@=2ILR@5&#`2jg2mz#!OQbpzwBhQ zT*DIAC*Q*m7%YX^_4Wk!<=B-mvPt7@1lm!KLqlV&P$h*RjbS^}K7}P|wXbVRp)X38Ci-Jh$7p#j z!KeGAC9#&E6W9&AfUYQ1X#_836356D&<5I1;o)4A@=iB^O&O-5?ieLFFV~l_ekTaWv{4)^lY6Yk%dy7tukKRYB$EZ z=kqvNhPkFx?u){lbgZ5|Es>SR?I!FPojf;P@W!`71Edh79Gn_j%1fx|zUjTErTjRy z)VG_)Sw7=bqLFny^R%P!n&2EdR#ZP>u0vI zPAVNUk1bPl()zAv{p7VtcmK5PU#0^}ZKiu4#$Kz`bE3so7+D%^%2ukboFcegLHybl z2+n(%(Z8EI_ti^yFPEUVfF{oL^t3fMH`~sgI~n{;_W--?OyoXrRb@QzdXr12$Y{L2 zwCLVay5V|&)J_Swp+4EI5EP;0ReKksv^d5U*sLTAb)@lcpF13%7 zA%>VZ9;kKzT8{z^P+r3mq@Mcjb2YXf#sxhftq8R-gpl6F$xMO@QOFFzC(n0f*U7+h z`kRy8cDirgo`juYoXIq7xH+x|LxP2whn8?tEc+K?~IcJY!(A7df@Qb zl)Vj`##3axxeWWl(9ArH5{Y&i3ZP5`#-G1X?F5aSAL4o!*!K9P6}t$$<*J$b0(09_JOdq z!_(7P2DJqDR{U6L2!NAd!rDp8m4>sSkO{wn+jIr*aEN{!f_kYOXX9sR!aKOO zrZ$q2EXCVFGB9=XT*Tqnn&#Ll@()x}_f3Ro0gj{;Fn9YTxjqNwzAp(s?wTcNRQme* z?1?9yaG$|3!S-a{#DDgDrOkmaYUS;vvXz{4MczZapllZRjjX}!Kfoz_k?E-*`50hSIk z5mlt&&GV@KK8yyBG-TQHwB3VdQeTsA-#S?6gpO!&+J+X$=0m@LDim;@--o8=Fc19> z9^hBbj94K_MHk7RIJ2B!-+7|kk{Bjo+A5g5N^YS<4LJz3XMtj*C9a_ z-i~$7+SkajSP!0T7U49?a;~T-*S@|tkFf%53y_v(Tt2`TcI6}3QtfL{&+I5kv7f@D zRe<&vhh~AicbdX9T1NuR8((|0*e#Pv5U4%ivTC?LUwxzqzN?UZ<3J%aHPXOBHbR!4 zWjv|heX11gamL;z9hj0%XnQl7+)45cDluyk_`Nx_;qN_D;pl}rX5;NoUaYYU(vWq) z&Go(Ks+>o71h~d!IM6P@6*jiQL`PsW1A0vWevyKQQ(n{Ug{cmGe~^3Bz{C`gwxK-7 zo`+@Pv7JTM2(!fvG`cc8&MQ2N`|#-Q!E=2BeznE4kp1v*DQpyDmXVci-+hdJqlKuH zLzD9^nSk24w(H!pGM>R|o{>Xn{Z&9n{+q+)C`|!R{wzW|2MEs!%Tc|ol$hkn-6eJy z!I#ZTtDhW?E#L|p5V9{GD6>a+bN;6Qy+A_0;{%XDrdcxBol%7AliRZ`o$>tEkxEO( zD?LS9@(e3d z5fFkR;j0i}82~ZoP>~bipvvSR@w_MV<{E{BPU`joORQAh>|4>Gra+dTUiru{V^$2#NgCG>K-Mc=GcF5DE}Bvt%asg-$K?DP;MH6!1P$It zI8XxDRm`Lo)25bc3kb2xKrg!JLoIYJB|s}Ofj^9~M62hmo{1I_BH!RDeT_qlDCJl! zWrb1GbqaSik6ORR^7jUL{KUFC%kNy;8AT&mW6}$ae-f1ZVqAi4?Tc*_NI~q+cwyt2aHtuTi9XjFPU)Su(PMpBu;)u=DO{9wo`c?mV-gCk>XN|97$g_(}GOHY$1 zt(6g{jGHG0(`3v92?)CpUP{^E*|J$~CSnR$XH1gNihG&dGmKk2K;aCYi7wb}YtVYu zXXfl(lFur?VIF3N6z=UD+IkJ(Wui&b^Gz@0gg|$ml|_nbtTOinS-hkx((z? z9DsN2IO8nH%qTWn5mqWaTo?Hr+WI#`;ZY-}=)3mAG64eIb#G(DD~vUN#VBr(Z!iv#KxVU^Y# z^^0s+n#isV&Lf+PY(1h(zQLPy8=z55B6Uvfi_D=m$PT1_CnJ#8W!0s>A=&7h?Ip?CBxHowb?YG%tU`FSIcAa`U>UUogLYuQQ{GWg z$>@GWpIg{1*-(7nG%m{s(goTP1S3h95{iuevJEOJshlS1Oa$FCwWs22SbVDA>W}V- z#)zLA#gF+oHm7VPpXjhfd!2*O)_l_SMjxy5JID;5x^@veW+5b%CQbd5EiSs~*fp+2 zm^VR6WZx1oWC&>@I-D@}paLedsC<04oUN5#!EYJjHTJ=n>Y9Z))V1k40!9t&QwU2v ztGYKD9`#%2Qw;1yK*>7^ks9Y&pJvd-{Uu=X1Okf&+-?-=|5YM?5fItEL+deycbB z9Jl(aeyY~3e(Ag4=DXzYVX$2X1bx$X6<^Q&U{mlrIHv}|-w!t?{MHzF!4`e2Kkvph zvBBRLol|vnoQnPiqY!D|Z4LUadTy*ZkLvibRuy+l&_vK))5OI8N2s`oZ>-_T2N}#EzEp=Pht@Gb@Pb1f;dh$NX-s$V;(_M>>)tBIZ z*PiNYf8s{zRotIQUEkKG*lkSP09|6G66r>J(Kzkk~HqmTFJir#j&@0nJ-#;(qfg9cLHZWe>>h7Dc|LfQQ9+(VV_+Wi7_6ky{3gjd%+E!h)rz*?-~{( z>%vXk47{NadKe@p0(A@<4l#JxoF);RACS%}4x@WN?s~B(h`J^Zqj_`Zn7z{ycHHmV zs_XE`D=sf1 zb`jpOt}aVT%fQ1sXs^F@3h!#6vnvkt_2BH7agG)(-)@P-K%{-5-yGytJ^JLKa{r>g z`)&8*Q|;bs+neicKGwY$B4ZG}?@q`0zHi=lr|r>g`TZaD8Qmt|KQHBh3oO}j^tSEn z?6hxx``h;P(@#VFlH=YwT6c>dy#yoUAO^|Y{0zr@kcl^`8vtY@tOa=(s};bk}RSKeA1<^d3y;r{Z+h?gCw4ip;|!DVFcGap12YiAKpQbw1UA}#4sc; z;zb06%hQJzG=+im8lIv)w7}WvHQ)kVFP++fCvbFh%KkS5vZ!zllqcKY{H6=dX~j;0 zAya0UWIRg1e+Wumw+|3Lt!QjF>E9%8!F{CqNZVJngMO7W2I{OX_W=Wm^`^z3{a?Pb%Qj=Xncy+d2xB0k`)mD@QGZvwB?6ueI)i;h?Zc&MibzirW=Wf{ELkDbj zq{n{rpZ-r9TF$h*Jbp=Fe-73qli6m* z)(bLie;J-jmYRvU)TL<^;MJN%iH3?CRJG; zu!Ir3h>w#qF%IIt>Xa0;nV8H8j$-Y7u@R8kRKVZ4pnF3OgjF#Hl-DTTwYwu{R zhc0Kustz2q)sbd<2O;|X$M)Jp_cZ{l!}ijPPm?So85)}u49APMXWxEXNl3SZr77|= zUbec1dJ7NqS*i;FFckX>5TG8VcWEkQm#*%VAl!jv#0S15*n4RBq@bpcOd?lmT4tg@6LHU6{}s z5C{0OSpK9T!A|c-ni9TuJ_n#R*h9xm0L?|k0Vgb zEhw~pY-uxb@M-0jBiuohU+rKY5Qdx*XnTO7Wae8aGnX)vDQJR*SUToH9!ScttTMuY zO7OHsUQoK(u@W1B-*N;VIxnH{JM%&?QsiEiu+l4;x$KsWiXjuiThu1bXvtpZn9>1} zqT}SkPXyT40myC^a=k5N7gkHcUI_&uSF!5oSP47b87Cd$TIG)fTQcBTSJ){k9cgOngR(s*0b10x_Vskz0JO_Hc5JuB z@DTR7KC7$Wf`CaOJr|lMV=^~4?_wu|w$vZu^wc(kq4R4=FIV{@f-n)SPUEDQHeG@4 zNeChBQj`U~x$9qzt-tK(?{_`mV|LuFjk|6CnC9HQzf=D-=KgMdTpO|dpKJtvrvmGf zbvbs_=XnGqB%C;9#{0=FjW~L$OBncV8-gKnm_9bjMgtKc9T9XJ%|)8^)%1eVS=FY# zJFF6o`R%Sd|e;bGc=Ws}4 z+P_oLb@*%9ygz!om`4b$8WpWPfv}a`Wx5CcijtVO+x(tHbt6g^f6NeqeqXU zZ%ciauy7i!&KKF?HQZodpgH<&N<6C~IpX(kd`4||bySJs_D6l{dUY-dDD6|xcTfA` zw{Jc!s2MpoKm4)klkcCj-k=0prnbk*XEy>5+=it~(ZmRDxE`RurlrS1_j-&tvsX^_ zlQKOK19_?~V>9~onSPQ)%(xh_LR|eFKm*>wAl!%hei%$sEr#@dLUqJ%zC`?>!a5{~ z6nCf4jFAbvdl>V@^)4zBF`g;}Wdg{=P1=Wk`#@*|z_6z z(KzE>RNphOgNc=(`R0V(7+$g(G6Y?^HfkLNI~HKeQfP^mwqh8V=9meL^U54eM;sNi z!c1l{+DpjIL_#-wSd4`4*-JwNe#1Er&9Sy?OcdIb%u=(P=>Kj4jtdFi)e=^jm|5F7 zN|i|jktX>#Ho!FE=~lqO2^u!T@#i{bt(Mru>olPCIB91T-)`CpNNMn8y>KkFX(pgd}E4R4DGQ!rOY=j>i7IhvH39m_*2^1V$!X(7m<^qVt%<$TIT=7`e#cc2ahWI0U%dIw# zhlZfg*G~6h^j@(V(rr!g@DK1Wjt4grBX}`Fszb>q@Y?MnhOY&BjxYhDrKFN+Ll`_l z5{t3s0lQ21ZDS!nju=YiV-2Q|KGPi@Ju5C;6#t_iz_u&EW@4e$%ukzPJr3FAVNeQ82nE6?i?f6lXga%P}TuTX+=~00lV%a-;Ne z-s$-`dyDHDWQ_I^NPG>diCU^)=oRg7;MFq3z$g%MP%P|d(s&pjFg#xlqKDFrTa9`CE14BJXbI6_~Z-H~f& zuZ`fvBt{bqaam?Oq=U-M$UPZZa0y8Ya8C3PFg-Pk;7=K~?os&A5TIFjK%udR$zlyo z{sgP5f@&yX*-qb_#(qbtIJ~oBtiTXy-My25iox7L*OC}VEGU9%5dnRc@%{Y+WsFIx zdztxVryHEupHDpk4}3`|fu+*h+iQ?Y&Tq{JUqX$nG*>i>Yb$_5B5Qs4)+yK?d1$=Ir@{74~d>$X;(5 zM{uPA{9LtOylG#5yv(2&vH>Q?%TH8TW%{bUMcS@!JW*-Yc<&@Ig{^YI#%KaPO!PA( zz)0l521&uhpLY*sn0~E_9RX152uoFFHe6N-*3G0C26?Z2g$RZg1mWJsB73$W9o{8f z3qiOj3uWS0;tgF?kZs?3tk{mBVdNEN*$MjOO&=Dx6kz6smcW7P=qEu3)+4L4d&%X zORb&^L*IX<5^_I;E14NPAgSa|q78oau}a%Ys<$CtJQu**DY0x5 z9_S({ezL&E4G&GB;X{W5y-W_Q5TisXjIG4mcb~4X3NU>Kx8}GP=@UDO>;(ekMTF=| z@Q4QAV}I|<2t05N%LhBx*4A1V$Y^17RHR+0Eb+E{r)kuou;(UO9t^HJ`Vg&58fyb@ z*ItO`-aOl5Cs`ILe_#X4w*T*F7eL6IAV8U>l-x5pA}C%x*#q7whYN(-k_j3BQ^u;qa>3-N*~K!8mFQ4vKs^aa{cRT1q zygj`=(_TH%1*kS;FY=N*1`$Wa71Fx~K_QT(Fii#QN993p2_Os7jylBp$qTQMC5&iNJXgFJ6V#5h zoIvRdY$&3DIZ3LnJV^1xE-DCtC~^DYSqdS5a$taz-AMM45W+~v{3MnLqBc>=uncT3 zqBapXl92RzX2r8DOqA?Jf=pnwV{33e*`YMa)gM6~B5uqIf)iHgFdMZ(Xc4Bm$<5i z(Fl@Q?qzTd;wKjafR2}aPES;5dm}Z5xh@jU4KVtCz(h8rvQe*}J~0_%?SGCWzHPGsYuW1{MLk+9OF zmAy+7T*Xf?=D6GLHu^to(*vZ*rAaU2xF(G&G%hAc_lrN8aC)GXS}ctHNCs(v;~k$A z$LM&K=r(i=hupSZebYu&cg9=xZk&_vZhvryWUCWSktST*+NIypIMud7;Tdm zE)}DO}gWj%ZBWF&w1h zbbhM3qCWcTRNZI{nBS*#Y^?O$F*;7|s|^+PS%S<95}gP66VR$qN7tb-QcSh#Y#vXw zNACdF2Etc@Sog<|U9dkmmm5^-^S}G|q5DZ?jit`zk8^eT;rpkSw9R!ta_!OM>Bn8y zr#{5W{U3qfsld|Bj@{V%e^X;E{_aOWLN6#ABF;%VFUIujM?~Kp>jiHG)sD@P$N;$y z-Y37i5-qI!{S}ktHF&y})KqVOU)l$zU>FE6Im!<5E}3&)IoapvZGD|j@~I%}pw&Ac zEiGV%C7|eC6rQuW1P@-YRov^>U?0yfvz#E=I}P=qmg0zRS$DlrOFWKxF3yOgL~cUz4G z#;7N%KhZm9=N7DorMEBZT3U0CA>b#Xg1(ocXX7k}en>X%SQJGu4h%yMk-HW3@$GYc z_KPzEHZU1DdhS+t^LBYjbqfP6E6}tyzEfFz_JXc>EpTHWUpBr|@78`2N8t1j!>-CL zLFj&d>Ha)$qx;=PST{m9tZ!h_{suOK@8J2`q79U>(MkK!n|<~_{o!`Y;rH>2gK%P} z+3t!2$G))6gMJF{oxC(N6EoI^(JF*tAqj8Z7WlC*TpzO(=w+TDtITDf09e9ZT%iJ{ z(+Dk@PmWjx$qPov2=jY83#}@bj51(@ zYTy~)j@@Jx%+v?qq%IRMoe39x9Y*6fptKpm6~9Xi3s~a1foklAN4*1gcoMcFW%`kq zD;bAD^8kipVj^EZJzzV@%<}@7Xqv8%*j0XiWq+|%aqiR5)s&FzAbD+t3@vkZfI#UK zQgyup|NSJB^ToZTaC#GZgGY6Z(3oz)77)f+T*tC-R@mO2+f!tf7|-Ws7hJ4lSy`4P z5R2H00l5H=;afK*?J(D;H1|yiY0PkLNnKl>WmzP+XyUx37{QNotyRU@_Bhar_O5Xt z9;kc`!FI6|FQ@Qv zIT*T?5oVp>?kS)nBh*bGv&@O^IeUC-9{16J7mQjQLEF24Fr49@X2VBcNdkr@?qhvb zuDcg!$g=Zuvfs$&b`2`xLwFd+N2iTkMfMbY^uKt&%Wwd)9EH9oH`66636GP(X>ie= z+*9oG2fTiE!16Hg7l7Jo!v?ytkOUV$LE~gs%EIoI9*Nl;M))kmC0aeU#1{Hc0-yUL z_k5PI>qKx>5@5eVF#C04PY-S@biw-r0FYOB=0>vra^_8e05B$`7clMD>CEA*#^skIIx>}nA&*Di*cb4J5@8joJ{NE6kL zd%KQoFye+9MYGFhQWfChRsw<7F2Xql7u5|O^2fL5+O@VJ>zIqT9pss6$6J)mq)sQ0 zT396+k1il=x-smwlQl<5Nxv{#B+=;TnX)VJcWuK9HB5d)B@k%D`zFw4EBhMZ{T>~e zB%#5gL-t>0OymWu0VpX_!)t)H9wWt=a_Ef#S2%^+{W|SVBMdQbSv*E$dH)jWLl&<8 zP9{PlF_lM8b=upcBpXC9To!c=6guKz&m@V1l2DvNAgy3%p9M#ijA3Y+bYkKGJBu@d zQ;}#P$uhVfJqV~7AQIKNN%oTyeYVU*%!voEOZJv>pbM{^9s=f&YfA|5HiYMy4k&zh zSw_wrJRfH3XJ#Y#P0Ux=*y;{LhP(iW|{4aJC&aYyi9;u59 z_A1FP3V;`^tSlkqCTV-#u}Eye6D)hy0*(jerre76@;&fir%0oA2mxQjxDEn4Nk!M0-g%1C0n9`+@*QmfLOAf`#g)MIg1xmKOWWXJP(ryrvLa>ua$6J9S~KX@1J!E zOSHcjtV}0DypZvHr)kJ8l60aUul68)sK;AfOahAF#qJlD4{FvvJm-1f8kS!MCh@@U z+O-Q0TL4v%a8Xe*g%Tddd6qMSFe|L{Hf!X;J4PbaQ69!Eyn`CREnT=VimN@*P5>$_ zz$Gngj*^jP{l>)eMl*Dm@7GxmA<`6Ks%JT*_O9G!S@lX!))=pVTvV+_6 zp>7(rF5ZrMm~{-#FDwLU(9Mvch9$}Vt@$=THf}8d5i4+yE4`Gw`AQ&>$wU@_5Q~FL zo)C%$!-EHEFcB0t%d#}QeTzK2+Yy5J?U7pZE}z{bg5i;Ed5{it9Gg34Q% zfd{T@i0n0Ji_?Hdg@bw&t>NV2oDG3LOW+C4p^te??r!Dp<2ti)LskQa*dX3j^)Dah zi>;N(c9w~&k`1!IzKD!Ixc%c9hiN=!LbZ!RCyDba0qhRm`i2**m>hmRLlf2s@U@8j z>Q8=FJn)k^mo!#*1_egTQ@E95wxq3DADV(J?U}Tlibgd%N&-{HPg#HjX;41KEM5R| zuIRYQd4zdC;7ca9OakCG-MO;4X4R9Toy`~vL7pUygMjP%}Oygk%c921;DuKu- zr9e2UNEiaP)_F;F%oAwBJHfB1l=G5n?Vm$i%>bttviAU^<`Lmg%*#lGiLfqOEmhAU zFy&RgLEcNwjE5RQ3zTIE0PT%lpu}9meqI(z&$h@YAE?d1^QioZ$vguvZ2+whJyKSww zIcIqzDlB9f`xG8`+=8%}g1Kr7uaJl}%`u2}5ON{B5nUksLo_tW*j1Js^dgnFs=RC0 zd0Pr>Si?D(BhGudKp!Ohl1PF&2nM5q$s!F?$ukGgti(cEsMK8uv;_pL!g2b6At)q8 zS%BYR*_i?WvzCe8hlZAn3rjetz@0_AEDzrRrJl`X6R}|$#}$AnOQ!>3Nm%5X`pL_e zOve>Zr*I{Wo!$*fIj_t_@d&li*;T?@pvysU%^*~j7L8fQF`}tawq(B3mc}YYZSh?+ z&y_5PmB{m4@4OwT%VrGGuBanw8_C^yG&3!YQxH57oDy2`j8`eh`MFuLA(KO~3av`DyDYH)qp)iN$xB#Eo7U*{_ULCO!VcrlvN(`d*<}vh*ViU@PK1k4# z0Z{9Lajf!8yiTIfZD7)59+;=kf{+M6+XLb~opD@5n^zh*-ia=SmoklWgB)~1OU^Eq z$_;3wLU#!(rd)%|;M1;x{i;CA9Y@PvMd)bk2e?1V@}rO)2gBi>CbBPsdm>g0X?&nx z$RN(kjC4}J@3 zq3`;qIucHFgYUFY+v=CbfnBbS+E+UoBLPzbdLG7(ItjWC_g|pn`g`Pz^Xe}RiR)c$ zZ7yn8@qfBLy&QB-*}CP)(bx(n1!BS#y6DD0KXhMR|2a?sTzm9e!Q$$_+S5O^=RVbc zzAJuG{c&TWoz&I&1>aEjbZvsL=#;uA!Po@##Wkiw1mTbttNyxir=E`0bK%mvBPbmv z&b6!Yb25w?k-pG|>#I6M(O->?`lbFv7ai-*e93Eo)IC(?Hz#6uW{ zczHQ(NQ|BFXg_&qGSXB$7CF|q`LsQF0|#$z z{r*s)5#@^WnQuR|{|+0X&+7%PmK<@|C{iMJs5>0yHu?Jc;hYe>iv8QxgA`Rqg5CdC z+qyQr&81=KS_K}}SpGIe$y3F6s*KiRTvdL&yOrpEDq*OI|NQxM{jSsc{4_=V|Fms< zn)Bc3*yuh*f4@^*ZM&B`cRTi8w{s4i=F490yTEeGJ3p$LbVw5|I?gr^*;S0f`|;N7 zs>rm~_F+3axNH@q9UsOUwTqPA4a5jeY7${oICC?MEl3k29>Z&#qXCHrm!oXYq8A>< z7LhD^Vr&L;(EFYz;5QLlOBx2*?by5&s~1KfreesIok>L=!gXg?2r>j?Ua%`269f^9 zX#kIuvO2S@kN}M5-13}>N+lB;#pTu!%P-4y_M~z8sQAMvFiWCkkwJKAj@Y?(`|R+Z zGTTx>I0^z~ntJkP2^%DO6?H>Q4YIc^;pRV$hbxW{j}_trAI0@A8_YCqCSX_5cRiru z2J0Y*cW|5p6WDI#eHwtZA~h|=zWzwD3vJ27h%TBMjrAIWU%d8QwvAv{QRqku*?5vN z(`|QUy0y1YkODrHBp*|@oEowtKof-QS4w+P($H-u3|Ti?F7`E1Q!8crWm2Y>61!Lc z{6O}+EZNdj?#C>;A8iD^xqpA7`xO2CZfCfcI(IuZw*8(*;Jyp2_uqftom_AQ{}NsT z_wz0c07>aU2ZXAlI2vT$*ojQo)*qKt=S`FGP-Tb!U)HXdonvq89-*0FPpL#>mE2eXQ66qF#J7{lv$sJ7Re6Ic?E z|M8XUcJM&C{mJfZ`={623?zpgW-NMe!>{o~%wXtM5{;b|A^J073A_YK5pv_xBe>cL zXl^Kk5d&aUti(p(0gu3a5m9sy=O;({d)j*M*&IZ*B01!cBk2YIo)Ub;J~WF+cSq|lC-eEWLdRuK2d3{ zz!~1@n79Ao#cF&1!mz_N6@oQ-eurGearQXv^&mVrJnS(T6p}dhD4@hjT-F`z ztHw(vo+@BWV1zR4aKi$gv?MDd{n!XztnWWtW`F;S8>z&lh$j`)*{PTp0ig-+?oZu0KR|lJ$Us1JZ3;S^Kw<1{rq^p#X;rrIE(@c8Xf}? z-a?AAI<&d#V7BVY&?;9KU4U~kLaBLh&A$0~IqA=)@H!>fA+$~vEhqQY=2#Zy@yied z_TUMt6+s}lvjYh3bo#f1=2eKZ{-4jOKWV^2Rvky#J_L9TnTEn#GfqMS72yooeo6j- zpWWE$zJwzXtd&0Hh5Kco1k}&|^|m+){GJlq z%R~x+O0ETKWeamqk_>`dfl>vqp11StlOB6<+$nMM)@10cE1pkZvo}Dl;Lp!(F@$7rET^E3`L#iUl%o5mz!wSGu4Ua$xVFT~Fo!S}gQ>iXVx&}-oKir3X<)Mc{wNeF zMD5qXtE6?NU>Qnyim!`NAqOKNC%xdCQn-FC!5#w(mc>%GfH4w`qmcAr^J7!?Pry8q z<+kVec+S1X`Em%(7H&t70|6v+u>)>lsV!Cpkrg(AF_K3zgl3ilioF$ZtSj{K<;Th) zE=;krAoJ@XFkENbc8K^?EV}D9yX9j{u#_K6G15xD42Bvtf9F~Xj z880GiJS@SRBGhm7e-?oz7=X^JzDj6{Iz~1urMy>~FSRGQMc{51=M}DN;hWIpl=@3C zahl+_+78_DGNfx5Bp{`w>bNOzN5TTgMx;K=?lz5h%bO91Q#Nxgfue`9T3n~I3^kW=Y+;qs0f`@+rC8iM`Nh=lwwR2H3!6V zg>csxX{=%;HUbY~1n#@Q3UDWOMRT4m&fSRB>r`lJE ze7NswPeMw4jNY$fh2hbs_UXIpsScp{Yx4Dit-)WlqyDLm#z=>3U~$;yyqp_t2IHvy z`MyTCrSJY6z8y~$jR_4u{H*e)VdG0y?`HuvncMtB+tv^(8 z<4WaQdB+PCX{|he-WMJa4xO{X1QbKNH z@sDrZpZuO2fqRX>Z8hj#M?b}VdZgWd{vBx+t- z+B!z+n}mZzSw4z}Cd#s=pE$g0uuk5q3}76m${$pe;i7&>R=0k}t*A^2J0Iu9!|P>l>F^x;AESLu5fsQtT&H`I6S zPTZjc6EiH!?^h&fZvU5{@`RP@-`>v`e$N3sp#Jg1W7BLtG#R|DDx7eawD zZxaOaE`aAc*%h(Z4s5cCkr}f2EZV{5A{)kNo)XAnS-lKBa=5>HtR zp6yuMgl!SS1Q@SQjQKUh2X+I&kPS^ZEkPav@YWxsPfF2s;wq4ZU;x^aOuN86i;AYD zGHB;+OxSr|5Z`*K5lU#|I+HdC(?bO~wGd8^90IHrY^=D?Oz>d&eD5RmRS8gvAux6O z2oewD;k*DHO(TgR6ni+10PF>Ba**sm^9bj2Ff;4|lP6kZ_XbN!FK^fH$SaE*e`5{{{`5b}SFy#h5ZfpMyWmnj3gk3gCqLUppU z8XzRm@&y>SGa-N%-A9PPxO31ftwB?x&8{L_xAY_zLYf>DX)Ck2>-StGzV(g;c}%UHGl z{Z5Z{!M`ZUVy?18RHqq}bKqp3lSmYD%JTekS0Fz(>K6(Y* z<`9TIkFoql4~!ICTWP-D__toi+rA%s)ZqA>V;E=yzK}%#u5e*h2(0&@AlY0=>aN}i z`^Cix^5ZQ!dYNUkxJwWSuHz7B7q1q4Rn187UjqYKV*GZ%%QcJ8I7;AjH>?0-;N;fQ z2vA;#*{`q6aJ;|*5Ceu_8VChb;QC^0dZE8T@F)St7(u@$u1#9!L=3Hxyn&2mEzpfc z@MdQabbUBQA}|{W6nwrH#tqP@JqWZaU>Qe9m9_voLM3!JSJ}6l7n3VVf%U+Nnmp)@ zz$04{`U9?|fr`RI8X6j$o8LdCPo;d?2JclK==MHXKAFE@f#6rixQ^^{r50F1J2?fP zgs@Mn1|cv_`3S6RGMF6NR$`l&oI%|4@@$DNC7%$MARf44vc&A%1f)Tl74#CeV21;)`*1S3#U!U%Z_MX{1CAn7*s1p2n)HsA4tVEfT9`nL)TRZj@p*?Bf`D>K&sUuctdGmvS8472@F{&ze^+R z6gwG@r_cfg3NB-;Ag3U?1Ds$8cQH?>)Br0vur=hO2Xgs6#FpUShpUkMlN^DMF#?ZV z!;-*~?Wdq1-(Gv|HAgR_eqsS}whyqKcI3jCt)??!dGfnJyr;3GQJVNQ&W)lKiKI;v zUlUdl`O;8CZ6YI?pb^CE!?|Sk9$HflOrtHrZJi&1+X{wC;knQw^a!+RkSmM)Dv7lG$1a%k$!994cJGsauO0y?z9%J&Ek!7b&PJK3^){+!SzSsv z%?)f>^Nf))Hj6b=kc=V1eT0Y00dpqyi+O;piUK%webR*Kf#hysQh9y;wd!SpPhqi48c_orib=Y+QUKOL7DrI0BE%ODG}b3Ic+EPH0KO_yR1hc-b^UK>|VUdgt!vM4_{V z2~vQx+L3ErxG4#ZOazyp5^9It9)Ob#wWl^T8-&Yp?cwY9=xIEmsm28QREHc6OPg%V z#qYPLYx$4@zy0_fxN8afq-)5o&#B&xv7z(*BG`aySKv}LLeahXH9T4r_22t1%$b0w zI>*(I--C{8;;TQ3Rh&X_7bDC9(2EL7=ABRDYB+u`YDW!8AnD$9NYpO^xuWFq-Rp%* zBgQte{8l>(cor3o#zwWYoY!}0U+yf6gEJ zx$*wQYWlD-*I216@;r$9T;nEfRDyx!g~% zGl9~oBcpf>qxB5oFtR%duO&ls7_Zp%!Lap{NT3u}NG*Fr6|7~fMnW_<85q|^ohwS* zC~2h50nM0G_z?zg(dI~)NBJ(!sa3A6;Aesc$(A#XHxofbxJ?H2bdNI1%LWyNwL#m` zO@Ds0*QHl4$H4CT$NmUjNv(Lbq|^OIGzJ(7P$?z|@$qcqioqwSNuO~FrLjLO(C;9#LEQr@$_aQr>7Nlpd zjoKn{n0Xi@XRr$5!YZ+_5Yeb_ag!AQ;QwG(Y)1U;wO69h-kk!9ry z(1bnYdU~-XMB1(iTR<2sG4U_sHb1yI-==ZXpMqQb&!4S>*gqSPXUu*%G-!KkbFB+% znoc;{x58{7%9m=4#Jw1d^D)Bj!E2~gSpjHla)1n!mCAs$Y;T?%beN({0=gHY^LD0x z-u8pP8b>%q34(6IJ9Zt+S9TG}49YU?S|50j1~CgV;0Pd+OPU2ZI1o5cnd!w*!(-s*V|@1uJ4~7u(M=+ z`PQ@b)&lFoJ7)*%=J>Mnh*m(m@IIXQ<>0Y~5g4n;A90NZAQ*cWxP*-3!fmA?Ocn4w zHSZWtPxG%?fS8S6_TE24Z(VnAn{3@09#>-=p}Q|B;)_J zgEeHh0ec44Zu4rI^)4;i@jkNS00X%M|5pRvTrpDo=JcTLVEhhXFH4p${|J04OF{`H z717Il_q*S9|Fx~+F98RK!nRH>!Dh4-6`iA?Tg3oI(SY)Jz{_#5_oF$D@rJJfOS!#BU{l&owa=dw&QT8!Wc7cyl-nZ{PS7|r}v&OuBFEhr$K{Sq6+j!cCybS^$#Ye5T5(g6sCii4m)>^5|U7q9K*y zL7XHR#vJTLF z!b`PtTbaGGz0iJ+_pNnDxxLtw4SfuZ6`5J~70!*JeQe!QVy|v5vR`svPwy^w^fOB2 zutr-VMw~(mQBfMN@4wPuS%72Dlj^GyPo5TNdx1B6bziwXhmaZMB@x7P83FV;frs*y zJ*5csEc?>~W$w3DJM9BedlljF^k#5a2p7@ngz$z6ZX%#-CHLEl#;n8>8mk@>KvctN z_9B^oly~rbuy2Q-sNY+^evf(s<#C@C$p?>td#Z-OJ+1_jaK z=0XS@6%~+59>rp-M>sF@^2eQi?b<&H4KHr@T-@TK zI+3v3UYBPpXgL3PJz{lLN~4Of<4xWT+@S!Jx*oztC|vRZM=CRPJrApvNL4jO_P3kJ zpv(l>#u8LZl!LHq79fxe6nZL4ng!ZFz{DItm}GHXrOMLMr2-g3YDd`q;r9bp%;egI z`Zclu04qvKL_t)Bj2$NHO)L1UG;-OkvlJ3r!xGp8QLUr_qfR%}XfuiN@G=gM> z7sO&*=q~^k{Xa+gY&%In3lTJf)2l9p*DQiS$yjw?#ViRYm*#I~@LefY^qne^kaFKal&G?z#`N_XusuB21y@b9EONQ1<*sv6SlYvGh zAtSqr(j-lzP1J+_B6oHN*3y^jR?`gCGSo z=jw^UVHO;b=!fN2_ucM-Ehs*5j_XJWCKj4@cBWa`X%GYgIx@dpDyt|HT-dJ?a9hHG zO|o6cvQff854`@1qdpY@lZTN-ZhNsz^o&S5%W!;Inpm15<4WBHYp2*g!z_ixz2)e0 zXvAetQDgK)wk7?Sp;|j_6Nn;#R1)?U>AJ2zKa`v z6okF-R%%yc5Q*F3WSe8yUFs{1aY}rwe8`5bA-IK*^WrI!5SIN-_aR%QenZhyN3ls^ z!gA@=JotszKRrWBj1#6jC$JS-rDtM6V~1@nNPpC8{SK{-At!KkP3=pTFXsq+>H7&iNCLo z>wf%u_s&ZG{W6chr!KI*%!85advXMlBk;u@f!k`(XWUQshSpo!|DSL@f1h@Rp-(w~ zbJEVk9uQ{fr=m!$E#`ehztx-w1QuSkn{U;$1sNRYFN(tORu z$93a5Vo4R$Ld9<~hG%me4c9NypapAqSP{%blsqaLN44kw&Ubw#9!uQjq+50Gw?DDY z{kAzbS^hXi;7+5?XLwJ(+J3J~Bp%Dc#Wu-NI7!;_?7VDyQnW0@6pE=J ziwr;w7}zg&%~)9(PJ^^HyEZuQjM2;Bi+18(zlq&$melIa#QC)k5EIGb?FI(o-CIjt z%-%0P=rKBDJD{dn!brW2FiFFflf&|D9^=n-Jgv*%%xbZtjl+S}3&qY9hW} zU$I?*WnpVwp^d`^A^Mx;@SL5VTC*R&T5o9>uTQs6+9_Tfd-14_(Dw-Ul0l-2-*v_8 z+xtohzlm5i-pvfg?8exl9iU(1V{-33Eej>E5`X8ro`ZyCV&anV zj(Ul8?l_SA^0&}1!(M{z3FA!wgSDuX5AUt8 zV%+d5dz(vvKuj^I0eYsAGy)vZS8;RCj!xkPjMzDFH^Q1<1>2+?f%Uk<-#pb1piz$c z6bJ!l@PLtgq9)z0^n_t+z_?EuFQwp8D*NlhO!S5vd+*!;-ok)w2S#ub;OTAz)-(ag zm!Wl;Sc=(ha8nB;$9Naa(iS|E%L|!y9eR};Ox!%MU1HiA#=}=#oNg!D$H**`VcQDR z>=^018}<5SM~J-nD=-+!vYN`XquV_^RXVcS|=V7*YnbfZ-6B?HbBn5!Tj$;_-3 zyM#ux1pHwUdrfsH&HmRr-S#A@y;4_Vb{R-QMP7mR5TADv7>BY8Wy6`34d4BnNBb-v z4AriN0_y~GrILeFq5_A)Z%++ccX-v#56ohuUMH9trilW8oUls>ih3DgH4MH$8IGpW zdPgvPUmhmQ5aYBJ?Aipdjx&H?JEw3)q%2t%*Hz$o8||&|JFY-4^8~zDk4%MkcbEM0 z$36m&TwwVy2hq!vm6c%-)%5VZPVznpt8-&~$-dbFoM8#?5Q*{%F}6E;8Ta(3TN614 zg~)EmOSPWKD4rxJPD)88%JM3dpG&rvTpPyow3?gZXjYz_x3km=@t_IdS_U>t z$b2Po-Gj!LmbOSPK&SAmDKG^%0Gmq+?N5WM{?{`Q-61fxaNY!QNFg-w<+2a*<>JjL`xOZDS^$|~KCK^(Od%^7zz+n6kc}=2oYPtijj(MR z6nhZu6B--Fw-3a7Dd5ggu2)W9W(o6IU`bkzFd783s}yH6;lg7s3@=(ef^{Cd)goi4 z(5E@>LHQ!Z{yeXI2gVEC?(@wkZ9+$&ws_f6oYf;k<;C zyrt(cMr)F$BP9eC5b#j=E#Y@$z)eLJ6MjdNKyGchuVo|gieLs#p>bM?zgMnuz2#Aq zoaUr+wV_Wz10-aG>lvMhfXs%8l<*J<4lQ4$`Dw1XKxk&2AP+iEE_lHe)E~hE)Mqy- z`Ll@Nn#B%Pi4a}In9U*Ai29&=P+J0usx7ZwuRZlwZ3)`J+;_$GnKu3VRI0HXXk%;G zx3&<2ss0Pjph2KZE~p&Y;`N*J9L#_=h3(R|Uk;r@wU2xd+*_MhwD%Bum)El^jYTvm(x#+Q zsAxH-rI9P_5`Zv%$lG_1ztUPBR44Je_c+}xz3#PN`~1nJZ3hU|2F2@be49#%^&ZwA zo#oeAVmUVpivC{xPi)h>lK+>m8w~glDjG*IM@%Ka6dqJR@qYXfcIg+%o2KXbk(8 zgj^SxGV!r1j!t$cog)evEo-%;?jD@7-(H!rS-gI|;T5vw1iVbq{%@f+84tB5I%-TD$6f{j(mBMZm3ZuSi89c{5dlWor&Okqc@t^gtqtQ|L zl(U0@t&0&;qcK*|Z|Gi1Tvw?39x?`X;lL10^DKC-B>%e`rpNxzBVQ8w!YUe#T31(> zZQi_@P!tJZ^6Vw3`eNs#Ex>WJz;Od7Er$_-%+o~kll{kKcA!-#aU3P^hND3Yy(%j z;Nc>0{F$x!V5TN)7M$jx<^m&Ojh$(qB704ats~4bi}GNtD7W*Z^C}>CJOZ=B8Q2b{ zxX&lSKxv{6!`(iD2DOEN@(ct^8-hN+G|#?wXp^;dj@ps#MT3pU#_$sEDM`2A!G@59 z(SILVg+e$8FZa(me)%+nePcnI9l0L1uO8UsSQN@axx7G@?N_IU9qU3lP>2dVvF~?A z>@dOE5ugs^aW41_e$T7GG;*Qe*+Ir2WWKeNJ5n#2+M*1C!12gpq5QLFYhkcRvH$ya zr_H8k*+KeIU6f+)(XR@|DTYn)^w5HR``H?6C8>x1{5*CMoY?qnk8cM02^O!4Y_?{IhZ32%roS;Yhm`i*g{>j zhGic3{{$t>1hgVU(@S=yW5$X|tT*hmpfvm1{!-h5V0oc2-;SLdMKGmWKFkdt_RiTW zOv*YiQ$Kv2#BsrdFY)m(qp&QBmfU#x|25G{mWG}aW_Q)Hnj%MaLJGMUy% z9`W-_(=Hd_FboSSH#SnQpy4SES(v(lPbkBUymE?>Bs(HPGln-W$6jnMMgv>1x37ZV zA}v@L&mImpd!57-Dk8a)mNQKs(-FQkv?*G0D6!H z2{e%))*$QzsvQ736@tcL07d2#?kIuC#;XhkoRTpB}wbBoXhUfx=O zFoW*KQQVj{R4|dx4cajTfv8tRT_d)JB``|s+>Zv|v4+x?Jb3H0CAL#7!Ll+l?RltG z1hd)%Bw;s1gx=ywtOaTId#HJo>Z}4`C7Y3!SAtd)3j@Vu-%Lub{8X4oPYl|W5VsWF z|2zVsA9e+CRyo#DU>79_#SoB-Rd84@?I{OoZ&oZIDZp9@M$y8EbwMR0Eeo=|zdt%) zLGJm9hFk}J{mTALmbb8AfB!+Bt*|`T{W2`bE?^m4x0M``qP{uWKI`alg4}ZkDrXkI zrEHajFj$l`-ov9aekCJoZ9ggIa7`;$zCskt~n#2t4v7p~iZnTA%p6j}%b7 zknjn&Bp&z$Cbqor^Vn|$;1n2f8N-vG{YG{iu^23|bi2|s2N*TS0Vt)cVRmwfKeIV6 zi`k<&rw3m9GngohCbhh$q3 z4YD8>UN#woD%yw>rkt<)lI9~&sVHdFZ%4gCe>n|drA*VAj=p$>YY8VMdKSkzKu6TB zvNemwSlBD1x?A=sDqu_)GTj%umC~ya0inKY@_VcfXl%q^o(28C6&|m>V5FRlkL4mm zX`2ABu3|S5eoAH}aY|L7MM+4F0LD$@nz>wa9LnlK`WRr_gPNo|n&=6Z>7{6|B1jy^ zh*t)DL!@~V@L4G*BM%lfIgfrvv@?QT2y6?<4EYSfok?J;!@4IvWy6y_D~v!@{}izx z_=U8?5!%<1yO!V9{eJG3O8$8qN8oc2SpGoEYvmi>{e7Agn&|qJMj(M9VWLT_`m7%G zjK{z0i~hy2O&nARj68RGuvIj9HHm$Xqs~=Po1z`jS6wTy$j;^0clG$LoO&|oE3H;K z5>NdQhD!BR$8XnNkL&Z#?UO)r7%eL4Uj1dScaC>Y0<5aT>WANs`lW8&re5)`!!B23 z_;=Ulo9l1YUr{c;6ELCZ3nLKe_$z5%6BO53l!`*YF<+x!f;wOyZG)=^$=6>FA&4`;3Dls3W5o zeve?oIYoGiY(Nhy3P;h>N@(`Pa`!_PKgt22?Z+{Kvub-l@#;;|zOwRsoFb|mWq`S( za6M(rnWm2u!bsestix7%rISq0Kpw>S@JWgs8`9b~mQliyaJJr6MkXVGN*-LK_4+h2 zch_8l?;gwlh9bJ1k;(hh`Xp9Q{Ea+qoX{)moMS9i#bi4aZ^y|WD(ln#FWIAQL1o@1 z3CB^qtBN<3ma7+|j;VOto*?wEp-%;K4?|y+xKHQ!|Ftw9z=WY+-rslo({JzYWAZ)= zTBCB0VR!qJf9^d3m~_7wCI0M?5(+#|Y|-9skJyiEi{R>Bv@Vh%^n&e)60`SoL!RC2 z1k(iF%PL$=zq>SUyU9Y+MIwmSx_s*(Ro5)pc3NRt=mgW018YGB6XXmyq9u&WFGH15 zS&&Yg+k$Pyt|JfRxt<8##v*65S9X>F$q_yvsGHA`EhZ%^U@a8^JB!fG0s`^ewvfyEqf9U5817G8pR!tPMdM?$ zHbBhebFF2T0-etP{B^I@5O+6*@Y{v4{Q%4m?LAX?D!FIcSjTI3yqhE%^z#F_z-FSw zaNRFiIp?I|iR%G_rR81($K&@H8waLwxZH}5>IeGaE?vz+8>8Wqa>7XFOWE5nsMs|TUC$!Oxn`I;*wp!E?B>b zj5!2ghggydkEP}7W$txHQ;EwE)H6DdeGA(eFEH6K+ZpFeee=XS61qj*G>$z3olpag z7Nt-V6eO4zbd=hwQ1rZYW)yDt5`NzZ!hX)u8Ov#Yk4EatYs$hErdYh9#CBFd6_m;n zS$4BxY z@caUfouKW*v2)?(1T;TcHb$19mX<8brr%Ct`49gWV=8{3d-2GDqrTlru!bM~=ts7H z|9&edAhi{5E8dU%#%VSN_NKlzWQ}abI2913J^Bkh)`O>nZ=)xJ5q2Bs*6M^5Rd76Fb{;%yt}q3i+=w44g80N~^s?{?b- zFhPSD`n#F9eFR$cC69A0ag-OqU;q>efjI31 z#QH+a{@>{_ylg=m7G!}W7Q$z}b8+0|SsdhnmRE5E594paP;Ev)R3OOOVQnY_<{;xX zE(JS2J}BWQMAOx|j+UfJu*2+aiqYSfP7 zne2iV=Zdn_U<988BNfB2-OE^YGGWfab9IsNSz_E55n87a5Eb;fZ(y3F84DP>^DPE! zp$(3&1_I36;Sak6Yr`Pg?T779^k5mUXMYL;aSQ|e1fJDnU31n8gyhO#%yz)DwTjnp z5GtTLyno$8({`1yEyJoFONP5&UQw`WmBcA3h&&h1uCfp9ApUb=V$S}p4Gn!@(VihC+$8-O zjHK9Cgx_OKm8fJCuC6oWn_S?Tk)Tu_!y{KFtPLQnyv52P(9Rnv0|V*`8rckEcZ#v> zLR*vq9ALbns8UtD5YAj0B0#o1IvFN3>&C!Q@Ko;pZS zdX~vl8KN!^s*1c??QmROyg6<)06ZHJJX?9Km-6uK-5dh+nU9M<&GthBqe&O$p{vFF zRRg?XFS-6cWMb_H^TVU!JZ(E*Q>entzXPpI99+ma9>y&9=FLYddz#c&$`^QOE8t8f zOq2>0c;yPYUL}++^5!X{j68mMcpS4~a(H@MsqH|ck-<8Erd14&R~P(K&jP2IV4|!c zFst#F$p8(Q3gMYWcT&;dLTGGc)MNK1m=tzbk&OnA8P;sj^Z|SIK(&42P?e>lSqKV{ zO8XV%`L?Gf*9pBBT1y!RgfUDLTL8kA!MXKxONj%1ip60wyjz<=h(>`>2>Vr#A0$s> zhGoJR_B1p%wU7x4Hc|{sME4a$BIM(-EeB$-gS2R~5C{tTu?7UB5Eo?ueW*l}Qu2pJ zhzhrYd>3s`5$DT;SqhzvQgJaf69SAuWuNGA#Mey=x@- z=VOn+BiFF}A4*!)*T4RCr(LPH+ArBP%93c5rBV?OqtY`C5kfMFE#(?ZzO6hAN|hy- z{t1>E!x55n?kwR2Mw+Tw-q1`I35a=xx`6)~rCt`oqlAYU*BSIJWPJuIF##N*jt6uJ zFPbQSdr|i{@m*BJ(<}+ANNF{K?LygSg5(EW=4n$1kZdN}j?hK~WMeKfQlTpmmKR$f zwL6K8WOOkVUaTB!S}V@3B?GSIC5o9GK9y;j(I@*Ex*dWfFMZv9dwv{Le}H7AS&$))SRUHfW`wGa zOGxWHK`oT^SxfeO>ds=H%VjCH83My!1I%4y2_HhJuWv&molS@*$427`^qtT`kURBO@v$-yE)Il`H5GYEire{LG zPX^k!63*&(7PweTFAnzSxxfn*3fUIH`8;dFelkJD`;zO zZovVDg*PkF*h@Wh&%XOe{`nXq@P+acs=tcqi!fp3;+IQbu571-@rIJoc$o*qVWhNE z4=$6;O*Xdm-FNjn3=eI10#fuRxZKg$+MrY}0Zks_;Sv@|nt?ktei7u0q^H{_1B1S+ zFAi2A;X|K%!-MQFYG3Ym)$`r%>VrFnzH3`rlx!u6N0i~;r>BuCUjo)q+c;Ya_rpDk zTgJgTyjya0beGb2gjZ4*HIcR9!vVOAi*a;t1&;egx8*|)gaeZR)v{YcR7-GwDK2<} z0+xMfLVP$}eZfEc`*7o`o8_PSqWaP<)vk*EYE0Pe#?YNd=LAvFNI4EI#!zFY7)ROA z!~-T_Dw0Nxo6gbo)s_OR)t>HG`&CrOdoENd-X<4RUE#faqx!N0FyrmTE4rS!^VA2< zqnGb@UsT)strd$ZJzusn0B)(RoAshb+519c^U~_!!N3% zyq3}gU48#R^7El1@P!gs$sg~bzgMzCas(dh5zx!zb18bm$^frVzvv|-jYF|ydW-5% z;&Hvj{n`yKn!%eLfSa-%%rRzqAKkD{)_9Woa1qEB87k76@sue%aXW?IZUekB#T}ZQbwl zeq*??zUsMq<-n~^HgvsP-~D6${={ScKGk{9c48Ze+llA+`!{|*tWLslPED3iFal{X zB>&wfIPc$eiXJ|x`Tl?R(CRy_`t&mI68I}4xk6gjaNGaWG1A5p$Ci(cryoz&Z}GbI z6GGC5CvJlHKELgRn3(RZToh{6G=vo>Nr3K5>cyNE$@aXm6O&tMhkVD(@YAS?Eup-A$ zN?)|h6gEr!R)m0yC&U1*7sM>~Gg060#n}S2R91cA&?JC0t{GfMFqBMxOtIbh?5BE0 zZvAIN_kQcUf6U*Xc+B6YIuF`TY$I_y@f?5u#?Ob&f)hXKDZa20 zy-ZI}kJZ=Ld-O6)ZfP+RN{wYPn+AVWh9^hm5)=B`@RGf>&r=9b00%gS&@9~V|EtSg*`ARjN!JPTuHTqH92+!cX)Gc0ba%oJ9=}5hnoZuaAh^*5kP!n1|IW( zeROriR+xC(G3t*2Tetxf;I%`wwtG{iy?buV#V3ZrfwkefKLkdq13H+ilgswkha0Un zxMIISc!m)YGr%#z2%a4ns!!3!-MHj0z)RoSoK8xxfStH7Y!`qDWFa5}nNxNQq1>=3 z&w7Ch)ZkobTY+JM`~1&`8yx=VIQ2zA^Ypd?8=_w#f!KprG>m8K3b2jsWD`>9=z>4& zTG*PvmF1+Y*>OB!dz;AWgK#=}VTgnrqRt7zlb->{I<9!IU?O9`e0|(bbdymCdrJQ( z>ChOv5(MAx&xLI+B@@qMj)R!AjV{{Po~ni3CCh$)Y0Oe{vK`&c8DIeW@T}g1`ezVl z!(YE#@33a?oanO)czRp$Tu$P=SjUJzgEONXNW%=mZwqjUxv6=Jk)h}>p}jdv>ah>| zq38h`a0$2nmQA^Mhi47DyUhVp7+6TLAHV`pieX&Zkpxb%Jf0)qNq|Rq?@pWIdct9~ zw6wTSUEZZLcTXa3ad=SEN$Uy^Y&vgd6{WFXLZh0-3#JEp z2rpwk;5;Ru7{PO+R9@0Bh5^uQfx+NU4^&!uENX9&Afg`77mSZ2Up+gnPqhb0?90}7zo zbWSdkjw^tdXvLZv$!}O+z`7MauE`bq-dF0a3E=7o9?T*7e2OjaGmma zX(_h?-`Bd8L7mWvpbWwo@vQ?T_WtEjSP}~Chc8q*H@(K-DzJ|~d8XE$s0jeDU2@|v z#XXD2uLC^MUmdQuYB;}?bVAE#C27_2TGtjdU;z)@OF$X~8yMi8w$+8~Fw7Ib!aG>s zSZZJ28M0}Iz)!V9+e5a!JV4IFQrIa9?X8c7@Qea~0Pj5p^8@M@LU4}z&$5r&XDn2b z?}XYmfVJy*Nx$=4ti7%{#SOF*g9>E;lT@{ zH4ffNn2W?pmdADk9=X8MGEhbIGS{zPPoS6a_Ah{JUxNFprictKuugVNuh|a{*V+!= zzG4_v*$X!5y;FVmv!gxM7l%O1;8Kq=*;(C?AJDUfvAVEqyhd(W#ZobcC08E8Op|F2 zJWmst7%h9mk|2-Ob6~T&07(7@^twD_DrxI0b`wFVEIe|{i#4E$1gc7}RYN-}F$p)? zuSV$Pfy-$Y6$;CoMX8KTMga+hwQ49zvtOL(2ZV|pjs1d00PAMi$~DMMC{SnysMiQE z4Xw?>v@6-A9Dkb3TGkx^a5x7)*FT>cbu>A;zR3FChlb~52Ygnv8H$ zcBB`ff@}rA`sUdYkk=WOgGM>SvQ-INgLHEmeym}_U5bDk6yUv*x9v&jc?SBX>`jDw zYJ5D_5qLd7OyrW6w^K=7YoNOk9!t;wR7dbkc}^4BhlaTc=s;}LTI^q*-Rl6W8l0p7`GYvl8%6@1S6J5+ZD9q74LV6e@T8kW+U*qcnSSw zp+DA%-$gIegMcVNAPE1m29`&($V%_!uLU$wMzLS%h28-6O13Luq=b9XVVI_mWn5o2BuR%sz>hgxFMz;PDtVow zb_Asu0%xXlUPwNhz)lsSFX_BER^qlkjhRebtMpwE1-(-Q8&KvS#c=jV*X;$svo(dF z!nwBkq%>r*c1y6&qs=XnCai?e9YG4jvo(dSO0+aI!|#FZjCRxb6xK=U*o2+Zg>>(- zafzitzvC>whhPXwrYoT-JD!I3S+r0I$>fsIpEZx?=jS4@{Gs;4bbPH#`#tZVhsBW~ z5q3wDSQCgx+)YlQXng#X^Zqd@G*R^5UvjeP+HzPQo^rLT$u8icXkr8q)MR4Ts8Kf& z^j*Ni6pX?`POEK4al?M+p>!SK3@S2DUBA>ROsD8;Sr|bLpFsgX> zMBg+C)eW7ivCw%`ckQZAIxKaneMG#*;sX}>1E1eCTp%}sXs)Z96I*EKy)Dnfw1 z$`k7@$$9FVkD;QfyAQuVQh)>uP2D&i5^nq^@u745p&1v(qU*XBfa>^t){W_c6oEO_ z7x$Gvx)wjP`}D^3c7GDbRM%2pljZRqfzMT7J>El~y!+$`BuC&69f3#gCHy!Y^fif( zQ}>h9krv=%**Bi=G&El1PV0+n1sm%;PT#*MHudjEmW#J6+O=@s6|NvB4iAF^0{{TvB_%|Z008hmU%>!S5PuGBZRqd-fB-;JL{P;YFB2)5I$klliK0|5#q4E{hF4gE^B7C=l$h=*M07KG%<0Nojk14RTr zS1i2*D zxM2Y);i<%<8UD}H|GGy4+#T=(7xXWG_}7(h{+K@ih=2}2@&q;0|7rHmUE3f4Td@Dy zryc;52XFxlkLa{aGT`Tr;RZw2}PT1k2j-C^(N8zNTLMN`&LM1q(czmL^I?`RxW zBn*rcqKVN_=*`VdN{t%AGWF^h3_7jvSKGamS`Fq9nh);RQ0IIOxbrCl$!G-Y&Gc=o z<#9)Z6^LB{nrG8ep0b{m(CLsV6HZ)pLjSpJgw3cUw_t$U+S(a&7Pe(&N5?wN)u$)- zuvjXJ8;`4P5PH3iFu%`tOjL52o`G=GqS*TS`clf)HQ@PTD2MB{e_>#1J1m4NRL!sH z+1p2CM_#1_>?CeqTE zzM`TcA}%f*OnRN3#d38re#W?O7IUP(yZs2dKR?>{&E6>J1*0JqYlk+Gz#vQ_E#{|? z%zO8C_S^>sC`{t69_)kt407N;ruQ6f9KlWPI11$R9Zv$xk+!S-*t$5qFX=IW9h4rA zx!Cqz2mot-M=<&+IrmaQ%{{|w=Ko_m+rj^sM5x|sDT7W+jW0mp=lSE=GBAz$^%dAH zelV8IJizO82qzYc9}NbHAYo8%Ha%2c-4(G^scja=>$=0o_d>!E*zG4MZ~f6F58-Ep zAK4USc(6%>J(JhGjWj1S8ms__*tGS}foal7R!7KlN?!zb5$-cIw&A^=8A#(@VRQ}E-Xu~+x5^IK+z z#d@lK=DBm?(D0E1tr?0hN9P@!jwc{ORigQ7gT$+8vc>a!4$mM;qe6jr|5pg26o2-J z)frG8Uf%1SP=eiP_RTmYM1(1h@#={ta}Wk^o|e41v$V_g`0)0p5!=m>IBNpH2yh3& z&CN`NN3y4nj_BuyuQsPwXbV2C+ceQwZ?HQfG%5KIG1=f3d_Me|2a}A1pJ4+@XbJbV z)K(1XwTN~*y~?aSx6cJZ`b+dAb*Tugyg4Fk`s9OyV0`#XS_*1b=>aPmYwe`sH&d3n z9K8SDy#>g7h5=)wbx&)#f?z%oh6Fz*tVMps{)}dqH%h#ItdizHd-29IZX|~fbioBc zga+;1WDRR7ofht^=pgz9Fsl<6mb*_?piacjFhy24$L5gl?pBIJwc_}E+W`BR$qH5vqfgi?M-bF z^e!WKtm{Z%82@{lstfwjS%OwqIMYgm%-(Fqyr+KZ`ubqwe7=H=PNOzZESr%e`0`q* z-Mkx!$R`ks&wJI6$bbA^xiO*PgJOlKN5Y7{m^zKtB%7~3G-@f)}sfi8CmeZdY zWc((&OhuCI(+x5kpVfU$`w$vJqL{UL^62a$R=!5YcyqvII-Z_V);k2I?r`v6bc)2^ zo7}GGp8o6I#P@y^wc%^yTpX^Ex@moz?v+;Xch-u~)T%E6{$Hy)BACA9v;~rJ zPwkvXOB7nn9l*YN=4$Ubx)*56YRTMXm4QnsE^z z)~1#?@vYq0#9^<>V3H;xCrnoh#8$IO)q28V2Uu2W5#6pQm@>`NqWEoc)wg1?nAiWZ z(~RO!frZSU&QH5v-a0Ha=}l@WnX}ADU^px3YEC7L9wJ4pF=ck{E^ZNfQt`p=aKq-5~>@zLwHk!G0^zOFh( z$0WvbFKkPC6HD!_LI6bcEEcfw7P_cS?cjQ=5)H6Cx-rJk#_gmT;f&RQT|u9fJP69D zE6^-hHSbS!=bSE>`rWJGcsMD{VKn$kO3K%ha|PIM!J!h&L}We!f>cRDV33EI={N7Y z)9)*ySvJb_#9Saw?7@bZ$rsJF7Yb2a*C{&Q`8d_Gs}bw*A$T^(M@t19-u3&GQ~I%e zK?cziO=)PSJbtgs2G(4j!l|mBNBZtO`6Q5-z&42vTf?E1re6wmxpMS-WIRj|M!u_o zxW<#;$8^bIgC!#o;(ghR{PEo)9fgw(?9D6 zoUWH#y~>YnJyVWb+2!gUR-~fzV&R#+4yk$1)y$~1))XUVT2e!`+1@E!s#kC+5Lm^! zq#En15hjjzV1|9!>k*+!CjRM?5!#`S6z9-+;HJ~9RqD2@F)Y=YNWc4-+HLwg>Yi`3 zV>%s8O@0Fq#<2fxaUhXOp$(VI;xeH=F~}+>;ggK6`{4VfS1eJyivt^3f1&R~1&DOj z$z@TlF(2pjzBXkxVvL+_j|n!warp>FeTC^*EWpqLPZ0rGL%MdbMtM*^a_A+mW0H^= z8t{PJ-a82?W|hV&JdsiZwd!U(ujt_NU`{AS)$jUMz4{If^Yk-^?9+A@+2^R+g4GZ1 zQUfem>M)dfGGxp135~{8r|@dM#rKnHXd0?dKgTT~BY3mt&QFe*k@E|fmU^=3qV&r% zF%cCuB&#sz zKD0napfXz9;%vx{kkt)2+eoj|g1}++HB1`h~^DA3^O;JfO{bDpa@J`C|WsD>)=A~hyX!{{t zcm>ljW{u@Oo+{^sPAgq5@Qz#PC2Q_Py~UDHi@nlpB*YjYrz?04J|lOfAW@^vls`Km zIk{S*S(Y0d;}PV}gk9e(|7{2JVP`wu$(?fSKplZj-!fL}%f4SQ6%-<85+=CMs$9raTn?`*(%+H$;s;vjr6D6^JOib| z6!tr6SlI~|B0GJ93iW~{DyRn&K~BZ*#vRAp3YE=h#8oO??UoD+6?!lR;%>^gEE~nd z40ChI=B!f7rKx$c5jUYh;=)C)0nO@3lDzwd7*{T$mJ_V!zkR_C;^p&*4kt|x>*6jg zYi%T%nyy);QV7!i6-4+~kO~wJFeGt1?uY%nOy=|V_fMPa)M<5mX-Q?!XTx<{Z?eJB z0?kb=QU;M3yX16`R{qQ?N(V_~OM}DAmXwslsUw_udU`U?=JT;6d>kh5lko6a1T>E3!FzoREY^sG4_y1t*Wr z?)AF-*X1JizMQ^KuDsRNzAO&c;kUr3D}}@7-iZxzlO&g$^)gg)6D4J3)|_eRrK489 z73X&S*4qv}u?DN6b+?zM;&8d@P1Ge*b6hFS&{jW3iO-L*EzCKWQ-f%7IG~&?Bt0f) zQ#Z*fZlC2wRmYhPzvj;>71zYfgSrw?bBsGkGA}*=U9$BMI5p_PT@5O8cxSvCK@1kR&DY@oG3fyUm8zF4TuIjgyF_UMX zdaM(4bW%A(+j**!r^sARHKX6sY6o=WR#TeDjBWO5D6CF!y7sJO2NlQR))L7)lntPv zp>gK7a*GR{W@6VaPc0HzGal_0?gHc-w)>n28_)x_>wagu82TD{FrJEA zSZ_Rva-zv+(?d8DgJ_ur{VuQuH#514O=W>YThw^c)FvBRHOB-_S8b35rqCOu=^l*o ze2t??4@EKYyIH~uYb9O!@F3;WO)_GC=P<|t>@*|m8Gp8%ZPa4&YWZ@0iZ6YQ$Y)uV1|N5tW6kAx&-QP6{4#p|cBf-n?BU$_s_v9>&}`C)a2)ywi&7jyIVwe`hB zcTL~VR|^U>21Adupfux)v#e?mp(fh?fy*`P^7{|Cdb7_6GP=mU*{YM{YoBkEZ%ch8 zes6)o6ms7m%YcG-%IP?pKd8p#(`l_1m%D~B($P1YO^8BZ!UqWNY@dkeNz>3EFRew} z5AB4kKbH*Os-J)}MAq8hG-*0aY192$*JVVMH>pDIRmem=902GXi(?H}sem(WUKflI1ZO*NYRRzt4=-CT#0Fx#HMvyFY$A%qqzh z>c5_K8=pLm&kl7q3-L%oGdEgKFt*vVO7a>Kzi0JcbU^WZ1m-rjj8GbEgg)>+)pt>( z(?d7XXUwA*`!jmq&?+ z*$(H!upykLFkk`5kAEUroYOFi)5Y=<`O`n2N*|S4jdQQqTPx$BgtTwrd}joy1j(iW zgA-oH&Mz|Ej!mm8pxf^`t|w-(CRU(60b=Zr1cS#WqC8fYnsk65RUzT@N=)VlBR@vo zz^aM%;gZkOadbQ*jia&Er|AzUHL-E~Zf!Gk;v00@Qiit@X% zWEV5OrKuPaK+R!~lehiVE%bs<#>`T0M85~LokkojC>pKIqULF|ix!@wt#V7<6?8hQQNw{H%PrER zLe9+0b`QNkHAczZjY77P2DCbTe-4U&Y7{K^ zT*;~9EoDexa;NEJx<<`+kfmyUL_|bwjAt!10c!|K*Jpl@gr%?Zra$`VblX(g4)4yp zRiFlQh_cH1lTD)&mFH`sTvM6{Etc8l_Y0b7vRG|Bn1w!t_$WoJ41>94+qcY8+wE`T zeVK(QD9{7sHk+Ot$i^X8c|8*dw@h17>gzZSixN(_cl8SrVUsS0-YFXVeymI(K~XBN zREP$AEwNk`x}g&?Hxex3CP?|vktHfgQruK8;)OQGl(NdFu{z8^2{Mhh$wIdqR)>#gQeQ z3SPpSCcoS^68)kXwA3Jf3WXr##Occ2U1|E}YLw=RDpenbyX~4K--HU7jm7;d`;AnW zhV9Jq3NAVZ`MK;s(?=F2-}%0&%?%nZ`w4dm$RC~&|9oZf3nE?INn!mhg(T!e+oNu+ zc!bz+fkLI$Shm(N^|D>#7K!_CGEoU%7DFU~xhRy_&T4{ry{WL!W~ZDoaL0!DBZC_n zix-frLn-o(lu-G4 zyE7=Zswg$Qy$*g)TN#HK?sA~1N=vLjMX>hvXGxFTlS}~{&uq!kf)${Zg=V>qGt_j}>nRzqsT}?;#1U1agSI_^x zP33o4W1qX{Bm1$ljC>~WU)k^#F@d*N<3~8~kUweOfG>?1hOKk_CvVTU(izvR)+-8J zP19?PwrP_}e^eg=4TD~X(guPu1uTp?UEkv%d4fE-^5!GBV>WAIdJsAA^RhEynR{7? zkAR($dt?l>u+aR9MbHZ^JEuC8Y2>_9AH+^%mI}hKU$7P=Z{>}?JgW|s;Hx9%u2FfU zv;>eAXZX6&Q6<+=xbK*wRXtCZ>{QY-w4b5dMNJf)DK>iu7ww>SB~A7SCS!$A0U@zk z^tR-&4Sz75U>oUX$GNW;({E1EuVE+0-p&OvY3;{d9OlQ2#`Ha}6Qj!wcm+kIV|mO( z2~En#ir6?i3SNx~2Z}RHEPuJxPnijL>(z?;HMU(cYi77b{-Wjl&GG%oz{s_L6iY4H zwSg%CiGxU($&r+Ip3#v`b1;x~0^6^=w0K`K8R|yvL=&X!_%8Rh2#j0#p6DW0A-WbQ zCew4Q8!)+M9e*jAAD_LfOs%13!)ksR&KC+*#QJ7LQ}sX_$_y)>Ygb}P=_Vg-t9YxB zw@%r?YDPofp@QAq&`$2cnhL*y1MH z;cCvYgvS@jqzHNCxtyvfF6$u+)iYtc`0dbGUb2MCBK69zQa?U|AsVlAEdN4VAoe2f z=kLsO{T0T47OX}{{iC|2nA3V9sXu1L3Gy6G=Gz<0AQKVrxN?<>q%;~W(L>;IA=ZKv z)^K~)xjT(g@Sgdk(|3dX;X|uPQn-$2-1K{{vKx0~_&sGfYe~A!e_LSsX=jESMtc}K zS~kG}!cb9+j}Fhlwa3YKIcO?C_F4AJIZAsHoD{(+s8+%_gw$7C+o`}!VYo$G4N~w$VfhYc!&%bz2_uGoStbjbX1>_r*CHDvV z(^#=m3+l?Q@*CdX+hX_!?>6;i_Ac`XSjlk}>(R^w4STRy{%J5_K~~#VP_YzJ@5erwb_oYd^nrie^P|CVM~R7o>w5Vu7G&ukqK`j z(9x;@u>S+vb2MMdPJ|DPGS z9_l{@&6y>bMG?^kzs(eM=PrYq>$GrLp0Jlm?>N(BS4{2gbUbWKow zox*2^K3@p!-1-Ts`1DTT_R#UHeZUKF4+uk2#sBEzVbL}@EmZ}lgK_S8l7k8V0c!}G z^VgMPm@y@8BysKtczpg$?4U0>F8c7V)1%2SPU9$YNVk56z8q@@YLb;Ff zWy*!>r`BWmMe3J)A$CgGtmCtBn+jHM?ktzbTAm7|*xNR~1_;qXepi6+UtLrFeDlY1 z<5d`(pV=Y=8x$TbQ!OefnEx1Byp~mvL=JhnU8xg#h(k}#VRoZi6tEh#4?2CNpA<+{ z5%H`0^rKuz;SwlV7G^HUlIw=o=sLnlzpwfg2VV8{WqSKL4IixxjZR%mYS+-);trc- z#GX@ZLGtb4i2iAz6xt0-Ys{ESe@(-7nxLD6BYC1{>nuvn#42xoJO1f%*-L|`xS#=g zXX*Aa#}Ckx!bS#DP3_;M-xU}OInn=uF73eW&T0P6v1ws7!aeUvO}tWWb5hUpMjc2I z&3Qqv1+B{-B1LSYJv*2Z|5dAsh}K-C4c^P2;%;ySr3f9&B{`!DypTSmO+{Yk_cM1F z?jwYyUkRP$ayabutNQ)6j5yO!mUckjyU38(R5zy@95_T3U-a}DTCa@fv}sV2fZ?6D zL)cjHWA3tB2;AMxA8z9T20W&fi^=iegL(3^(MH2oC(o|DTEXADW;`B_9)F z2LLZrBs^dFbVnpu8J$S;HAVjNjWb;fjG*6%1I85y zZE*7J1^PB^a9NqER}8=28!_csq zRp5)H|D0_2x?z1>K#{_Yg*cL=37J~_DV1!XG+MQ(H0_Jl-h1ibTLsudsOY- zWf$oCNKlmVj!9$wGbOXw``!Axu(t#S%-gYiPRQ$~r(gfux%8lx zkydDj`}sFoWW_grVf_M^S8V0F^F7tFs-^-*ptLs!@Y_XawG;I6H=y+CTcTGdnGZYE zyC-5owi&!9ZaKZhBR&#-Yz)IdZgZ-nLBSR<-GRy<&G0?8Yf3`pm|sXl^BqErK`lx8 z7K^4EC!{vVH-aw5%Ij-L1LI5< zo3)=KWAZVx%AnplkS&!{^S*)L+Z0hF0d@t8eUULPS?Cw3;bib?r1SZB5fcTb9pd|z zzM&K+eZaYypCmth)_DJ3SJKyGkk{rJ`SeL(AP_`)KV>}Uu*z8&H7-g)%kDzRL21Et z6q6D|cY=-O)%sqwGE77SgBgfHywlEpHTFA^qxm}&gsi;4OeGeTpX_gjpEBH374{YlJUv_T~&o{#~E_u7&pq@E*Jug8tqEJkM$?!uPShL)?0ISMSP zvM-bPB8kU(a1J7SMAZ)y)k!MweM+LNPCicY#F#% zr|PgQ1ji(wDGVvM@2F=8pjq%q;mT#)bke6i7e|ispO(Wtp`ivpj_S|+o<`>t)e~OJ z2UL>rOK+NVy@5{3xa`j*N_F3s1yfm3NKA)zd0+=ypw=Ukgyc8jRtjT?@5R5`PC`=B zZ14`}^vPaj**f)ihq4D-Wu-PgyQ}sMzf$TlzW&zbe$@${xF&l?3B0oWk#bOz-KbEQ z_i!v+EB8KbYm(ji%`wX*-7Ue?^<-qoZ&=EL&Rtf$3Q;UKOPL5RQ}AV8DH0gM$~Yoj z1qmi!5Gr!LD0u)RIc@4u_`1B%-y*q4RyxYkUT#^k*qt?|?Bz@v3}>ahNSSQr-OwmI zngMcJ=V50r?Gvgo#TkfyViZ~z_I$?NM5q0fKC#dYm98k@{1slRnADv6{I2n5I#S>n zWU7%u4!;F-51mdd2FaHNMLuspJHv+X)1uGMZ$X>fwdW#^mM6g4vtb7!9*o8IZpayc zW@_w5-=Ov*Qrj8g9ZH}l(C5e6<8r>mxPZ4%#_L9bbteo)!Y)Q(FQ3JB&nhgn3n;N& z_CRb_hSabCxtP^wHHPgH!CquQi>_u@gsIX^_KAd2GRtU2EqFl zH_TDOeNj!bwoe$H%H>E#=(S%~HD;p?&a4xqxaQe)w z5e`6!GSm@_%BfBst;eC<1(w3!y)TveCB zGJUSKU=l+auYCCXtF%oSbutEPOdoir zGu;-;CO$YX;ljH=$x1jkwGP`SlFd%6j)N1aKbe7tlP_-%a)^??1tV722clVvj~4y4 z$~ldRZ#M7BWy>nR*IEG#^WYuF4O3a|D(y!6@RYQi9+){aa*+1dbMQCDET%Q-y3w&fd9Xz@ar)poXqRI#7h^2j zlgp}grE2I^-9quN_N|uj^0lypHawTV zUG-+8{ye^g9i)NoR`P%1u>BfG9NYEtS?9S+~Xz#ySxB?#!j z4uU2=?jw>FK1K%feNes4LKL&OqqZ-gkj;EE1ZiT`8ABI0d2qj3 zTO)Zosz+aY%HXhVUMYz+(M#g2Q+AMm_nrT19?4FU?RdkcLV6)={pWJ`ddzKe!M03& z#V776OyyaMl34uZV-`lo14;6}=#k5y`o@l-33LzlyzBPDeW=o#C@NQh*q2Id+mHcS zcb(REEaC3;h$I&HoB6eSU}&>YpydZS=_pR3UV)QA{0Q*Cf9|6Tf@vLbt7qT~%BgpysdyPK@I*E-YHdOkbj9a=}!sFyL@99au`LvqBL{jbS`cSQmf=iPRGPg0g*@yA*Q zrnoc&ijO&l%e^C(%Sq|+E4??Cs%v3KjU0o+y}H5@AK!r}4$q4>i{17_onVPLUWE>< zXp9c%R=Vb)3O0ee~%ELUybHA`1rzK#~*yK`( z@WQ^F?7@6u!IsFGC%OjP2@(Wq>MJ6YS^u&?X&?;Nbec|)hr#EM%9H)nDUG7PnrCE6 zOPz^rQ49|XxMI|KH)I;C_ZqtwplW&2qF=5z6Izsg9vF}i7ObkuzM7>WyIFqGmfBpL zPvyX3MOicY?trM@fw6#EQm|am6j>2@z~*ARgtXvohs`y`>wf`Us870Z3N>l6;gt@t zF!=2G11#jgXoZCDp!%}*or#U{3w;A;u{qc7MiAtN^i!CkHSuDjxL7thb2A~sk+6ja z)rL>nC&N`wBI4qEyMvK0yIbvUh^Q2DNinym;xFOy_os`)yjo?+NOB*v{qSZ+POuNoh z=wXbUypWrj(zgA$YCyWQUE$=9S9;_5fkMhSfM5EJSTL`ib3Fpo$#l@{<{@tj2cZkC zvOkXBa1a4u4aVvr6HjhmyTjKXbMn>4rARYkxo$1LayVh0og9m-`tZ~!hD>!s-4@(G zqK2~ciQrI%5sya@ZCML%EhQ^tI3wX=ZWbUcW8g?|lxpuP7S|vSb*>4>Ep4v_$5{P# zJ4A5JYzYo*U|juC&7S90KK4ta12AWfw1Wcwqhiww8+pM4vr0ZPf}HykB0SxLQb-*B zgQp38GrI}Zuzq;@@M2gWl`9{V4t=z8Dv%3zXlk&8P|EmjDSS58d)9+J#<;&8*2VPg z*yvoSoyPAHql}>9tt7$*6{4EaW<1^n=%B+q^x#UH?4=b zG_NMn66P&q@9X)sE0_skgv!v;t^_~CRA>)wvo2H%i&fI&r=4ZlXe96ATc{h@hc`l z;7#GUNe44+xq*Agx3zl1(KFPU?O~+LH{AT)f0Z=A{dxESGmTd2^=Hi_BqWR`V`yMH z1!B>C6`J*MZ*{MN6;^hfmPLFShQ=wM)6KjNM^ktWmWwcYdU`F62NBNBiwzd@3hk~o zofS8S%gGcqTu%|3(tM%1z<4nBd$5Q+gi36FAKp2`OT*zO&YXr}apuQuJr&Rc2vPc<8i+uV`n?=P+aPk*h>UU2 zESyw|M6m63GI6A8x!yn4F6bSl8(kM{uGY=!O`Cc1EsYkrL$bS(<;gyg?ex{;o@&py z@W|h$d^_-?7!pNB?AwlJqqD*2&5lu>Co%=1_cszKKc7wPFBWm38}-P)-qyZk9#>!_ zKAUFY=>4iXe#<~_K>A+oO^ZeZ1ov1R2u7vIZPKu?bWfSRB>P^`(x8{aQ(2W4%O6e@ ze0ug+O!>I_IaBMd_nZp!=X0VbbQu=5aFVmylOBR|x^Oati}0z#&(JSVvr^p-_-CDe z3U!308)72CdZVpz6$GFhPn&ihSp;S>o|2p&zVVc^{OsPAD-|APr4@;Gm5_je=T|%L zCn5rl!(vXD_ThH*<$%=&X~*g{0)}(sM>E2{G`?0fMKC}mm;_&gL79thAorr zAzi)%VPtA@QL~G+MU6@osl4k_vIIh>*Uvdq6`wbAG} zDLg_M)EDm&MeU+BtdfP<_x=)fv~WwZNDzc+8MFSaC=xsUoMtc5i&1&A!qlN6?;R2$ zWOLAjI@Q}b8#BvRp;p6pq4G4e$wj)rRFn?Y1m}zSj8ILPkQZH;(Uqx^$I?Z6l*?=N z&e+DVvltH@#L^1rZCvm3Vg($S=Lk zn>pz2fX$Z&g`QzLBQdU=r3RMmJrMYsvwhjoBj6{!fiaNF^nkO62?Uq`@=JZLPDU+g zjV7mpvb?`Uu)ZJUK6@5U|G=M%1?+bxsAh%cE3ooLD0+$2K~@z!dOdb1DLe~4#h-(R z!s^Q%d=HHeScT+4rTsM1@gq+4`?PlQ*xKK@5$E#T!Ruf>A7Py0|3(G>mEgfC-!u01 zeF`&9`oA(Fen9i^{|O-6eM2(;E4u?E^lxZr1btDRKTzZU!qS+Q{{ace&LJxKZx>~H zcA&2SKl;^?G2{LX?ff6k$!)rU|XGVsGgb`$Xf6PJf&olG_B8b`W z-}vIc*T7ZMmMI@E24F6ce}Hwo9^f`m2zko4oMzkF|I>%sn)7yFk9_rMDD5YYidj`TS^ z4)wdb0QbHBNxs<^1hocOw^Y2gr?$NO5rW+N?fdF#zKpbxmkmJ8p3O9f$q`zNUD zCEQSJ4WvZz8m(p{-!bi{MzB5kA5M!TlC3&Q6IX3Sx=vnZ9-ESiVeeWg1l`zI=R zcPiW&^TP{~HJ>}k=3;xE7jHjX)}qNwaq1K~MR)VWHPQ$7@`Zq*0Jn3s?i?uS@JzoD z2xr(|%z;zr2OWSZl9v^NLN0iFzwy=m?l}Gf_4yl0cxi1*4Ulqbm{hT>w8iP1v`XqR zZE`^F=Fr*08Pg4aD1%aj`jUV@vcL`XI4s0HxJqDUsPxGc1|I5Xm(q3wY*Q6D%f>yZ3&RQHRGDEI-7tUYU$v%-$Tzc4%E5HT0K}ZV@kM^OvnDt&o28 zU4sm0>%j8b_!lKowWfkMsjgpJ-i`Vbwais^wfuWvRx zrkSlLfiM1pb?xA7ck`<&RKoMCKevgX6F#qJq&d8Xui&SDh6NtS*M2|$S8?Ny-uQnd z`_2)aRUj%kt)utJkOP|Q4`u@@fcl%7+VWPAWVWEfa4e38m8w+Y^^zN=2&F_3a!vLN zJMp=~f&4Js&v{YvUy_1SWfQ!~rcYTr=jSl$Zgcv_g*T#homDvQEzh8rRrb@8Hmc9F z4a%ZlH=W^*a-79F-?U6r<*T=QjL@kc%3>{}+l(yj6#1!Q7Rr(u4cB=W@l?O)h^nqi z{!K1(nnfNzqG=F`Cz+9qKJ1XB%I3m;z+7l8_r@w?7|n-}n7_Hg&UQ?4ST4V~CF0bN zWu1GRi_Xf#I|nD9F*DLaZPC3UT0EZ_y-~a?4A@?%j*9tyP9|}3cSgG(*Ax38dWJQx zUE+x#`t<$>u_#8chX@kz6)gHdiL^ukl5=q72Qi4(=Mz|XmRPbFi{f=XQgdYKS-7V9qL!X`o=a09jz#S zMA2So$gBI*=5Ob>JHLp1i`F+R6bemAo^0Df3XU%G^qA?k!e;g)ia{a|{e4?noe)ws zt78x$S^aU-W`Vl3Snc%Ul4NvR)wp`V4e;7t>2GIYxSM#N)KW^JByWVgK*`=3#I3ly zh|UJ|d3K&b?Kb=N@-!l0OE)JB!VV#HkuQ)WnSHEX=reu;-@p&u#GXnkHJ*Wj5?V^@ z<)1eKcV+rwQiD3}DqGNfQ8t!$*5I@+6j*_tn8`_jv(^P_tL_u2xplaow;rG1pE{1i_h|+D|z=Cbq7g>ImPy>a5!v8 ztQ~d+JD+NK-$R!qxFj&Z3DOaskNEL z?c+QXgD_^my_1OKiCL|G%#*kWh2r(mjX2RQCW1h?2(RP3;U&Y&{_74|!|$)d2-ueJ z0tghubM+t!#cZo2LBfNENlE*A#RC?okNkf^DoRKdt(rt*RH{7uLV9}{#vxU+h-B9< zixQ_`H+(-`o!Nhd+Zgj$>s~teDtk)Ya4oRd#){nRM&$AV%oS??I96E%D_No+GKkO? zm`Ire³?@2NDyw(5OaTbfvsolS&ic4>1G;LMphR#A)+}pHwguKo!Ye{dX8`qaVFu1i6`9@tl4m~QL95x0&0pkhq*NZEaPd3B$;~TI z#A5qqR9bLm}S*2<>@=P3oaI^p{g6kkNTj>i_jS6x;y;4EH1N{@b!p^QyM*O}br4DL;nU5e;W$a}5KV z%#}JRBZexS!nnG;o>4S&(Zmi=Y$Z^~#^n+tQ0O4O>(Ia}E!3`0-0<@Fi{dsLy$%Z8Rh|ZXT7NIt zH&VwSX2y$!G(+55AbIv$`cifJI(LJ|UfQ*5Ge>eVEBsqNrth8EvVlM*Fj3B}#&Q&6 z;$1QtkslZs;Hn} zADhBr3kA;!NcWfLX{h;R`K85n5!nU0PCQ8bWWifc)tv-tnL4Kti%i9G57u)HCn$9z zeWCAbtY3+5KYOZJN1S!&TWB(Y*#mkvh{wyQjnZDim6qXxh*gF=dEa&XJScI#)5Pev zM8*_lI$ZiUDKX45Q@`#kpliv^RHw|c#c>u^(`&QpcBXfR`%Y3Tm0+3AJ7WsP4kcuT zq>>`z;stBCd||m{$1uSO?oX!Xqh0ZCx7JtBu-_oc$@jZ|QxfO?T+BjH9JZip0Q#39 z@!X@A1q!6H;CM?*7oFk3-mfcj1LE+<87~Lg-Ltqp?cGADPmtBBd1K^X7H8>9BznSq zmgBYRNZMG+K+#p*kN9jHOh525TeJzn(Uyy(`LF!RbS{pBg3Z=Qqs>O*mKQvkp;D`p`aGlnGi|xB<6Ii$j)3mk9^t5KWzlY~oP-;CmgYlS=pHJuRXu zl$CuH>f#_+J}q-|j-AP@1`wU#6U+&~_kxjK=frYk{mWz(f}#du^^;}61p2a$-5SZ3vm-FlT#Qi*k zpn>yjtQd5~R#qpQtb*6#U^41&~;f^F9teeV2~_Ew8ssmfPd%L;{MA^h#QUGQptR3wu-47VydE;id`1KFvzek;fHJTbvsP4y%* zGCwL7LeKzNpulhqNftCef1ekS)OYe2Gm|^VGnVJ^1%3&CH5$(%HC}CRV;=s`%K`rJ zE&%i-r=?@rQc;V}h?Jsk@mY@v;|3yS$DIX4hP`c7)(9`lZQX9hOoWfnN^OgRPD>xf zqB`!I68hnkO6UDNePtE<60Py;h{TAjkI;$1Ms2WSFQQBQ{4B6TyN^`%`j-2r@E0rKuYLVL!HUtFLZ%)Q6^BtTYv3aOx z@W~>e`)&U`W%pdw=ZrWfvVL{0P2%5I2ZC)Q@9Sbe2s1(|$1_Hmxyw!P?m zYO>31nxKkxxcLrsgRVvtCOpaYOBXrCJ2_6hVIa5xs|6}{h!c?0m(n}gU$}s^4+>kcJ2W=|5*r? zxu;K^!{(>Aew!`quK;$#4<)}lI|8WXtHhu8kNEq*Zzzr9VMISNoeVdw3uw$7$Y!OR zb3i<1XzQGI9HF3SqkJHjzaJpWJ6Eb9VY<={Lc`DtL`X6hE7dl(70)m@s_xokwt8YN zjwk;pQ7lnJXF!rxS?;m%t5UaAX`wBU+0s0q!)6yFbid%aKe4r6$f0GsBh0IV z+2Hp|r}O3t()8YiVnU7}2Dq@OwF5f7DgQ>NqdDr|@bTNrDL{7j7(gnm(V~H{DMu?I zhDyy}mR{C6F>Jk{S>XU6DGC>NeOk~CxbiyFx_-7|J%>JudX&7bF!^z_$R#TjG=z@c zk-5Kx{w)rQ8w4MCO!Mwj#h{oR{ri$ylgH6O0IZjW`AQ}+JAh@aYp^qg5M1&NOfL}a%$!EDtG21A3=<3~Y z7Ny*CGn%x%shJF((O#(6-3&eHt<0nZ(Pm_D_*<%433;nB|(XkzALU1qa@$(6OKT}Jdy5*TS-Sx!JLVa&8U!gj3Y z@ti31dbf9=2<`A)DO4QU|Kuv}O%1X0gR9UBxDRDByd=VNx6GN;!}Grc;gcvHwZFa3 z08dNJ@G{Wd&+Mi=Q)X!~UcPaEy>I&YhN)@&=JZt`-UpRo{WY&_#H|7g!MQ zM@;9;=)5~32hR$?6n+1HY<**RCEe2YjwcgMY)mk*?aWMU+qUgYY}?7iwr$(CZGU^7 zqvt)}xvu`PvwNp|t?E^^s_v?~J5Nm6^ySEWde3fuJSwmp*7BT;zX2g{VDv~PM;>Q> z>`5S`C_9hGV;w(eo1fgM!^gq(%KvXst0Q4n&Xn-lY*e~!?blSMqfsC}PFx z{j8az7)zW|GMMC8Qfb;@1#{tqA0xQN*Z?P5scOiAx-DRoFD}VADYdsN>Xz6PBwdJ% zY_cyCtr)S&AxF9xeovIO2L~OE0` z8Dw}VCnGR!2;LS>-)C_z7kOFkNn@-t`j{yFN1kS9m*{qp-xZ(nX6NHKM3$Y0pK~w1 zAt12j1v@1Q3YqJ~ZoP~}$d6urIg#mgD~oCOHJ>5cUzQZta7Vmwzd@v!Izp=r;d`bL z%gsZ(Zm|>^W1|EDJDS>{=eMcDLqofRr!eCF3Pzyfo$Em6md^3sx_qq&9ZU0?@dq&hTayM9TaJRzRplW=<7)3>Dt!(KKlpOYxZ*(rhJz!su^NK;x=p6;o$R;V>T z3hb7=g=ZUF$K5~neft}R6t(te@8xs+xq17KZwaiBq*051(WIwm<>%5nl(=2z=ai!U z&EYct!}Y?#r;GRx$ZIeUd|KAHBVJwAk%r}OKdVmqW;JBG5K>{@?EJMUk`@P8wyA-MQrJ-A+X_!_F>WrNC@-{0Tgy|Ti2A#Eh_KYr~E zy_oFXqXs}Bmj#!RkqHV4%5q3+jhY!h^R4+GBt1S{KllU~&+;S2$7SyLqj#lLRa0iK zB7=jYsX$^(NR1r-=BEIWLIPIALiwT?{iT%D;ZXx1+(>YNXuSvm@KJ>Y4FUn|DXdba zU)3;#UHnbNKrqmo=*#8hrFU#>57q_;C?O3PP*9Epo0o2YAX?F>p~MG>P52I6RS2W5 zzvF~adEmQnSAcP;Cm=sbBD!o!IE?8YO|Y_Ig* z>|IK)k7&I173xi(T3T9_CbbVCx*Io6!q1>9s<=zqdCaC?eTL%^C5L6Dcsw7z!v9tP4)3^GzUI z&gJc`Uri08x`sxcRDFkE+IL7$r3y`fJkj{g?d@N2adEI)`CPN6%)O+{%&5SQ*FPLW zqVW_4qH%BL#GMy@;aR6t{TG4hK6Za}U{@80d~4?%_aXonvUMDdhAOWb;cInIuuAf0 zR0`pmBf^OgR7%6cTXtC$KLJ1P#=%kur{p&G_@3$;itCs%p40e>YU)qpz@FEMNi^GE zAEBe)XWP_2u9-Pk(uLJ_^`!O_meZ5=!XhFB+ufgjkLO|lq~S#kSYaeTo}dTsNFZVP zxkH{&<_)`-gEaP`FFB)K3?p!SHxPu%asNs}EC~QpCSilaypMh2!G}pJCqf-b@rdc1 z>|R$=BJEDUtAh*>flNC!*yvrI8R=h}*auJhY8o2~kS)H$J`Wm5*ZZe!(w@+2o%MAi zvVBTFTYKMiMNc~$T1Bzaxu;Da3zp0^k0xBsea&6cwD7qRAtk6utT_6bf3f?Fq$Csh zbaRlHUIzR5<9f6j_tV)90o_srp0JxEy#g_lp1sRTQ4(=|0hM{w4o^*Xm ziqRA2AhaP2h)e;nk$oxVJ~WD~1KFh|;puH~vV08KQS>Mt9p(O<^(P;G?< zh^`~eBT8yIyso#x3~FfCH03m8`&y&(h0jY)h+V4fx*q|gQW;4SD{E^S%kCqkeBZ!I z<4I$OR8Y`ehMtC$LJ?0fj3cjsddD7J&}52ifcPRA#C&ji4GH3AzM8@+oIL+)1A0dN zI)t_Z-zD#x3IfpLQz33@IiMX%FAV%3`#ruFj?F4Q{HdneR-b~FWqkOvQ5jYKbx>HC z-=TX*IBd-{x0p%>vsZLtTBdtlLc-$dajI2&*H%xUOtrp<$m{#tOA?z6VG6UEA$2oK zMzZ_M?HN%zhD@F59IVMko0}3AP7(L>sK$WTYaP~;6bUEF%|#AGgsKJ?Z;awLHe6nfM& z6W*yUnUta7hh)hhA}&@C;EJvz`L3eaK740FVcGq5vsgv_DVr6K0Mn8TbrNvaTr1EA zYMI}Q>N&(#XUQFd)fV8iLuo1{@`Lkg|%y~m|?@Lkuaiuzrekzu7KON-zU zhCf!}QEZ1Af9RU93JN@B#$l%@G-M{N_p9^<2!;tFFi|*%S*_M_D%$Q-ZmC9iPUaG-gH&v$K#*}e4r~Z%*?FH# z$+@SVKDI+?t$~z3Ocu*1zdEdW-yd`Br+-nKe0mz)rL;#qDFBj_(d1w?dc8kELBZn; z%CAF0CplLtKpDtS;nkZj{c>7&5#q3w#WXzPVZ;fWL9~HFz=PEZp343S<^FcJ&`&sV zXCB@I?2Z2h#}kIh2yqEfkoz&g`w^zm;`I`UCp|yIk?mKa=+quvaO# z?eFkty)TJ!&IK9krjJ9ws1$@;lT~R<(sb~yyw0j)Xb!MliM-L_kSzn!UJ!S+cj=}; zhBF=#fZ{J49@^g)6li_t=+AKv(w!T#Dc1`7dCJ+FLoys`x(G7iTADb&(ZltIX*@%? zYXo=rXe4S43=ncEu|9mkFB*CESZXKGCf*(Ifbn7U+4H$Qv&$_9eKXaZ^s@9qs2)9x z@vju-;veIp>}^rz`&GOT$Rq|gHPz_;RL#^we(tZ(2`n7B?1IAIjFsYv=E$Dld@(Dd z`T;lfgwN?%YA>Eyny}b;3T!o;7K$^Q{w*@W{Ykrw>gHf#U^-7MkEqA*u1n3T&HsF@ zWkg_FOMrt^GA#;HxEE3{KP@WyCblAf*DrJR2|ZQ44OkAfSZ|T)NDK8D*`{w_0=OB? zS{;9ja4OYksUO;9h^-Lj!--|FTxE+j8OoR+rX5jfF=R>ig+kZ{(vBr6r}22G9+RQb zYOboX$T}OclOdzN7zg32bqnzGAD+mN-*7$5vjt(|+UVyUnm3rvi8hBIQ!(r?uA>8&b!nrpkw6Xkc&5u3E9eniiJyo64fwJ1AwZ))`{fxfO2f^%| zKK{MlF|E8g@^hNyY8lK{u0sU&s}H_3)o5JFA(?h`rKO>Z-nZ}>M0G1j)fcmot+*6W zV$&7V=31Q4iU~1374+ffs2Pv_ho6$(e$o<0NteDzZnXv)ti%#`Gq+D@O-&H8z#PeNFGwc z7qO88xFA#N0TcJzHGX% zVIAP82 zG0AS7jl9$kdZ%Mh{#i^vXfP~->qU-Hm3G`Mreo=ROXR{>`NALFgl~gUxJez_)ZJvG zx!S0=SXXGOi4H=Oqati-X2kuqG*Hp&6I!%CI~Qpun@Z743NO4OBBmu9G^F;^q`s@PQF2443 zem)Rs?%ULS9`8V5*K+tP>DK_LvdB^rC3d9M2*O3L19N+abKO4k9E(~KFbpn|Jr)+p zFR2x!L1n#v58YFfA_!<@!t0xQpX)l5mS_nh*&3Ij`Z&>251#8UnXKjwurEo}L0j{O z{bY%=@@okOe&<`BMcQ~9QEH|8nJ2&KP-CuXOFPCY{g>jEkFA3-^20Thqz+w#<5nKT zF{_H+)f!I>?sD`H%y6P4U5ZzIQp-L$dN1v#(YnHiGs-XbGSA#owMUzozm%)PH|E$ozt< zy+sNM)l1<0s6)d+Fh5=OJFu=%m;6`KQDXX_mVNUc^JR6%qYl{xofWx+%KGe_EEnQ8 z!#N;13{2IxW?;pstdMe2Rw$iL3Q#N5P0)`UHayj;0T^u7SrX=@do6Acmbb@qFjAR3 z@#5Nh_5uS^_T6T4#r`}V&%)`%Q!+?lrFrDH4Fdg1v2^U{U<})GWva|^}zlr-c`iKMu*nMQv(TgbRfIYYtQl{dsh*aE4=Bipfk72C=OOauI*m< zRq`dwbgUO5RSDdT+0;juXWP}1RVZM$1~{zANg&wBK0%xzzZ`P6&GW|I;&meuB&_LY zt7C4HRj#c#d$^fzquo{AXY{7pKYy>S`&OWt3z@dPC(+s96t8mnSyR-e4x^@AzCCU~ z)HN#QL9Ju6B2l~3>g+wpA!42Q#0bO!drr7wiqxwXB6nneFu|*TN*u;?w8zGKQsS49 z;KEy747^)-yIKdfE?b@Po4=m$_8#8S&o517^o@3~?Mt!gyb)9V5RaEZqI0tA6Y-7H)mTvUIU#PVBLJ_n83|3G^SDr4RDDU3~GxzSR$h3EfZ4cwVynX~rTpb%GyrPorz0yKJU z)1|514!jTrW~=yElc#3|>Hm(J>#~}CdN5vsx_IYxI{?8qsH(d%nn6bTK_55ic7gjn zL>>hD*Jnlkwh)b}6DL$R2+9OAq1$Cd#4pjB;J=+dec|v+`2lK@dg?UZ;u1S%7;En8 z*1xfD!DwgrenWE(3_eGF5p-|&m=Wvk(duCs%(hAR@iYy|J|vpq`5II~gb`2pr<;g^ zWQhDjcSFi{+MLCxSDB6wnbei> zvQdVQr#$9DTfW0L*>J>Wu0M?q{T%ji3Hj$k4Qr0r6iVf3=Lr>eoZn)z*GDAEDR?i=>86px@Zsm$s2NuS31RIHp!WHkxs)T$4;!mMd+*f4nDZQMmc2$m9l)Ra zP#l5CP@>kbfm(Q${3+A5j-=BlMuR?PSQf0J6MG_3h?$+YaRy=N<)eG$V?FGWLuu!& zKoFy*4T|;MU%rBp?&+Q~9CNN;?j2z(Rx|ck&RTy>_qVHKe@(1lPQdKcdy$ci>-0#{ z%>*LXoCh6Of)$^i0db5IenLSp86N+!fIGT2 z_%y@jvF6((S978SLDk9Y0JF&=9fRLl_?A2#0If2OfXkCpP5g+bHQo-tu@VG=yeDR7 z`BrEq=8li=XZ&{&*2(9>tO@l_)&Iz{Q- z!#%DLU#`6!%Qo$v@!VfWIC`DT4diFe+P(CYp)AC3Z(mHP$3tW;2J_kbIXzc`@T50_ zs$$Fg^Bd5%w7UmoZz57)MYj*RXbiDGKflqPY(;|$dxHKV$%Na9LQ=RFGyOZ0d)=;C8Lu@~oJ8np4oy0MaKK_4QRr43Ebd;o)X- zW}b`|B+C!Yd3$4}YlY*RK1w$z54hq?jM=)5mZ%R@kMGR^e$yi|QM9;{9>#ovBS_we z(?}hAuH7*8rjPg10Q&&aO<+c@)SBqk>H$ek`)vW~%o+500V+%*^t3ok#clmslWU|* z^S^c)O*lhV`)OAB|+=Zo1^99rBHhw;Nlss^5v z7I;5DKmDzu542j#HI6n{X3srEE!TanOyX{|#Vl!`M|2_@tD)b5; z2#{jkoJ_`AJePsnNmW8+z105=?kMQXWWf7%EJGIUowP`h%Omk7l|rE$JhT^Na_PL; zY^XjSYiA z8#XzFponWc6vJr}_%3eCp1K?SE+Kr{K5SNS(L3~LLOiJE`)tEK*if;Vaot+BY&3Xi zWP(i5cTDaQVm;l~olj^|DPzuiQ)7ZWHxuJ}=#%B_zS=2VX^{|bo@@&PW=I4eNMtAA z!`)V?vJ=V+8YzsI7aXQ7zJW1mG|TdWsfHP?;sNUkl@QcSLn1vB0ZX~1UNz(!wfX0z_HgasUXa4G`9 z)-#%8-vpZP3`6WO1c^?)PCXWGVx-1*HYG#TfTq{3cqu2g6#Eeu zMhTxkwJV$vZzZSF@k%fa4)51;ojki{pbkP?(7VaX9ZBX|ATw0yr}%gM;Zp%Nu}w z@atBi2BLcg_;dQwomY_`O8>-4tHiG0;*|@7aU@wKTqoO}-&C~iV?tKaF@G%(O63jU zwP!_pKd=-3s0&dBpG6*^`9`jiQP9`H?Qob?Ta*H%E5s{E(eyng)$^i_4ZrA9ZvD9A zbN-g!If539t0tA}xkIqi=1_9A#}<3j*f^tbz>wTOmHs&?@GoOZ@Ru=Va`NOl`JkFj zSJ9xJTU(<)ay?WiQN*;oNSR1~#u?$vI8dyw8OIZrMfcJ`FLf(7!)%+syD*$qF%I|3 zQ1dYKR2oh$Ye--IZ*0(X;P6wPq?cMHr0P)mVCYeTZ8~@6EUy?vIVoH&mMf=oXer z9(>!uB1DY#6+kwCSPmlk*MjHk;qNY-SRgoi$4wL;Sne_!%yuy+>f>_`o+Bsb9W-9X z)4zkO6xXNZx>O`JUoO;nTFeGq({I>#M#>^hN97VWygs-g;jr|bU)kmh=vkTe93H?1 zIMUWk?^HK*7*%%Fm6&_>K_(zQrZ${t6i=(OHhR{=-HT$hx?{Q%OqKeJ{p5XwUQMVT zF9vKou#otnucb!x=1UA-j~Dp!vJx5}?#G>N6d?Dt%X1;-%8` z03WkV1$dEXZf2j=K1jG7Y&oY-X}HMRiaaIZdq|D`rWrRqbZ9NWBRHo4xhz}*TVQ%e zwo7mik%}!J2*Mj9-qb>wAAQC$GjMEwt4rUae)dw5sYG{YK~^Bu41MN7uiTBLt>S4X z<#;ePW)b+bJiz`YXi1ttV1KBJZMN|0SCR0nBmbg(s`U)R5;DJ1r$ov0xwgCd9l@Qj z3jbTg;jh`96S|!VYZV4-X4T=*#$0kfJ%F>t6a2L!3uhO8^qR5+ zzd7-+n?6;HauS|Pp@B1tJ6hx2Uqjpv;jP3qn_azu29GX=f~Typdx01vkV257hA_>{x0V3o3^EU8IqzSjc# zVk(;_=v#FpUYdL>Gy=pO%|_c(AFl02%cwb4N_n{)K5P^k9W08+C5yN7PNEzPmBHdP zJnrWDW56vA;8<5TtH~)wfZm3NVO;95X$2=B3HUwD=EAG{q%Ha_`I- zhK)D*n&6Mzpvu+Sp*!5`0UlZ{@R4C05l$Um$OxVl>;hnM`q35#pv#(pq~*N6CcGWt z)V$aYQ%>7<7+9uGpa^JrCG-gdO=4osVr}6Z4iJhT;XY@_7-zRpUie!F+JGoC?AI*F zh+4xXO6snT{Hs2$6bYGJ;EN_Ss(^I2I|;7Og$I#4&g>bSA8y3CftpSu=XAVYzU(EQ zeYXlG%%QgHFa2)T4$IAtC-}+UV)!1x7X?y`42!R+y03alL!+(C9xJ@~8^?w6e&>!9TF?6Wnn@T z6LNL$wZG{B#Uhh)M0PxVly;}AYOwM5te;~rkd?B>pEEDtUaT+>ip8`QHyU#nZ(mGd zaSllIa6j=v3Gm)^WA>(V`7ny;0xCNU^OMY*QZN}jNT*S51Q%Xm-jqJD#dh1SFHO9m zGTKltT5sVrJ#~F#N^Kib>7SPOFNN8_&m2geSXbXYF6mk|wyE(x8Asp0dp#p5V(0a? zZ2Elsgt0RH2$)?mav;-uV`8 zS9&t1q}dk~O>{Zr#oGl#+YZnOJV~Mo6`#A?A)oa|pKc+e)2{A*$;j^qZ z&MqQYwY?=gkuB(Hvau=V^QzAQSdQLB`eni8p3vu5G@2YnGuK?cvmHLjZGb4aGcRro zMk4_vVeu8$LRZG(65ms=SBsv{-Ok7FH+)+M@# zmNriNZ6-6{dc3nXs5ORj@wt@{a$ocL=|}UNp9wpaYN=IV(hpGq++%X0BE2Ng)SK9w zsSZ}IJISXYwDjZ*iZTa9_p+%fiLQl8@tz%N@y^V~M+uo&ZUSv(vz^5v8!j`Oc`mo= zyb&2P$sB3+&@$-EmcHl|3UId4GmN$*Lm0)w_+O&3-Ho`YJCg_7iM6C?Hvo_NE~K*7 zBEbIk_4HDNbid^r!?J;*2$bkVvO5!RXjZu`Pg2=k%BZ9(59=B@B!0eS4W11fC&b2K zC8`YsrC%oi(Ag+L2I_+mLj)LDOR$9*Q5IEs+7P`&&Z)RK71u zI1L|1a;8I^dbn7Xei*eOCh~#RIGn7*B|fy{gk!NXcs}kC52PCb@sReHi=NR6qwSUt zk3h{f*R7!;DZ)bAek=h-w)FC$g=C~MDX*wz(SXugok5B6aaUJYgV!jzpT6@YAcyKC zWwb3ExS0lt1Eq3$d`XNvu2PA9=F5%bTDD^xb{zZjcn8(R;K!v6{a+{bG=~rTeRI{B zmk(``nO_SV0x33%>Swuz97`wWTrA(DE0Q=bT9F%8T|=|!G(r|S)m+2^U|BbK@7$%6 z&wn4!6&sBZR*c?lB$3PIYhOlnDOWoO(~m#5S=bHyu8^Kl&N-|Mo@P#g_a#Ee!Q5V<^M%Q}8M3CvRHtWeQM$IY?O`1cA{L z5;`&h6jH?i5TNkmP7Z~f6@I)6;btbF^;Rq1 z^$mq-Par?HH0OE!B+^6)UucPo77sLHCn}x)K$$7RVD#p6_`2N^UqC`2S=VPVnIlaaMuGcmVm zhk@AIl+^khQ^3X+$NwSr!%%W3OH5cC0WhE^Y4BKT{3+>GVan#=jddhR2v;iq7viQ< zj`nLvaqUyY&5Mk@p9(E>6ramiJ}^FbqN8(!Qk-J4S|QXrYLYzI_&9YZ&7^I2bPA5Z zm_sj-!O`=!8T@IiN2%D1RNl(FLHSpp#GhoWN3UkCMk|D*uO1q2MRuKXZo`9@2t9el zk+@<2z^jk{nMpt-WE7>OfLLlagGS!;EL!-xMw+^)C?*AY)Bd9ox%c4m)Rs7;I%BVhGUe}5T6U-I@WBPS0Aa`#~)F|=hu@(Ztu#< z4oiy+&0Q@xeQkLt|39~%FO!hU;0m6clqO2>W$!U`1vK6esht>7;DCPfax$HH5FQwy z${onc%DTO>FM!`45(SQ=R9tif_eR61fcw?6@n^8hAH6Ii#kzCCzJ(~S9 zFzjvZPpYP~vy;#yMlg!k;W$pF1F~#JzrKqrA-{gMR0SEhMUvUld^0!5>Uti{b?GRK z%;&mMp1rR19B|4unaK|jj;|QvQUrg`3-)Dy-=D$=BYf8zW{4D^q8WH72ew-WbX`1N z?R$X$veu77lMTb?7Ys>E6#kKm2>B&Zi{(LCu`G_Q*6g) zN=sOG3Zf?R3Hi}U_@SN9tYuBIMy$Yghm4Bq4=nTAQI?M$WloBE&-xSI+1S@>C-&DD zLh7w1V)SlvLt z0$kGzQ~dxXmM#Pr%>&^>jffH7kMxv#VyOttk$C0>eM=h7aIqL>Fi@(kXM5Oab==om zr#;Ob(um9#=SDMN*ozBr>N+hL>S|?KG1f%yn~Iac`lB-v$$fX{d;KkB{YeggtyckJ z?RPgd#FufNSO9b!9w-w)pAqeOM=f?I^2)p#?Xdod7mVAKAu=Lfu@`tJEzH6n%Bv!9 zwEGySb>?yrPw+`XLQQ>lG;AaCO@=QxnW%kDX*lu;o*^%9l;utnxa$$8 zE|Q?ce4xZpyrBCX4NsI~vVZ=PW&_6n>x7HwdqSu$TGU@C4OvAybF(Sf-aT7wn7*fp z1NSnJ#bPtY4r%!y`7`vDC+yGK)AN zHr|%l91p1C&|k=awJmU-0$_a5t#BwJf6WRwm46@7me6scVBQoTOn|r*rwCl4|L;y@ zAfS2E06qk7BxmG*#DKsV{O8D0M+V-)8wieU0a)5do$lKpM;AV`ChK5q!;KW9uOZdAjb{@P=u|BR3?`#viE z|48d!V(avU{m*FrHnL$}AdoZsfl(9qpV|I<+I$FrcCi2Py)@#dNw6%!FoqZ5zs=$w z|0cZ!9XD(NpnNUd1>=*IMFPG;1Q8Q67>F{v&vp|2{bB+FSwMMQ-rZ3bAOErA0O&>m z?-oF#f04bB?4H-fdfO*x=-V?v? zf)JuJ?nd+@-Jhk$CcN*{J-LVZ#2N3TFy**QTiSX|bIKVP6$|VJGz>=QY2MPSI*?Y6 zuIt0{K%*as*wR(M$H_ft4;P4Z_e(mhK~a5?m3j-=pE1?eIKoT$aY9S^CkgrQ!>3vh zIP_{3-Mq%OtAcIdn*&3G21S;{gL=FyxkEIa@COc6&~MhUX$cHR@Pi_#$f;*Sf~?m2 zGuEcq>(|hl@QoVEe~9Z#(%F_0t^_7L>MimVL7~-}M#itT=$X{GJ{o;b8hI57L?`sz zf^h!SkRzc;rACJ*6TcyZ-H{XDyZm3G2JWDc-oPC+HBWZC(rt&e@yNyNaUx0U(8Jiq z0<83{7_nJ#INP*?!2L-Ird44s;7ev}hbNwbS?545k10!8jBiwqyMABOQN>PYF)}+$ z5#uKhG%CRs7XOX$U5gE1Wss1}LFyict2L)8?gW=i6GRwI9C|E;nTvh*>bHlk z!lzeh_j*st968(Zk%IqPe-Nb7yEnfetO(7>$b90&1}e?R8X7I`!~_*~T;C!tJ$=vS zmUAvwCMGs#z_fJDVj##5LygLxFc2I~PwSP<_=(Sxtv{oix)6~O187@Sq3+VxOFbxw zF5i{tKeZeNZ!JJ*7x=;_Be{GjVeuzg^5?IhkeF;x)BCM-K;0i2u(owpIEA&xPycb} zVeYXb(TiUP2ru{c+UvPYV?zeBG}hUzBo-n#eN#eYIYV#xJp`SiRIn1Xh=(@Y)Sg0?#w5 zbOZMP{=k?}uSg%I6c%zJ)pfA)r zAoNo86|PumykKQAXm{?>;3sTd8kP~>;CUh3BT_#O!w-I^IspSICv_ea3D6lK&fKqD z|F%;9&>S*4kWdL(A2S^Y5>f4w`7-0BYJ&up-~4C22wtuJLoZ%TC@-Xe;$3CjG(vC_ zVWkOvWk6yfTKS`U-2Mhjzc(-5;FliXs>=^gL8FT>clHdDUcL8I4F0sBF5iyDN_P>l zTkA{E#k)06dkSm>GFb(fWUNk9iWjb?N?$LJYPl@$j0ms~Uw$$6rM{F-^{EG@2 z3o5teB(`w-4Vd9sCcIe|8>&I-j}VShPml=(UIT-H%^>wPiyXCZ5oeZR9GUImkas>k zR@@=6Iex6l&G=_(5ZkK-$d&g^5SJKFbgE${fl2JN+rLL^SDLv)yE--yPA=psU)Lw9 znYtbKGBOLO1<$`2*pwYm4u!y9@Fewrzd?}ok} zl;KuDL>$?CQ{)?Zxv^2vUoeH%tB~qf5y0a&MSZ+A+y3P2)Mb~1S+~;o(SeAd;~eXX z8GsS!s7zBna9Q*=dA028T&H(-OKRDnHcw{0a*3Ov`3PP=>_%VP_u_1PNPQ?zU9&~p zrknB49fc2*cynh53;{tX)*bT{JXIX%`Rqea0;Kl?zYLB8Dm@g9U{|WphY}Ez-Uc5I zi5N%AWk;c9I1o;~skVd+Dt4TexgauHZeY(XqEeUBo9g2#kw3L^qnY&rCWn{+#J#%W z9l4c~rJ+ksP%ALK8l7NZk-^()_#@}=F>Z>zeNEN^QfQgpS;f|7KOQ^HN6*}NP2I0J zRqIP&Xp2}(x7>T{TKki>8qObaU;?;8v!u{+CxBJ1Xf~SY4SE8JC((3ALSe347@=4Q zKf8B$b$53?O>o8d7Srz#(e79R-V*XRSGFtljP-Ev-p~ctR_GZ4fs|sV7-;_YKj%8` zIWPdz$7*)?kbZ4|v!-t&!5wrRCuf(*?Kr-@YG1EUs+8YEf8MSyz?zu4w`Ytr@cyj2e77UpE|w3~Q!o{CGa6?at# zskOD6&bog%-*FH*b=Xuz?O|9#&`&6|9A^v^RjJ{VVgQ0{<@)Q<>S5cL25O_BCDz+mrSt#i6oRoeC(^QM%-P>?QGh6WR9YFhl60+ZK zJ0o>=zr?78zU+ZQui5F<%ne~EeI`I zr?(GA*K>3xhdJ(KZF7#j4{ooXXTD+aWep+wIOs@m znQ+P~r^S%>ESek60j@eIb-SY!^o+>l&oVf?c#@>dB`V4YsSYSLO$~2~8T8x>IE&uk zAEmUKmY(SXS6Wqv9;>etYJ&a?4$tr#n(P!a%WfOR)O7pJ2-a_t1(nu)Zb^-|6z-KM z7z<}cTvrX( z=jgAL&p367^Z1w{ut;#Wc%)0rQq z>5s595ihiYZQMv>-{uGI3!ro)^6)2%g{XVWpHNruJn-xBIoEPNfRL0pb72R1`Hn?BhpN6hyQ?bsA*Eg%%Inu8%JZI34C zeL7P>Ku?rpj`Mod^2hpmU~Rn4`YDqQb1o5=k2KgIN==lzu2=f~;+PrgL4?~#L)*xAy5@sYh z-xH`;zq!mp9rcqjEw%5jN|3)f;qG6wVZGh?C@lo4LqRqrIVa9Cf@OHu%o@GT-lr@w z1iIVN>3Nrad2P6YA~Xd(W)x|jkZ>)%L}gDJHPfPVlg`&vTqR;YE#Py9px-YVy{gsS z2N*cTAbzqwm4gFDWAGzjX_Ph(9Mq6}`KRl+G7kl`Q$;{_7`TFs)D6%k*q$|g&fUEDB@mI>A1q2+jEc8xwDqINKB(JWVa8IGd@xJ+ zE(+jX5r{gBeGTp^YDZ%De7H%ZvkdaNm30L7Y`=L}w0Y8`%u?{At{=fo^!+oJ^BaQS^aE&&BM9K|N_ z0nYx7OCbS*co+#ps)O(G(V#$DEt>e6i#W0+<00RD$5?`|74cDeIa-2~agWv?y`aI} z`)JDJ^4j~<_iIkldYNocpu|6;EFbYdVWXcfIxr+4`4fX8fodh`!k7cdM*Ayi{vL=? z{rTZ9KUUzxM7{Z@#QPHXg#HKW05k;zZhruvi2$j8ZjOJCRI^t9Y?Q08B%DB8>c3)4 zVEBm)#GKt&-2d0Py#QdCx@SnXg!s2n{cCp^%mAKTsv&2UDlOom*N>u|zj)}yU_Tcf zU9Q8&zw0wA;ii8v(GpKNNG9p&a^bo3TEPK8-dD^N0c zy44J-vZZO!R}%0d$;l+vWVZf-*+LHUgr>Metr!T#m zk~$nC?$<5PRCoz433B4v&d zWY&AhAyI)g$XYJ>s=BU?uLG~>?lwKgu>K3~@{H4jkN|2qHj_7Xgi!>j_gFcHcv*TI zeu@BA;qTItPa%g(F478g=KwtTVWEaOosvPkW;gb6*Wb}Op^m4ovMI0~rb46&zqiOs+!ssIz2rCO%z2}av zCL?!L60ysS>>`6z>w7$@XAnSDpT{k032cTeHsRz`igFOI@=#^fK~a6 zdpc^zYUZy>hm0g-%fuR!a8jCJ2tpNDL=Ct6`~@3neXgfmD6F{zQ6jD=K;W~2WGz&C zbo;0}Nd|oUE=Om;ils<@nTKq+kzB@gH~p4eg$D(pz&iT$eCzo70t(Tv!~m7^T^;c( z8kuLP`=ytxk*-L&&}2K~e_?0x&VNvz8zlnWNGMHp>d#gN+IR2@+k1`cV9^XiRu}-? zJ_F6Tb8g#?ImA$#UU&p^9^#q@6G(5b-a4;#vNu6olL3hqE*%9hZ^fj9^T&opG%js{ zP#VS3LozXtlqI89R`+vXN`CqUrtC<#mtM8az6pbT_Yx{hXKGB(%TBYMz2{$T9%aAF zc!RF3emmf?&29XOm?*yL_B`oQ0=jtDPFGgYjq33(B3A=_%GrXTS4eyoFz*+hJN0i9 z0tl-vz6hSeB|pP4RJV@N-77t888l5TyJmgwSqRnj^GMR$KCHYbGtRfxPd&~uh8~NJ zRCR*EzF4v>mqz`Sp#RtE{iAkdUqMZAColNPklBj68a3V&+MYX29%3f`c@{3m(^aPoeJ=T`Nm6eP3 z(^luNDXS3BJnTT_kq_i_ZhRefsR;C#v?^wGG-(ASFL~`iy_m6_?GbbFl0#>wm@AMvk#S6CV9F+Uvh#0F+ zRFc}Qk73~=^pQu1WIoLLrxRB_-sJ{`M-ap#kBhIAWQu0Z)>lD_nQ`{7U+On>(^Dl8%L=ADlQm?5r znH1-HlWx#o%4&@aE5oH3$2uyoEvUxM$`3-Wu@+5tTs!@_pI?8P?pE7T^098wK@cz7 zn;f$Imv4?8=L)&z!%)UOIpIak5!{d3q;3(|U3FiSCl!+%?d`o@_?P(|n2ooHsF1u2mQgP;lU=X0;>rs3 zTL^qKP zIA3pi(9v8RI>*}P4?i2>U^#Sy+lJm7jkK;c8P*ZCbZmq;u78qY7L?~?hv85-+qkSb z?6UPO@+m|P6+8^GRhH}l2C)(zg^d^dY{Tr~cL=(S6{RjzMs?yf2~>+A=jl9wnp{g^na-M<3^r+X`hssSsK@?& ziQp5-Jj(^O(nUlC1M2bdJ-!o8q2SnUSJN%|&rXPi!)XT0({Q8m{g%|kvn-n*g_Z|4 zALLdo{Eol#Wd@%d#4G+k3Ers5^2kV6 zw&h980x|tDpWc?4ANI;DG00rx(|39*B+Re;+O`mQ5E54F{}ZD4@A`8gU^Q$KWfTR( zvB3h$wHx!_y3*$At|f`+ixL7$3;52Ab0My$>z|RN%_mMDwMZ}5vm?0#&byq^(gpiA z-aw+%%Gq+h+MlFfJ-F3#ULV z6keigP?VC0TvCQ_W#z)P((}Wx=OggU83=xmD(#ic-W`+|R9Gr~XiKeo&n$>(VvBbA zzeyCK*tf*X#%6bOBR%;f{7%Jud(-59z6c&kFZb zAcf*z4;he81{il!)uul@Ne%jA-E+EssZw34(AuX*iAt<#^{xEdxK`A8OW-j6q#)ll zx^v>=YN302e%>USK{U3*iEOxi32(Z((WtgP3By@d&9=@y5j`Jyec{a3UlKqU4U1tJ zahW&or7{?)MegE0<$rfLt{J06Ka6^3yF~8gNwyB2R)1{M61<{-HW9peYARbb4<=@# z6Wcle8q=A|Gi6%Qd9v=I1b>Rkl?W1JDub~q*t_2zU=edf_vVJ`Z01{4to9oab7{YUy%Q7!w{EoST4{XPOkRF49P;v$ zB@qO`L=mogItSY@*SDKykyXKCjb~R*t2_1lTq=JeVOE=+UU2e zG{ttjj@Ijs_};HPcl}ho%M+21akGQAf-!yTl714qGX4~9RN05?i1r>aeMKXefZ8e4 zI6o;bGMh^YLSTcB```Vli1FX^o^LS910>*9s5XB4s_oD_L(m7{u-MX4#(1Etb_`oQ zSNZvco$rMoST-)XSR|b*j$6$XBa-`u2brTQzCRB)2tyTE>5Dh z0%BA!PI}Ob*Z*G7et74zp^6k!I%V539-Wv(o34Zny^(Q&!^IHSz)|N;JvmYDGI9*) z!+MD0s+v(>IL(5!z1}C)Pg}|o-|?GuhHApr*FJ%{D`WXU$Ys?| zo0>*Yy$l?Frrdbh_3M+KZrNg`vVSY<`1_yG=9}N{z@0L#Wuq4SdIurFcZTFfaYypi zN>z0+My0ie$R=5PtAp2Hv(c@uPH>KlloYJ>jM7d3RN(|2tbN1X#gm1;r_FUV_nDw71bk&gyW1H&Wg2c#4OzwJ(88zJo#FQTeV!OzS-=W1dR7k&=Yta4u#pz~ZSyUmm? z3VP?avs%AwTUwqRoeFlTufHJJWJfB1QyR~n*J(h!A97&Q3TUU3_QKxSF&F4Ve*F>& z{lXVt@7F+0@A*LDeg1r##<~ev;4_}yW5yqc-SI@I-|h(Av3jr+zM&I3|G%5|KZOV= zU=@^Z@XAD^DH33^g+>mC#rq6+mk*~n8tP$d@bevhC~T#I;mZ=Yy|tF_Kk>5@7&5KE ztrHL#BvQ|GL3`NUc(l2u(_^AwKe^kjL@M=4fK03f}vf6I?QyxXVG~17#pq3VMx0j^*Xi>DgL!4)le5R>hE@BtU-`=j~p=ywt_> zUx67J0uls*1#boiqz#5b06U-=gcd%|nH3}{e;ToG%Ax4Z zj#V*i#PW4J?5e z^fSN(N?5{wl~KIWC>Q_DjKfD}Y?b);g93M?1Zsr-Qx5reIRv~GdQZ8biu*Ws^lZkB zf~kl5Wq|V^Arzr(*dsp&q6{_bj9n-CKdcOq28w(zDCOt=FOmRv`j!Ne3X=3Qz_9jT zEd2A3%x^m-ja?J_|7qpQZ=st155E*DrgYfo0$s3aP+pbbjQs}_BO?I{iHoOP10pwx z2TZLL6F`fgaXmH)`p4tsa=-BzKZzy?pqvT{kkO|Q5fM3Cw(m@iys1Kc1wBuw2D0h@RfwsSckRkZDS1Iik@;^|7K%XGVA??IR(RWw6v7)helOhs zU>>u}o?@APXSO4Vj1da;=f9CQx9^Q&Mtd}Az%w_&BH*&a00>*0DIhv6F0gd!74#>R zia;ga-*#6L4)EwQ2>g)1X~*CS0PqjJ?>56MmKzxC+OO4sRe6C>|LF?&4`%>M0C&j0 zqsavBzzqvP5f&&FNK|Q+bGsg3lmJ+PnOihbe|sVza{kt&MG=|vM%~EI{{2SXK-npv zW!AR==qMO?_}+9j^T=A*H^%*qRTOVEP-vnbx`7Y-<%JMIaGwP!DEfg4j1C{(#Lu6j zTHhu8y|xdakI36E{zEJAT;Ngej%p_yZjLnZxgEOBz^IEG6dC`qb_^=e$}J2D&A0n1 z{)DiaDGCSN4SW+sl zj+ePU&VBt#E|<->s4=po5tsdVcSlT3JrwRW1q^KCPW_>R$}~bAaEXm}cKOpMoSP_2 zSobhbeYxfAV(i|Bwwxd)R<o>o`-7|H7q^1=hsM>tX}! zHz8kGm;IlRB`6#K@EXwS=5Gg!gMt#jexMNxaUo93!h-tN$f<4m{PZ*lOxC2AX=5}8 zNQvyXom-wDuPR9hVK~##u4Wksuc2mmh&kvtW}Q zn&G26+T}D0uH0x;;{$nW^)h?Z_k4UK-<^(1f&xXN(}y*huW@ehqa>a)g!iU+FwW?` zWNL3HSf(Q74N=o>Cs2dcDuc6aMfyQDN_N}+;*uiDn^p-X9DO_T(qQdgw*vz)c&MnT zpa7ty@l727GGSW7WaF|(p;&LFO0U<3^CqcdVmQ`%_ooZD&o+A}%|Gy+Lx_lqqT=I6 zk21C*y!iwTwJo*cZ)kqM*G5NWlZ?L@F7SAq5nsL4B8!G0y~|0}`veO>ca15lAN7-q z=`|${lXa8ALt3lB2gjv)$(YKNASSS!H<3pcFAzq5m1)hXgl2@VAaAkkRwMi#&egY5 zReQG;M<9g-*=hQG;Bj+vQlwO`obm!xrFRF`L!S?ZlHp7iGxD&v%Uxh(ffCblqAnw6 zO01637D%_#YA$`m;8Jl^2th37yf4Kz<+i-6N2V$Mq#VlI^ZiY~3eivj3YCV4nDb4_ zoWU05UjaK0mk^`{UFiAY8eSj9nmj-U#>3020O-#Rt*Nkk0l+=`fNE$&picJLeZ?^> z@6LKdCTsY1%+#z=v)1hH)bI7n$&Y;35<{UNU4hr9OO0By7{?a?$1PXC(|6zkq&A|Y ziD}&lVcK_zdZY!L&-A-aay4zT_xX;Gk5Z+CDVufdV3Vx$oyj<7*@7q7TKy8`w z6Buz{WidsHK)}NuhUP5>CNA2gRIKjqt9rvx+*4`y+7i3I`qfpnLTAz8-kqM!pbLa- zr=Me9#~7l0rN$Kg=43U>ZnfpTnW%^pT)rt*t7weDl_g#z#?;!g4?pU!U0*zJAHK-~ zRR$GAI25u#`IT!XgVnW0UA18hczj-4|pR&l7wYu{b90{e;{o?SH z;w^=`%d?9iJ`%u<`1U1sryef#-jz~c&{KZch;PwtgPz_f>5Mj*8+=3}mG>9L{t$f1 zmB|$a#i zbHCzO0!-yWkyNxYi8G!oj?M;qwz?wy*>lH=-Qu5Nw8`x(b=snG&xW-g?=lBCls_o? zKd!-jM~P8)*bqZdkS2e=tcDG}6_25PDZ)bwrp!|{*$)X)v&Bl>4rwCq(}|WG`(}dw z{#_8iQMh7nU&1tYm7BR4cvPx~8#@f5NDQr}F=m?TfpSPMDhs#c38@hi1r8xnJrlf` zkELYLQnwjrs$@hM3=!?3oQ{*3tbu?vwSG7UBi6f=tVBhAYl?p`?6CI> z5?|06R0$hB7tY)De5dGR0b0g9sQcRWH zp%*JU9><%&86s;BSN2kU3d!$`hUb)Tx=FB=!hYv zfH=TJ1%K2DfGPS}DT^@ntLdt%Ep=6CR6;_+2!LO-SZ(3xczHOKlSK#gW3@pyn1zGz zkL?km4UI-xNAr9pqn#ez1@DbEh% z?WXL?)}7%BNtrfPX2j2nuTa22n9Z++pITV?bQ^Gm!JgaC`+lrC=&pa?zx{#EVRj_o zg5>-v5Z=Ev?6B1~Lm_?RfD#nS#lwZ%J=^|eOGa~N<4X*fT|$S4j9f&>A@XKezgM+* z8)_NrrJaY2$_18!E3=spn+vu;g`0>XR>>7pk_Q|-g~isI@vbS*>5VYrmUtmstyE5n zvs_6NdTSMY&|Tp!H|2Yj;F#99L!4swK45#7)#G9GXZ%eJQ?DvNu2C>E;#gRo#3Ax$ zT>^p3b^-t~PwX~@<9s7c0Vd(5>B5`k{^GAn{P=Xhrb+ia1B!!k15p%1B<4j9ktJ7+ zp8?aRNW0Mva-Y9da|))Y+8O|llxPeJ42(|qc7M0${uKam+FS4JthU_*8pl~|7OJkc z06^Zmi%}-W%^t|qR`{>xa=g`aeI01YfbYNkc}meN#?O<3r*duMU+0_sf%~ltqO*s3zofI)vq4pgiRfvN3$^KjX>`% zb40l**Yht#JY{PIi2H9uS@z|;~^WULKq%CaIMbX zomJEKRpDBQ_LY+SkAK!B51h9q*vLh|ydA*~08A1*J&?}l8$6d~c2`|9Kvv5Lwd?o- zmVANN8@`Kc%3695BMA<#8-2&!7JM&^0WOG(?Q1LnZ@e(X#4a3de2 z7%TPe0xnk(?ez2cbW09Kv4}_S)E$oVlL_rA?`5T#L|Z5#!eyFvSX}?J5$O$wpCvC;M(a`UMZ1%l?mftq>YVvvZcii5B}c@VR44l7d4)lUX9R;f%%CH(k!zLzqWMT{i(#RKIO ztAsV?hgxZrvJ7g&V_vHi0UnA7sGz=U5|~Rr*tY7Kt$zyyk1B^V%8Q;=TJwgl9GqcK zK-(@ir^)V3{z_wB4_Q|WDTwg!jy{;}EB_5*mAgP6KwkLVgu1y^J*D3E?uDZy2*;N8 z9TZ$G(Vs>_puI(s_>xo*0CfH1zb1Kt;ezU#zkq{-pUxiYUS=6X)AE73-o`~n z_5dtD2TtGiN$Y7S)GIs;OxNC2!8Eu*3%rawmBmsWO-0id9B@uSTiuRXBTF7%+dMB3 zGyx2t3D;7QkJ;n&rC{?VhOSC2$B|#}$5sm%<)!3g#K|vp1%eVv$mtlx zs_xlb4DeG`i<`BBo2EQv(BbAaQqQXP|Ilw_yh`{WZ@Fv`!IaB*IIM;@cfw;hX2h#j zCIO;4!=V?5%0?o;InRJmPk7nksp9TE_!aaf#ZDlW`J8id0n$CrD(?Gr35igHA^QPV zWxzmv$yUQ=xzfiJ>AktI%XxgD59C=#96F)~sH(EHQKZA^KtmBagu$R_cYkcbSrSiS z8MJciv5Cn}<8{+A;01{TQM3@LSLa#N$sj6yT$S3lRpe z@B-H1J@MNJYf;T&^~!8iczDf*^U)TKrKOs5`g57^-rP&#AhJ}Siqrv7KZlrp^$f&Hc>w+fD zxU8q>Iu@kbeClod;$;gO{6?Isq=~MdOYH2|@U3>Wm0_lSZKd~J*rF|*%wV(cv41k4 zgk4t&@{+MF;JJx&n@e}jEk3nT#$0qNVVpL}Mr?H}63F*G>!(}j?nv4~afmOfs=KF4 zr4k_L$H%8-Y9@`OY}%|=;aWxHADfu_SK?5ADhd!ayG8FOGdO&y-REU0O6@k(eDvFT zf}DZ55k7UxJ44SNmo`SeO85p||COQoT>8#@e)x(2j6HX|Le!kx!XT0Uu!shfptSkd zyN$yjg)LPj{vm9yzCA}~(%$e5>JP@u5K?&T4qGYD=4YYw)7-v{Sm3-|eIN6m=0Drg zCZnVO@sWjIU>snDUYe>g0OG%+%4PiV^70b;Gk*|3tSSJ2wN2a9ZG6QkbFI(g2zbqi z6@yZI*%xv;4*9)q`T*ZPjzlyxSNYo!+0<^|htv@lV4C%UywEmCk$U$?GM(euhA`Qk zzJtSf!hv%MZ|4NUs=C>Vc4TWaZI^5#VQQ}Lfsr1AHiZ&DNRJ7BJJfKg@}g{#);tT$ z40qniUAGZ=cp}G(m%=X_jUibgmF~DnU1*cy0NS>U6kDDh5yv_6;-(~vkit62`Dsa6 zmlv&$^ma=68bqOI++@=^fl{loQM!Y9grr4JqD-lne&NM$Ld}*69HE)<7SGaZQPmg) zG8FTz)D{GY*3cvxDUkRI2?WT%%(iN@U)Me25m$c9q;t%C>`0h;TdJG1G!rO`x_L73 z$VLjI=lT2>Zjd5f6)9|B2R~RHx5UUqI>*mS^DCEc ziVbDwcS=cwlJA}mo$h7YZA78;jrE7uk9#!YTX<1fYbdqbik zLWT2csxGFVVQQrVd<9_QSK(alL+zT2WKl9d#}2Z<@^S0CeVqITDO{73YaiC4@{%Qd z4)pB%LtID`Kl<%oYLY~~c`QPj#JMM90Ms~h68SZVM!i)si>wyb(l}?LKOI;}rr^U~ zL5;fCz)=-0*bIDbRZ5cu&<_d@y|o=D$QcNiE#QL-Ai{^?&d9KO4riRxEzS0VX@XU$ ztxWrU_IJ6}r9!)#)RXEjXoLf%X&L$?Q86&fWB|=S1Rfi=_G_U+mPol){m7^J zg%>y(A#+uZ`@1H$ZAJuoE5%6yc9((I!W>^#vuBP9f2f%;S((K8J+D~tttyDzLq^mc z4l5tw&z&~^UMzN&o|XV3>#eyYsTJC2+wUTuY>FsTG^n4=wi64cF_$h zgRtEXMR#^~4wKUO=yu+(oEMEkCiYq6$@C;66( zem-f6?>82vO`S!6fvpI(eq@*UJZa!ftWAC}7f3Xs0QKr_9Y?Q?VwTX0_g9?pJ=)Nk zPNp%-pDaW`jeM@zj|>T7_G>UjWDwWXx#y{LU~@T9=8nR#H|2f;-x~)3f>z@n6@}|R zW=6JzyHnIWvgud!Z^cMDsqi`5$q#&t`Q#@)_^`L|i&Y2Zo6kT_E9zd)H{JQ4TqShc z$TBZ%EU@9Ix322a%kSQKNzd(5b?N8t&v(-A`Vpys&Y92-+|bSYsh*d=Lo=Y>E=da` z;I|h$zWsc&^Q2^tr0%+8BHPVvEZ=$g@pw>LQ<8{^g_Mt?&UY0TS9o170t%)K9Ss4I zz~N4geQW!8q}iF^;K@PfFkF_^?98>ilQC}6iuUm_zeA@qU}I=sLz6b)m(EI)ny8$K z4O%|aULyF=O;q<*`PLPi%Ej03pQH>1J~eqd(CIK%yncu|q_jm!qChKTQC&-aM&tF5 z_!HqJeuc<<`TfIBoc>QMH;`(v)BmnCrCn!XNX;~w%EU$bE%lo~RXMq$GQ?GDfi_|+ z{(CfBQL+!xNrLuKR8L~X3P~GozG#z-qjC<}v|~d$(g*mnrPX7JUWS)1(+ggFONtt7 zPC_YS8k4oE3=y%X5gMAW9hRq-gM<6KxZhrLvI@!1vX8KcyH9!Qo9Lg@FC*l(@RoNd z3K!y&erZLxF&0=KXor*ZXs1{l@xBW>^M-zh(del(=}r(U)^>>mN~-c$&GwW@y@qxx zw6yqLINWjOhWZvNU+1vFuaI=RS{(tkV(xdTQ>W{?W@ctQGV6M{lcr^$-@i}AV>Gwv>huMi^a&OCda73a2Hka`AmfE_UG*b;HYOO>~G z)L=FHEk+|*ER(CwRY4h>S z?q=tAUMA`w2uDUVq`4K3J7Z;p1oIcE`DP+9=7;l@T(PP8zRlDZzMfXuB{8Y0mxJ3} zuKlU6gn1kZ0HokNJQaLoBvIee#jLQ1N3 zl?RI&4eRhiNk>p;iz`{&1p6&z?9jVLj4}eS8@rie9W6g{B3gpi$sMwdfBI&|M)%g( z4x*ytF-3OxQHq9E4BF#sK{6bwiYq(Oc4)U?4}LIR%btj5AjE^`!WULqd98IP^jA{V zBzi66l7h(#S>u($7LSCXjtn$9Z8ut;s5w~j($@8|FD*3??hj<&SLGpXcSjTXH1Rn8 z8p@@Rm~Ns>NzS%=5_|f?r}1Tt>~g$$H}gvbq3zbBxSMWOj;a=ziyc82dTXC?B{k|^ zXAV8+OC~x44Cg3Ts3849G(PNm2d#Cr8dJls&ZvX$bCAvTLlrk&N^E95j?-7;=|+;@ z(YYCY*NB;%75a>(2qq&0o0Q`ZG(rfnmFGbu`6Hv`Zgl!Qy45~RQ182dZ(vzwBni2q z<`TEtEV80UkphVg>YTmA9+#^d=OUpvckVz z-niD|4+=in>Ta*zkMD^wr27p8wP!hELz>NjmpZf533IrVOnWGcw+V6XgqxnO-?PR@ z*9pOqWpm4U9X-yc4aP70TUY0rzP}Q9@zz zjmYtBqeG>djP=%!qDMMuf!~ZuUWy^g52u@1aIA@Sy#Yn!JXxX1&+Z!O+BNGAH=Y`O z6x`^i6Xkh$L%f-VkU7&%!^0j$Q>Pezekv=KoP1ASi{8y({GrPqXFf7~k0d9+f)xk!GERyNS1Wsu!^s%(!Q4N&GY!sinruOpUdBEhxaR~m)v-2l0_ z(tkod*ZFDIAaAd-0#_6!3cG3SY`AlO0Q zzT8?@J3I>*lV&GmG5Ox?TTIt|edU9ceAreeug+*KVV4(dmUPyfT??#V?#q`XAK7YG zWN}o!HEVjk@b!2;OeW2xG?-okCeu65@@eOv6b<{{wr1R9_gbWreT2XeeEO4KS zbQoP7#GABm?@vEOmrD#{|I`GB=SFFmdiNL>9wkPsIV9ti(uBpHiUZS_xhgusNoUyd z!8){?|I0RyQqq(C042SipU?sosR{-^KI>pkLb7!d@vYth5rK9KGVcCK$6P6TtZb-z ziYW5ApO z+hD&FkX&h46)Mn-J7>r&u#T+E5D(r@{Fo3r_wMx%6AUjBvG@@_k2iTh^pA8!^~gL6 z%&GU&=H7a7HB3QB_v(V5oJkX^L{JaeoXVn6p%|Y?Jt!X3|Od?nF zhB9=*5d&x2K4d{GL8cXwY7nFiMVSfNPIurBB+Ni_XLo= z8~Ra;LSk&AEQq$+f8=Y>=y7$huux$Zyv7WRyHNO%EOW8}^izX9_57EOU2$z7uw!?G zt^Wk0gquk$j4C-A`4XY~g_P%KJtp|`Ep!x}#3R->yuJr6a}h;&F&@>G3=|upE%Pg$2}L`7%GIb>8oMp`7TH+OvtH3W$!*@7O&V z5ZO#-0n>qPOHWT9i1eQyIgC49(H8(;7?!b3AXipzf|%JZp?}<@1INU|kE-43X;z3W z%Vx94bk6S@R6Qt>(m|a_7U2H=bBUf_otucw3{^~*q62a&C)2nAe8cgYUkZanXYu>S zz9p+ItZ2o|rJtOO@WzuU#TNgvYpO=Zr4u3aXhyY^&j2GeBljhb{84(-HKF#zXU{4E zFGdvwh|yX@=wr4J*?Z)}8pKwCoOT1tAS}>t2;gNkC>mGH}39f$`Pj)!LW$Cr}7<#2``Hoxy;LbyQGX> zInY9|Uyoy{YuMM*`KpYmDn)W6O#_J7WMV0XZvw zEUtaKq7j4&s3MD=$eLr#>@W zElUoDz-6nb@?su!^vtSMl`!*^YskNieVYWv`&b>ww*prcf}PO;Zc@~ID zw5xUCV)~)}$Fz8(hZWS@Mc&;COTJx%1Kr?E5RPHG@Bxv5MYda{rc6P7p%yBZ{6mq%mu7p{fS^Amg4%Z zSO^XI0dA(`z3L2D?#>FlA6`W8##JNDp?C7zwg#*MERf`$!eroGQ4B;1y=LHSse13t z)UDh-CFAW5fG;o0RZ~_m-c0Jbo3wBz^K4{uiF#GQLFE0 z)CyhITYg7@_l)p&$(oRr(U3w0{vk7>%Pi(MtR`W>B=OoXBd?b~Yo?yQPNTFNQ#g4c zh!^IHmFZT4R#Rn1#=0{6QqP+bzTYMEC;nwH(SWGYVFq8eq4>_7WD@M1_w-57WT!ko z1_lNaD={+>Zwf=-T;KrCWI5zbg;r>w0#%;24#-c|8j}vg@JN_qN?tfkXGW?1jAr-* zoN3UYPYn`MikoWj?}x+AQ>n2(!o$U<5JjOsxQTn)V3ZkOQoqp8W}aq#gj4&W8~McP z;~+AcFdYX2@*gaK2bjd&5j+|uD)998LSiNmfyZA?Vq)v$0d@d%a*!5c0MRj;k^|m) zr-L*;^SbQC8%MI4jWI8S@UQ}w#tbPKC~46*Dx#jY{?cj=8t8k^_d~UR0~Gp>MYxoS@)LuG`P;k8m27s5%Xs1E%IdC8hdV&x>{MN94`dpxwm0mEN3 zySeu9A!kJ}&F?&=-g|>YSibKOL|~~#L_yDp^MO`Yk~B&XlU`k^6C?kw6>hCVL;~3? z^+8%(LXUduU|!gNewS>TFs$?t>TkuHsRAbi(dVYn@L0I8U6b(pKH%(Fgum#l(T!Od3tXEceS7zE;p19mfkADm=5_sXGAc#$GF8_@nQj5*^C@ zK8?kKHN-%cFRPJg(O6NoiHQO#w{tCP0&Qe?ynzyo2CInXJrX>u$j@<(G)`*)w?fDW z;&;?`NRlX%zah?Thq@w(C<_cW(!&><5Ug)0Nr=yp%N7@*o?9A(EMBTHJ((1OMzZ&? zRwtRQDCR2HqXK^LknwW7gKj(#ex`gzbu*yp&`XInEchTA6m6UKa%gijiY#H^E0E8d z6TGQw#Bw>WX(8}S4q^W%LM!%j^y%EL@zJ$H+u5}9yH{!oLfF1IaT7U;{A)BJfzR`KE~yGf}`Unh4HqLo-0 zK?QN620kyNZ>aOX$)j;s(BCa%8I2^8S!hsUK7PJHF^fPW<{)tP)eqiFiJ8jN3+}zh z`(?o{`Ik5@$pE~Tl8mB;LO^fCP`8`)=dIn|bgp$Q{JyFY%l(bl7pbAAwNx;$c;(64XwmMqK6&)pkA!frCpg=~HqOb{HD2 z@x;$&H1s_Far`-C)CgLU$(?#zdb_n{{__a}{Y6T^t4`8exjh<3cVn2r>i`DYv zi&s4|yvkFnBdX8w{}GE?e%n}dAfE) zO9r-y#DNbJq{d7S$D~4med(4kJXR@DDL!rz>IVw#&a7}vM}~c6btI9S!hzD)NKLns zli9m-=ku(vw4y>YgJYsE@jgA$X2~szx*KLSj5WvitxYO2DIt94$8lCO5VkxnVs(4W zduS;5q;x&+!m24)AhHG!#N*Vil~DX>6C02EPFdAZ&&9Pc{XFj*@fmh*s$F{xW^IF; z_8fkh{KkT-{&uCMnmW{O``Q7s%#BUwPLVge7Bf^dkHOE|pC_bt2`;{v=w|`n@Xahr zd_Z9=y@BZdefp3BFDWBv@!n!SON0GNST8|P6$2R|Kab`@tra+u>!^sb7&^k{Az{gXKrt0*;4{|bZZRu(%0iUTxs1i(IFYMEql*hpngyzkg)awUl&Hk$ z6))a7{!h$K1shZqLStEO_B zLCC+;Rhe$sTWdt#!mrrCij8Fck@m8PW)Qasi4dO3B)q>zYCx5)(IGa!`wI8jrw-oZ zc4$q+c)7smNUlt?1%qZW40YNFA|ni%SeRJZ4mlQs=w;Ht<(Lg5%Scp=>2uhOg7i@3 zGD0~n6`A+55xssB`aUpvv#din?dpdUJ$zZv*@G@gDCp2c$=dsbv~qic+@T?usS%j% zo>d%^-B5o6cFTF}?F`psgP7rkYFGXg#*|em1&gTMDhC$}cd(ZFXv}`3_*FOL*id%V z(&$bUS{4G*5YYgLqOrycg4?o|B)l~rv^v)}JuY-ix^dTBuG>2|^~b}al`sINs-^LH z))cp?=q=p>MVdf0lxi7E`8SA6n1#}fWPTow{d=0<3>3EM;Y+O(~fMB}f$$ zddv!RjDQMVEfUL1S{qqp@zm^N6mnx)6`62l%I}a`5fok7<&VG+b>}{D41?X0815!P z=uOAtNi`#glZ84W#AS};4gVig-0nZ%iQO?IXXlV9nXBQ92^` zh*=WfO24F1O;9!e`aR<39A_|**IPqCye)unqfRi`bHDHR$Ao{82Mo@q$CtySWdC*4 z1)v@l4Gj$imBfB+P#JKFjz99#2FRf25`WB!Xm_-3W-he-CHFcQ>{-#VGxXjkx49%6 z4=s*voFF8Q@;T65Pm8v+7A>v(*+FNnwnJ@&U z{8DdVKEvG1xUWGe2dbrd_O7-d${8 zqjjN#+pWAKdu$BF#EFc}$}n2pWUsR)q!UH~pRBMoCN~+#m;Hj%j2%)T!Z+_20}lTztwe3*ns(+CdXXU;4ozkWITyJPj4s7^2fd6ce$7UNlArN=*E z{}~%Fw99W9>nc{9$OKt{KP8}G&=U;naruMmM}uE_dW~*!*?8X_}({y6dOw;fUwDL{@@&2yK<^t5|`eu z^514L-U%lc9S}=lFW_2(@8RR+)&6>*7#tchvZA3t5AjtlTf-D$xQ$xQd9=&h(RpK~ zly_Lsq+9WjIl112ic@6I;^lP3;k z4*xplVpXtIXz+k7EVy9U*#(-;^3GGe!%;4Pl=_S3Su5xdoo0RII>o!xO8R#wCUQIX z*f8*hpe|VY;^_h)6-7Jp0dAhQ1M3dxw{xkLa)wr0np)hxlFg z|ALMr-Q?cmjzttg{$pvsQf@q`&v&Np0S6iF%n&Sw;sO{vrUmqVSm=OeaM~X9vdtB% zVuQlD-4wPwxSSL!R=JGR@VSpOeNwOvN&HQhxIOEsK7~WaT3J%IJ=Q_H%r9X39`>al zYD4>yp7Z^4$sb~Zg3a0+?|@Ib02KkSGYVjA=Hq=6g0ImF3mVb595QOTVBHKLmJQ|7 zurqF8?2b1x_$>_+s)LnpKmN1nRiXiVhIT;Sng$4E!NX2M-vW~mQJrUq-==s&BNO(~ z6lQMCK{R72D1{vjLa?&3(xM1<#Rcro{E=6{UGGRhT|v)!zf^ow1ACD%Snu%3jZaEV z4MRB}j){vK1SloPzGLmd0}$p>Uy62ZS1^U zZ-ZXn5`*KK6yxv4%7OYTi}enEoW*uv>r;%VNDcrEAuOI3CYgRO_c(kW4z4c6J}Uk~ zA|hbfelMPqKL9(bR*Iomu~6!_Vsz5_x+9c`_C~1 z&e{9ySZl61=SoM9(JdnuB$5xubPNj%%e#wb)(QY6$Mr~QBu12a=B!4vtF?#PWI;?- ze+j@4bgjuZybu@4qi|l_2q{ZZ~SkAIw>ol&T3{MEn+fu^_>9jWr8A-)k5=}{oDtw_qt9QK9}aRUdIEp(??%@ zjC)G}T_v){s4E)akXTZz6UK|em$w{BB2_{0pf#LZgQ@j=0=i;BCjT2ikdInSOHQ^3 z+&>zeQbjswSnbkK|5iR_J-uLlIuv&ca-tOWgO@;v`E%NTI=d@j}` zU|xF-@LuH_)r7U)TS-dqcZS$l>k_^;&5J%)yLAYDp-tm1x7QsIRdZWwh8@NA=%;|; zQ`5;N`pK{~e0?EjKDQ#Je{r-XB`y7e26Rk7FPO~viG@NZC!LuMrI%Hrg7@;HL;_6K zV+Yd~^Jr&As4k{IhuV*rQQ*bYgqy6qJU89lKnjm5+Fjnq>yU63O{n6CxC{~_dQ&O1 zqRS-aRm?o?qI788vD@kb*SsTtOwPBV-5kesSIOLa_dnE@Ap*81h)=dR zK4qE_700BOtYU%_?wO0G)=$EsZFU|1WAxPn>n|oZ&oaCm3UeCoZm-yldkIrr=iL*9 zyk9m0MHwT}FLRw&r|@)7o5Gdh2(Anls?mn2(`G5Hq)hJxf=wx?h@8JOZVc zQaZ0d!Styc62y~E?VE(xRt)hHy;C2_h7B5#oxXCtcWb>f|HBh~X#us{_xQ*h4BB^ojY zQLVlWCTT6(zD@YxguBfIJhr%&@UqZt6+=kvoS}Qlx=OCGX?JwFjPiF@WrWGl;Gem; z39khznEn?hoUAysdl@fuu}hT`ci?`KSF?Nzgrj%=0;dWDiYR^x3%Ym7v-S2Xkr4f{ zJh^C+_jlBpRnC(7pzo}DolTlMi+XTz4(AjFw^d>zV{$oEfNt@*l)HA1+$#)Q!rKNJ zac%8Xyivw6p$z94##Xt6SeD0&qutVHtsGcxv-;L(J0f=08st zVFyPMJ!;3engm9E1Do1g4?sEiisn7kkSz5oU?iievNE#ayhNkw0Laj?K|^bkGry4> z$rP1T>NvskO6wVJn))4(qka*xTSP+8;vMCW2a)fg)>|6`&+SECpSv4ZnjJ*n`46ZM zj@-sS=Z&VGeWI1AFd2AQ9WSDc(EWkiz%YBiarc~8XE7Q{b~ZX6dvZ$Cd6RZA-#Z(88obV~5Ky)ZS}TX}vu|JqvRVEf%$89sKp6#PSR^EJBl=Gl=<(dzk z>iBqkil@AX1t}h_;8|xz zZ{%>ix(*`IwZr=GJn^pck*#`m=C}8H?vjG0r>hrztS!7-4KMNh=N|Goe9aM>aW-L% z?PSI~(ox}ZuOv@$N4;1BjFifb)X8ev^$g94iyv2se}N<+%v zKzFm)ook#B(DUj%Z#q1S9il8hcK`M76yLrUY1fModq-prv`?fj-lKsdG8m-luLGH? z@CO!U&gMN?>mLf+EsAtmROWl@+O?u2^1HGKU91u)2NmyM4-Rn*2`Fci?V$@AcAybF z(ED=#Bc-=d9L%c>+jV0Y8Ass2FDy|n`{-LFpl(1o^Wotz5Y~kK*`7$@HVa|{Y}{(I z5s2%8HxJ8?leeyNj}yEAQTI^DZs#QT$5v6XEX6%oT-?qJH9hYd25IcoYu~#w-}Ngn zU0eG5jGai#D3@pZwh&i)QwZuowm8~;D`-q+)X&-#N%rCH_N;{^q)o-QY>?yQlRj_I z5Cf~kbl6NcrC=8c-O^@{9u4*fmGgV zXo4W;ZVcjgN1W9Cp|E7}Q{Km0N%VJ5klkzSrjpV0>4qs|uFtgMZCm;zIF$k71cQf{ z(R$sw?QQWn#liFV22}qcy-drC+-_Jhe(-xnjCAx^y>8YaVkVvfkXWj=+}7gMzB4ON zqa5mS|LKY*->yuwMuyqjji)^HReRGf!yJZc-GiA|0}4U-;$rRwmw1jImH-8yE#vsW zRJ44g-`f-K$2dM7Kr%b%%IO)s*KnjjmtD=qL>`U#Q@$Qwbo+tBl606O z{?c6a6D{PIru>7}m`JDXO_ewkIC1E!wS2P)x2Q!#4X}MQGc2T7j3Vk9>lxy^iy_}x?mscU*Y~uQ(goaK z?8KSW1u?n%GyMcbPlqXt8{`H?mi4X9jI`qE!7!~YcKe^2P+GW5w4=n=b!Sa}0YG8K z{p{RTvn7yKF3iki=6wjXy@_UB+7}4)6XSmE|J-n;Wv?SA@uA z;a`%TBp>@v$Z%$uyJ6<_9b>`lHWK2lmI;Bg*FPn;+QnQ5a9L(_NY}VB(t%Dl3JsIYkl!LtEO(% zUadL%VkiH(|DY;1n@Fl-vY;n7@pE;3sE2DnrB1qaC|3ZxvR;EjE;_cEUU4tYz*f%y z-yuo>D+6bF9YLM>*MJ~V`$MPQnu&*XSd6-}1AQ*vDhBQ%>Xv%WlobSP`WHi2B~V1{ zPYreSzh_#CYlNMhW!zmq^SSw>M$lgd+9T5z&Dym;pgl_Em=(M?XzaC=iadUfb%>G} zHiWHgyjNu|a+d=w^7CVUf7nnxv};7fSuRJ9{MxToo(yUSTANB7zFA5{rn@Ln($Dim z(iwMK-9w)B7}bKjtfO6R{G@Kgmwr*yBzIlcVa+*(qcdBd5{x=lBHcC}4`!xW1hnsc zH=^^L`C-dk(2wPAN<&*(iEvh#m0g?1vy4$aW1$zP(P*`{H9YGb3Alq@7wzqP?ITNj3k0`@BE0ochT_>5eP$&ANX!_+YZ(=Mb!BKz0>S|TMeee255uD;7z6Hd> zVcx~imm7y)A?9yl@B38o`xI#&>%vIW`FN#`7qfZRYb7l*htZKUIm@aXo22f&!r z8H(b&=hbSOqKfCF#&@+-H4st3+OGsxGWt0f;So$j#rfsA5z{``v*DyX*^xeacH4 zQ@HtZxTBl`e%eC)12)n{Kx>3$M#-jdTeoG4M~Juv``lc*dp|6j9FvR<%S%e9)5Kz9 zFEA4SRBZq5Yg)3lq{|1kypq#!oFL!i;J0L70VqKTxvn$2^IY93_SU6cslq>)s!~`k zA9is&`57{Nl!#4bKQ17^e}h!kxF&sKb6sbcDSi1%!s0QqOyJ!$1TVO>MXfyo=WV)Z zHwDqU@^y0Yer<|~k8X39bAJ`f&6hgXXkkGv@^60(V^b2gEqG~<3ON6Pp%fuy=m1sV zB5CQj9?OeL;?Wb`rLu2^1~A=$JFI*vXz8$vl1I79^?kw4maj1{(4X~+F}u_x?*pM) z3G4hbS4S4xTfo{j50IORXD(5w^E*=4{8FdDTn=TFhN(i|6+)<}NF-hMJHrKimvdPq zmTD|9h#K9=dL|R>phN;ox5q^w605b$$f<<#gRhx~jwP4$YKfqwCBax^hR=%x z?8)u++J#&xJ`_9N4*2{TS8Mevi@f4+_$9Tvw%)*~NnI{|#~f#-!|@l+sY&pgz8#9=WSu+&rpZ3%0ah*}V%1>vKWYxH`OnQ?5)ndm3*? z3Ov?5Cb<2xd{@CGr|Rh#ZTNFvcsYudWKrExm+U*YrZaR0-Y-;X40pWZKkmI$JU87T z+tWV&t!10U>`!K$;j7kHq!qhubp_6k`@YA&OEiqMi3H5M2!h1M@qWkuGZ7JB30q9u z9BrAAX{7s)ZZKt}>z)>qpS?BxCoyKT9<*?%#kQE!)p9@$-*{M~h5*TmiTISdvHq;x!I6YjUCd+3Ai z9%azz`^XsVgN5g=aLYJ8xZaVH+FY<@%0A5Z?id@p+coy)3I3yi_InjubN3JX`HM#^ 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 z zucC|KkJqza#1+`_sT1Ip#Q}0CYC*v^D@&@*`7}g!4i44D4P{x`gkNY$#>RJ0pxWIv zJ^jXsbZ@qlaD)TqE8kD}KS$!9i`#ht$42A6KZvMPSW-k@sQMGPegECnL8+oBBaEKD zeyKhl17La97emZN8RGBm?mjePs7Lq+1uP}P20@e%o~FN0lE3fqpNag78i*vDOHNU{BPltNBG6%;ia|iAdJ0I-YEJD@ zV&XFX%Ax)&3>dr;$$$nlYbqc@Uq7Kb1!&mwyc0lK{uE$O%3VvConi^yz~C_`CBxl) zAbExQSt%=VBeAHj$0s1%SpJDv> z`2+8efy~I)?1m4oF%Sf>18A>UK_1rD)=VZH9^8Z*-`Uh4D}d|+yXn(>xh@hRA>jys z2LrC8@p`Zl^f3QS^#2OZ1H*8Q&;r5|H@y^cBatKYAMM+3rG6a&90XB7`{V%FZ3E5s z2!H}^NLE%>?X;nuUJQ^cY-W2OCqV8cll_f}DU;zg)Bk`l{~3XG9poywbsbAbefkLy zC}iIsfVSQ$Q#a;F6(m6J`Xq6d**H0If&SAX4h{})1#u25YipB3q0gy({_F1kx?E=+ zwh>`~bzYxqh6o;Z$^JbBE-rP^jXba^c@YLegMxyrir`$For60%{P9MBn)pBa{-5it zzkABgKAnBJ_z2~I1B5?7_UJr&1F*dltJqk9_CIg+36ZF~q5jZ&Lofk>M$6d$G42Oc zz%>r?`fbxYU2y?Vmf(dAAZTry2}VA32b@7`0oPVoSlG91%`GkBW(a$Wb<9B7G8oWx zphy)|{}Q73YZ{ZtiRh|DEFZowd-pT9L_K;3Dr+L<`JQ9gCCn?;Qo>R6S&dBI$CRw_ zL?_?3g1(+i!(Xz#{2IQZ*c&ck^TnIw%%HrRex>R@-|^gT=Pzb9*X#t(rk!*VZG+AUges`E0vX9>@B$XB+9AX?K-_#A7Sio&`dL z5^6q3i*OJ+LpDfqd(~zIb6Rmh^wS*$r z?NgNHThNZ3rj*^=SL>t2@15se`K$`hx+X^aE7oy)^Q z%;ZU@!gpJs+YnnTWhLGkHErs!J%a!yO*v&K&Ju4m{<$8s>aHBpFB^E?N>*rYMlH-u zxS#QZy%8~2v*Gu|fCM$CWL#_FG>;1>NWZy0a4+%CMj2R4o9mG!_r`6|mjjqypG0J3 zQQS^eSu&t;Px~zZ<>`OvPsz+A8=`IOH@B?QVWJO^!C^E(^*QS!)T%KnnPPCj^ALxfwX@EpQR;-(%^U5EayJ;T_wol3 zLL;$+45H)_5X}tl@N~J4!Yw4QZdw*K#%4phYb{^+-LjNL$kE_I)D9t@@R$U=xo=7c zm3(eE32Ya_E`6+Wup@K)SL3DvSR>f8`ZnWMdxmLbRfy2AZx1-h6g2aFp-b#9%BH}p zCDKYW1U_vCxb%WtgbzMhdD!%aFWoIFMK1T|Fx%}a2KnmXN!@Lv)dF#fh^rSGok%%b z`3r&tV1*xdh0QP$kn~q2%d|V-(`>~jdftYYQ?$j7&p(rFszc|vcQ;<4K#15Q3pi|B z$~)ph+$h$9?9N_SJ&G}TUG0UGWyx3VC5=0>e*sPGtjD>^J5UNC;k0>Ee(LvsD35dG zYeT0S8mKneV%4j~5F;FLvU%*dj$g8Vv21c}yl>5B>h1%J{7H2|8&l%EA}oe(n!mqei~WI+d)DE!4F4CfONU)j zY-o>yx5LXBm?|TZ{s;tZPq|24oohjw3XrM*vLTrY*lxIWfOjbF=hqH?snUp4SX}(t z3;h@fX#xp=9)j@Mp1wj}P06NEWy8%ri=6&9<7}PH50Mikuth0cb{S{L*?th?kxVaA zy)ES}k1#mF#ZYl#cQ}hdkYSoDB2xZ`J^an60&DK|{O=9|_saqTw-X(cKLjZ{$YLe@ z-l7X}+G`GOOjd9o`=6T&c$_F)0*)iuO)&zfGoRVmL?Z2lm+uz<+Sa&)i|b%#wYXyh zZxx>ImW{)1$F9*>FxE!)`y_0Uz0&3)Q@lO}#v!F(gI!od=_MEwS7LTh5w_hZ4PqOs09vbDbo=a9MNc$#(M1N*y6nxs` z#j2+VWFy>i%$<6|AR0IL87H%#nldyH+IEi+`@Y#|mF7Axx)Ofa`2wfhCV1n`$-p7f z&iW+MiP&WJT9wtftiy%z<<}*i$=UI4H@F@@~|;P$=^G<==5;?k$edr;VL!1rMq6 z_yA9CWzZcSJtY6;=B9Ia7*#Bt5VoVYTIMz_I~%k5zH-uXeSJM(WMsrEGQv+10+Yb8 zKE#mI%UszS1Qclr0|Nu6ta~GHZUABPf$caq5E@#xfiBIIPUg%h--Wx2TS=kT0A1<) z#w)d;XGo`LSp5Nh8w=MzoCLlJr3rk|;Kd zi7ylPvDL_DF7#>envE?b2?iP=&b!kaB#WeN{9&C#qKF6C1(UPxc&r*%@(Q zU(U=_ye(kFS1Vm@Djh>Xj%jhu>+p*Yq#Q;tZSfTy1(oGD^pux#y4F(Ii?KPh zQM`gVv|2rI^}((yK&i`tmK)Y}cjJ`9R@6t0uhj_^d!m?d@wQpSuBKz}hYfDQnV zw5HZg=^cWRkzpSItAPRAhLy0xLz^M>wVodM?ij;DIIviI$=3FE2=Mcj2$mYY6Oazj z6?Fj(DIC{)uM@BiaC!#@8+AbH>>k%$57)ngKfER^UG*cU zOa85Nyqqm09#rLjB859<%AOhGrfh-bv9Odsy61hie2Pt^$Y(~^FMdFRelVQ-n>xz( zd_PO8^$J^RMUYUi^<{+K1Mlmh=gFY$IV@??yG2pBMjYB+Ql|FE5mY<3=VlD}`6YVN zGPAYc?L|BZjBJey7?YUSiRSRFJ_#;BEM6ksHHj&1MF~x@KI>8zw(F1I^_pyNM*m$8 z{$W7Ui!9iL$(Zb>@}r5m#MDCI@v^|7u)5AOk_W#u{PPYRdOsOBdBO-Y`D-O3&H;Ch z$UtCQNh*ox*0X*zThz0zd_}Fs0;CtdYE{Ao zk;$!M{GwvMOhwG`x(Z8NSI{kN+0F%e9k_V~o(IJvF zf89Xg^O!xcmVK|AeCISwt+Sma9{tzY6z<5OTqw{LX^`=F;8g_iDd*yMJV%%L=UNzE zL=PiDd`v{cPIw7#RZx+*qfCvWy1Kqs%eZ2OrjD#)P-hFxa(r))qT>5BW4ZL1yp@r^ zD~=RmB&qsP@Y+AhRtFDJ^Basx=WqeiyWbZB7Q*cxus*~Yt3lb52gnD$RtkwHPQyrm zn$~M#rQ*=e8e_z{9zbOYdDJ0nz($vq3UuWtzYeWQ@wo8FLZl~B;ai5 zPivmt0zDT0W(NrVW$nb}0ed{9v{7q@<^_NKlTkf)C5L?@Sqg*`x*!9TVKJ8|hC~{8a6Hk9o-FLJ-xN=W%n!8{wc% zbG0Cv400F$Ole;-C`TnIgo*N%U4d8_gJ#MGv$c%DQYC5bz zNSI;Yx+Bg-^*gIzn07qFy$+FAmXHVm6BaVVaumM0IK-P|+4G!fsR5 z5gNA4|4bX8VfNj=(EDfYJWkJ)vR4_7pNF5 zSv6h?^OggiFH+C2=92eCu*g?5)s_j31&lc@RlgQ2AZgUD*-zvpXQwG>PgVrAXboNA zCp>@s{JC6I4(0Nw#A}!f`No(?)9*Gg^W3Nn03+Zjv`m!<(1+2Pn%->sgLO3`!g2DV zENr{mzm?Vz(8cNP0iml>^D!<2os~6&<1GM zr@rA6w)T2e$Y=>yzxj6HccYkT=x{tpO*6m3Q=J!O_VwjgZ8Nb1DigdJM!D}-N%58S z^+l8+<`WA|NmX_jO~WLw>zYgT2+Pa8s91N<*U#!s$%%x zeVjybeb_Kp%Ds>LFL2;*JT3PMH@z{Dj;A`||4{kH>+Jkt5I^*=O#+&&zj5FPDpCSd$DasR>=*K?>TY20B_AD~Qk z0<3>u;$><8ucxx<{l@SA57+w(=n~S_geqys2*9nzByk3I+>2`9 z0vqXnMVVBvt&Yx**cPE)#x>brG?MQm>JL8Wb2Kc?NHOIyV-+z$bcZ#`hnP7Se&ni0}o3-J0hXCB*zyAN9 zf7~!2*FHz+6o!o-F#G2{JJ2Afv((y2tSvMA`)VDW0q#WS=_78e0R@@+Q){aL z6M-~W7PWF|DE5Tq%fuxOv<%iijEhIary4LRJ|q7;LoP8kJCcbl;+qYoS_im8xv6dnN@YOB1f0sfpy%hCuN*%w zlmB~z|KrIfS^+FM*HaKH8{_}_Kp?3YFtxcs%PcU=;gtd__PGAE-Ho^GN%M9|&Qqr_I$&X7+ z#NB_Z8QR?~hD;}_t`2@OpaB~BYyox4?&T(Dsykan$ENB!|O8R_hX@lVYID*L;dWA>%6wXsa-~8Ja)DR1RbPeD3o)S`F;Bs znU7!V1WgUF{(HDZww~UCBZOpTaczy_%a<>MLqno=cC4IST-5-q3IRmXDIreAZ>S(qIZp%7=61((r1kV7N(|xucmZU-Y>0_LZw1t; zQ|V76mne2pMN zjI!2|BNLQWhYQblKg%oJKKTF5oW=xz2;@Msuko8D?fb_5K2uvSU3tA24*@ES;hw3`2PUKo*# zY3-(8q6s^ZY^pDBC^nRssT$JIE*x@fYzLIq2t4%C{z*gs)U*QWX@E&YFaE=aPwk7k zT4uo8QjI4Y^&X&bLrWLHQ~3pkeO%{o!kb6iROaV#ZOmBPip@v^DWpP!X@a5qliS>^ z8fp1z0GHzrnUUvK4ixjcs*GH*dLx~;H)OR~E={X;A6v5=1S6tGsi(bP%i23NE>r#Y zM0vUqjHjavvA{|jKNRLn8;4g6Gztq@% z&0cI+b&30c79GIGEs+Sfp7_&2(d$JrA?Eh?N|oXF0yS{CA`X?yOO>(%mI@YP9FD(C zyi5TO)1STQKRcz=(?M8(^Lh>QB?$(f>n~bG6*EfgY9xu=mw9BCn3C!J7Td{2hGw`y zzGRbaS-Y-^@*tmSEhhGQd-nE4FGQrV;teM&p&;43$ptmNuhKepI8pL04o(xD(?bL# zYEF9cIFC>UHgf~{q|&)pxQ&?*PP3nBD(_HeBo5(~HJ1>DHP3ERqL_u@`w9zXN13EN zn_%r?Njw@~wz6GF^nDvCSohAjEyC8IsBqIbb*c+Ku}i8#UxgjCz;?v0BKMutEQFclB~4@(DmEPsf%OSsqW^JD~FECVSQHC9%- z9U6KTLP=V^Xs10r5=6loHNJYtK(^Y2AbTDjJtpe6R=uOfTD@>vq^+uta|DX0m@?JJ zR47A_&wi)#u!E8i8$#=5XZ_3j_-5qr6Q|Is)62O0gfk+hhF_ufiRjuhEDO?;(RkP0 z$`^?dORhkVECnbCaKkl94Ypnk=#$an!ctfVsD>{7jT5SqOw?OD?ifQfrLdWD2$t6<{GMU@ z&nBPzq0RiAPX-bwuK!9Di#8xpHZViL{(&Tc!vwRkvI14hEtOTQy|}mt&dMTx@~#E+ zi!R5@O**dhQzhZu|Vf0GzB2l6aX&tD&W#^kC2e*C{|ub)%Fk5-bdH zgY~At<1kg{ziBr7q@t--JP<{0an@JNICHr`*s|PISgX}=g8MsLt}EL8x;vM(j^-{p z>(*WK*(>GJ#g@Q3cC@8b?qu44=u4j~d}F3+haWi${`BP<_>-)xrsX05Nh zVU9k|Q*?-;Cnc)}Tx*hxTG?G4VtIXB*H+VeakGKUO1Eu1*3mq7&y|#-83lbI9JHoH zr!lr4^)_&!kI<2#eE~Og#RYnFk3`v7Y8Q>p0lje4PVd;pqJ2j=uagrC=43G8bc_X~ z(pb`#%8$1d}nse;4f2QLV%9L`xmpeO~^x zun@G=V4oISURG8}4mr@S2o8pS@^&CJ^ub})C@U$3!47Is;RJv)>1H91({)5FW9j#> zpFdbC^EY#bAn{R+?B2m&qcFqJnX40Vv#aAypji_7tsGkl2sKFu@6sq-HIPMg?b1S` z8{yh%CB|FpXuQI`yJC~k_GuSRcvEFsW(ea&2khDSLqfscxy1)TY)Ac-{?UHScu@i~oOFZIkgO2HlCY$mP*Mf4n5Qi%VgGLn}cw79*S$vH%Yr0+9<(M1l& zf&u{=VdDAeCZWI4ujCSAazy*2OyT6Zn=Z?IwHEn_n(?lD6M=V{=>!h{a$ovF};xOBqX?iaf!5y=^ z0B4_ppd;~>_CzPFrL?d9(u>k-#3UTLFQ2Qg;#|-hO=(*z@>^ySrVPH6jh0Hq`TPn0 za#cYjSMKGiG|pS3aw4FIC4erjQBlUuO~`-KEdce3`tadHvZ6?+Db2JEDLp_4%vwQ1VKqye=>yzi$ z!$B8V^FR;8U6y+SxayA2zO(X9*17t2XLMS}bbW2GBzhX~S00mPeWv1d+qkoY--CuDhF$`fsz)%p;?~C~*&^ zq|e&El_qm^Wz5a@4`e7n`PV;aKMa+N#ER97-T3Wl%jtfpv|`3|@uG>425Dp8?O0c^kn3+D0P1%H0)+Z6BdmU2TJ`m z!IxQv>$CF)eIHB6h|cq?J%3{M(xS=NNP+KsX7Kxsw)#^VlQT5;EoUPhBWfxrF*|Gw zLo2+tWjH!U4eAeXgHY(V9&=V!|cR{ za6TC{Bu01YyRVqH12J?GOeKxzbZW>TO0ZaNB6GZQ%gn*GzRiSQi2p;ZsUu@yfJc5D zQ;#@RGR&*!(*!IA|4aVx5ZRz|Y(001O2dVUACEfYk^$`)NUYO#-0R0?q1sz~vrQK) zCddjD_)06^DVK@rDVp?7RJs>C2SUMg58_s{IB>pc>{#eW+sx%`f(_`>W18bel$`uF z3*NF;2bQH>;#>Ul#O|F@V1fb}j}x37CX{0&rOz~hdRQZpjQSGnJx9{Gg*=G1gH9%4 zwTR9im`}!jYZTJ{g8Lw6<~3m~_<_yu@qjrfO)HvF>}E}ggLswR9U(7tpJY1>>g|He z#Qe)Wsie}deGH@nhHXMAD(Y)|=<@UcyunV-neEr1tDdCa!oF7V{{l^gihTVXkpKS6 zc6W-HhEiW*XDQ3Dw1I(WN>HbSt5eNI9$tqNJv^!tSA24MNNpL}9&;uB&W>u;jM}zE z5j7Jp9&tv~pzL>1H$Pb4*Pp&ju9XGp;hKDBJhdd?{Knirk%mvjm9bU;l0dkHDQew^9Ys;ZKg~APD+ZkJFx= z-8j0Y^rZaQ*bv(*?a#-VjtU2r^Jih1U-fSQmkF*OzQm^+*&s zkd+H^IUkK1XQbwOIOjV+V-6Xk0;HoVRFw0F%IO=|`+F?fDWfmbqB} z-gJ^UapHLQ9SxJjSGzeL>=)sj8=pWk4!w~AF$*C0sfk4bPa8QKh`n7}ZR zhnS1$OM+@$KBJ?zEqcjRU{}|+OE{62$jj0!M(4m=Tbrkxb~xOs4!Pz^r}Jk#V1>{y zfg9NaKLrNFz&Q`UCAsshN=>y^=joapLLlMn(gc?AneF$}jcaceh0XS^Z~O*6POojK z=Qq9|Nv2;#p{V=a`J?qOdQ)H(f39--dC2iU; z9*kR#mPZJTCzPUUTZn)@EFi=w=LCpIBgA;IupVoN(eaN{Nv8!vU(BxWha;`uTt}Zi zWXmKccG~>>fdchArHaWnD&1jY^imTcTOj<9U-h0yxQbb?j9Cb21+K?&z*l+W+VW1H zEmbth8W&aQ!V$T7#H}e!s?R-M{<%w4^>tVJ&^LBZTJz1wrQlnN%&u?tV-kz0%2lkY z@Sn?Moa~=VE=25mK#rejK_7K*Zp9EUB`G$XN8h9iH+h#+DCb>*{oSXho||+vHZ{HC zW3(z4y@C6Cf3Ed{bCriF_xn-qA4q-Y4>**B$-cAxyWuUB)UZn9TyXLH?_T)w=oxI(2W1=U9FALn)6eOY>{Ju8?TT zuI+NOO@WV_@DbGg=vS_sYhN$)XHbgMLHWq92~C_2${1MX2w*O`?)jSn(?g-{N3Ex0 z!NJ-$m1!hvmLEVivX(JIRpd+cc3pFdpQ_GF`?OlPN%Xz112)!CTkFjj5J$WaDIV8K zi3)@QLr)%%gZ*^}zl~9Gz9#k3Cw^RLCT@nIVB{JD+L{njaoZpYJsi?33wB}wqAmD* zT(0;x@lx%#;l_eDLai^M&z3z0SPFBG72zC&8#TPRhh%dx_c%!0RbFGARH>%RX6S4} zmm@0cvm`o*mDg87FF3T4!mtdX=oS~Do??<5BvA?K8bJ{iqT6>alAa8jKMIZlmK;x3 zXs~k=L_r+0cbL6fY^|}M>BF}gC^V^4%ZQa8&jktWmHVnJgu10GS3@_2+q*W&8L<5! zgfAeQ?l%ga&nWy(>HFR4dw#PVBxG9W5;4go7aDdKQ$WKhl&u}Vi!0~nbdYJE5hmnY z0?sU}z1@T-;b+@Ut=}M&Q>+v{yC+aA&p`3BIqwq_CnTgY&yzP0u|RG4NMk=gxJxM( zr_Hf-7qi!V%U7tYes(VsukE@f%~+(yePC7u^|AT9P>Zi@-4x8KeSJ zL5umEXGO|Nyobzg!xgWw5^`4ix)42!ZW*Z#0-d6GbMsb?i(hoR3pJ=k5E7s+#r4Zp zhQ&~oA;~eu8|q6!WFm6IuJEh9kBxNCKCH-)XK=lWxHD1m48<3!$A!Ny{f6tR$9zCE zX!dHnTTkOMMcEN7fpaC18CseW)&6|sHywhs>4%={bP;Rn-2AoOJ(~L}ma*88dqqb1ILVqhNjZPwrfo(}*JF0GzKv5=UKduo z!Dbim4?FifWp@U>b`O-IOYP>1AjAeCa#-6bJBUG9ze<`(rhpTfXY#5#xi3le7k$;T zncS@#-gN(QBUDz)048RF&#Z4$+Ko{2~(9=9J&l#iMp5HE`aeca;mRQ z?;5)t-jZxwbt~BTZTm_TfeW}EZ1MJ$Bu~3doZ#6LMg8hJEWt*VwUl^~>hn>Xm_+4# zTdR(y6QylPQTqKo#?wy8+q+bcmmH{_n`q{XyqUB~{-nWV-u`jj>-7V>h<_d%h6K;W5Re0Fv$K!R6~;yR5BEHO3Ww?>tdfrYpw!chi~ z>~WJfN)#6ugDtDv%&A_a9Xxka4RI(d)<5WYzA0aFDot3F-RLVoG}nhJsM44 zSutQ^_|@zz4p~jhP(+H@w@&?0QurOn#CB2cb-wq7PG9xQ&t3|@`+QZOduWi5M7GN$ z7_)X~zHKCu34Lz$NR3>$_x*65t*#DeO!E0wpOHyO%Qt2j?Rj?TVBslM7S#QC-C7Cb z{c+M-hKM{Z<)M4nm?s9-r9)D&{V-n34YaS%*Nfo* z49EY*3h8q>u29Uo^9qKQKZck-mwot|px>bP3&>RVo}({bodQ zx|+E7Dpr~fHz%R^vaeqqY4Y^#^Diqo5qyQxWxiMj1SesX?R}H*dHrSZZC7eVS~M2v zm%&^W-rV3e@;Rue9YRuA*N^JW(r8iL06c4G_)o$Wj{DV$_%~iEblSv&vXhhyczzaN z+E5UiK7!2c7v3m<3c7Jt`eVbxIftDl-;GHP72C zLxz=C4CNFT&G97BE!oQs)Z$a~7hADPelrKssaX~Q_lB>$jkk3vRI!R+yA2W;~l*{ z4i(#)l+~}g-x|X3D%WLyW?UPsu8CtP{k?97ZNAPrf?tPeQ8N_AUObgm$oF2shS~u# z)J(>)tsz(At_CDkGaQ(*9iQ7wl-k#Dn@Mk#P=#^eMOtlI;jpm}gGS)UyYE6o^gW1w z=dEzKE!$dJBt?Ep%a;|QWBwXTo+rl>Q}o?Ecd7F@8K71`L_szS+bxN~0*dhaC;vDZ>>1YA&xiJT;82J3GN|lxsfDo44=Ap3EnEyz=!NDfr%+4LPV4L%0v=f27z{O8RYrd zL$5`V$}uX`pN)-;2|lig+3%06Zvq>xt|%|8c9V~r1$M*jseu?%$-3PgF0Bb1vU~6W z6ZOY?Zr%K<7^hYwRi%46<+z|={VfxGtugUlxJG9!U5JuU`u;5)7@J*b(Y&V2REPlf zEX4jxM0;j}^hVX-wz|Q-vVDc=EvwJQw6lES3JU}7*eL&Wsw;{23q9h@BW4dG%hs~x zseU)6x=II@k`6YeS#?p#b5;%{hG+}wDfs4TyDUZ%CF=F{*{JOHBa5B4mvoEGYVl&u zIC3Q1a>R^Lf%Wa2k-M`|>I{|LhlaJT9dbs}30dpBsQIrx2608XglS*u%|o7j7;GeK zZGf;Fv{VWoH9ZDOFMNq97SOllmaFi`W{bXcb-F^l%IOagHxDf$u%sW7`j;FkG5$>E&n< zHg_JiU)nTB$I;YjUp9Un!u0%n@OZqqN*8t(;A?!#h>K4Gocxa^zK6!!*|1hVDASN1yS6V)mNkqZWtlH=fp#bF^^>;Y}2`| z=UnQROs=$-Xxwy7-H3t7f#yS4(Wk6TiUyyip~E!acyPNrN=r*=A!yA1QB+l=z(B7W zHB7iYeW}3rH#bHzC8`Sz_7oDoIyyKt%dj$#x7|`foI{nZGU0_~ViH=&pRVex_gpu| z*Rp*S@58(|PD5R67AS&snHtsfB^Bv&$r-s@RS3YUBy9^bJ|Q=AZNaP|(8gLH)I+m? zh;)k8{-O$2z(|B`c3w>armemQIF03VuAX`z-KYV#b@VW$K6r5 zpDZ(u2=QL;j1AxKrv13KKuYz}SyrntUE+ObiJxzGZLA4%CWE1mYDgkoW_EZJvSu`9 za-uRg0cYLEht>QI`&#*ffhvP;Gu1*ZTFLz_(C^IAIQEiFjdoSI9#8ut*aZ6HCFEI3 z5FM$q@mQf<9nuD~Lhf6f(=K_#7oo$`_rqV!=Jo`QF(0|$PJg=q^n807A3YN7U+KAS z4q=r!!WrvtT$!bpZ@ayT)QUqIDw!j@1Ev;H+GIrhTIS0K>H0p3i3=S*272;F(#~OWzgW!|h1<`qYbma7F_hR0Ca3kA||ckYQYQWf7{ zfUDdbf|LU&%1V6=5=jF-@O#BHkwOoA&^VcX+BPLDhmq+Gg|8CYi4j|_VL?5Cp6vP( zz+(GE zz|j*=LqdrkLdx~vaa#n+s!>w9;YiZ>Qf`lKGLCFNq_$>bpZZ2u(R&@&`xJxe#^d*F zPeO;VI}k0^xXgxUESA<>Yb-S3Do%bM`kauxzGk?-9ywl={f?;qSBX(756C0t-On{3 zV8b@W$X;?`fwX(32)d!PJ%V}Y?DsnQ5R-9Fu9q}~Ks9WJb92jWd7sm3Rlc?Txi--5 zj3|PAbiN^*ng4M3mx=}isLto+SxniTC1xhxv42FW=Z8LJ*u{~4MD}!;CNojtW<(b zxTQ;u>EU{P4Pl+8W?47|4*7Ja!gz$+}5b zM}VKJmBGYPb1b93BWp!Kx1^}WCWG5(i%z{KX`{f748N+ygZztoXJ3UQCOeaB1@5=- zAMYOt145!;nIpiJ_q~UqKHIJFi=K(!Fjp^;Kmv9HeWx(UYRmCQ6;oKkse{&|bTjFrW&URh==bAd#uC@f*w2>$SK)3=rdek8q-0UqA0>zi$~ zsFjDH)u&$8x^~~>C%;xU7}oh*S)a%4NGIA>kXOSkj#C5lDB0)#X zT7?($Mw518%h%582$uruN{?hit*UMht-p~0HJYu#TPY*R1yY{z?j->tm0e?27Hcgt z#Fg{>TfBSJf9K6Cl(f{jE*6_Cgzx`5F<6xjn3QO<)mhpqYHGr7G391v(scs<9jLgt zG|ooMih@@N*yq3Ksz0H6OQ?R+-^NBo^^c2-vm`!-ZbESs@O|ai^}hLHUgfwq*6Lr# zp|c1i@J10(cC5udy&6$_(&jI~!-ak&_>c{5l)Sw>;K@=JD)cCM-xD7+IA^u;Jw`VF z_l0=c0e)6$BH^Cg$(QPfc6X>gX+01WIe%gtIovvvV)v|66IHhc%w;;%PeylSTmu8=Bgfpcc4x~Cw>g_djZv4?Z65!yVV%GWU@-V?{8p8F*msFI*w9wVZ#{Az-p3);~5uH?twL9t^bFxL?US|9f3so1v zDqe?37tTKmU7ZG=Ff@dCDUk2F+aY$KgYpb($}zHebE>R`&_ZX8UYS}A;`j#Wm2c%vPgQFT4Vp;#`*0nO>X&$MbI3j?d_fkgMVK3GhJpf7fnCw zCZz5XxOK8RN_DlivPta`eEj%v6Chx*io)Nyd`Dn=`bC8h-7iqA)WB&ll+i_!0PwSbghu>k!F*~z;-Jy9?!%Fo>dzhJ$)SFP7^TL6z ziJc!T#4AKsKMV9m_8^vMSB~w8Czw)_V{Tu)+~3e4L1W@44-_TNSk-saZZ}sF!zgq? zxESKYlj!q_FAw_i<5}eB95T^Il-u9=Lbk%2_YHbOI`{U64djocaqo2IU^*r4Hv#{p z&F6eH7_DEPe`W`ksIZ`Hy_&a!DjIrlmVTfTwYub~At2wrY?Z@opAj?lV4wETH;ww-3RY`>*FQ7ubdlw%jEMx@l&Coi6424{c-wc5iU5?YM*qkIs8V z_>n2Hp}=B~LQqHuqbfpTfJx-hlIMZ@!Q*rS4ih^JLQ`dcUHEjHvt{gZ;egT<;JQ%@ zkVy@FChJB;chM~)i<<*8_tIr;0zKgRHp8*+dAIL>d=q*X;Fe^&WQ2piGXP@e6E1dr zj`lu8Smql3)aGv;zN#IPlJR0w#&O{-I+`UNa4UFW{%lB}U!k*)uv!x0m`J+X&{ji0$kNIzS3z0(zz6AaX z#nrvYSIv5n$NMFrUKhrpk8t(}i~*s8K*MmHrmeX6IU%0VPI|KV-eC{=!n_6@e?Un; z1r~x^@^b;M?P5_?S}`ZHJ8y)T7?nML_#5b=b*f%2!mJ}v9F`gF+n9FX$Q5U1oj9}+ z87U%`Ww4Bt(*fQ_ zAPCMfOWxqn_Lg0lXSjF(mA662QFhCEcL&i=Ar$W?Tg4q zo&WbW6-K32faLzYLR{H>%=E44;(Vw9sC?ib(b_<%C`0~=05zWiBb|t zEvQfsBj!;#59OiM7IGSv`oAxs>IwOL@TbiCtugR_zU04O2}cVHLxDI9(i#*0{nr0@ zYaE1NK&|bXOZch!|GeM-^OK6?D2h~m|DXRp{{bw-v)jo@fYjy&!8pmjLE*?Fm>G* zv?ga{ScvMcUcb8x0W9viR4`(I0);J`#XY@idVe-Vuduf1j6sKKa9olTcB?y!+SzzyQSARbV=>pZ%*IdVuacFe4iY zhfbLX80k}Bf#R0mc~dL^GldMS=k{cEymN+=U71W)158*_QnI!Vr)d>;kZ+22Fd9D; zFv1u#vYjp%fCC3fJ{kxC^krmB5M)Hz9vvJwEr=RS6OTC`QqTOWL>@G$Fw=_kzbh#$ zLB?!8^RfS#P5df}Mn#q##`GmUJ)IlyHk$_Ab2=XOGAD}g9M?+}h{rNGMh$&wm|ITU zj$~UbN8{Q}uQ|Kf5(a^_i39-hGeL$fz7wlA?<^4Y3wOywMP*1@2;eG0`n4rqxaPo| zmzpR+V)*0v`87j{emH1zQTlHjNkCC=w#okS0KhbO{U1!hamSYHO*1ROlIMO(S2qDf zX&ipHnjx2;0|V(#fHQ~gm7ABMO^)+|MjprnFj~anaVToGqFQ?c`V4YQivR&}k>6Jo zx-%bE6$Cyn4HBNs8qef{!Q>o0Zzm4a496-4?x-(V{y{;I4S*H?ucmMKRsXri6gg12 z-OlsO-2i{X`D0;B8;%!xMUZeV1O+N+%EHeFs;c8s8WW_tby59SuKFvuA7EN<$0S!X z%=+T)?harRKr6s0x}uVse7 z@JD*5;$lukK>`?_eA!z>j1YDwRjh;rvG;#hWdNi$rf}h;mZ81jsuhZ7h)>rUS1`exA2L_^Q)6)Q{o8$3598u7z~d9P_4{*E8QY zwnGd?-te=bXs-3Jx7WLFvzelBRLU#>*=F{;jbowu8?wa(O<2ou-6-PhUpo5VfXzs> zOFMu>E7pa_FDty=*yhsf0U1(=Yz+Zii-_p>al=@QC`Dlh07&)aK{2{X!K0!LR<#{d zvIY{AG#7udA3B}#BhhT$d%E$@ztQDAq6dM4v!`|gc5Nb(4*(mDUAEmC`|c|7!RNGf zf9&yU*)(_HU6d~L_Atqb0Q~{aXreNt3kbzE;GoR##lyqHy#ze3JEzRpRpjAk$5F8C z6%GJvM~T}D_VR7I!564px$UK!A_i^%CcXvy6Ny4EhYBI2dsx8$*@7pr?1YEot-;R? zKv2EI+ucs6W_Tcdv5^#7$TUI;=$fhTmrrGAyJ_Qv8&|qFw%blJd?xnYe5)T&aWBI_Z_43 zD;DS(!in|N7%XhXCq+u7LN8e(<@TWd|6WfZbPUGUPEvdot=%7Ne@O(i!pkowu%+FNze`@J(S4?=;@v%vp< zw^3mfy?cR>lfq`7*M&+g)9ryXAUeej$z+=XQ&D@%jh2geOmDC71!v%B*%&jXetZw` zmoS(bi+mVH?XmV{*cySwY~B@io0CDXNXi`-CY<9X( zL{(`$j^|B`OKUKI=)@%sy^cI3EN}tk}_FSZR0mMug$CcyCd~*fwRMv zs0dh89$IgFzMk{_MN@(^Sp1Iu~E}f_3|)m3=xrLe|fyJgYGD zP9!u}x@#E^SPicf3N3&XP=cgI^|zn`m5S5T)%+FRH6iMIrl5;YObRIeJf!}~M#)Zs zRAYv7Qj5M<4JKblm9mLR7fCHt{{S_iqByln7)RhCn0O3&&8<8ji~d->0}Y?dQ%^6^ ztAf>=Fp4o8SN-*-Jgu&t*rxl49Rt}(MWi1c8Uw4v&ThcMiaRdKhcJYEK~=7IfRsLm z7XiP}BTr`utzv`puB;9Of*R(jBd(VSoGQN?hIjA2l(<(pH1sn+7O`2RayK<+B4~_o;XD-VFv?QW6i-X9ep|!Wq@|>%!q%@B;BFS0^-`yc>q>Ab8OG(bfPQ z#0yiDD8cKcsthR#_5K*aHr?h1?p}j!!l%=yYLda9wghS7IQ<#tt~9^CxchA4spbO) z-!4dU2On?G{6T+OKP>4vfA)1}oTKt`0XuDi_;r?)b2(hV>9q$}S?0+%*(SZ2Ez=YyE?-kz(<5U-2_**}0&tr9Mb> z=NL}MzMw`1m$fq|ri?BP49A^|DU+V1(i_qFMt!d*dmiSm`yk|9PY`?(JE*&-Lm`n@ z0Xr8H-qW~Y)tAyCa2a3T_ARt-J8u#O49wlTz$k~O+J=_#(1pK23q^W??3W*?U-lb7 zstb7lAWu&$Hf!9~FdUx347 z?*?FN8WF@Bkwk_9|Gt|FQ-d_)tx5Wmsm6Q&H>_{$e2?8H4+OvgVdn!klCkWrVK!N*2OIt&qoW${7CES!oo3w{7N z8IdoRsiRdPAFnMiqmwr}{c~B{w+2}R6yus8W`(l-G%}S@QPE>lUL*~VYi^fruCVV7 z3<!ViLdn?ZZr1ubIINA&Bfu6WBsHwwc0t z@_oU4>MKOqC`I>i{S$0PoERwA?GwsWOfPPc*5PSSbKrXl#a*a{j;ikN!xY+F9W9o* zx4F~$fHTL4|Lvs)C0c8)f8j$NRb9eRn)Sq5Ei@n6w*AT>mD)93@y!=QNNOkDRw49q zwjfUxFkud&!-zx8h7L)w!Yfq90L|}H!hS1n1CiMH<3i1#du82afyY1dmz>rsX$5Kk zD7%T^zC4uZc6N4l8gQxuP_;wfZt;>Q82X(q@2+PRb~^9Y`yr6|6*2G>$KNdH$`vVi z%fbE75LMh|3?OVGK3z*-#)PdA9BXqTBi#KQekIeOlMEtd`A(QYg+=1Mp)Zb!#hm$& z&kSR}nqu%Q#fCEf$4Ps(1l5J{8HtUm6Gm;j5@-6jG~c7g8uqIslXv`j7-ct>W}|gf zC!1hT(x1Zv-oI#wW@(`k8$KZvpTrYjLGa?BzAi~|$^6gFuLqr1QWescA^L?dWIWP8 z;b-39OKM=nDVs!Mi_U6|mOYHJlfczn@V+vvMxO5#PScVhTe97f8V-RG$gc*v?`-tU z^to`ql_8+io8k)Q3PRcLN^bs@kB;j$gIhQiB>W7AyVT(I;j->X?pCZRY$6TZQGYKD}jcm$`$>@Pj5& zH*BhF#K7Mlxdx}r#05TyTGNcq;X`+I=Y2<06j#hHRXTuH?Por)WC!c~L^t(5W!Eed zsY@g6T(+o{pLN(}s_JwJXrC3t=&oZy5A1kW*uQ)+{Ag*wjYa%y}WynM-mPWOhlPda1cz~ zko?F2kPe%HfJB(7<*ggwz;W+qIm(Y!xMKKAivx%KWLO`KGR{cxWrS{@1q}5?7S!5s zGmZwq4Aug;qm4iUCKpV7F0+!L61>feDie_x=zYCVDcMJ>59MZ)Mjg z{&s4OqNJ$)d32vyeCTJMVfCImw<&28!C|E253O2$Dm_KEVRMY zWk(DWR~#m{8BrNoxiXFx!i~qb7)O`}aa|LFmhW zf$Ow%;E$Tgm?GXeum_$P4rd~vNK%Vh3t+j;&@;+@V@Awjt4RFQz-T86kj4XeX=I>8 zK>2zeD&+Rdu2C#o&L_jy*%9wRU1H!R1!vk?5@VS$R!to zq$7l>Nr5^aT9hQU1_&eUmZSSCA!7TZeAe=_TMKIHF^5ox?c%hq#)rz*1X!@DPe#Ln z*Uh>(t{sc0wWW=o*fA|DYB96?=7r5&J;|YB?J0&XJ|8n0WF>8ga80M9Fe&r&t+A1Y z-KW!P2t15ZO?Md`23Yf0g_`x_r%P9hvA0cq0Bzj|J-Y?XAPG+KvlKYHKLmoDg2BTh zvQoN|cvwF7@G+7*$wf7vP<=jze-T4#bBY`a!NjlS<3UVs^w@SKCu1?*gFd#w4E?Rt zXs499GQ`3yScd7i=heO25vN4`6JI#9iKdQ2qJYJY-{I;zA6)5%6-kw#z=y={+<=S7 z;^D6`>g=a1h=%eF#W(ST1wSWpa2pfnjxLXU7;R`e%+noxlvj3&2JmC{-$qf&yiu%^c=AYKc~< zcf7M--460Y#{^xPG)DNq8^H5Gz-ahqW0tplywn&H2nrjq%``e1@K+S-<F(L1f6Wy^$MxqkZ+9dtJ`Gr_bkG7RJ_Ef^>ggUiTGFYWK{ax-Iu zu+|CU4ZjX>tWw-sO=6fAF=rHT$jf0ew3C-yC1F8rXI43UPP;GtX>u^nj4=BXTUg{? zKFF1yc)U-7+rGkBA2mL#d;`P&vlh!=WLHByvBP+7DE>N6h?G+#vBV-XBiEBCg6X)) zv}C`QiNfh7V?i>uuD*u!?PF$lW=*@ml33DeJCu8QY2r-+!s%yh6T+Z!pKoioyXxj| zU=z+ztR>Lfc5%DNcG+6Udcmu{4y*ZE|JKG3=3 zXRGrA)k+aDKi^q2lltS2P=D%~W%x@*=4x|0tz#c5RA$H?u=fIEFdapat~xr8N*FU4 zrV7W9i>>SC<$gfI+Tq-*z~e#=Yx@EmcN{@4Zs0&mRIiXl`c_a_*eh_`{c?-nWVIXs zR3O)x*PSMsy`NlmKE>=)==T7Q(^IXErsP)KcWaKl)-dc_zJGuj#&hnIhS_sK_q_$M zm;n-xkW~}p6s;f2k?Zl2KQ5Y!JCK3q?Y{wa4Gf?bN$c@dL0;UC6vR`7k;PorpC=M1 zKZdbMsHr_yCZRCnkD86*P?3ZI<_lX2>LC^#nxP4%o8g23RK~_TmqQc#!F8YL*Q*L? zOeTby{C3@wWa*>ZuYbl%)L-;c-Pld!aSpFtyiGX5bO z_`I%*Dp?^H%l3+x#v!}li5l)a)g*_JLZ2JNgfF$VTO6;>dxB1%D$hY)Ph<4-YZSZ| zZ5aLRn2z&IGSuV)s#bV{U+Do(!_hjXkXIv))=y1CyR)x@E4}O)C&h6jKWJ8riF@zP ze4+raGbJHYE)&^%yj263Jj2Dkupf&=*?q-^FB*dkW#JqHLr1moo@-)UQ zB$&Rw7CkHC?u6mk+buzmtC$$PY@hjoaebK}F{_-%0CS&?eS=G`i&gdu!kggg`PU0T zrZrzpfIVK3@L487h$jep*YI$#|K30W=@Q50TwNd@?aQBz(+?zU5bN40F)z9}*6_M2 zWZIwTVChyu2B0Ow9Vb}?@baV#g1lB^7BDGIhDH}phjw4wxwlIrA7n(82}2qxLv6?e zUyMAVZ})1sq`^oP_wK0kG}%?)P;mg}3(!aN18UHS@4#PqFb&9b%Z#|Umor~3`#uK~tt4QJ^H>R(A1{-F2LIEW^`Hux&;@W-$t$rimk#cboDs)9xpGEoM&_&Cd8i|6#4wK+pHMAHooLb@X9g>&XL|Ycto_>dVd0ou8ke^#uNSq$Y3l4p z>%?25#Rk7j4?nfsNH$c8g9*1-L6pw7A!r6y|9lOaI9M0Y8o>Ron-*?DB4huPildLm zmm9#z<%GdiSH@{6efo47P`el-96(0^#nMO-A*^DhjTzDuZAmIk53A{H6P0|lGu8RU z`q24L)oIpQz9T(1kv{9!>DrmWAnv&nb{tdN^e`shdssSOJubue8Ea}roCT!Mt#X}R zsXyp~L`3)v+)&`tS+G8f%ZgefcIfVi?9SDd+s}H#YEWB$tkUzIx)#30Opy+8awG5u0p|+A8iqM&0Kqor}8@klt)(;H@_%JY(WH|ZRGZ4`yO59JzFe?z}}9VD|{&g#7Upg-Fr{E$N)lHb035S zphOOW4H|(Fs!1pH>nl^i>gyvG8e^9!dB7Bk$rmXYj}KOrmBoNBvUb;|<_(K%C|xpJ zw#*^-@=n{)UXb0UXX2d+uCTJ#!$OTt3ln8gDH~J2Zep4yT69EgP9g6LA2!p^xvKkK zZSY8pO-K2vZ(yE7?)hSD?^aRWfQF1+>ER?>1PfR6ZRRatdx~4JEKKDvQ$L^(^^_I` zxve!sXCIu7pH^~V5UMUvjF-d^mtpI})lVhEd~Ttr$VlO;C}eN)rH<(}UXmA@B%dn{ zPo2XT$Bxhm*XXm4t3;G|!)Ax3Ha7kZeDLwxg``?I@v!c91>%*diFAM-#odGH3Vv50 zR#a9s?E#;?nx_^apJne}@|TO>C#IE|2)EIOn6f~>Y_;RHzK39;5Qjgpcg@w`qDOs4 z1|ysv_L2j>F^Y=)5_J-&==jdow@}f~P;PV;4@<(wRUKQRU>$Wv$uM+sg{0Tbd^jX1 zd$3Z0#2d1|{ZyI0jlH)tlnB!#wti#x;A}ffFe^#9d3zyq;UAVNm$Ca9C4ZfZ>rQ+W zqTTK{Q|N}EKFSYznHr2|=?oC`sW$|plb6=54&^I}*L<37Uam)0 zYn-JNXn!d)-Okt%_G4Fch{pNJ_dn(U$<9ADQ&n5YIq*E`m}*!mqi@bGSZX3v36W#A zUvFz6^$8*;j0ry?Hg55Zi^`-~PD*5{o3;L~^&Yv@5X)ii)?TVzo_IYc-FGI%9i!K$ z6$_viN23%fciU(gW*Q!sM7?HB;bBG5uVcong{~vmvA7~)+B&Eos-~+ibUC(CSX<{f zERhM~yp^L*s!1-uW=9wkwf~x~bDg$(b*bA1@37@3rmKhgD|ia$%C=H?g@`8OD}@A! z8El+B#q!Q{dBTfjnl9Fs=w3eJa|e%DngKSaQK-Jv2BjHMZqOny7XrKNgPEd@|6$vK z*|Hshffaf4lMTBK&I0630huD7lGU(-1B>&DmOs}gLAc8=#UHfzU#S(Lbf$o1q`+QG#C}pYvC5lt~W!+`lOn% zDqj|8rVq5PR|4Dj2zs3RSMycYeWG6UbB7_xSXw;M`PWF%+F9XIGgBg#L;qx=C5QQD zEknPkknL(^#D2rJ9&qLBvwJC}RA+Hy(_Kmlb_{ju;TZSlqN*GyL2b0V^D92c$&Bzc zJ??8V9J3h#RR*+f_7ToI(a_%L8{^-w?pQEu zJVPfw?51PxAjuE-TW3@hhOx}AbeCw%6{a#BbYFEMw+oqz^u^ZLy^$#g2R0opaA)$* znfojU^3v~xeo*u^34NOa>z1MUc`WgSx=<>}NVtqwD}yxL)bvq%i4@5;!Z(nOcYZ)P zJg2VF`J)M8RNsKWU;WiO2yXEQ=IoLMNCPf8HOo)FmVId!#Q&@$EI7~=h6NAP4Enc( zkHQZbq<=+0gHS|PZz{Rg4hyqnt!GMqN~&cWq*M~_+I#EmrqOWi>SXQ*whUu8?|Hy#ZrOg<|O!W`K9DMgbkl zX*Dp%AT>oIcFJKMEb{qqDaiwp=42p4|1(Zo*hZk2x$f%1%``g~)=8YdEhj-AD!J+p z5k&hBe=SISu`>SKXZ3sC0`lj73+E(3C?t!Lq{12*A6MMCo>q_Jj{#lz2bF1 z+pdPaRZh_sk`f6yKcPG*)t*4E%3qpi50pV`iNAVRIhUIwaxJf$tvj`kXq?xQu7=7_+w7f)6e z&%#eU2WxTq@D>=!hZ1EF3!Jd*haaK z5z#pv5=1WskCIxt)civ7+I~B%WTKO{0lr-Rjl_$Y{0bA^aqRa~Tq(KK=Nxo8ze4&# z=BJJZ@BMJ@`AD>(Eaw3Ya{~{s7)4Dz2j*(#l^=(0Uqs(7W~WmTS%LS;+B2Q;WC8m7-Y~8L`VxMYp+ zWL&>*g>l3FZg2yP@Emba8`11n{RYjlTp-a?LJi%jpX38NRgsw!X5kwg3GPY_&t55GzFD6z62!%9|MGmrhBDH> zM0`1=7z`no@3y0&ZUxnDXv@z_YM<{Z0jj# zY_Iuzi~CU;_+BW|PNwyC;pXmy+g;Rx+eJfDOP8y_u1sq?P=~mL;EAK$+$CZdoK6DtnnFT8bvCD?% zMj7a+TCjp6e*eA^obe0|x$ZhacWWvJ%0Yp)>&Md;~LihV64Az3YMZ z2FMa1`G~$@`I~8Kwh!Nqhm*_*QE_GjC1m&6YOP!aJ=i0MtfqI*FiPCBGpGtpPejKw zy>SkwYYUXB$s?}$E0$ew>Tf?mo0}E|9rG8;2>diI+EU3_!A}1`ARzZc3!gl5K<{b= zB8^T-Vf!QfLC@D4=1*CWP0n1@W|T9J&IT63LibCf_G{5$;^aekboCP6%G z=_0?Ir<$s~3P0Y9a=iU(S2x#C@HNgNxmspFuQN)yj35AovQs}PCIShrlstIx#lJo~R9|GZGRKe$Lh&djkz9Kz|eK2M@A%rbA%{xyWx#H-k2rzZOA@ zfJhi3**)+3qr~{{LL|c$__YaM;e4&BMf)IU{>n9NkEZxe-$uH3pU3X;i(`^Ce3LRFS3f}Q&NNe%fA<}XLYAdjRa ztk$Hbe=>C8)j3x&C?+YT)A~f0Y2#^Dab#Cpe)}0qlNMV$=u~7G8ZQ7Pf8{zYPIesCd8^F$xim z;*g{&`0qkxB%nN)EaCzRYk@GxlG4)fz(BIeuRTW$c5Tm-#u%y_)&DG99_#zUAzx=l zHiGjC{hAnzCr5ky&*WY-6}qqLG_@U%_tMhBO%JH%ydST7BbmCw02C4l9o?we zt2@BD!YU=m-_!$$N)jKq0ZGfa_j;b4pJ)Kk5;Fjt^Gm;!W6jLW$O<$tzrT(5&8UEU?Eq0MHsT5`h=qm8&0F9UG$)dE@yHf89K3F5@ zoXsbt*44u1xHVUbL*xD72Z3vE{#{?hW1bQ@D9Gk>yEX?q-yvNF7v_5=Q7x00GlPtR z5-t&4b8%=dU;wStgJ6@sc!}4hgT=D_nFnI!AC)juF&E9zC#l;XYz7Uwv zIZzXe1O!h0Sc%u@HAW+7hEUATe^nDx7r-%S6^G9O^-jK2ERn>YqwxQvI>H0*)of7B zod)mw;Z#D+;VO$W9Ro^x89b?T5lm3$jaA2kI4DF|un&=YVlK zE`lE*oZ14&v&^dq7K>HUfQZlFU@Ctwz~S-w5GboNO#yAN9d5gBahrE>jopHVX}(H{ zd<@$EzR^0~%O8HjntK~2uH8*{H>JR;aUg^JhE}{9>|hr_QU{&)11p*Yt>?W52^j^- zWBa88vJ)L}2%LacQBk>=mLkTL0h2`g1e9H{z=0x;02ZTm7{Dnr1gv@n%{Pa0q`n+SrlT`nBzE=mOwmM!S{KBBYioCT`i~E#l0rkQ;G5V`u90TZ& zKlTfR*Uh}z{o_$Ji|eU2AXw~Ghd$3*MKF`-v4-gMyc+}>fPTQEndyXClQLvxmi}GD zPfM>QIyi;lIy%1yR`m;{DoF8*l>92-!To-4Q~ZtsD-NnLKcVgDepuZN7?nHZ{SP-DO)ZpKtP1;F zR@eeG$0Yrb9yqIX!#{=V&8hR>X`Kkg&Q)A}LZB=+u12(^NP|z1PZm1s%%!g8Shde-Z1aPu@XT<YAjsxG3vMuF09>_Ix0q(YA0pWfWbE< z@8+9jL*qGo=`+#N9lg~ODG5O4bkAk&%lVNc7ogHHDJv_Z5EB!dDP<_2o=1Q-Y6U!R zaRzgd?n@7wg?x70CkkKIR|^-xM_K&)!g~W@0$0Jdx3{ATIe5_;Fc`ifVi;9uH6v~K zJXMBsPXXf5#MHZgQzPIE#{dHF|1slWukQwE72h|yr0|CLYSoN&lg-6)>ujTh8}N(d(~Cw_Q{Odk>WI zxo%CBR=lCrI-T+c>vPyrD3~qz+tLJKMZ8iCQ1>i4s z0OLs(QfQt@07ADYj<(cforwy4o}MVr3wPH2Cb-gMeMDdIE9(lsr~3&YZ{qBStvyZ^ z%i&)U>V=6QE5D9tsR#%{;9o>HGn#t?;W^k|+jPdW#MWGLaL5ZpTui{f=a+ z7mhZo66DK}M^L!SyG)b<0V)-iK$cKmU9^&cRV0OvQNCi?mqp5nL8p!V;GXZuUa0!O zYMq-GcG*9d&zB2mGLpcapJkq<(3k1dox6;XO(&8L5M)_B~v38@EMIP zj$>3(Z_#Wp+X8H(5@pgj9Tn0@Q`Mo;x=Wnea$CEa-hx zYOq?KNelW#f@K~T;5_k4ML~fZ?g%jWqTpypU6e~3gD-+c@v#-|(a;s{Mz3;YznW10 zsz=h|q;u#(NQz(^|LlcL3-P8n;P1-@TrM**MZc&9)gmH6ql)iH5sj)IUu_<^8f!qy zxaOZGClKUy7!QZy5qI}6AxrofzDtt|kJE@j`v41vG6)G3X6|Dkdg7=mExCqKmti`faeU$wf*M`pk9~v}`%{w;S@+tvy*?gwV&>mrf^EPKZ|l-PqUHr9tf-|!M*U1y9*Vf< zIWofkl)r?P&P@l29Le*2bZ%xEyl1^U%+Pp#wCh5rhP%BR;nqh&uZLHZFcjrE$ShG5 z1?-jZODU9aFVQ03q|l+qd46|Gj@!2VVlJ`A@XfvBn~U6obut~>*}I##NZl%MQN@u;wSr*Qbh7Z{2@PhQwh;Mxz^D)3$(d+AMoxJ(=+K`YkLRcq zl=d2f&oz;*dh7+{G<)tWe6Dch8ua6upc*6=OW@z%=zr_hFlwSP=cetiuI^FG*0)aD zUr02V{JCoQYFDxWD4r>!GhA)Y?t#^`8q^%SQW!R50GXkZt>S8vjh%D9K0~9+ba9dG z+S!J*rj%kpt2NCNGQA31bWtGy(1-;<$0UIe@GhJt8r>Uz7h88!TTwAMWEnAl)I+Tx z9H%pS&}$jH-Wnj)yL~!K=skdaGTcuSH2h7YG{LKMtZS+eT6#wMYMExEuzc!E1NMBl zOlhNp;4Nl=6zZP*A_68eQnGIKb^IB)eF{_9)feWKRJ=gnJZ=oJPfQs8C?X{E2=yhC zKUcEE*=^QvqIiOB9xeY-87JCEe*+4&v=Iy-#s9yS%y$-DyhEss9JjpcqrhEZeE;|2deF?;8;DZDlgQb8{f5?Yu z4yf5Rmb;{l^}^zuj8}kij(h6e;O^D|B;3)?FbrPi_FK_rKc>Ej_IZ$@vZwL32ws^G zZXfb=mcXh*lAVMTiD84eLRau>{jFy7J?yp0>~4Gh4pYyt?Y>poBLdIxxic6lnA`3E z)mE1ahrG_~=hxTq2%t4nXoNEX)-i`6l%89Y#}u z-}>So7lwurst0nVgTmC_<)=H!i^8ZiZESqW~c3RJEC{q z)R%==k@3pVmDLKXG3`8M`O_?lXblst&ii3A(~!76+USEJzzFTh(TP$2z=!OH{pKP3i{`P+$smP=ZRVI zte92msUIWpWC!A>KravG-AA4($E}Y$YR7M;A}40X%s>uW>vmD>ws8m0xp2lTi5gEa zkjsZGU{5cvy-#TLQ#-5%CRS|vd0$D@rLMusi?cKg>LY|Rdt-pR8z5Q^D9$Fi**l&uMPbT$Td+Oyc+QPN6&FwKj$Qx;Pqy6ejAcu z6*@{v&7k-5JEs^xntKV@&VpCEo^^GaypbQ}U9W!bkov(bF#k_mKf%_tt=ZA{pnZ)ZaKS&`7=IZyJGt zo}4>@BRdy^yA0g!;!H+1X~9xM-$%NZYlpS@(2rRE=9$)asXz5U-CvIim{DiU*C)Cd zE~wdVF19V^n_hc#+#Q#PnQ?&#GY1SuOl^0Pmn7Y+K8oRlkdm(@#G6hJf#gzZtcT zHuSnrqux-@z$oV=zKXKq#(g zX!B5{V_0OZJ{;KWnF%2bfG?ymv&~XFo;Qf1Jo%SWnN5 z_fCsle;F`(4&s1a{P0Q^JM|bK9*N+JhVDZSa#OjzcRXw3^9D|Wd7FMdc%_{#XfN33 z-hzOzBD+~2=So9UyastaOqA62r)$Xi6HP^4Phb~d`g`Uh>hfw0oIl*D*6v&azrtxp z&JshAliic!|M8zD#&P!FIrwPr=Kh>{B5RlRgoiA}Dewi7pG>hXxn_v$+QglFQwCz> zv!Ak5IGP?M#PXF%QKnOnm^Cx55U&s*w|?sO!x8%CT$}qklOBrBY^X827D?&9JF4a=Iotgq;>{`?>P5v4mUAh|SGzofM-y+VMuSi@m$h##)B?9CZ zZl0OtsBTuPY!{u3J~{Gd2szYZhBf`vNa=oj{?0c#<0z4*j6!WvgccIC z0v9$akG}Uz?sf6oB+GeKpv6TUX7?1Mw?g#9sk9I98pJZcy!A2A5m!PQn z6x)HRm>=rRtmrz#2mS{T-~Jb2Um2EF*L6#GN_R;&h;)|%Qc6m5)7>36-6hhEbc2+1 zgR~&sjda%yoQ==>eBXP1oa{J-n|EF zt?DosO9si0nZNuu!I?}LR>mt8$CY19lHL$q1}d*ssd$s8#Hb*3##v-|nQM>n`|mHkRZf*Mjh8?{`6kaCSB=IojFbq%>==?8 zkK$Ypw1`pM4i)Uzd5Bx8Kx=Z%)e<>)KCBzh_;BtycJ+FeE9*~g z?U25{Id(0OC&P(}J3*W^&zFhjTI6&m8@!)xb0{FgM1kTXKZb$w^D%gA@9$~z@vJ~< z0%+b)Zc-Ab3j~4UbjfMDa{A4?Hg)c{w8ql!c|}>GqP@D{2?)QGhy_8l|Dk^K^lP4+ z3j*mp&o>Rn;RuFaI_Psw6TN#Fye}Kp5D2Eouphkrg%aTPWAFW}ur2d&4nJ*M?XQdo zoJhfW&!yPoJNHo`SA7C__Gv}?yminx1?_X<^)H1OO@~#|3y+BG1HJ6FYjyVF&F=2> z_qmzM-d{Ia7WGB^_Qz_QPV;uak?bM^H~yw!jEql>l5@Zl$Ija_FNk8;2~Z${xp@Ap z1B=|pH;>ylzz&_I#|-l|T1-)!oH`+$I?sT@5jD+d>phtYJEKagzso>LV9R=ezFXcI z|Dy`WrUvJYevF3){dy@g3dhl6!5l;DR8q>!to}&H_P%d^%#_7Gei7-v%6`T)>8>dp?q7etZ*BeGn!1qFzD>giWO~WEulLdy%O0-(F9#3gS#=& zP!UGzL8l$tgpqvYK|vw(OrRiF9GqyH$#ES5{)+CUe6Z^lDxp8dC?|{Ew3Q$ql?RqX zKzZsj%t`g*A5Yku&s_P_%!VW-@AZ9p?b#}|ua<$1Z}!U)k*t12L5WECft1?@L=%7G zV*2=F{>u%J5c9S{2xYy*p{V&0pvD~9IBhi`j7?^wFMlQISWbE?5C-p$zZd9x|5{2dlya6k2Mn0lsY&c-oe6(zdsdwV$hSFri0c_b=){F}QeDWv6#!t_5He@y z%v#AZU0Sley!uy)X40wb2klj@y zO&pFhn@39@Q?Iic&4iYBQ=S2ugDK0Q*O0xqH@$U=xYGE%SNT*{@}+q;>xUK_-D@qS z0kLy;Pep)!j~D7cLKUwf`y2ww8dO>Y&v%SUD72`X>#!pS-&wpH7R9er^8QL{w5Mda z_T{sil;a$Ng6Ae4srf8=QLG4F{af#t*p6hgmS`Dye@gi$<>te$3$1XX_IX ziT^=d5SL&OnkjzWW59?|Z)6zd=9=l5@TpSyPs>o*>?aa(uMNG7X(9M^cxsWbFl=ZG zVlLFXsA(sA3N9xM=*fX(mdXHYYn@Y`ekFbIq?>R+5xF1fY{n9NxS_}3&lsuk)#WI^ z_FEY8)_tQlL#Y5mkPvg;L)j*5)eR-~PFF)9Ml6|4H;OKGBz^g~uRe}8yu-E}i|DDM zb}%NDH(MC|eHdk&aS0=l@8%06_1=p)_JVAPeEC8JTY5vF=lxPvS9A9MaRh}`o5VrT z?=p?#z1{a=ID1KiOj1qwo5Vrt;Y*e8ixPCI?9pEcst^DX%@aXvrr(+wy5a6_Rkor5 z7uI<;|LF`#3y$T>`pG*+-iuS3XW)*Bx#T2`L$$K|?OkjW=-uPjO;jZPan+s={nn><$xfmu@pXX zz0Ct-8mSG!?dSG(qz5^hR9PR>6sGtTnWlx}_5n6xqv6kHRxyc{6wY%sQ_8CaA;ngP zc(W0mwAPPMy(vv^V)HfDBVNI1?qqkYQmVIWe&Ro|X^cpV?T>l%aHU3~D? zpV^E-KXI@^YlCwti)eJrxUp#gY6hQJ;dH`=*gN~1KXMxHD5YH9g%aM}_PDPPNH(oq zcJ2Ay-*4k^5Htd(CDe5s{Qrg3fKX6X*$vWxL8EX@P9xo@@#Vv-k(X~gN zD7Q67J6y;K2Dxd6BriNr^!T1t=Z(T=QglM~fXd&s`eZzQ87|C(2JEc4_2--p1HP`U zhhL3$`kV9tpRvqy<>2v%?q8s?05RDwV&TuhYutez4KIKlTue7*ct!rs4WWPjbGl6U zIY4pxyhRwCMkv6!zQQ*=7)SLQ$28j^$#~qSfHStrnM*H2^Deijgn-DBd6|}G*qJOqo_^hlOdMt>xX@qNWj9Jd*%IX5=YbIBWliTo*(F||7 zVhH$bP^X>{!V4wwwO*Ddn*n`_AF%B0rx;In5S<`t`i*j{ldhv(H|cLFD>wX3aGrW^kwn(%oe8&074%C15OaQj0o)S8@a5d437fM)jOQ0)i$$JvsfOtSj&7?STyqIgD z!-b&dO%k)!7B$}P3+vRAhrJ5oIBq&n|6W271DP5ycq+@@w2K{=*>ts;$Q^z^Ct!zT zG$ul@X)D(!y5fnc1bGGabfM-f4mH0aBlUI%k!oM_qZ*r4bp>f;iG5PVxjf`Vnp`9> zb~~`*WP1Fp;QL6c@ajzJsPM?)?)Pkt2cCw9a`Bi)hJ?$Q!|}p&gkOh5qYT&6r#JQ_ zuiI)rB8i#CuB^V#K;4TBL5Upb^ZZ5~ZpDqV+5D6PwNyfRHjS~fNgRB@6i#JVdrE}D z!vK{-3$AB6y%aiez-XYt9+rpd^eo=qbyebe1faA5la*6{0-oH=Yc|672K-@QZKDm` zMf^al{6o&4nKAvw=bS4sn_T>TYlYUwY;u+&Ikt375W66bWYGq`7g*{O~%zufpO7j>b54gxv_=!W8sBtf0&eMzlgDI)8i&{ zw3bi7m##w7uM}?@dbso;gsN#jtpxfu^*GY@xY_G}tpM$3pBB2EE#D0u)+s8oSg(G2 z|7AoO5cksrY_zV; z59(w;lUKEEpC#>BvyacyS++6q6eXsQ(UgF1WZM5+s28ygbKNA}?QR4GqyU}eXIm*U zni%8O@R8U$2@%3Lo!eA$_^PuHDd0(#VkEegVmQN1>^JBy#*2wE_V&ffSRTJ`r=eU@ zNK9kZIT?wG|^{@~5`hAg}yDc`KO#Jc@L$;@V zcYWyCjEakHW{bjpK5$Qs((8nlpG611vM3|k^js&g{B;nI^kV$1@lv&YZ=cj!Imr{I znb`N^No+!&VH!dYN$3#-a5YkIZ$G6(>52EfiM#EdW;1(z_?o6jZFi;YU?UZA^jIs# zGm%H|Qi5`bYBn>A>d%PUWdqo_>0;DMkIU>P7Ja$6gTXL+<9IA=vcT$iNr!fz!kXSG zB0Ib)=%w>D9Ib=vnU+NSz~!kMmHmwsOgm-@bMgw7;i?%IR_J) zqHOtKe?u*KIl&~UG8=WdzzqIWw@yrRS4eB?az~}>&;lvw3@=I*ZSSh!)z@h zn&ytojI&6fV_>#%&`1V(&>xP67P{_)DxCKR<9zcV$fz0P`_0r?EI>^bi{&+QGbz_J zWKS9PL=hAw6Ggc0E4Vj1tq@nUiI^nHr3Hdm{86l6COe&A$tu(Xbyf_0njmp37qe_1 zx^?O{cmzrC8z$Us`*8V9t2%KSWNyN>uv)_w+>|HlnZCCUEo!sss$A3}KWN=AOdr8V zXY+4@_fLyIr)IM^f9&#PL|fa4kf1_=O6fn_oq_9@Fy(vQ;#XOIwElXuEoiAlb{GZ) z8o)moM-=!Eq{*M_Zl|0s19+NJc9`y@DYz94#G$wWPU~z$lvpY2r85&i2NG=~L#PQU zE7K%YTBgS|HVQwttA?6pOUL~lhk=C}#Q`}6hKxT2pW=l7$i2Z{s;_tG zuI{H;9N*PX7y9QlLJx;^(M~!jX(c?nX@eoPo8E&S{)@lMtMU?NmCxxJ!V01M(b!qB z4;!Fv5{f%>C^Ij1fa8a?$sJhd>H+@v-q!8+y~#hb05kwnw(mWo z2;@|9icNnV11NO*ZU%-coB`Q8*{TStN?LNSL(VD4qHRmXCwz`26nUcuP5kF9A?yl7 zEeck62LsoMy32Nr=&2y1kr7~O8RGP5i4;rHBIKbxAPv*g%Y z{)_4kTn>&y48J#cPK7PIZiVv~Viz3Qf;DI{g7q8a*~Cy>o7Ty!tBaFuEW7oMX71Ti zG8y=o&h3LuoyYk2OG)C;P;CgJw`+mEi$=p&YE`3>M^FSpZ_mMX%b=%bq}z+^XHqPL z1_d*sF(;$4Z!dTSF=@)qlLplx>@`=hQqhvGt=(@J`dN1z@v)A(dtegGPJ`$W^X-|E-XUw#l~)^2^})J_Lf}FZ9ELZR!n?J*hc(q3(i*!^}ulk zZSX4}#fe|w&3-2o?4|HUDu&lNSpGga+m#8_%0x(-&^{*96)p&2{_F^W7H=~t=4NV> zBNo);AvunYYXf5mqjpu9vicSyyUdxWIC43R`vtHPJKK7Ga^O4hdMTMiQzKloTWWom zGk*R3^5kDG$IE%_Fuq&7!z*rF?HNLQ>t7#WEyy}2{4-wfbHo*zAA^9R?~mQOSzK4; zJf#h8h=-BC&5w&gC;8*6d8_neAy4^DpY;BG6H``h+o=qbc_(1-P4-L=bLh^q!p=Tn z(W<*Kd+f~v-RkjX3axhbyqrD@(sIo&rOB{5OJh}>HkszldT`xjpaL$RG1T@aDyygYO9Yv%+NspE z(Z??e(1^iMAO?VjX-8;l>-6nc@Wm6E+mebQ48}e22EIbe@rB8g-9vA4+G8PQi0Rp< z3HwZ$VDwD+FK0ys%(M17A05jqEW#Jr7_f2^!rG~uM67<7ex1CW5=eBJqz+nyn#)SS z!Xy6fyA_YZ*^s;`ZlxT9NJD17EQyNs1hAuiO1w~|gT4K)5}FwjC*H5Tn`_B`elMcx zE8c!L54j7L&3vjM{hZVRM8?Om53LVAyDkz&Ft*KC_}uGpxpXvRKDS8>9=lJ~RP>nq z;xyJ5b2MH%(U5vth3m%JN^}xl!d8$AL?&Gw#pp3q&ez$fue@{zA6t9}uY1TJLA*m5pv8K-Q2OWl*W|u?hIQ^a*PBXy zPhajnpZ*p#yK6tM5r#1S2UHs*0@JwU7-@KZx4fe+J%)2lqFBMoGYMMTgQ{!|S72e? zA}k0Si{BSI0kn-ceyh4GMhf5Wuj3=w^>Q)H<;0SqAn!4+0Rdmt&=?PNs)g3 z7zWdAgRj=+yU?ZVQlVHz6Ip<}A8=4g%OTlft_y%AC^wF6pMZK*J&$h&@A_&$OoM?_`?*yQX*2js}I_Wlj9)MWEu5uTe#B z-cXiHb%jd2iVUS#VWO(GQt#Q|=n#+LrgwCxPttY*1Jtd@&bZ7g-*st%g{?fA(Sj3v|VNH@?>?=hwI~uJ97Jkh-9BuTJl4O%act4R7#p&-+UY;2> zGP#T!^Skc)(@mlz3>e4bL{<9d!8E?Z8f*h4G>WWr9D-CGp(IcC=F5dV36>tQg=@L* z+SDYm*SxI#WRPUUQy{l7X9I6651TsKlw@^zaG!|hZL~E2<-rjSl}oQ4kL4#myE%^) zE&QQ^m$lR-ZCfn~6Z?aNcL1_h zcbocC*cWmlRsEeAk;G%!$eT(0&!Pl1pw|1FgV?S>1cLXb=n#J&*e3=HR;TE^zr#zh=lrcFp0t^gVC}1eKYC ze|;~=Th0CT9T?x^C4fMQYR*g);`wR;`g4bha90|+{UG0HV<5t{xbo)D+w7|Rjvw9y zi}ypP@PV3HKzs?yn5?=A0IP;lYCV41Exr%$pf4@=oX7uL&|0C`aYJETn)1<2#z*{Y zsz`Vo2}ss(5lZGhCp-U0cQViGD-R*(1h z1b{<)ksU-FaAYl@CPMRbxs%7F!+I&dksmh9-5+vJoR{pg#WyUfR8JY@QXiP$Kz;)y zi^*uN>?HWmTJ_^9pkOkr-68TH=}Bb~Bu#m!A`K4|c=H2~(NN5uZ8_}bhPh<>zk}nIQ7s1pf z(*3evdpu5YI7~mmNx4vcM-k8e~T<+`R7fQ<(@YBLVd^EEy^EHF?mR>y)Ivn zroj9FRG&TE7ceVNd}I?s-Z+5Abt5(dt_#uJpJCXVw-VOWifR9D#>(L@tNg0#MuUfl zHAHm%=@gK9^_w5gP-NxxL3S@?o?eicYK`dbS3x8fB^|SL&)t}6M(rvpXvZ0Zh&~kI1+p@p$8zbaJu4kLe!`5`>3En z=dU;AXd^?FPWh|8Qj&?JQYMrL8e!X9ctBg%K!D22%TtI_<>H#Yuk|fMN2+g7=8zCa zg2!udJ>ok1%+1X`JmK{mn?MC>V`OAZ5%p_-Mhr*{gh6aa#8YD*NIM~2g$)_YFI;`p zEk=V#5+Obv{g1e+4_syQ4lxeV+S9|yz)LgEod+e6yWU$w!nf8bhEI%e|3E+ifnF@S zs1NnwMx&LV@{d#6t3^TgHmg6&{6Ob}bNsPFji7@n3mb=%jy6}WzH2=XQr2Uk1%b>> zRdSbFh_VNP^)m~`^@5RM)$k@E1BP`v3iMB7xKjPpYvG+qZJe_~j<1ljr}ORMNdRa` z6IbDjWFE^z3_Ugvz!JHmn1g@dGAvSbTnM@O9x(mz$t8c}Xj_$N|~)u_3mB&C7Ylc=6N9NkN@rr09u<rvHQtM);pJ`oF1_az;VCGc>IQpxUno6A8JnG(TlyNvvlTp-kH zGoT#!OQ>|50j3XYf=7juPtI9Jc zD+gC*3V1OXOYFt;!-_ikJdq44Km3(Sd=a?yrp{3aR&sw+1BbNtqZrPBzg88A7hn_M zINpv4p1etddh_^FlLRCRc~iomfx2ZEZL-dWyPVQLyhI!X_@wT>h*9 z%oRi$XAlTPC@%KW`Eg1~)DYN>_W&sI5Kg!5WZ_?rFu+nqh4R7vYkmx{FgkqyQm+7# zGa>#dknrnn^|(-wt*fhhf#Exe0Fd5IhHBu1{7nLPl=%`Ep~97Zg<6})l>}tfWaY`>MmyT+M9K;0IYC)k-v-AE06A3Ojx zDseDVA+Odh@}CI!AGO+aP%FS;{%^TsXlY7KB>NUPG8o74X8=hV8L`~qC;IButG}q_ zFeo7zS)jApf4CXBA^x6KDD~Kr*Z-qX{dd`eNMS&iL@@S%)~B?MAV5lSz#=3d2nCL< zvHIQ8*Gc!0W&w#kEQJhv@MV3cf_=dsGuu`l3s|4@dprJR7n{m9QOk0q2hhLK>2@t09aW%2iT&T07dDDG+ByIfH?AwCjd#i1&lc2 z*QM0UDF9Y}`PaIzetvbU}=zW+yq8|xKtuu{Gb5huz0 z=S=>OD7Ug2mVss`fNz^Oc522mINur~pSmpk`ypSW0j>a(7aTy|`0oh@GX+E4Kw=3w zH-f7DzC-Z=0H(N<6wQMB{Ae}c&C&v27zSgSR{!|d|F~&DP$yvgQ9xRyL(}5@`}cG8 zR>=-1nk?e%f9(qi8;)A?8`%Qd|Bi)33?p0ZIca$~KFHP|)}#Y3_KDSbe*yjKRlb~B zdRaAA^W9xoRD_I_=9)Av{x{>J1fDR9DcFjGIlg^1T+_q82(@(Vm10M?)jD>)0IUYe3+7^jXuDO&x zyh&9H(OWT@6W?4(<)8xdNrfvgkS0*p01@KOn^ix%A1{K%IPeBz8T{tc#n^xtvp(66 z5}%hPvJ3*inV<5zrYrx)wq&vGsdfhqNfm{IrUM15O-Hq@m)a5cOF|tOHj&PC3P4)H zsfvqj@S;ACu=t0A4A67kZ*~ifwnL)lGUL4<{ESr`2UrcZTA}mYetlWr%kwSnJl+X5 zNiVdb$1DwGbDObk6(08`P_%cJuQoInkaak}C*$8J@L4Q8LXxw8JGB!ySL=a}vAxyp z(#j-U2L3C-^@4{4bo3)VMSbp_Ify#}ag7@HvyHrm|5!N#Wez@6E(gj2!oN#HS&TF- z(b&~9sn#?Va9EMTu}(03B7|GyRuT!(F$|V z!?9t~6;1CzMMc!yycCsy>|I|!4b=}Ui_nkp>8ar99*aR+!pON|q%F`lDw_1PTO_Fg zT1w9A;xu9210*i)T4jIx8mU1rb4PVk!_pvC_cw3;p}7eCWIKsvu3a*j=WKHzpX+P@??h!PQFpqYbMudV&GqR|B6?S1YVrUK3P&j z@X=%2jc7+p#`dwXI95Y-#{9SsH_*=`HT9(J;tzk9 z`1^ioPZeF2kn^7cjQP`yqB1`#N*KhoXb(2N{^*sSF!N%8%r|+mjw3Rl6dX~h+hVl*!)0)M+)aHIjg;?{lG^YC z4~)#37^MLY6k@kltpG7JjRC+N#-5Xhp`yBa-hh3&hc4mvN3ZDod3X~4Su+^Y%KDDb z8&04cf{~Rg+O;>LdCMFT_jvUtu@GY*#a3kG@!HEe9=bsvVRR)(0d4O~P(j_UkySnB zI{${72+R;e-wn5^fzA60w0NJer@+_mwvc)Xpn6XIGC9(B$B73&x zv1s4g826^y5Sp2Hsp#uaWeP(1wWlu!#abxc7){4hLSa%{PIE9OGwV2v-nk{RK9CQe z4`Zv=Vlg)quE!BlIGQRB{CQPUC3K7xpA}3a1EP8(MTgp8(|45*F5o&f+uKJTo~d$zc}zQ>C3 zAm@b{$M7RyW4r2-3TXt^Pa}P|fqDC3xnVr^_ZSl4-^uT6$3}`@oR0aj{+;FVMs3G< z=!ej2mxEaGR7RvvpYrn5uMw~akOmDpYT>}8me!ipxXg{WlWx=Ne3nb^dcDfxG>Brs zun$9IPnzFu_G7nFv{}+P$*f8@ICsLr2}MgqEu9FA)vuYX=bMP-8)x!v!W>fEw=|t2 z63s46g2hiy_2s^b`@;P|Cj_r#=GB;A3vFq@D~rNo!RSkK?u_1%!yD>yctR!#*}tF; zeva5jb&UVj#{T0c_w7)o7Zo=@oV=M&q#7P4AG6ooL<(`Y28uo)Q)mvU8Eg}Aqj z9jWi73gI$4-e-c*?to}%hM~{VT6Ioqql4W|;j)GXrljg4Y2n-Hk=54^M1y0n2xP8& zbTJg+ido(x867ZvYQAh7VlKId@EkWJENqby&)CKjH1h}^W5Lc?zNcExLtp5J-HM+c z)U~w20aB3=nS_5XNg+Hkl8doTT2~)3F(z#)$cG>$2ZMMS{ z69svMA97D}a`&>^hmSJTq9r;tBJ=8*tILatC$Yo#xN}If^B3{s#_T=TWy)7mLYe%K zHiG4W9svgWBc_5^rgKQ7TX0*cUPK3OByV0Bhh9k}Mh(q6>2;QUf$OEASrlVX^|}`G zT)EK{@WW_u4wD5bpxnEjM5SzK_p;9i%zcXqE1nC|ng5uh?OUJ3o<@HMf)OX@WJngg zJ}^OA<+Q>=xISW%zlRMY(GQKb8+T6HY*B)d-{}t^w_`zwC5q0A73t^YHlCno9MRGn zAHe!K+)60qi{)ub_tW!1O6or1bjZk~(C^gzbze{pg9!YY%VOMT^*@lLN*zesM*{s1 zct0;3YglQ~vB`dM+IK=ZM_`Jp>b!Yd>5Z5^vpW7nd7Ivw2xFYJ<(F2Isd6 z#=4;Sy#`u}P4=QE(r29pC)oT~st)~R&;6_Hk3*Gi9xMEd6)BAGiw^Vb$c; z5IX;9CQK#=FPy`SxL?omtzW0UJ6ytZ^Q%Sb7_}SFZ~i93XT3)@Kh4{MRy+a^!+*TVkCQab_27T%Gu^s^r7# z3L#2#__y?o30fEy9|y)#_f{A&^kxb^qLj9VBgwLY9-s$mP^k12+1!;6E`~PIxh&R& zM%Zl#yu6(y)F1K{K~xC?yB87dNKFpZ8p?y>!sKKRXtD!;cr+VKsb*YHg2>6tmzTQa zC^iPryk|-EtR}%cz0*w7)s~Q`uGqtPl)Dy8eU@GLqe6K+EEj~gl9sa)7TJ;FqzwtCX zTsa-jP40Zm$&y${`rYK;(ooaFK0aJa1Xyn*H+rP+4J&x^NM8r@Zv5Pj4mS=8FgrFvxr8OfBTgtmX&1gV z_iT^fozIcihs6u$7W>r~f0ds5;j$t>RFm1;yJk;1ditPFy>K{oCKTKO8F8r<$7+iqZ}0EkY?h@=6S)ueQG01H9!gL$ znBzU=@Z6^>+7@0eWWPeAWU?=DgZjuKx~mEeX9!McJ}1fCc7y!DG@dk!)cSTP!`YdLb_j?tI5Dc5)FMA9#eS?N^8lri%NDdbJz?kIAf%mA?{y}Cbd{D?21;3TE z#5ayTa4p(NzlSq_tj|aZ_t$+^q+7e!E1JB!<3FRfhpVycC4P^XRim20#l7)-M{c{D z&rj~q7%nFSYh~hH=XPh8l9(H*11oU_CGlZo9&dczW`b{znnh)0MqddzJoKc9+*q`} z#Tm28N1*T{kJ(QRp<%lh=5l-rEb3qa6a^6!TMiou<6mDG#*FS8T~HWZh#GOD)%3`& zZ+v|A2a>L6XmVdOVYY~7e|6D|x0N*aW&$ARqTa$DFvMpO2Vs>OLXjqonG;N2IN#gKhAcsF z7~U`tx3W>44W+7j7X)nU z_g+xYspYJ!tdbvep>pHnk-lsnuPDDyroF=3#w#vOn!N$H+(xp{$@tEKEZSNTlvh0I z&oqM~Q{_B%npNLoY#qSR^vZm4PESH+b; zCoNOnW2n4$%3HyTc>p zJkWEL=;9^s{OI1w&=GtS;qoA(s}e#>7C_wclhyL5FAocIB(JiMY5-$q3vF~p?{)X| z#3v=~EQRkZo0Dfy7M;Yqaw@DYJ<)Igd7UNq&FCCafF#~*YvgdV>}Cw~+FCk{gd|rd{aq&lsF}By~1oVbyp@26S>+t6hGW6X0Vh=0pCDl`6~uF+8>**8fnm9 zloGbqAMF~Jhv%xp3l9$u42ao?85$bqAcWwoBxz&>GxjvBe|8M17<+KAl0!MY%AZ}|8J7~}A}3R7!C-H@ zVI%*sgF7JBwew2H*|J%sw2}b9^ z2>RILihs#*CO1aUS`~%O>yWnf`cFC^ue@u5Oa{%aaBSGAfCqD@&XQNRK56QL_d^8% z$vJ^FV}JIT9~SeL@bq~~DGSN+F|{D&_V@JDaWjhEW}iPM1two_XPKu|Dh1d?h1zN8 z^d6X!hQ~VV3VmXnJcoAzYfE!Ln?ew$i1H*X0w%W|Ptt_>Efkn!M%2GC>@^8^c^PU& zcOmPO0Wj^u<}(k|E#<{RZ`Uh>f}=Yzv2KB&3>yzG7@+HsUhIw!cW=J=y=Vc&=4U~baNH{Xw$&>iJK|@pQ7hk-Kr65f-fsI; zt+jKSxUXL;ZSzkMe!GJ3==q(~krJPX-<_gOkNLv-J(UyUkx=v%p|W?*U1e`#YeyJB6tHvqIa8-0Zfj0tRWUenWfO?~YsYqJA3P zwPr@GK5o{h(ZXN-tv0*b7>~zQT(Nk^3N^BSbEi`H)|kfO7h|Z+YTN|#cvGPL<1d)`Pe+RTTF_Wmyu9_{R4EE_?db3zKnYjn*@`Z$@@Pw2vWPuaeFWEDz`rZ-4B* zW31~6r(_XW2)_sIv{%2=yPPf%;SpjY?ddlgBLC&J51J}7(sHmL(2_MSwN`#dzapwdTp8M>sgv%H_51+EUBgnWlA%N{`mP z32=ics&kAG&BwY!ZT!&JFf4oqnFXonzfH&fAz9ptncvpDUM7|0l*k&TSYWTC64YlU zq*za5F@HC&+ZmcLdSQQ)x`_B(yDDD9ZP)dHIfMkCv>bUie z)a$TDG4sx{6VRI41lpDH8!Q;$0ok#fN9<}msH2mNhE#lyp6>Vzez8B?I4-oGIe~6% z9KJ)@_RVOHf{9fZdK8tcL#fYX7O~vGc5@Fu&qDZwggUBG2*A+;XaitU(30wfwu5)39;V{;Chh zn#Vuu^#$O)K;!_pxftB-y>$Dv-9(PK`_tX-wo7^epg}_dv@dgks_!nf1kBuv2FM&9 z9YrVkw!BUB}^duRC;0WM(+h*0e7$`cHOW( zX%F|qbDZtDT#|&ikgPAyq4^*vJpx{Aw-vXybWi&o3`46?2TDZ22X4jG{8R{T`cx!P zA-}0>5F2-%aa{_6Qyflc`8GvUo9+t6yGp_lcB91{v-2HxX*#-kpS>1pJbD<79V7z- zSSFR;cYE9{hdaC%dy371LK^g{X*BHmuH>p&$tb?AakH+Ze}qNFg`8@3+4YqR`oEo= z1G#r#AaDR+{%_ex+Zh3_0LX7V`2*yid_cJi(KNq&=4GBH;103NuYP)APdQ+* zJ-V^2H0{b=VpdizsVEKd;bA`B;COosX;QvMNzEVY-d$~rk&j(JfJ_Hdv0WkQ+;m2| zpCsIyAxIb}aQgnjxxG$JC$?b-JJocC4DsBKn>jg{W)pG}g^JTdpl_b;33=$M9M1=> z5KWG)9_YN5%Gq^dCiY%OJ&(esT#S(2S_C%038`>}pE3)b{(Pe#TvH?{{VS!WW-$CL zU9H2WQ!)JfQ=pJ~XH<)Wp`QB>S}IFkrlh|&w7(1g-3Ml>NNJ$SVKXD5Qon=TZOH*q zy;5iXn%S1;4d4*EuTBTKXShf?&EV3q{a5v)^IE+Vlhk^4(Pb69^Q>cVrnYYRDbtVC z@Cb5PuuzmLC{)f#brn9s+LSb`>IddQs6P#3Jg(O^LfO3ChN%swbP@7Kr=W*&-Gni! z`(&N;;BCZBOqL+{Mr(XIrTX5EA)*^QlNtv0f&ja1S6&2xFp(<3vb@F%SAEKG%KR2~VA6H>vwzsz#SXiW1 z+kI4k3?Tp;0b0Wer@XQFMZWbG?`5pcC)(-^7)=^pB{U(ZK-y%jW^*r7S8FA}b_dn;Tef&Fv|HwkyB(1roJzP%MxLYdXB}UX1FYh2MyOgIW+}R@sfmz>ho@z_29Bnh9uo`+e!fPHa*c_$y$1on4B+>tb9pcP`kyoHD>M6al4= zI7rr$pP#?@sjZv~7~@b792SOzM##~b3YAk2@Zm84HJ#0NlDDWYF8~&P4QxkVNI$3l zot^Kv;0fi2n zBj^cRr3#*r|6Y=u3hXr+C?X;v^xxVot~Qc$f4>>LLkA2w`eE*n6V}viBi-p@DG?AFT zY;c|JIKYSan3?1M*EheoydL)LPP&~vaLV7AoN?LN9U86*^DiGz%?nJHft`73 z<$t*x@PIi?xETH&!U3R}gj`@ft$dOJAo=+3>Rs~!b1=6mHM#;8Px((Z%YaX)XP zsZ$fHwvyd&UBi^L{6Dk9XOFZ5G~|m;g4iuJVe5OJ^?|3L%1VIY5J`c@@U1DPs=0Sy zAx-Bt7{Q7FO>*kjAIu&678V9dHC_MiS&DE!9nbce$Blk|Xk0r+%<7&+<$Y6J{$PvX z=qSI2`X+2ar&Ir90Q@R@cYnYy8J99P*4~Zzx|;U#c=zOZ|JBgw`HT2EPt;QHmQQtX zG!uDnw}hSLT6M%fw?v?TraetbZ ziv+SKStse&H~fJVGp+{A>fOKMFN<*d#I+_nzk`1JXaAYf3zHrS!c(t#-Oqe$J;RlF zS6TyrwCsmhMZ|w&l;Ly1uqv*-v^Yk5w0&tiM$Xfe%e1nb`uX+smg$9pvs)lFW zb>OykJETN?Nr1VY9lI2xm;MxNHJ%zatNu0L{I|2hu?K^#mk)7F`>x@V?{>-U&9YyY z1CCwyxh2IvOvXBn9T+0}l zU$I??HWuOs_LIc~G-h=+YY4~M^m*JKg5^1{rtbJIqR!r-HQ?b9M|E%f-RjgSl|vc} zg+lB!3f3Y@8rNczbt1}an}|CEN=eAQH*7$=$@vXj6nI>Ow!>^#JCcUtc%@~J(WU!0 zzjI0z-pVibsOdn%Dbti8Fj)>`pAPnRC%N3(N|RHQXw`>dn`^-UnULj@PM~}C;sKOf zo)HY-1lI)6BqfLJ38rTBFzsoUTdbe`Q|2@w=iRGo5RrAh{o6D54ZA9u75xC(>_^n+ z<3w;r8z*8i`2sTdk1E7@kcv=n|HK`VufMUuK-pj{K=*j@ammR@KhcIbHqCBjzlWk+kPGim_}fPJIE|E>MUBSS>3&kg5QfJ-hds}+nx@A|cKfG%dKx1y zbjkb;j?2VI2QTW=yI;1qx8Y@zZRY%0t7=aJW*ZqLMQhCi?E_8EEx7cF(LDhc2d4+2 zqTS7sT>dPL6;^R3tEHKh@HoIWG;t0G^Lc0ex7xv3By-h3Z#g;AnJ3meh2HQEAwZWq z1zz8V)f>3aNgtoh8ZIxnozBrbODV<^WIkXF&}!&_yD~SG>-iC%JuV%*zdNILZzOO& zMZM>Ho})ry9qu7{ZbG#i*A8Y<5>Wh#9Kzj?>7Qb4-=1a!@;hhBx?L@rQ&kTvRt&TU zm{^#bg6eCLN_ssb5G>rWXPDuOZu?&TI-;aFq7VsiYlD-*e{zA7t9iLjP!;d&F{D`UWSubE>E{5-L3jh~7 zNUo#bP)?Hs{LU7M4b{^R8Vx=GI(yWo2yMgMbpTn!??PZeB#DZR4Wpnykldl9q{M+7 z*8FZkGaN8MQZzW7=R(Yo9c_}&31aTfES?{P(1S^4*So1Qn2+|M7Q`OZQy^uhVDKPiJ;J z-G}`0U}dT3Ziu#98{f@{`l$2>@9VNp)^zuo0;V~=dULfjpX~EPx+2t=5z0tV6!$f zraj?k`>XjNiB*__FotN?X@+$_lzbg9U zj4ElQFTFj>dSU34efW3UgbQ=eaBqb#27a?i@4Lg(Bm3(nE3Wi&AVU64O7^S=K^;3A zd1q;7r}?QJbU@Jbxd2rL#k&{L?Pm|;<6^~6D9G5Jf5u@{4IFoADsvc5TtFfEl2(vxS}Xov^Mn~9oa35eoiFE&u(suJ_-5 z1Ednw76ZM@JzE02@>douKB>J=VrAp2P^LN%z09jnW%%n0K3|nHrr8X_`oku6TtJ#Z z`mTKRN!89P!lGy69+;G0gIwCP<9huKrX0sw&(8C;!!~3;<7IT*O@Lzr%0$la!| ztwz)xt#u94j1T;gIUXBG8s3{Cl;8^{GuuNSMEQeagP2iG{0!XQr#0j}849~te*F}P z$*L%(!rKKz?z966>Ro&+$4`|Srj`S6zm{3w&RL2~wV!@0`#;OPke_=VcJd)b=-1@U zqPvzas!6R0ZEjrSYb-r|Gzx0h)%#H0v2b8FLr&arg?ZRdiTEP;=~bc@BRX{GOI}PC zZ-&IQ0QZYGKyd1#b{n(w+!+8#&;T5cZu~Xj$EMfPg6;(A^wwZH?k<(gsR6wN%b6GC z_Q2|>)(JK;yMXDYikjKx1y_Zirv7!;c=%vH&YF@9)J(`u=}9+oyeuv}843ttvwLxS zI=w?x4r1s6YF~PJ%8ei7eR$*Al&`3-Rpr4K9{DKEL%F!}h*pLDrtFIF>97sN;Du*< zM96f9<~#QZxnwJhaLmv4w3zk}FEm0il=&rjPWDfa(Uc31?p%-QdnruMMY;^s`Io&V(UHX(& zr5ZvnaI1wXU8l;w#6J0QFm&1d`<>3|&`YlNx;p^FWBTJ``2On46+n-!&{Az#xG5-# zv#7HGF%NmSUk$$g8wIsTb(-bA-=6vt3F7`Y;bpPI{0vev_ZWbbm?_O2uA}WQLjJqU zm9@?*JmuP}_YPMD4sA|MRZYNix$k>F>O5I{;L0I>k6w7rbFhIT5DOvYKLmY z6)+-2WQz(n`1Hc-%-IP@o>j;#Fm{)Cv&>;jb!Vw0^H~cRIWzP)d8T75;H3+>{yYR$ ztM6CmYGU#1;vJ|R?UpmOOBbP`_F$&k*&ajRvn&No^7>5L5*~& z(_vhaWme4>R;k4ZQ@3VOj0Lsp7?nFDx0=~-SF`DYcb{l?8g9t!5(oX4rOx6L6RrBb z!LEHP4PDW&E3b%j)w-m2i>>acP`Y-G`-0C*;N@6 z2R@THtshnqUOf42?iEsl`)tw8WOYhByR+tNs)!P+?wkNdqxbxi<1yjr#(>EHK; zqibdTwf2E*mRn5bRO3R9D{E_=3F?8LZJR+fIwv07H$4~K;CwSLL!OGOtzvy{f%#|G z)FG1{Hz|Gd=d<4OwYBxlOLwjOpPWkS{3ZfZSp0aG?Oa&w*AomJOmZ?q z$o88PwdMhO)_3Q?O2+8dR~K^h1kF!7fN>M|j(GOaTvEhUlsxsTW_EV{rxBJHwQsxA znaeVF=cGbt21NK;;4Te!{Q*7_A9>JJh@R6}YwIkitj*qP zTT)%^aETZB(vsmZTw8ZO#HMl}XCKnpbv1Lg6>rfY024cNjpaS`&Y}D02*T3RSJE}< zZmlUu_yU*gRl^I5p^w8lC3VLHAzLqEF!w$OHn;24Xm+HDj%XQ{vEtD;f9-5WKRV6$ z0IYT>FG30B&#Euvpd86UZpSUm)Izs^)~nuX>*e;Ss6js~7UE*kT>pFtXgyUKXx56CQ@iw;Q*I&E6+p40buWE1F%VE$IfMz3~8r$+$xamAx!2Mz0rP z-fFQ%oZWB|xi>pwpe!b2c_I}~u}vv8^NM91NUajT8L{z?|1xTh^|vEpg`P4-sIMqf zYKl!T343ZKDQG;gpyXj)rnKX)T6&WYJ z-}Ap5{$^xMx)j#UW6Bfp+Xu2tw_c;c++1vd&C%GBo@uRmP0w~kP>}w{4U9fwKT?D@ zWUeuBx*GwEwvB)VN?L&}LYf3bcbjh6L_)OH;NKp0p|W)FXf%&o!MC zTo7BkEIRG=!-g(E(X~WIb@nQp`eE}9x6xak3Rob;^6rh~dYbgs4-8jokhzdK(=N>h z&uw#Dw8w(-=uKNOnRGfO3Hf!mP$J^rNeW_X~I(!2(vl=rGDOtMN&e zv;Aqu-oCB1qI~}?+Z{s-0RhV7 zTO%WMMS_WBwtO!>K=vh^&rLMU(erb*hxw#SDI|l-HX^I|Tk6PP59+_pCM2Ev$)GV07Dd-Hf81(i3UtFKT8=(CRR3@Or5Ij!!0Wq~ zfCoyA+Uvo1pLc1$*R^ha{6NfAyWRiofq*M5Q5+#=4h}b-cc)$us;)hTP17pJ?kk=s zjOgFb{%1N2@el% zId)JA0i*zyE5qdghmH1M7Z2>}v3x!0-T3R(1bplM3-$Y-@T=~J_`R(kSp}DZKk-jD z&2Nbo72M^cY@$=-nxcx$$PjV+RaT>So#i-;Gz_7Vq%2!w=ze)T``>bVt%cIa*Vi{^ zJ7}#^Tg+XHW!mN(vgi!-LJs2&bEN7F(AV5Sx9@_Wz9ngSFh4)v{vX6R-FfbK>8hBG zzk$196)MhzrIyGL6hLA#x3Ca`B#YXe*h*A{LZz3Nm(Q@Xk63oWx+P8t_dY+xzy%tp zo6Q6|_YVLyjo(rz!lR>I#lTf>0oii5Jl<96{R1PyANOV!*O}hOK|rOOdvCQZnsw*! z$fsA->7LWs{L<2g=H?kR=V zWfv64zZr7d#MbueX?l8iBERY0RDq7bLf^ZxvfB&V6kUzxNR~XLAeFOc7Qs}gdAHl` zShr`XCX0OS?*0-)Nxcr#&`34YD&!@lGyGh8^V`-_&<&Sf@!|S&nt&+oWhzb^kLk57 zqpBBYI&eUL_fDnpu0+AO`1skmzQ-Y~g#ZzG(AnNrS%C;&#;ez^fgtbLAr=wffL(9zaX#NSbaD9RDM-v9y+^KrZoXyoe&E+v8&qR9o0qu zNC0(6&{E<6?q2~gd-S$P8x+Fn=S zU@11pp@we%*?4>O38{1f27MtPgRQ=D)geaNny?c@JPFW#-p(Aw*69IdibNE&zPU7Md z3a)`W%x3FZW#*2Vgt#E4Nt6pH3&On4J}>bBO9$)P?3JyWVJcE5Zu3x1zPTkL;=?rg zr5WIVhuiK7q`QB1rJrdz1j@%elGfPHpSJ{R^e{Jr0D6`+(W$o=1lJ=h4ygPSrvbu{ z$jC?rJ7sN+>nlskA!ZykCxEGrG9F(@?jnA0Jo|HoXirma^G1hMSawp%(Yg#+gJxyL zIg8zXg(L?tO@|!j(U4m~k!eomRCbxLYA=Bdw;kWi0ieh^t(YR2 z-0v}sVdSd2ytt~*)Offxc1-M`_4Mh>hShqsbO3pON+yP480vbioGz+GNwvkC+P62u z&*`@^ZaGy&L;1;MZ3~LX^dLbI7Hdb9(P~~iCE9L+l`iLcTg`MrUTnhy^Sr1YlZH7U zlhq^jTiSy1H0#*rqYD6&hrV*iP9DuFCJ=}^SOdfVCvic+GKul3hk@iUF zAuWkxh>n7kvdYvzl=PD5KA^m(Nc*d}lxcN>8WuX?QIjFr=b~&ozh*%NgeIjH(!GFi z5|7j+szMT=QtiB&fx71(P<0E020Z;E(BFKfxDw+@LjqXd#gl}LUIGMf%KZiHN($TO z0fr3P+V5n*Ws)3UV}LY2u0iYtO0O5jW$x|&R{hQbmcUNt{?&n5C+XbFa;bNxgOfX? zEp@mc??n?UyH?%lC0pM*QlHo~cIbkj$3p^ZOw+PNqtd2iPt< z;;I61tjg&{8$+ph0(Pvv!)4e2S}7l&{btgT3H$;D zP^_yR!bCleBahf+eo-{I);t3E0);c%;*V@`!QGsgh z$~l;}CLE0A2K#DvX>SEj2WQBva__`zxsSH0mVix;fKD-e`{W1_OTR4zEnB^fW0ZaG*{f5nwjPvzF3yxGk-$6I)|gSPQp!6Oc#u%@tsaSKQ=%tozbzmG zNP-NPBpHC9UJdcBf^bTV^WucR>ygR?5Tspz9yyiP(Ht`s9W%HO3=G&O(KOrjWV{!% zizZ4bh4lV02)uyso;lI};or}Ys<=KaFNN6?zv{H)XAE^oQ`Di}w={BZbg9Wd9Eye< z0`1{+-B}b%Pib}Dy}QmxdC=rlr(o6`aG0(~1#szg0BUCGD^RKkH#m}xBk+tf#9pFK z6+0enB^t0sE78&aX8+hySh%uH@vh`Lx`_~5}$JdTre_>qjjgJ+gUWdCAY`w z!A|i})3cQRIzgZeJh1C)>P=6zz~6xoc+06{`!)>zE7$*kRpa0mz>?naUevPFQDp6D zAdi2&B`wVklvTF?+Adw45@LWlPBSVjD)p3Pta_X|5m#|+EgrQvUHoq#2-s;TmA`8y zaxZ80TmUz~4TYJdyn6L2X1Wi%~{ztv0?MQ}pGd3UWI1L_~YMgm00ZjS4L z03?x#KMANfVJ$Ji&%o_z>wb$qMHQmb!R5aq@lsiIjX-ma<4R>MZS6iAnGZQR$GHkt z0QZM_URv+*Q2&nu^9Ji^%3T1Yy-DZF6vcYl)Ipy15`a%W1AVADz6t#{T*Eqmtd}7^ zs`dOIvj(cMXWj~yx=)_cGBu4nW@fTNkdKQu0iIG}E&4yxegwo_M`w*tl7BJq?=^Fl zov7WN05ljhU<)PHvR_oKhD z;P?rk>fIe9y^sYYHPr&m9nNxayakd^Sb>UiR|)#xI%(@|kPB6r9?C;l^VFr03fn?gqH&YS=1uRbcr zOP#oZqWQ0-{>84tDaYsddprMMrSV^fW|Zp~EJp=?qciofc2F0w+K}MXj-D<<$>(Edc&R+Oen7FmS}aRWI$Pta82phHLyhY+V4XTf8P2%M*}>*8-kyS7R#L1zSOWWAz6^)vxVJ7s0U1q zldRr{C83HyCl=_2u(it$>9#azaZJ_p#!FlET%EAe0?}n1pO1BDPsD#rkrvy=1zGSI z)2=hYy2LM~RySi52q%+Ux7K?rUiRyi5|~PBmTB=0>3iP5WU9pjKj|MLOy-#yz!!az zXR4Pp=#!j`b$lSXXxU}mPPj#zs|9JviMvJ(2TYdOFw3yEw5zG6cHiH>@wpp#3doZ> zJa72t!Vi2oAhgJMNzxMFL}cWWAgtJ{gmLjPJ-TSXE+dmb)PfNd3y_}MbHRB9NCytA z?8h^*r+zT8f}tnyqA{b{B3v%^@AqVN1%{hOKk{(q33qEwx#$pf{F@$v)JL?~iTUy_ zIvVUQ{SIzJ5GP&jaNZTS{AZv5b z-fD#r_iSO#l56H}l{rHL`l(5(1*uAQ5R#k?Qp?eK!I3A-co$dXGU)U~rQbeHgLwP9 zc%m3)&;G>(Sleu`5D7*wGB&t4aSvh}Tenh5L2CVNE;{%EU`g+LTr|-arQEaBDb9rc zzR&))Zds&LW${0KR-@@{L1GjM@yH`)33GcJ=j|n& zTmUCSvN8i*OjI)hlOBh58RD}{N#l<7aB@e8GVX)?Zr`0!(LL|3R4Y##f43&`cf>-- z?qF$vn>f5_)Xos!-na_7<2*&?D*mblyRJA-uh%e?$lCA zy$&g&J=b+aPE&oz;ent5j{W=Vm9M?s8CG|dA@!r$uz3N99Ic;O8D|&C(iH!>41{W{ zU4E*G&Q_cCo4})rpjAw*9^FMvNe^J7x-!O)Rk^srrmn>z zSm@wMYz!d1T%iuCxP$_i&?Q|9@C}^?j_2Gi4Wmv^!uGt?`n{L?t2;)RI#6;xNBEQ_ zDDN$9@0(u4XNK^!f(*9qoZSh}u7T=NE!bXap3fi+EFBWKxN}<(L)tg@e8iad3Q2Le^d;x!n&#$_9C6? zE41ZC`^x6ML}_urc`o86I=+`2_o^>oU`YcyyRD^`;bd++f}A@$uUAQztcN31U=wy94!NP@J=Ym$ZP1&Z2?cj4{vbBeG8iaN00N1J#M6UV{up!qp zLi7MQ^&7e=qFF2#Vl`yqjH#oFke&on&)aRcnNitRglVD%w~TyMYlw!7iepSuQn?J* za-E90q2;QYu+|=yL=WUhj1ZxB8^NnL3BMZvbTK z0+gX2va(v}#F&{iF4iHHm+M_bHPZZqMZ1Nq4UuNT@t~Xip6@NzSe;-KP>Ev6D%q~V zJDDyXFt(o+GSm z^BZp%s6?-NC-xh_VA0ddArK^m0s6TNs-YQbF^?NjD%LHm86Y+WFo9v*5+cG ztCjH&Gr^D4)gS2VC&|?5wE^2xxKrZ(7i*QM260^@2$i$s!f%C=FtWC*m}H*{LoY&* z144~drPnIS&g|pLl}FGB1NQ~TCq0HS7P)lXfME5;9&+XN-+^1@)!|#qP|X3hp>VQX z^ASAaiTvhhL1CdM4H@Wx6fJb)2Hnie3?}G4QvH)pV&y()0G}X_^LEX|*#`*RSyUz# z84~Q-SMe4u+R00@`N%0oVXRq3SH5yx^&3e*;y*-2*DqHw2&)i_m~h^kD4`l8SYHlR z6i{YL=%qpTf<%j}-yc8OBOWCN&|9iXbAhk-@9E@KPeApO<>5)$z(Aup{ho_XMy?k4 zVn2;*Se5^L7XJU^vpI639x{`MF>l^@L>S9Cvrv=-oG$*Y`i_OsI4sD=eRJ2HFlWCI z3g>`bGmw#6Wr}GS8pyS-_bD7-S}pU*uj0%rfXxs3y2Hdvmo{(ES1U`yyHJgO4u=B7 zKJCuYW?~w{*A5JM(u_Qp3lA(kHzT2MZ2b1;&u6b*zrG9tjk52E6=N;dA+NDHT^EP& zCT+5}ZuXZknQnr70>d^(?YQNDV=U(zmasHnpu#>|h}^JbC-ym*L!`SxBn@u~D}zxb zjwYlk^8rX$0Ya3~WFIdOymEjgN2BIRJx={*@kLC)sFI?q6e^&H)*?4k~PLOxNzBi zH+34+5ILq?wvK{QW&~{uVm=eG$PAV1=gKu`&4Dj;FjhgedNYc}Ecam>Q^S^w?VQNb zbOyG$>0hHnafNEY0Zgf2(6CFd_q!dle7o3(Jx@ojh6y)dJ=*GXH1fP=)`mBbdh}i8 z1qzoXXG62U@W1K|rO%MBy+G8LdKveXc6${~+-OQpk20|`1R*-AEfint%;p!AUaWeG$K*B4 zeplUJwvUenRkcd>k6Z(xX6{!9*5WneMlFX+kl-9m#O?rM9FEm~$L!P$Cs+F&;!$WP zJ*3`!i)=A)s zxX12yN|82Y9oSv64~yfgHOD?n;X8thnKC3w3B9sv2A5V3G}_Eu44A5N2ziXCwno`; z(RuB(@3Zp-qz}gMF-u?FmRpJGnFz_)Rzk62;1d#?tKEl87?Z55r*j@0Nm+4kLTp*i4b zgzTn&Yy{}8Y8U&|AgSkI)$4=g4L4N`aHIS&Qda-(S-MO$8t1`=;JQy}?=?u-D_q0$ zhyzUwbur>K!W|QPsU6YRxrh$tHNv4On(+A?k+v1z0+$YGuR~a*ACQXuGy^Siv*>}Y zzwFQ14=qoNoM)c04X5C?Lu%>$~^4!at*IOSPKRe-5X zUB?XaB4s|hD7q_Uz8ZClU}p|?jK|r-2PJ1^7dhZ$g2(d7n#Z$_5lvkK5QeTW8HN6F z(g%$)#tf5^v@yt7jwzC|%fSF&>bF_2pkZwamx+QVQsP?uI1IQ@k4?UhCG=MpB5?&s zXcd<+4bCwhx-{;f!(0HeB z(KM8@Tcr{G!QWnH89%RLWPZ7Np6$w&s~2wEcyo#kKJ6!FZjclMF2ZJC$rJPQUJIRD z=MwxdP@VJzL}T+TyT16m9+>-nN9X06RRQ;c92(rn(fFBZS#o!Oz$aJVBU1e|RHws_ z$z;rJZ){=|Rk87JEkf|~t1TEhxX-;2rJ2@+)LT0cBr!XW5O|OX!d0 zUOh05PEy)877$j&D{}ed``+e(FXyLMqc~9oej1?!=sm4B64GAltN689{K+CM-7mS{ z<&U$7-I`LOzNDc!MzejYI#n&rWr;Ntq5Ze0*!f7#xE-Pphl2n5u&yy-7m>X~>4nZYy2 zyp^JY?)7(6adAwS2j^=d_FAnfM&UVJHR@4Ckv@YC6S`rZgCWHq3a(FvM&WC+%4*-y zX-JkBxbIUpIiAP4b<}t7UN0;TOiHV+V(7+N2EH)j*!Bf--9=jF^#sf6vb6NqR(w|; z5-X@Ms4Fb~W0J`BJ)qcYNOE53g^cr1m|XD9IT5p0E9r^XlO9umjccZ5Q&&X{TndG1 z4^uk{VlheCy8}$5m*`w3(vq%%)cCUng?uJsw-Rhqm4!>0i}&hU;HQr+{-dXZsy(=i zS^s)XjMFJ(1V)vtI$vWZf~{1-mqtf`AP<1wqgmQG!<`VCgr^S|Fv@1ad{W<~;G=^e zpxRel9h~xTLBxcBMGRo|h%a)FW-9!pMT$8t4T-4u_zOKGJyy2K7b=K(t7PwcLRM7q zdNO=Wwd+pe6sz%HC~$dSN0&sS5+YW_xmpPyIsd&p>^C(zI6n>E$D9+sEk@1?xM zqaJ=7ClwWyy8FZ;iwiB7I4`h7)DB-XI>-64x6J*%%EK%7R$h&AZ=O9BleFe~(NVBV z%bcL{(SHp{Y2me7m9EY=iu%tH;rw`%&o9r zh7j?Ef;dRl3CvoM!1=!N^6=!TVy*IS;!i9TEb10q;K4fF z00f~O23*BF_EI&`S}7(5ZOi?vYr2K%sBBwDgetz(JJW&&^)u|jE4~l)XX-o+N_9Lr zL4I?koF8FF#tCyS?eA7z8^R5))IVJ)0~)VgdKDbTpH=noeB$8c{DO&>IJCiKk;c0q z-35TC-S+zR_|_l+PLHKecl_-Yyx)Bns`MrL&CR*p&uTm$yrXeZ*7Lky?t?3Vq-R2g zjWl2MM9=amZ!gX6@q*qH_*~sge!Iv;S#OH^FV4+^*M0Cd5-p=w zRbwj)DSl1RTDj{Rw5#^GLI?u%pk>a;g=Xn7&Acik_G1R^UMn^)PaA{RC5o!0bS*W2 z2U$tu)Q)n9O;Y`_Wl`?Gi1mA_g7yeB5HE%fW-J$)5{oqJOjKsO%mMw$9jOzx#L$3q z6d0By1vu|Jb-lIKC_Q~vJK((QM7Z9i**>|_)2fxpIeFG@k({Z~FE5O|@1c8{t=!ut z*i4-`7{0X&)acR_M?@$-RFlvbF^(jitauh4bL!Q7z7h!Q-uB|FdPel^yDv^YnXBPd zySDX|dFeGq8)b;H=eoko9-dA8L#xq4A_>{`pbp7|+c?x*zH>&o!taW9!0Sz{_;k^O z$s|3)*iUNu)V{e*9*@@g=wWm4jbB#I&9t}&V_G4P+WCDF-ki)><6@DrL1^?OR@fa_ z%8_k;m=X*yjY*_Yy_AfI>gll)iY8L@`m}#8msT<0NSCJ|Vs4?f%@(7xzM;L`5n zIQ-^gdRT+<;}@x#F8u~C)U3HX95lIRUAdO;z~L~$dIK7=00j95O825&mWuZu+{*I; zy}P1Z=74)%Y+8LfyKiv)iQR;WLF8Z&>t#DL>Agtyn9C`b4Mkso<{t^jUh$L)_13tT z995BR5hlbQ8>8qr$no8zio(gi;G&$Xcw<`f%-GdB!+4>dy=#Mz7G>ot9*@WYk2)mh zgub@EMF~#dVEmHzg$Am#Z;W(zJ0I(&c-51=A)4?|L6* z1>hxrN4%m8+1bPkWsy?Ou%Yc^d<|w>aB#ieT z2e|Of`sGIks69RR?w!sVbHk{~wuhICG;jJ}n!jw!{hj%%6Ng+nDL&Y{MX(4WtG)Ps zl5Y2;NqM>W*^tl}#pYK}gwl8AlIHb4WF9Kr7#iGrhaGzE>_MaiU5o;d2RwyN88wReMubc}`X?^BOA5SE z3m+dZj0r&HJm9f|HGDrl<-V^AxLTo{n?c7Oj!cm8152#?EWQ4SnTQ)LKmEF3DcnS` zXEh0Xx%cups|p#&DT6a#ExEpU8d&(OG7acj9;Pxb@{%+))e>a9XY#E-;T{ntcs_;2 zC>giHXMz`@?ZSFZ43Z($0G&;jM3=h@ahkD+iaWr-^tQWbke8Zr=8Rv7DkWmy?x)$ zHY~u%_11Y_n{>ypM-%tvL>dgZ88;%LEihpMvRx_s31h1ppOP4r#r*g*k|qVN>gL4n za7jAHPf@aGg}s=I;wfL0wvpCoVA zhWqxw*gi%v0C3!zlcRPpn76(#kR@ks{zR%aJ+7krsFfp>LFX>^5 z7HY=zc^B#Qix2x48g&;b^$W*{nAB?s%Y$mOz+FndmQq2MPcGlQrkh;{7G$bo=9PEg zyt&z~D!;fIzd+%gEhrxzApI>S4!iTEt6{v&v)N6No8k5fPkYulb-J*?DLOiH-_PbB zZRfv;=6iw9 zw5X{RR}4mqSRsz83>fmCFCnrbq2iN!Pw>6Ac8!TBKbJx%DxC(cAlbeALpF6PubSIz zsA8`?%VDeBS0;N%R$m{%n!f9Dsj3*ILv(078G)7MKr-JOD8Q8m-!eg#^mjQ)M^w5D zh(}-xO4_;%CpeHqee(sdTy?Rn1ZHEYF~B*^+nngwTQJ{0JV zzwM!Y*#<^de{y4_!s`$82gJ%loBAY(n5|=%H*uacHe{1wtdG!Leal4hfB76(o2@^ zXn@=1E84Ux9kO zL>+BI5YztlN^9w1SXo`*MWwpaR(?uX4&Yp;qWP~F(J;TW8B;c%zfaDGb5xR5$QsUp z`yaOh$JSh6qda@kSSnfy42pYZ3lP8aSrjKRK|#cp`wOHNfT*O!1?~6LiZ?@eB6nA+$U!Fx8>)Zh02c=}}QKHpm_0C`?`NIoOiN=jCVYohDld#+`U#pjp z{^g#{&X!WIiYrd5@vJC!Cc$EreSOdUh=ZF16^G8+4>!=a7N4mfeR0-Al+oy<(S}nt z^P7!`G;aU9;^KUW>-2T6uRba!gdh=Y@NdtC2g5d3WapNYY7em3zPEg|eD=$(5BIa! zUZ>PuzmcF6(#pD$Ah5SKMo@WbK@SRhr}f_8RRtCFVQ}*WnYpl^HSsEPPj)x@~7@VdV zIq)UHK$%pX6}?rH<1xgRjr6&iXb*PA#)Co{u*zI~3 zD$Po?e+>cY#Gi|skF)4a!}ld{h1`Q?Jx@11InehsCL43+-i9DqYsD9OE!^2FJ>3Q! za`4l*p>L@7`u2<+ugXzVWol}#zx&-QBcjy;fkcll{c-TjH?>=fj&n8^rS_-Mw}_s| zrY4Yx$9` z5t;rRdV!-p7L}qNrbda!v(6*SC|~#}DBYo&TfHX4Unc*DtsOj7CFIM}K-YbIoJH4X z&lW-)^@2B)qgno=;9YeMn$2%hZ$`d$-@0$>AhOXvi~BLow8=y>M>iIK8?q_{b zZ5t=ne=coMw7g-#wT6iH#wG?22MzF1)3&}ppU_ixCNaK~@0J)}Dl1!p0h7=EnMm~q zyDKN(gKVippV8bAN@fo`=c#o$nL4KDNwA&bq#`d^AlH^x*lM$zo@Y3q+`}(5CM9Jb zQB78u*(ySugs&~XGf|WNPW;bC<(sI;z+MOx6;HB$W)`ugBo0 zQU?(_`-Z82G+|;oj1H5g@=_%w?ajyZ)hnCb;E$Q%@fq&?bj~f zsX6odog)Qzzv<(PwwOcDIIIMtoD3a%U9-aLvV@rqQQl6LUCs--Ej93$~TiH7GT z-O2n^5YT(BARMT8^0mGcIxBX^)s*RHn;%{4w>1?nTXN>ep~Zyouz!u|t{#vN1oX5v z`C*jVrC2+gwp{GSboY;(T~`biyIck^3vhzGuh-vP$PVJJTI~Gk?MO`B^`=emqj39` zie*|XDNe*vL*dxQB)64%XCr)>C*TdnZfr#yEftH$Bzg>4K}j}hNbbcri}5Ov2@#k? zriO$D9`p5)O2xsCTi^O{=5+%QclX=%>ZwUUhCg!t9W9KJ;j58`VN(BG1^L9cBHEcd zp6uo6>&(n5ng^SS=6mZRb=eoGk1j*wgJkPWG*0WxIZPUPR`3)BY0gmp`>^XnIei<`JI68=M=hzSf1OK*s{3In>oMs%H`clEznL=j%B`h zY6L3J1d3-dtCmv7`Z5|%vbzzJR)y^FRkE0hYA$0$-dIKTmzRmydK6cZX1_%D=yQCv zuOLzfZ4Dmrs}eCwPDHs3*uraK25on%8gYZ-aBOqhW|c0KN%18E)mMT%^il6~)Q$liKU&E~yV)ptrD4cqyutwY#~mL|lSI9es-V z>Y`FFxA#ObirIVMLtem{uca+>zY5kf?2{|uJVOECGH*m$iiw=aNfaGCvrtbb= zcU{b~A5a{jWo8CMX`77Mdfv2926=tBRD1SVZyn2%;5v}V{*abpg;xvfN(-}IkcbJ` zY%yhaUBSZOH6aQzw+AW!tYAG`6;Psr*z5C7TW<6+LYt(z#N?VZ4&?$y!D8{BlW8XqtGie0v zh@im(Nfc?h0)_qI3|;Z7k{#u- zO1WQRa=8kWzN8+Y;4R$A^GxX^ybNXZ42$GBv0k4rHx!8mrx0_^wGzTkEH)0MV)CXn8ayKty@ zch}NDorR+upt>LcX;n-IUL~ZY6ZjrKN?g&_4%Nj#@IlZ?M;$Vcl1(br*&mjCK>t<2 zIEkQuA`jlYm=H#rajM=qZ`pP-wb+3bL0lonlVd7i>SmicN+s!N4mZe=Cx zDBx2G-}Rc*bbsZDBDpfk^>>}D2qY3L%sYM(?Y%TA%@WBJ*HozikCB+&_`4@4t?9oY&;l` z{64Vvp!@sOh(Ky7S|5`HcC?-7C0A<}#TzevB7-Qhw$swm@(SLF6uluJQm0ZnHAGT1r8kEg;3$idGN?`xp+inh4JK1apcK}N?Ulv zVUB@I!Rt%=Q(F(_=VrHr8mH^o?^I*Iq;0?E=q!T6y9 ztGEVnF&H`DZ%G0%QxKlQ1Q9yjZnnac%VpknjisvCoYrcU1;W;eB6PJ*zq1L-eBWLk zUPGwz6}BTvq8h8^g{{Gkha7JBK~auk^QfAZt(eI|D{he9t;$MYu`1vt#+m3txBbtH z)HD8zi;Ll_JbSkvPq^+cUZAWFT+-cUt1N@5;zjAxYHZ=lDzhYOeURIJ1|}^Lhw`sx zLKpo4xsgT#oY1MR_#aXxL$J|#mt~JN)|?A3H8%-!iJ$M2G8?KF z${_F@mWp5U5)G{U0T`8T^pOJeb&#KZ8LX@BKxw~uelSdGt4rC0B+Q$tNlV$2+agGT z$(@|8{)-G_gXDqEu-OA47v%EGsTJU$S!b`!EUj6I#b6Y!&vt*%Y@tNNPR>VhNe#Q9 zA67EP^oVf3^2!Lv%jvpWBHey_AT#>lS0+$f42Jj>mpigQJzisi2 zDL9j{wsPy(kN{YBo`{{DoyslBp+l8hCx5|)64zxrA?S{A8*JR?zz@XCyd-mEK z3T!(>WQY!_LsmRnU^@LzMopS3LjIR?s;q^t+by5dsIJ}cAf-oH5PXg7R#KYIA^B8fg9J~oFtHs+2f ztqfBOsAHw%3_a%o?dV&ggYN^|vyTOgJy-2_sg!a`b4|+|+Y_JcGU2vMo#(ma2DWbu zC|0j7Nd-^>)A_nwGJO9LklOuXKXSFEo_TpXh-S>r+oIgk*2Ut-;kTdOlXcF&^oM>F z7k8MXV`PYdy#b}W;!*%&k{t9d!M?_XjL z#_VW2ohV?7$Z~EO8p>Xk1$EKgPDhd`e`5^=*OfrnRcD|-bixy}^g#SPL=xf8I6X43 zP=Di(qvY>#I`)}7nx5;OWjDTTp!~-Q{Wi}3{MnMiHcioza(98_|MH+|5TLEn(*-{s zTl4>VHXTaIM3D~lDvkT2+5h8L_l}cN6z(10>hAr$!TkH|@nB9AJ&n@XNB_R<$S?TO zMJpJ!aU|`=78v>^sgWDQm&qdWfFCBVVUD=Qj>EkQPu%RwLMqFiW#c3E`OT4Zw~TAn zPle76#=@vWPDQ>t%a$2lwJFYj)px3heE$It^nbN?UQtbL-5#e(kt!m+C{hHeA_M_L z6|ew`5DO#}=^X?TdNuTb6cMBfDAEP#B=i6g0Tn_CA#{`)dP(4N#&)o@>qdpT9NsTo+i*$z5c+Jj#cl*;sb&yX{qEBS{ax!^U*3yN%jCu%*-L{vDY| zXS&zpEd?Eg`RI&`%%2f1eb5-2j?vchXG?hvpY3A#xqB|@5r82@VYW!qYDamb;G1&z z&TECdB0*{q;>VBg;vcJ{6Pe~59!Qh)HDFK0cvqU)4EsA%W3LO#g&t`K5cd{cKbE-O z8EligP_u3Pw3R-N>uXO}i=s-x$)xsGK=j_C8_n$NhsLQNjx{YYvD(z1^J{{r!_QZHk#3 z?I$N$AF4}y=}osK!;U~iG}p9Nmc7E_H_0CKq4Q4%DHqKW_3S!e3N&o%-A4<(ljL1lVqXJ0d_&&(BurgvynmKM{HTPM{MKPu zsGHm$zg`3^(ROGuF&_>G?g%$o2M`8g^UCX3f1Lp0?Oh8ABL@z z&jr}}mX>Kd_>L_4n0?H(vt*)UZ#)wXPFQ?4mZz#Yks9}GPBT>0t zgpGJb{R4%rD6M`R@%=9X*ahZyzG>@@hvQt}<23U`Dfet@qrHaZK2-XelY4h{vF{E% zG=5bp_3rrUPaR=E=-#LxQ`Ed~R6e-2w)S#TMq;?9t%OYPo$uFB@$lgWqK_IGovm-a z10nYMA!7?Pq=U&Dr{TbID39}}Qco|`r3w*b33ue?BIn!$y=C&w4{!k-DmT+ zZ0Sn-NbF*gGV>W`lIR=My{pA^uKCuyQ_ST)PA!BB%6%*jS71F~2phuxj2=C)D%20M z?H27F(0_e&Maap4@6xamcCEA6XQkRlf=h)(feTF-xq`&MlC@;HK?wZ0WqQI?7zkFrb#8(z~0^L~C7mX>@^ zJy!k%7LP^^hdj=WmR8D;lev|#`f}=WX{*{V8*QZz1kcWI@BW%>%|Bhuh?yRbRgdU% z2nl3MnDosPccoDEmC=#-LN^I&iT3kd)siTslVz#3+)z#EjsDtQ(fE{p2ScGX6k(ai zI^{JE(=xpE{jNQsCu>8;)`X_Wk;uLG#d5MAXnnXnXo)%TkMByeIa#QmshC8D!ZF3or=<0FfTI-zSb;#IQ=Y0H>Ty1w04ah_I^O710^{bf?d zH)Uw`e9PLm(2%y+`u)5I6)z-8%6fdT)3JOqkm&Ck0^qDfU09Ml>qo|~*BbSu&0K4q~*!$svO{~PIG z01sNZB_3EY9)AZqT;(qQdnG)hj!={F^ld`x^HD2rZ4QOI_OpwV>+RWCaD17@BpvU! z%Ko%xceES!0i$Y1(dMGn7vKus!>=>q<^$Z&wz`yM{(DbJCtrL3W6RnnUE>W$QhtQ= zQW=fuQ4n!xJ1Z%KIMA@vb1%um;YQBE0taB;K+`La+S#yVMXF(@#&n~6XO~(zZI>g@zDQx?hu-Z^$niROb)2Qr@UZvWY%ve~fUgm=RKATL23hjalc=gGy zT8;&X`qY?Sd*JvX_A)9{@3VYxht9l?6LGPI)oLJ_rSSs}G2!PlJggF*{MAz;3qV~X zb}$Tepanx(1yr3f2`j%e^x#6*bWJ}ZJ(T)u<~$rmOb)t3P6T(~jx><>nvK&4ohwF_ zT||9ev4z^X6m-1Ey+u1 z*4dNYXl@kGh3`Bgk;3SRV-vyVClEI@sG_WEs9m`_aDWoJRcz_jM-L8KU_F@HE`8BP zu*MygH_P9sW0nGK=*qb(TpE;CgkG)zABmH((&UGb5s(>d<%s1s>3zaRWoATv=kuz)F$%`wuc3bX+Xwp)(xv9s8=e@8 zeM?6}{=M7BfKlbchicBZUn5!*foenmo;NcdgW9pZj^XW^Sjz2i4j_L-&f4LEcJCk5 zm8XVL03{b6i+rAoVwJm(raf;bEET+?6c-I9CJTdLy%c9Hm>JT+AtEw4ujAKPPZ?3i zc%Y!h9ztnT5;hdPs-@J<;NNLn_6$jh!Oa7@8nN2=yIKdY| z7xF_&Qkmw{+G`9 zcU3v!?zFWt=*sQW2q8kj>_wg1S)^=-)Olwp2LEy=`M!S18ZEMh-~T~V3Na~p(8*qCmn8TXoO|LGztIOV|< z1LJJiDNuA78;&KaY;O)YFLla2{_&{I*Kr;LyC7>Xf2N*pruPe{x8a!yS#k}lf`Nw^Z2pW;NE969CzO;G*$p`k zzoOX*aZ+sr*)|n?ak={6LSc}Gfd;7jN+H zSQdUUkujqeR=BeN9;1FDE+j5dDZz0(5Nac09U9U;aH@KX< z%Rtcj@!&ngH*wnq5fu^6Rar<%(vh zm{{ZMwp$Z^V7dG4_0PF$g*e^EFH*q~`6~Of1%pBCoJWk&gc6^b`I{UY<%u^g=7k2(04NAKNV|J~Y8(J7?W@Us zYcijaRd=F|7tBwLm!(ppMmDqyC*y(#M{jwE=NwK6Rkg}S{>1UFuDEHPMynCrPn*Z; z^kiU_&%^XU$cT1*s#kQ)L!-0WU0I21Tjvko^}Pig%zC*9Nwhuin-2S3K=s(RZz((~ z<9Qk-Y2NmLMX`^;O-&1LK5r)7_PJjXwwjGpuVU?$3|k^d)?)j~yGLy*FQ2MM}Kh|g^CFmD-aoKlcPsP#vLhHbU2UuMml zF)`O!3@7m2kYnfILKKd%%6+ZSFb%$2o48LFagg64Lao{PK#?&VQl7s)JH2q|Tu6gc zw?_2l$e9S@xTzr~0=${3GXv7E;k5n2y?FBSyG*#b>ICp1_IR|N{%lp6QthP?KHaIQ z{-0#X^7(0Sv=!}(pCx${7@EX1{|U~(NDavZM@CvP4%4=V$rQ-`;qG4Yz#hL<`7 zo>v8Q+O1}#$9yhiV?ovk(AjPZ>*b8)rd)-8@>d|AZ0|ellmr37iwC?)NH&#u^{b4e zWz~IaLjy@I^3-yA%Ennkp{oF}J@=kKxAPz}JZR_!`U93qZK7FnN6PuwS+^y;gL$5QUR(Et>blLWo3do`ZVY}~7mz8X(VkRgkn6wOZ zG#|I@^vf_Yi3(r){;EDFh{k<&qr0GaL;F4^x7r{bA|>0Mu)W(zC%&>}@1K-PXkgZ; zP*`^RgdX0z{312=y_TEM@?q6NOYILIbjjqPD5Ejq9p@RBP?@}mlluoF$VtlmoDxIT zA%tB6#a^*QCX2t>GP>5wtXu#I8^G+>P13U~@i~J!j z99+dt2@8c}zT+0}H}JXd#Zb}og7UX7i3t;OXv2^97F~SsH3~Ij(Q9yICY@$;(5D`ju7OD#7Rk|U>qaqNu!g1 zZ@}VAz#DMHXT{uF&(#gmBSkTmWbRhZcJ_|jjhxneEUP?sCK}jXAcy>QhAnPdUl6v2xY;DAZFLlo43)8uYib=b*v|-f!~AF+Y+P zN9Swus~X3J9cVp%AgvpaB^1-0ve4B;v(@Bpu-=wjEVp&#eYU5gMAox}w}%E^ zR|Mi#Jxw#N?r*Zz@psof$f`C84x5HdhJRPd?K~xoVm+sDjPq&zljrVA4LxcWa<3Q< zRre{+@c+f!aGW?PSMS9rmY$%kpJQ6(x%O;zBIKgV57}-k(qBCNF{kkD(TK6&Mmpr8 z@VS)p^16a`$`|xC+7os)m*qdYs*9^o|@$m}%# zW3jIz(y>Oan|LWSBhm$CISshDt897NRA1$|B={2^yE!g9oiK^=V3!m(($oC~eJP+G z&CFNdYs%1?;Z^d^a@w2glIe>Al6saN zl>msni}P4PMTga1fL;iTasy|u?JwK9&KE5Fr zP>nm1mtkNQsxzOFSjj|bD5X;63WjAwM;aMW* zAV#NA(%94A%W11p8!|F9p5y2##B}}+-^xQJN7LZ}va>yxe9aVn!I=J_)8WrVh7gPK zY9I0l#)@V^6DA_U4sG?^!iAX#T{_5jJt@VC`e_Gd%s|Qp>r9V&rFuMVD)|rMIOV8m zB?w+;0JI^H&T{*Yruaiu+XSe5hf`IbVa)yljDMc~=hj@ZjgsPxuUgiFfB5I$3}gMm z*)~Y?QC4};|7NXk7(FQ3iUbDj{?sjhSZiqWU$Um+#LoHum{3H;PvPN+t{MMd@0TFR z{AG42YW&%Mf5!iq;!*M!37sIiDE%XZ|F*s1-WhLM|LtCv{_k-9_0GSO?ccTYZz%XT fQ2+nsowidt=y2r>M~wR-#o1+`Yp7G9Wf}fo#@~UU literal 0 HcmV?d00001 diff --git a/Images/ipython_links_overview.png b/Images/ipython_links_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..16cb19f54a96b61eebf711af8262ffa60fab2bed GIT binary patch literal 24323 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 z%0A-35~-$(E=6fm{sfW}_p@#yj*P9bE}7Bl%j|sS;*<*EK9~OdGx2im5(7T!TZK9m z2EF(B=GW$JAFBRpoVcTpVD@s(g23XmyNkIS*>+zKG-KV9fm;}tnkz?2np_SR@dtH( zV9wN?Pm-H3-rk?4Q-lxg@|}~SAncf{LJi|6kh5gBiHHaaZq?MXbxzUrfS=#V{m|fj zO^e-msgBpCApe8ATS-72jxebv5zw|5#SJjTdoUIJC3E!U?6WRB8^n$^7|Q}{>i-}IrbSy9m{p<%=k)e5F<%I`i+C@@{C z<>{pmkvW+xiM<;0@$-r5h}w?x{1)KZMQOP^xX&7B_)sfMY~?cnd#%m6sIeTq!F-K_ z#b}{}EsY+2zjN$M*a{9yKz5SRX?EF_*V9t2f3!d!TyS8`S>sL; z+{?PPpLy}MVkyCU&}hP_+9U1UbtM!TnSr5^XEsXwwNH4w3V=cWphoZIsM5t zo9I^HFRuq$i!8Be{J(1({^nN^c72)A`6Bj1OO6?OM8*Du9sb=~XFhA@*&!{`GtfiU zYu~lcZdm26PuqUOzRDPEI;fc^2(jJT%KVJs`J239czj^ulWa*xq8IG^_o6-}`)2S6 zTea4^b`h8c{8;}o%d}O60KXO(=M>|&I~Zl(9AuKB>zX1tWNLtNVH8XzB)1W*NRAsb zu-iY2r9#dTGr&efnaHv1cDwHGy;Qm3kOTmU_qp7%odbG=mzE~ttnnI>%c{p=x(+SQbkEa1Bt7BX2pp$FH=C~yK{Nhvx{*E2w;?#mI&a6LO zjI-;4iQ;plgXf@KeJM$7(KR(K zfUNuW?VGT$u=?|V*fkKA^*jUSm8#XRx zX?lQ2&cj!_*%b#c3Gl^$)CaJhg%Ch+JtcwN?1~QTg#HHvxi7&0 literal 0 HcmV?d00001 diff --git a/Images/ipython_links_remedy.png b/Images/ipython_links_remedy.png new file mode 100644 index 0000000000000000000000000000000000000000..4c200e207262adc5dbf29f3bff269326a2818055 GIT binary patch literal 10566 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 R1_1ycDKUA`Dq+Lm{{bAM!_WW# literal 0 HcmV?d00001 diff --git a/tutorials/table_of_contents_ipython.ipynb b/tutorials/table_of_contents_ipython.ipynb index 6390393..2b1f066 100644 --- a/tutorials/table_of_contents_ipython.ipynb +++ b/tutorials/table_of_contents_ipython.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:19987eb5b732fc336836589fd9ab146141494c84bb74435e60e69fab53bf0781" + "signature": "sha256:41219a44026c84eeb3ccb56875545bab3944aeb5cd6d39c51e32ee01fb0cb20d" }, "nbformat": 3, "nbformat_minor": 0, @@ -56,7 +56,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "For example, [click this link](#bottom) to jump to the bottom of the page." + "![example table](../Images/ipython_links_ex.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
\n", + "For example, [click this link](#bottom) to jump to the bottom of the page.\n", + "
\n", + "
" ] }, { @@ -75,6 +86,13 @@ "2. an internal hyperlink to the destination" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![two components](../Images/ipython_links_overview.png)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -140,7 +158,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### One more piece of advice" + "# One more piece of advice" ] }, { @@ -194,7 +212,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "which is certainly not what we want (note that it looks normal in the IPython notebook, but not in the converted HTML version).\n", + "which is certainly not what we want (note that it looks normal in the IPython notebook, but not in the converted HTML version). So my favorite remedy would be to put the `id`-anchor tag into a separate cell just above the section, ideally with some line breaks for nicer visuals.\n", + "\n", + "![img of format problem](../Images/ipython_links_format.png)\n", + "\n", + "### Remedy: id-anchor tag in a separate cell\n", + "\n", + "![img of format problem](../Images/ipython_links_remedy.png)\n", + "\n", "
\n", "
\n", "
\n", From 5dc5e7d8f030334543aa7348b8708401193df5b4 Mon Sep 17 00:00:00 2001 From: rasbt Date: Mon, 19 May 2014 12:49:26 -0400 Subject: [PATCH 054/248] hard links to the images --- tutorials/table_of_contents_ipython.ipynb | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/tutorials/table_of_contents_ipython.ipynb b/tutorials/table_of_contents_ipython.ipynb index 2b1f066..8ed93af 100644 --- a/tutorials/table_of_contents_ipython.ipynb +++ b/tutorials/table_of_contents_ipython.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:41219a44026c84eeb3ccb56875545bab3944aeb5cd6d39c51e32ee01fb0cb20d" + "signature": "sha256:77e6b7710d7e7ab3d4491978f649959a8b99769df6967b7cb9feab83a67c15eb" }, "nbformat": 3, "nbformat_minor": 0, @@ -56,7 +56,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "![example table](../Images/ipython_links_ex.png)" + "![example table](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/ipython_links_ex.png)" ] }, { @@ -90,14 +90,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "![two components](../Images/ipython_links_overview.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
" + "![two components](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/ipython_links_overview.png)" ] }, { @@ -214,11 +207,11 @@ "source": [ "which is certainly not what we want (note that it looks normal in the IPython notebook, but not in the converted HTML version). So my favorite remedy would be to put the `id`-anchor tag into a separate cell just above the section, ideally with some line breaks for nicer visuals.\n", "\n", - "![img of format problem](../Images/ipython_links_format.png)\n", + "![img of format problem](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/ipython_links_format.png)\n", "\n", "### Remedy: id-anchor tag in a separate cell\n", "\n", - "![img of format problem](../Images/ipython_links_remedy.png)\n", + "![img of format problem](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/ipython_links_remedy.png)\n", "\n", "
\n", "
\n", From d98d0303f0d1798e091ee62a0a2ae0b31072623c Mon Sep 17 00:00:00 2001 From: rasbt Date: Mon, 19 May 2014 15:01:02 -0400 Subject: [PATCH 055/248] using header cells --- Images/ipython_table_header.png | Bin 0 -> 38557 bytes tutorials/table_of_contents_ipython.ipynb | 36 ++++++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 Images/ipython_table_header.png diff --git a/Images/ipython_table_header.png b/Images/ipython_table_header.png new file mode 100644 index 0000000000000000000000000000000000000000..897ba78e74cf20181004182900330a0ac8b19335 GIT binary patch literal 38557 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 literal 0 HcmV?d00001 diff --git a/tutorials/table_of_contents_ipython.ipynb b/tutorials/table_of_contents_ipython.ipynb index 8ed93af..639753b 100644 --- a/tutorials/table_of_contents_ipython.ipynb +++ b/tutorials/table_of_contents_ipython.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:77e6b7710d7e7ab3d4491978f649959a8b99769df6967b7cb9feab83a67c15eb" + "signature": "sha256:ba20b7e6666952b09ad936f7b9cb32fc0e9ed680a00aeff02035be51895c8e45" }, "nbformat": 3, "nbformat_minor": 0, @@ -209,7 +209,7 @@ "\n", "![img of format problem](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/ipython_links_format.png)\n", "\n", - "### Remedy: id-anchor tag in a separate cell\n", + "### Solution 1: id-anchor tag in a separate cell\n", "\n", "![img of format problem](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/ipython_links_remedy.png)\n", "\n", @@ -219,6 +219,38 @@ "


" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Solution 2: using header cells" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Alternatively, and I think this is an even better solution, is to use header cells.\n", + "
\n", + "
\n", + "![header cell](../Images/ipython_table_header.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To define the hyperlink anchor tag to this \"header cell\" is just the text content of the \"header cell\" connected by dashes. E.g.,\n", + "\n", + "`[link to another section](#Another-section)`\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
" + ] + }, { "cell_type": "markdown", "metadata": {}, From f361524fea8331bdeade20ba1661f21fe8dfdc0e Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 20 May 2014 00:50:30 -0400 Subject: [PATCH 056/248] ipython links article upd. --- tutorials/table_of_contents_ipython.md | 125 +++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 tutorials/table_of_contents_ipython.md diff --git a/tutorials/table_of_contents_ipython.md b/tutorials/table_of_contents_ipython.md new file mode 100644 index 0000000..9089e1e --- /dev/null +++ b/tutorials/table_of_contents_ipython.md @@ -0,0 +1,125 @@ +[Sebastian Raschka](http://sebastianraschka.com) +last updated: 05/18/2014 + +- [Link to this IPython Notebook on Github](https://github.com/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day4_2_cython_numba_parakeet.ipynb) +- [Link to the GitHub Repository One-Python-benchmark-per-day](https://github.com/rasbt/One-Python-benchmark-per-day) + + +
+I would be happy to hear your comments and suggestions. +Please feel free to drop me a note via +[twitter](https://twitter.com/rasbt), [email](mailto:bluewoodtree@gmail.com), or [google+](https://plus.google.com/118404394130788869227). +
+ +
+ +# Creating a table of contents with internal links in IPython Notebooks and Markdown documents + +**Many people have asked me how I create the table of contents with internal links for my IPython Notebooks and Markdown documents on GitHub. +Well, no (IPython) magic is involved, it is just a little bit of HTML, but I thought it might be worthwhile to write this little how-to tutorial.** + +![example table](../Images/ipython_links_ex.png) + +
+
+For example, [click this link](#bottom) to jump to the bottom of the page. +
+
+ +
+
+ +## The two components to create an internal link + +So, how does it work? Basically, all you need are those two components: +1. the destination +2. an internal hyperlink to the destination + + +![two components](../Images/ipython_links_overview.png) + +
+###1. The destination + +To define the destination (i.e., the section on the page or the cell you want to jump to), you just need to insert an empty HTML anchor tag and give it an **`id`**, +e.g., **``** + +This anchor tag will be invisible if you render it as Markdown in the IPython Notebook. +Note that it would also work if we use the **`name`** attribute instead of **`id`**, but since the **`name`** attribute is not supported by HTML5 anymore, I would suggest to just use the **`id`** attribute, which is also shorter to type. + +
+###2. The internal hyperlink + +Now we have to create the hyperlink to the **``** anchor tag that we just created. +We can either do this in ye goode olde HTML where we put a fragment identifier in form of a hash mark (`#`) in front of the name, +for example, **`Link to the destination'`** + +Or alternatively, we can just use the slightly more convenient Markdown syntax: +**`[Link to the destination](#the_destination)`** + +**That's all!** + +
+
+ +## One more piece of advice + +Of course it would make sense to place the empty anchor tags for you table of contents just on top of each cell that contains a heading. +E.g., + +`` +`###Section 2` +`some text ...` + + +And I did this for a very long time ... until I figured out that it wouldn't render the Markdown properly if you convert the IPython Notebook into HTML (for example, for printing via the print preview option). + +But instead of + + +###Section 2 + +it would be rendered as + + +`###Section 2` + +which is certainly not what we want (note that it looks normal in the IPython Notebook, but not in the converted HTML version). So my favorite remedy would be to put the `id`-anchor tag into a separate cell just above the section, ideally with some line breaks for nicer visuals. + +![img of format problem](../Images/ipython_links_format.png) + +
+
+ +### Solution 1: id-anchor tag in a separate cell + +![img of format problem](../Images/ipython_links_remedy.png) + +
+
+
+
+
+ + +### Solution 2: using header cells + + +To define the hyperlink anchor tag to this "header cell" is just the text content of the "header cell" connected by dashes. E.g., + +![header cell](../Images/ipython_table_header.png) + +`[link to another section](#Another-section)` +
+
+
+
+
+
+ +[[Click this link and jump to the top of the page](#top)] + +You can't see it, but this cell contains a +`` +anchor tag just below this text. + From 040b553a00608166b52c5869ff73d4b60941b85b Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 21 May 2014 17:17:45 -0400 Subject: [PATCH 057/248] shell script for prepending shebangs --- README.md | 4 +++- useful_scripts/prepend_python_shebang.sh | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 useful_scripts/prepend_python_shebang.sh diff --git a/README.md b/README.md index 26facab..775d2d4 100755 --- a/README.md +++ b/README.md @@ -38,6 +38,8 @@ Useful functions, tutorials, and other Python-related things - Happy Mother's Day [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/funstuff/happy_mothers_day.ipynb?create=1) -**// useful snippets** +**// useful scripts snippets** + +- [Shell script](./useful_scripts/prepend_python_shebang.sh) for prepending Python-shebangs to all .py files in a current directory. - convert 'tab-delimited' to 'comma-separated' CSV files [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/useful_scripts/fix_tab_csv.ipynb?create=1) diff --git a/useful_scripts/prepend_python_shebang.sh b/useful_scripts/prepend_python_shebang.sh new file mode 100644 index 0000000..cff7677 --- /dev/null +++ b/useful_scripts/prepend_python_shebang.sh @@ -0,0 +1,14 @@ +# Sebastian Raschka 05/21/2014 +# Shell script that prepends a Python shebang +# `!#/usr/bin/python` to all +# Python script files in the current directory +# so that script files can be executed via +# >> myscript.py +# instead of +# >> python myscript.py + +find ./ -maxdepth 1 -name "*.py" -exec sed -i.bak '1i\ +!#/usr/bin/python +' {} \; + +find . -name "*.bak" -exec rm -rf {} \; \ No newline at end of file From a22919a1fa90f99aef6f9dfa2d4340b3314c05ec Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 21 May 2014 17:26:28 -0400 Subject: [PATCH 058/248] added chmod command --- useful_scripts/prepend_python_shebang.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/useful_scripts/prepend_python_shebang.sh b/useful_scripts/prepend_python_shebang.sh index cff7677..74c89c3 100644 --- a/useful_scripts/prepend_python_shebang.sh +++ b/useful_scripts/prepend_python_shebang.sh @@ -7,8 +7,13 @@ # instead of # >> python myscript.py +# prepends !#/usr/bin/python to all .py files find ./ -maxdepth 1 -name "*.py" -exec sed -i.bak '1i\ !#/usr/bin/python ' {} \; -find . -name "*.bak" -exec rm -rf {} \; \ No newline at end of file +# removes temporary files +find . -name "*.bak" -exec rm -rf {} \; + +# makes Python scripts executable +chmod ug+x *.py \ No newline at end of file From 80fb307f24b25e8f07b36eb1d2df47a40d4a44e9 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 21 May 2014 17:36:24 -0400 Subject: [PATCH 059/248] fixed typo --- useful_scripts/prepend_python_shebang.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/useful_scripts/prepend_python_shebang.sh b/useful_scripts/prepend_python_shebang.sh index 74c89c3..8555f39 100644 --- a/useful_scripts/prepend_python_shebang.sh +++ b/useful_scripts/prepend_python_shebang.sh @@ -9,7 +9,7 @@ # prepends !#/usr/bin/python to all .py files find ./ -maxdepth 1 -name "*.py" -exec sed -i.bak '1i\ -!#/usr/bin/python +#!/usr/bin/env/python ' {} \; # removes temporary files From f71bcde1b3a1ec6378fd70fa0903401439a6ea55 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 21 May 2014 17:44:05 -0400 Subject: [PATCH 060/248] autodetect python version --- useful_scripts/prepend_python_shebang.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/useful_scripts/prepend_python_shebang.sh b/useful_scripts/prepend_python_shebang.sh index 8555f39..e57cc49 100644 --- a/useful_scripts/prepend_python_shebang.sh +++ b/useful_scripts/prepend_python_shebang.sh @@ -8,8 +8,10 @@ # >> python myscript.py # prepends !#/usr/bin/python to all .py files + +python_ver=$(which python) find ./ -maxdepth 1 -name "*.py" -exec sed -i.bak '1i\ -#!/usr/bin/env/python +#!/usr/bin/env/python"$python_ver" ' {} \; # removes temporary files From 759ef2dcf60daa4cf31d4542ad25808c1698fcf4 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 21 May 2014 17:49:47 -0400 Subject: [PATCH 061/248] syntax fix --- useful_scripts/prepend_python_shebang.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/useful_scripts/prepend_python_shebang.sh b/useful_scripts/prepend_python_shebang.sh index e57cc49..20f420d 100644 --- a/useful_scripts/prepend_python_shebang.sh +++ b/useful_scripts/prepend_python_shebang.sh @@ -9,9 +9,8 @@ # prepends !#/usr/bin/python to all .py files -python_ver=$(which python) find ./ -maxdepth 1 -name "*.py" -exec sed -i.bak '1i\ -#!/usr/bin/env/python"$python_ver" +#!'"$(which python)"' ' {} \; # removes temporary files From 0ea8947d94b9ffe4b2c046b9a18245ec31a8ec27 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 21 May 2014 17:50:18 -0400 Subject: [PATCH 062/248] syntax fix --- useful_scripts/prepend_python_shebang.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/useful_scripts/prepend_python_shebang.sh b/useful_scripts/prepend_python_shebang.sh index 20f420d..175c4c6 100644 --- a/useful_scripts/prepend_python_shebang.sh +++ b/useful_scripts/prepend_python_shebang.sh @@ -1,6 +1,6 @@ # Sebastian Raschka 05/21/2014 # Shell script that prepends a Python shebang -# `!#/usr/bin/python` to all +# e.g., `!#/usr/bin/python` to all # Python script files in the current directory # so that script files can be executed via # >> myscript.py From c0316494556cc921b30a0e9c36f3cd3e78b136ce Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 21 May 2014 17:52:09 -0400 Subject: [PATCH 063/248] syntax fix --- useful_scripts/prepend_python_shebang.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/useful_scripts/prepend_python_shebang.sh b/useful_scripts/prepend_python_shebang.sh index 175c4c6..edabd69 100644 --- a/useful_scripts/prepend_python_shebang.sh +++ b/useful_scripts/prepend_python_shebang.sh @@ -7,7 +7,7 @@ # instead of # >> python myscript.py -# prepends !#/usr/bin/python to all .py files +# prepends e.g., !#/usr/bin/python to all .py files find ./ -maxdepth 1 -name "*.py" -exec sed -i.bak '1i\ #!'"$(which python)"' From 8ca2852356c9b9725432e719669fccd1e33761e9 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 21 May 2014 19:20:06 -0400 Subject: [PATCH 064/248] syntax fix --- useful_scripts/prepend_python_shebang.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/useful_scripts/prepend_python_shebang.sh b/useful_scripts/prepend_python_shebang.sh index edabd69..3bbc937 100644 --- a/useful_scripts/prepend_python_shebang.sh +++ b/useful_scripts/prepend_python_shebang.sh @@ -1,20 +1,20 @@ # Sebastian Raschka 05/21/2014 # Shell script that prepends a Python shebang -# e.g., `!#/usr/bin/python` to all +# '#!/usr/bin/env python' to all # Python script files in the current directory # so that script files can be executed via # >> myscript.py # instead of # >> python myscript.py -# prepends e.g., !#/usr/bin/python to all .py files +# prepends '#!/usr/bin/env python' to all .py files find ./ -maxdepth 1 -name "*.py" -exec sed -i.bak '1i\ -#!'"$(which python)"' +#!/usr/bin/env python ' {} \; # removes temporary files find . -name "*.bak" -exec rm -rf {} \; # makes Python scripts executable -chmod ug+x *.py \ No newline at end of file +chmod ug+x *.py From 6a03169858c70335eb8f20bb796b743e7640d825 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 21 May 2014 23:47:27 -0400 Subject: [PATCH 065/248] logo --- Images/logo.png | Bin 0 -> 62351 bytes Images/logo.pxm | Bin 0 -> 1132995 bytes README.md | 7 ++++++- 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 Images/logo.png create mode 100644 Images/logo.pxm diff --git a/Images/logo.png b/Images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..64d8efd6172e9a3790b40dc22b15c904a9fd147b GIT binary patch literal 62351 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 U$+BExg#Z8m07*qoM6N<$g4!&^n*aa+ literal 0 HcmV?d00001 diff --git a/Images/logo.pxm b/Images/logo.pxm new file mode 100644 index 0000000000000000000000000000000000000000..b6b42e39e92a153a9f884f8f55f8d5c8a753beb8 GIT binary patch literal 1132995 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≫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 z z`FODq=!vv`zI-Y(R&^Hfsvg3MM=z>8r5*hVCXq_;5e*Pd3`UhVj5bfi6f)I!0*Yw5 zQ=Fc$x;6DXLt`_n&~oIFPn3|{&eTe(maEM5ePN^0e3l7 z&lp?}x=U_BaQ~VzFV^7zhK9u`?&g(YuUuT8%VL*DAXAC5hQ+qm3Q*ld$q9yEB;0@U zZHKP4!wtD}Dsn5^!iFyR0fnaV?}XWmg+BP=yRJ%iDQc;`^=5|}wq1KYOuTdxHIetK zy?@zrd42c(;G3O9iAwb?w~AhRSnjxy77?}2`kc~+4!<*otd-A1o6RG2cY$fIE_mNh zr0^5&us%r&9_1OkZa|99HSG&p$1AWuJ2u?d&W>8(>qUeZsOBJZh=C+#Dzksxu^ff@ z9PUGp7Q8mIvOXA0bab>Dr{Op=l+orjRMU^Rx3T6McuLgtpyZIoFnXV?ZfR@l=s4!H zq@L9#8pr*-i>Q-5wB)Oas?I!lF9aBaRt^uJ

    gCEsg+|9LppwSe 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

    #|Ccw6@D zrneCnT+{Didf9T34tD;>z_|4W!|c9*i#zR7FJg>p4O9i;8V7_4eC?p zg8G%7zfjV3RU6Y9@+*%RA2)~K9|6X#yXtY}6fK|K)W1oT)c zqLwx#Gha=%?&^Q>Xy1-u$XHd;{VTE_@hJA%K!^(~7Q12>&K z?UVv2?I-PtH`y?rVPm!aqv9b!P37$EvpErC-3epCVLhf0uXhx0

    lJ^D#`Aho)T# zkO`ne;4PB?#{#LI?L)nQAwVD;!c{Y25**XlJmND-u&Qf8sHtx~36RVpA^-}AF|vn1x9bI#rmT=s^S|jZg%cnc zucnlxpX}eYn;5+yS4Xew4adQpNK5iIjR05Ssn$Jc?$Lc%Yot;$+}0yQ6zaI=yum5; zIh#0sVdU~&t^dmuuwtk+@6Q;#pdrKz6{>izCNjgnRbcIw*LbywNymoUgNITKD2;B} zp^f+>iDK4lWzI1FvmGotrHr)3m|;vIqFFE(sfL_uX7&UFNCptfgdNqYp1LSff0ziT zS?_gdGpQCx?$jt9G|lvskq@XzceU~XFoKF1i=>j|0aW|yuN87LT9eK;8`{T)TxWOf zOl3|27}pq027A(fO$mfSlb6Pl>XNKSCKxObdS%>?0V7Adk9flP_J=e4oOb~5Rlb&H zf+6|9nR>w~H_6*2-QhdzsX)9Z&p6d%?I??FfU--&TublE8R+=eA;d6)IVNK_!1!vP z;Nx5zZi#_e2;?HXPc}5)l(% z)VhbH9*njadcC+M-$Q_<%s~1l(g1?^AAlv%T*_Ebyf2mD5^8h+Nov<}bxzGVJ4^ z%-mo@rxj_rk0UM9B@w-K9x)FmimnQus+Sb4E{DVUF67sry?Zrh7H-!_6-h|?#(M1D zQDD*b(0f$)SlBIQ_0}a~iRmdnSG`n6W97a{7a#8%ehb>K%m*d{l&E19k7_Ko|44gn zQN!*Q-)V1pCZqDvE4k%XCr%1ohRBSau()dwsb{Tl|24Q(aj&;;GtUM$+$BlxKTgd@OWZEwOhqf3i=rE9az_ zrgusHiCc;13;~R)3K82dzO_Y!=%AVASSfKf3kWG)_aErk(k8DeNb#E`*;HjD{Zhw0 z<)ntPOwAqD+2>aZPf$DV7dYKeLPzcFcRYgy3RPpxso))CK=Q`57%C@)pZu?h1c=s- zt|L)Qpk9_D9iS&B*nKW2Ve^>a3vJ3;2y`8@0SvE%EX^T4G|waj;Gs1zU#;Xe3z>cLEg!xFzww#c{3`q$GsAgZql{4_(-c-#C z2x#J*LxRPA-a&eWi=n`Ha*8F?guIBh#DUSTtQu)04TFSwJ8B;{<~8~v6Ggm z2eJ8TS_DxMY$*DsVzR4+s3`(Fb`et#Sv^A0tydFO;H*J8Rtd1`{LADE<@l2yn(qK` zY$nbhb+I^weUb@CEUuVk33WFJL6;gP6Fjas+8|96nawy+W{l{t9Lm%?lgUU)>`f&v z!5k&HbQQQG^g5@KVDlo+S~GPslj|Q|(QzCd+?f&{l){D#Sk%g3wAvJ~99Bu+q9u@( zg?T8Z2mjVumPGfPY7U0jt)8|OXs*X9f)4&Ccr~A zL7xPRR3(09Bdfv*rkVFw!a)hnR8&jgBKewgqTJc^@{2Wtjajr7ufc}sLcLdarrM<^ z?8Fb9!fu`vb3B*0>73Sl7)wG+Gz4>;;+c9OdY!d$F+r4wyw)m(V#Y;rW(-L97nB&} zbCC${jy@r^fIt7l?0S&%Z@T!6QddBHt^L(g6SS{DjC-8doYX)8Jk>9OTivZD`n zm453>O?sKiCc(gb64fMaO7Q{jyVUB4JoN1i9mMG!D9?K>yL?`*!l|$;>uOxz;8pBk z&$p76>+(sNoYLQ%=wNh`)o$`(9*uOpL=AqjjhOzq;0-fxdX)OK0msrSn1Zo;izAJ$H zxz}%hcJM`F>}Zxh^(qPDZT*vg`%i-!mFg_s|KgeMaa)Iz?_ZG4*M(QL!ZMj9d~7p9 z02h_k;g_NkkwRji834}H?wk^RKKVnzs-Uz_${qUS;aw66kRN~P;qjDgFy1ShK9DyR zcm2T{w>%`*>TxkS4*C?+Eq|NQm=dQ5fE|+N27qCrM;{9-IzAkgjz{B0PN#LM674cM zwwE%7lMAM92qjq-S*&Ifg>SX&eC1M^opHed-jvPUgWTL=O(|+EQS&)6^4(PIIF&oC zUBrA%w33^gg5x&vpl4gvv=({1MPo`Y5daI$XX(w93`U&{Kb{;66Nkdql5CK0D1!p2 zdrn~n<8Ulh-1h0J?sIJZC0z0&A%EekOBpZWLL9@fwC3Wgfe#5YhluR#D>DaD6E0_h zn4ObLQYzOogo3M{c&E#}&xRz;f_VvsN0_Kn(uZz56?i?EFWeEAb4LjGe#rg7cU^^% zoN^gL$&g!j_+4T&EVacomG7-ah)QzYVwRi{W+F%%rNoC=pb@Co^>cV@$_amU%ri5s zKALUzgQWymWNVV+WjOPx?8x(sZ;zbP_p}IV4Zoj$|75G}bMUdd+a)6n;(?EbE1XFJ zwq8$-T=cCvxnLJ8HT6xp_B#zy*YU1=FRDerDqrC!6VCo`%7 zWtPPEbN13t@TGlM+MFI&5X(!xU}dClWzg^9G%~wnEydqUct_~r^ukO+5S+YAuDnZ= zh=U-Qf5mL~vr0L)2S;AqcpwndCA0PB-Gig;N<5F!?or!0Iom~Ji%(MD`XsVHmRGN4 zY$Bu>C$)VpAo>cKf!S8F{(MyF>x;rdr^uW3o0!D*96|#ktk=H zx{2G-T{=0F$se+7cZ3@mO^cVlYg>5luHkZIaZht=4&_R%QI0qhoJm;=7h!rQCtgp- z>SxSxK(euuf_7O&A@!hrm8gFD#o+J&v#0pYoXHA}Sv~CvYHljyTqf2h zIR$F^QiP`A7#1qJJYe}qRFufTDz?(%$uv|s##j&=`4p=Ps@tIgIs#A|Q~0MUw#`!} z5wOZ>=DfXlI*Q27;2vx^T)mVj*z4amGP$BfiSQ|laeaOyFzpSEy-Xo`yaJ9$4!c^A zo?Fcd9bdhAn3Y{8K#}GA8&tnfGtaGaSgkM1@qNzu`vosrheD`F(09MU3)=&lIuE;< zz8KuH7%Dn802O($r$c?^P=+q>HC-}U1P0dXsoB{E1f`0`+wUTz^D_7L+P9^TRGv%7 z<3-~Ky>5lM!7@I>>SbV0h6`J|LMjD{P46C9rmZN&r`~1iF8ODcRApclVIKzl`u7T1 zaz#yxpS^T(Z0YMasF4aOH&F7*w)DF;m2GcyB5nKZ)09hs`zOmvUfHH)XAHJiKGhHm znOmfkX9w&lkG_I|-$FYE<`EQOYl`{dLb5tuZSkJPg>OGD{_~GQ{}(O zsm>vDnQCRJ*pbv`%bljN$@z24wAdGM53W{^%6$1EJ!}86S4+7oO@^0|8jZ*&Ygw{! zhz>oXqnPLDziAZ{_bzQYcinK#Og5DKUhw3PRQtC8!}Epclw&jfeC2KaPGigm6vL0g zk94p)DnLo^yr8#SJq(dn05aCQNoCJpI=~anY(0}O@M3Eu%DiNd2m&! z*~rqZ*;D*@agSX6opNP__-kgj(!QS;ebcEovP#_7B>-n16U1Kir18l0g3@3%>P_ zSzF7bMk{q7?q*#p9j^*WQvV{o%=)3w1ez4Y6(ME1m_W+*>m`}=={DHa z4sr+S?e>Wkh2=KBqa^0UUU;R%Jr>I=I` zTh~ug&Mv$q7_2V6xW9yWu?lCm9+rupJMsIG%&2hlSKn_P{+Yl1gbSN9#+#xF z65ic?_ni9SM24M5u%(5oUuN-MAH93cdT)vOqB~cf?gxSogD&p-?i#Rfq?~p;e9YyP z`O!(8`-FT_aT6aD*v}qLef6s&_fw-^m1ss`)!DWiC>crmsKS-0lbLyM#K}jHcLm(z zB#)n*&pIO_0^MafmuH`GdLr%@vd3lDclD&y&0|>7xx~CPDbmI$@#Uhd=Rc_4#~WV0U6 z@vvQy>WX>xDxS-R8T;f4oNM&W;+k9pFS{ORNUio9k-PNhBORpKIs%~zWe&v($ygSzp0PwXiw$hcLj3xecIn?F`*S6VOkVHz&n4B z?HW|Nw^VTYyYR!0jiQY^I*>3pLvxc<9*$yk`FxJxdT2|KVSp!6_nwUiOzl^^{Y-6- z0t6Ax?D?}_S2i;hcCIaT{?C6wiO)|KvKfX{U|(6lMZ>@40B@~4#{c)9(l|5UT5-=l zIsW(jQ0qYfNwwp1*)z%?oRAl~<-XZdEKTci9o(*_F2tKpOsq`pFIc!3Inr|P&k$baJe>QfXMLI*T*P1UbMJf z=`d{xV`{I<4O?nw#o&zv^l4MOh;nHI55wCsDMMa|28$X78+`k##?In$^%^Fc^0mLH zv?X3|j##~TjSHJPr*Se34@}9X00-xW1BAQNFQAU3`(37tT*ofz;Yam~H%1ohT_nu)&tI*J zhS^**QjWyJ$w|(*j?kzFZk}Xk@uf*Bgh{I3c(w;x<1i%-sAvr9_g_oB6@&n7f%E9f zQ?tG)l@2YdH<%1%3KDD_7rt@T!M8T+8TsLi5$sm%&572}DpH0GuX)J+cfzH^XUkVu zn~jM~=&l>qaac3k#ChA|qB`|tYewCtgD(!=q~1z4PGGPBiq#gN)~eu;_jRL!9xNa9 z#_;#i%Qr`4jO^S&#oH3s65pAGdV5Y zO)EijmFZRGb4$e~Kqa!uG4f%-Sh~WwlAhq$ZuQ$E-}hjQMjv!MzkXKc7mHbT-*Tv> zL-SVgb@hpOG>hq*w_je}jS=U6P%r@;1y?2-Kb~d^Tv59rzXq$k(QxPf>#Q%1@qmF;3xAZ(X|`S*K}Z zOE0O3-7qw|owr<|wQQl1t?IBg#F1lOjk~;ie4{4(@v|QeccudewXiSlC)V*{Z}qNG zGIQd^{Krwk^ZnK0dAf?#N%0kD;g_>!D>Rux&)9PomM)t=z_V>h*oHGDu|fpR$V$9* zBF_DgSxh|g*6Dnruj_QgDW~wpBI4j-PWgSC7+QCoSWlb>PSjTLiQJ{!grdF9F`k;o z*$wh3T?Ygz3QoB2KPXwBbYj2Y@1orGR4O(;j3LeGtgJn{V}py%y7-PZ;H7WScJ$cz zmL?>aYp9YWTRL=`$@a!YFj0oX^eNdyIzzA_c_i_w({;tHa9BOmu)%n&LeJ<2;R*9k zFR3E1{xC5(!`5eL%ghweaOE~xklSy>Y}jb=k+S)@jLtWPf#-fzNAum@K3%qWN?2En z%JEmd@ipm7^3A-e)!6HKWEIR%oW1Cye;nv(VoBQj1?Q(NoLe%Z2HtBo^u?x#mx^gG z3wWpy|L&w)U4to6ZE9@kLeUjiID~lsr6hXzhkU0PH}!14N0_H3 zVl$t!jzi|1zNrHx_5U4Lc^1Ni1!*UD04$XB0$_@P36}5Dq+h;UA8GFq{zGA?{1Ra% zUbmkHP@uMwwMIv0g>S|%L9__$lMm)x0Gzvz4fD_$#MEzS_97X04`7(Wfw{YpA0=@M zpg>py#VB7=VL%_rRRGjWz#(=B$~n)^O#$zfe$xTO!?PzBh=51BBEzA%DNp%kash_^ z#SX=5f15S8nrkiJHmj%8Zl=;8#&6%MMrYZQR5Son z^pt23_g}~LFS=h2wmi7d?C9Y5xwALy^db6bAy^B-ccJfMZe)?plc`RKY7u$K^A)u6 z0P=I)2d6xbpHCq}dYCLJCU_@{(4fQV7GY8#FDeP2*>uE8fT&s(o^J zC!4S!mthq2>TF6lLn-jaLSPWSrRG@Z8sMe(D&{FQ8l?;Zk`4N1u5;uV^wUDg{WoNk z51i*8A~P2>C2S0b{_B~bYXC;s+R62tU-+s1J-Ej{9{*lPKH+*a5B6qXZ~IyOo)h_p zGI6iJ4V%a}Ow^wi2209JAo32YLBBz1cI28rcl?$E-OA3|rp}B5L=vKiZYa|;ffJhX zPG?2&gI&r@;#AM6T60|R%R#T>e!HYRnk*LDV{0;#A66|pn}~(4?$!{+){4(^z0-VP z=@j{tzMh9-Wn0H>?2%<{1G^} zZ8zw#p%A$3lc^L9#o&$40yk1E=;i?4aX_FrjdCc3+KvA74+6BuuoNB9XBq_A5Zj3nc9d$f6DE=JQvYbCl{cn4y&R7oIw5;sx!Q-X$O}Vp?=Znnk)9kR-4@XwH>Bwa z7R%=F7Bwj)Ry`JBtnHJ?dZ1DZIW?i{61kaS4!s`7z4nMfv1N@Tvn}9Bj_x)x6?`Dy z{Z8Wq{s8vtWJQ;3uD=A!TapJbJoaHQmZ&czn;`o(aJbfhizsOT;!O?(sU8oNav(}XEF0b@U zBDpZMdoAF6{X_JmYTGXL8J_GSTEfqxTRkO_o`L0G5a3!Dkc|<-?L_ek2>*KF~u&xmeim8h}Mh`7r^g#xaWi;TjjH(e^XsU<1_2P=dZJeOgwujlRBMAMdX}|7pdOwWMHE>#AH7 z3zsJ+)Is&HGh_Aw=qV_mun)1%@g+phgEw^z(jg%|!(VGSV%hOG{}= zK7?ZUxmJa&jUae{Cs`g2Yw{WWidJh%JR(ec+n_QM##5-Sw0>z*tJOEvYU>4~$dRn# zU-$({!jdKEeEe{dZQwM#jvzbJK0c#Oe12G%yrB8n3BO=y4grzXL@C(mmB>k19w1a; zMR)*;{~{BAoZO`kWl(Z3yrXGI=c zAd4>LKZ-lmHXERPwqNZyoGqqw0>x5T<4Vfk?1woRD=(GQq^B4qz6)KAR!gQRb+2n< zNfdxRSTTy!UPCC6glkN(r`Hs-JZzELQTbnI=6@x->!^Moj4LqQ#*EIUNB-KdQ1Oqo z8Z}NGWX@yL=7V$QdyH%YY3GG~v`-(Nubf!i``0|J*~EYLR39y~B3PB$_i3TLIBg^- zjaSl8p*YOoKR=(NuVedvQZpXF8NP+ zEa-{X?&*m7r?sbsdtGHwckWTVu4ddBo!P3Fd;c-rH5>S^eXsrZpVototiG+?0gkdW zlN|6$6gf+BGlm6U*gZ%rxqbTICTAW0dIu`*O5&NaZgE@{?#h@F((@Gr&Hpgdu*3HMqv+h@nfm`Y{@DdHx4F-K80LPz zCgwhu7?n_I?w2HlB-PAqgl1GKH1|sqLg+S^+$*G_+jlMrQIZO&e&@Hp_Sg2<=j@!% z`}2OkUeDL90WVA{uQw-{+mMV}3kI-!DT8`R^nw7GFcX#HUXO!V#n(7hXlfDUE8}Oi z0+HZDuu0ju8cYv*4MIx>i}16beWjM6l?0UQWDWbH3|aipz*MKIBtiu7$C z(;86QUx~4D^TS7J1j88Emy5!kssKcBf0mV*eQ2Z_4k^OBpmpvj!Oj*S6pchBF-W2< zAz)1QR|;UEm5A4Qzcr&+Sx4uHHocJ{$`XbFtMV1+C2Rs~%P-Q?Vk{^`q+kaGqvcx= zgMAV{YIj9!{J}n=B-!S#;VD@Q$_GJQzrUS{Xn>xWT2X!#MJv-@$)-u#BM_UKPJ}pr zS5|pAG-!U#N9jb5wqX^o00Dyv&bkosT~eQkY2apjYK)|&efPS75bn!1-?Jj62ceOY z`*RpJJ&BUdh7@uxn$yUa(V?m6C4Lg!F*d?2`hE=o^F_xw&SDL&1B2kK*e+;?Yag%+y5F+Z7Fr#5>uI+K2??ZeqH*9D_YEx z20N#Q^8@Qc2l$yz6fy8)2hz!5I6%tgsx(YT^pHtqy@_a#86;mb-G3(h#15L(h_Y=^ zaG*F2Vjy9qH)TVx2laxj6-Ql!5{BV8RZpq}4DF%;54Q;9#QfM1?h$M5Ns&yY1DLz` zJyXRRjrZMb)wC~8QoD7paEi4IQo)XMkjPabDTS=rd;Q;aFK7OWPwwr-Dh`Qgp?VW> zDEXiog#bg@@^KM9e)yAV%DOSSUtlF^= zg|92ceN76s(@9^*nmAO>%xY@i)0@(f=Xfu6c5&W>beHRPYowtiQ_pJTc4<)G32fX! z2RqmG`2T^Q=c9D<*4VbE{R|8?0kA;vJKo~&pr-*gEej9lXyHQ+`i%aR&-9W|q);V3 zNZ039EzLO9LiLYj0PX=lXpZx?Io4}*2OcMv`qmqQT-xSiW(9>cBe{>ms^M3#u=5oG z6!F%2qtym!n+7R#3Q8)P7hG!5SdJ-glOY#Lq|9}&g7R5sU0DFh*W;gBDlI#sR8fNj z*21`a9NP@BDDv|OJ{C?iWN!&kH|$wDhh6je1x8>QF<%0QAbj;{YCKOYmJi%T@^^OH z6k%_hSO;oCV`CIGtHr=pzr69)e6cv}U^Jb`Lrog#@<3sny;JSQ_D0P&ZE>-WMLz|) z2A5OVKnQ%*>15Qg76q@ByWKlyaVhjj`m`O`6gse~R()MKK+;Repy1m;r%gc^2MAIA z3S^4G9NI)vjl|&Qv8*`*ZLAFJwvnQlXd2{{$bS*@N0>S%c!~;J^l3K62q&+|^>E~H zu;T_RN)?S-H$uARrT^BjNXD6$`)aJi@xX~7sTk|R<_MZ2g>aiVVhYdp$(#Uh$ci;P zYbAyqkeE#rdp{-k%Y={f=<5xk^RPe(O?&C`x(*n?h)J_EVoXD}+$F`OVe-Ngn&!tx zUuT%Xf~Vmutw%Q9G86V9J(@SDCsv_l0ko=E^nFFLxYjF?R4t*^)nKqL*tS|1lqrCl zn0(av$R4Itpr3%)K?d< z79X%p2e{n5gATv7<+-P}DAQ>u0JD>2>A-Vxk@5aVX84!^dt#JySWksfu=li(zN;#>%aC0T5ul zXAqBYy&$XgUXeKVI{NR!XtNuiLv2dBUiSz+$P|70xBW?(J30yupw}@D4v9q|F4$5$ zIEcU4UD#vAb*L=<2Zuf4c&y{Zz;E!F2%J_K$c=MAe&yvf>{Yf0fakp?L5Z|*pfH(~ z#4W{DMy3>;-VN24I!|Ri|Fs!#c%)ebLD4Q z-Si|f>|KDaWFDL6#o8S3sGXRUd@+)=o6__3`P)sCGhJoQdcxCgp>j^lXoJ`je}8Jy zhl470Or_t7pM&+VkIH-z5hbR-ut+j%Q<5Ss_v|q*k+-n<0I0K<#;IT`+zQAGNwQ#$ z)h+pLZq|Z0r@Fz!uMxdd%+tIW@yCwitXk2$fo-LWXVVs_?*x z6v#szFa+eY0wB+GYPkOD*$zOJ7ld5!BA$>7J}HpOR{!00`BO5Qc-;O-nSn1K#e9^8wvhf|2(?GJAs~#Q-lt|T}DsJQ`gnG6@ti~1z z0Czmo3&5uhv;SCYZOq5_4Mq%BnxgN@rz+s2`IAyd#x=|?(#vc#f_Rqht(w{C%L)+j;q{k!dCL|5Kj4 zAqhtbjtXmz6n7>KZ=I`Dt*<%p|MVt5Dy%pd3*eNSA!;skga(1o-kBw}cm`@H530ZF zI^a5A_n#6q35Nu*x+p9aP{a`BbtC0ez&+C*ldpURV$tE9#Q;}8jDy91Z&^&&;Lp?mT_{hb_%rjf1`O5TFz;%Bd81naF zK}<=EaDR;Ik8m8SpR;ZuP@60K!vb(!3yVv8=L4{rHsKHipv64d|0)ME*<(3i#E_o~ z97PbL?Ih?bSIAmkLi}tNj<91a?5WP`c?1C4N_uqir2E{SONbF65h!jJ;~1>o73qs* z!)O7LIIu&s8H|`ZL*<%?IR;=c6fr7{lZ4Y<_MJ|YW5fDmRTr;SouG32-gtoytSCh( z!Xg&LVLH1H0#d_p!;0Ktgk1K_Dt zU5Zx@DIaQuxgKFp#9veH0NK<3$@Jv{-dHU)00|+9N1)SRFq#e2kWUHxsVrN-)!8ZW ziQ|c8K=Dw=Wf8<+{*Hi5Ln^o=yo9yPVvhmg`(~J4u~+GOG=an9!{{*bZNAyW9~t1L zSiz=K7Nn4;-ajOVV4VUm6V(ttM`n*KUT4ycSxARNo9dBn#VGBgm@|U2V*ti5g*kEl z7%Oj{7cMmOoy^gLx#aK(UxnHOAYYgkTqZRR8GVPM?7?;?M#;=P%RmGQdWpAD<-=8y zB@n2xpi42p(uw{fK5#d*E6V_YPAM3P!9#rshk2U8fD8RZUJJxdq23W6-h564P2#=H z02ZZfPlcVs6s)tcIH;qD>s{%=;dB?w{jm4^o759@52@jv5OxCgMYJB)$XLswiqejv z^kWW&rFYhRk0WI}pzsZH^b)TW;JC9ZHz$q|@(g}MWNnsZG}nyXE53eFKMohn8oDQv z*thI#r>Oi$n6VzSLu^hJut&*R75s8{+I|7*ap$Wwa&0DC!(Clgu1j_wIF@TecU?Tt zck7K`;B@joZ|5_IWDm3j=Sv3>+Hoy~99cvjio*AuCTQ4WrskiEwOX*u5t`kKaS8Zj zsxrWj`EIn|S?WUTg2jlWCMM1eHk$CsYzce!Rf1q^uy<_ymsjZSq{GZuTv#y+J6{tB zaNKG^Ps$*Sz6@g7+9EJ_KX05o_zyKDtxvb3|DWXSKoF*BS>G34+=DVh;1Qg&j9I$g zfY-L{l1na?1Ff5;j-1`~ge=^gG!dBc;7a!!=t;n-{jY^>(*a*W)KcX;UKmiCf#CHh z%=HQaa<%Y=QH4LRX1<{W=zW)SJWlJ1fl`%VPigY8i@9Fzdc)^}DPOZoca-%{^0g_vd*77lYTu!41bmaa#)b7(YJm5d%j(sNOFYwJLbECkPW9 zN(JatyZoI{mB*Xmiu!KjDfT-dYL;u%G3ecI=;{~{!Hf(d{vy?sUc$5D z`g(Cp0M@Jl;21k!qI>p>zU~Lm0YbX+U+TPeQ0EoJTqU$6PsG}mS7wcq#m`aw}d)`574MyN5^y+y| zntwdpdw^)q3sce}5va8Qfep-M0~tgV2f<0>`@CgQwWO?qPu;Rc=>Z=0?3vPHBa?KwC6l#fJ_0;H8s7T*z{8{W=`Jtw6p8=q2O&K@?Gg0Q>h9voem9V@Ze9{Vd>5kJVyc}IqrAScR1T-G9ffoq)r8l61nn(k8h zGF*o67E0^6uip&~F67zDav9AJjBTmzRG5*PZa4<^)VMVSW~K@ePsA$9FY~n||I9#@ zNZ^1SDi(1zRi{S!EeW7)T-2dL2E|?uN(YG@`Q|GSj=wO$?TVO8JNnbX;ya%M~*%4Qn+u-YzK9XY#Oe&}PeZ z!!`5~!Mx5wIx8_NFj?y}9N5&{GGk#0F`2*5a?yP^&tMGRL9idwadEb70t?q~JaGY9$`-Rc`k=u2!At?c6Un}yU3!`}Xjob&3l zW(|s+`O~!>>-juehufPI(ot@x&J$vQyZ^gJHe3YP{Xt{tT?3iUtHg3dT@Y7~rehKT z>o$lnf@eQNkhS=*Xaedo9RoLsftOo4<+YZ!^ceEP^zB=F^DPFunCwQs>taa*TC^)- zw!?RadUKn*ii(%pxAJkb1)bQLuD1ngSbbGYZY|3_kMe@2Ya1BesUhFfL>{<3o}V}O zCVT6HcJZ8e%Bj+%k6Nt7{G_EzBJ(1BR-(8s2AkeGaUU;Xq4A|o-e(cIGn1}ooJQWu zJcGA#F@%EEGLu5v$4SV@6Htyy7uF_SDS)T$?4D&~+m)bf`xEjgL>(@iJ5nF9z8A}p zPn{4?qgsefB&qdtn-HARgIIgV_hWpl(_p-V>nIjMY?KO-&{NyrMDTo&X}Ht^Ak43KnARO>e%KIln`Ve06K% zil*LqgRVnp8%_JUfd+C`_H;bxybTz8;7cV4lo~1tbv=Aor=d!`(vr!1Vn3C{SJby} zcb0j-Cnq@1bTi*k1CvRQ$ZQ6P={<$>nGoeUEq9uxrvvaCs23Y9yM>MPI9rhS?r9vPHZ%nc%FsTg5(B68d- zFXvQfHq?tzCn7MqX-NQ?0Zr8;U~w`$L+7u}XWiNI&7cR!9YsKzvn*aqI2nI4T!}_# z*@IaTf`80!{?J7q&EHl*acX!Go7sN;*-1VbG)tOj5ELm1FYm}n7NnXXc@eF=)912= za&NRefHlit$hrui@B9FV+V&J+=Q8cC*$ba$R-k$2lJ(UyGf@;z+~INxK%n$peMD33 zop`n`KVv2GM69Q=_uMHKN!1%qo8Ieu*B--wQ_Yr3sFxq|W_H?SW)%C{4YzXRSJF~n z+U?MgbjRk2)a&7UYItGk+4&^jnlzHJCjDI2^zXqn+0k)^)SDD!xD%Em1|yB%SbizC zaXdZTR&@AW@sNWzT$k6Uwk2>bi*<(1fucz=uc@z7mjp`_A__*2)mA;khO>l{{4!dC zh$)A;P@WEVIYLQ?x%w^Bhg`eC{tOFprf?eo_DGElbM?nGy2eFeR@wN`j2G`PfiZw1 zsO%Yys!ZoaP*E{wd2T!DbOOm%JLIMq0IIZWHz&I*S+ikH5Kw)cioymYU1BTxaitzGj)Fzm4>95Yc#cjjatI z*L+JCs**`>!Pj}LL)!6o+?0^aV&FBc3%DYhJ4e-z6!w?Q8SZ?jFMV}1)n}hY-&IEU zMOyz;%nwxOFx~Gp`uH(==VMXP$xAF-jNSz9e^zq3X3!`W>!ip2ucCjjDk0Z(Z{xXN zxv5V4r7tgDAJyla=85|)fr7T$IC3h7YG9Mz?DA+GlPb!W-t5LAt<C2J#KRSK5Th8|GSU=T)L*gM<%BZV1IRwe9b~y zPysnZ7BU(q_n=#wZGkkn z09tOP6YOij#hWNDs*6o}lEb5QZ>|HD=`k*qwE#tS#xc#+I!_1Xj~q%*Hl{w9udT z-hPUCbl>!1Mak{);hd0}(Ye>x#;1{bHe*A_Gh1TPhuqUi&`%aH(W<)C>4xmy2&%G7 zWnfe1OjDg@sVsDXnIc?JJ!r!?fc^L)`Tf3$MU=Rn&YArVdKU%eFEAs8fXO3RF0QtLG2*KG!bI(>~Hgp7~KNi!i~T zH|*?=-qMQAfmGdYIGf3@k9#v|B)r%XFSYUwbzP{EEC(BxsVn4L0XNwCO3>%P^#Gip ze7LjlCNr%6v%Kj?*|#5Mb*LOZ#&VWVf-P`ho&EY4fC!S}EFqLT@Lyl&)kiY>z^y>q zlFmDp9BfvSx-L*}GybqAqZucY+7-eRo_K$0e+KbTF(X>CuT+YSpemOIroRCUv^a*0 z+#siR%2-39&n<-;*9tPpA;!%?nHK-3L`2T3j%#xlSOisgs5)2@lnqbKhDSk#X&uTK z5g3C$vrZR1-=srFwakTk4YR&TzMTejisJ@UZ?5C>=_H4AVG-a*;|2kx5|e&%*=(-* z${{->?$4*iSHOpdK6E-OW*T;&lg81(L+{V<;wUGj*_h?31Aa+9mBTY?w{9aCthyu-%)v)LGz*dxVBf!?1CsK8mNj<1L$Q8_ zEFWsaWF4gBW)Sz+(Or-whm8t(VM$mSDmOLOGjjQ7sw6y)lY<<0%Rquj^MAZ-Zh0#Z zT0K2$XB+>O{6t_^|N6j(w)n!F^2T8&eo^x*c0SMgu{LU4+C0?F2`_?)<{a2@9q)W1 z)!7o?4lNa4AWBW^|w2V9i z9i4x^`LIA6)ZDW-Z@uroZEb;WPDBgy()~%5qs>zD=+c(4$^2ME&eBK2 zA8*hz2%c}S8nnjniP*^LW%(>r3@fTq4Pao1GBa2~-;S{Yb?W)B6}7%Z9&_6&^55J2 z^JzFe+8!2xYFFX^wWwuXMGJ8 z5`L>k#Ra7LjM*oJQabaSeCcinP%hncJp>dy3`Eao73c7bd&`iL{PnG}M1DIEvjBn3 zmuA_zRNeVOkYCkJf9Nq!^JAVN0do#_+It;<(~9uSuv2ao7}e$*^uA56SPD-&chy~d zAmZ#vPs440!`#Q{xH38^n)@4(3+L%4ms>ETL)-449x%PPl~P-!bd>*39u-bihI{$t z0!nEcQ^pd#M0X71kC|B!6$ zOPC&&mx~3ZFX2G)BYD96HlPV$c=}k73{(|da3lg827rGICn}JVWm^5aK%z3$R&y+2 zVC2JoJ;c$*H^5R}NDpX92mtG2cUXX|AqY_QL_osJgCk86Z0_$+_l_Vs%mG7D#@Gvc z7w&AQBpa&3K+s)Ye57ea;b6$5OcEYs+m#bx&1)&mJ{kauk0-$TvVh6q6YGeN-^1Gh z+(yp_kky5s;Mm+RVxdF?82APQnMc5>?xR%hyS}w2FYzFf0|<-*AfWjbi~Gwa*rzH6 zV0y)V$F$?j^>4fuJNHKpo*EzMsh6B1jv8R&*ob{K<3QW{I0J@bI{ZJ1X=@9ft-y2x ziM%IT9fB`8MKO!Nf3dt!MdyeCxmrJoIN3ogkl>oNaAZ+=lH-A_6T%z&kO+%8+7LWz zZ~!2ZK9~TW+1;f7w*XnlSv@xzY_)zVxs(l?OB!I&A;kl~rr-0jtn2*@E$Xxxf4zne zH%zZKdoh{HomvrQ1T4H`Wz`NC9fkx=&x|fopqL&mDr_unl*m&30td;|OM11-TTEH* zou)Y1rf_)_3;=)ZSkrbl5MB620zyGc8~|tC%1u!~D;9^jWM$716behcxY`2r+%dY8 z7rEQ`<+DoX6fO$)FF^aTNE$>8Fe|9$*MDLIX+SORn6X7a@jQxvdljpMj|}~`5*isR z*Zw-Q%QPHB5@JeNh>G6FKbz4^WPqj{AC1ETr{!vsfU8LV5KyGs;{M+ro^wBsuUAQb zQT@u{+qwU)uKl^dkzAnv<`fGGq|IXY{q3?^M!|RSuf|-D-K;lJ&YBup=l%=SHV%7L zZf$eU0-hETPsb;);9+^5Cyn=l>fT4T&U`J?1doBtx3I?%UUp%XwKr_15IIRCJ3%+h zb=gXws&#qBRp~I$n#u8M^IbnLkUB59_T@JvNqY2xH8y&r>p$$1uWgUFF820w_{=;eJmSz_tDW%Yw|Sv(gtEM19S0B%RK|R8 zs?)r}5|%Ao8At^GgcpyrmZp2)-MvKa(6f0$5JAd<@t3vWH0ug1+&`@-PT4a``{}eR zZz?bOmVphP7bd5TuWHqGn!taY$K(ZPXF5--_LYk^;k|6#+AH5UmH6VUpR?SvC(M|~ zVyt;MThk&5nQt$>FieYbxN}Wn@e8kdq7(ubfDPz1r2--f>;fI2OK@K8KNf;1x}ron zM}(idR{JQ3dG8qEqp-RhqMXZ|rOG9!#|1LpM2PsXj?%xAi-M^w!dE2#TWUtaw%;4T zrY&CUQTP>;u0Az+&mZbqlv-%sdUH9>*}I2T7@QM6?CfTpwVkMqj}OSTNd{cacO^N% zl85>QQojhRiyeH~RfKyaTP4DB^|>OVaYAbN%yEU!;tj%mXwyv2TPm&U02Sg*(xjHT zYMYs!^*Vi&g5#=&T7|8)6i*)NS1sGRgCtCpKo4ZdeWfERv3-qSMeDlquwb(&?|8?N z{*zjn5-e}EXi)c}C`Z`V--RoUi&tyb>UKl0Q^G#?sE0tZ!YqE%Nn~iDg&Jp zc=Tnz4HV?kkyVH(?vMzzmzB{SFl=@A*UroJ+&Wd28#N>%$G7#aLKw)IFdhW`Ni_cIt#|7*>@ z%bA)`K*qIf1)A#{^jz+K840@sMLvlEJ&k7Ugr?Txx8u)CB4G)`KF9}rYnLYBmP149 zH#LG7PG~s6f|tW{zuD&LXuVB>+IAes+7P{6?CnC7n^xvO7@N9|kLlxt>e(ECQo3cs zryChV!4DX3;BOtDN4XUK(g?G-ee$sx{9pb!Ggx@iz}1QIT`esoMmz=!f5uTp;^+mR zKSr({z9Aeby>jvix74F0hpjGt9>#uyH`d;k_BkTNSQT0h7k|A~L-J6MuJQFDtu{$Y zcVFq9+>#5wKGZLmG;Ze$N(12;9;e_V4Edk>N5iHBPMBOQee>xEa3lPZU-+J(L=}HM zLEtk5%U646HH$`q--BE(W{~HmaupI)0Y{)LIJXCu11*bM=BH6 zyW^vNs=GrkZ-i1dd&oJxgp#*#xvG_v_u3>&-jVTH^Twf|_b)}@XfZ+gjqBxlEU6r_iKgcYuhwP2eQEmoL!vJv6jn#ZS}||#f7J9% zWo_eP=Zp5cVa_Q5u?5WFoojNBqoP$lB)WuoHaZ-9C^ki%gB_SlaQNLwTG>WmQy@a zIh7T*U}PldS^T5f%}1e1;OWq#wWt^Y;#s!53dKMKtQ=&qZe(|Z;JFozZu7;e=(UZ- z%#PkB$3Evgl=C{p9kpCSDHn=K=)T9X@cUg`>C@P&&!gMA6H0Ve+tD7=aKKI5*xAyO3;ZV^@_M5_EVwswG%Ek zh46)F6P-(Lk1i>-s+XjyX8>(-{>tY4IK85J=C64r>k9jZ=dwj)+Rk%!xlZy;5se@v zlEEzlJdXtH(}4vPE9#C*q+o`g&Mj1HBEErA=_FA|7NZR)&42X{9Cf+191k=)ShTU; z0j-jVQjJwohsUEwOCj?6@yxin!e>;)FE(`_1p#9k71dAluQJAwTR^ zsNO6;TvJbUv-cfejAyKjeDeBXJ2IxzM00zfb+SS^W%r2M~|qSw_u9|S4ZG!MX%KaZB?F2+Hw!O zH#zG#)9yHq=U?levm8egC$sFnLlBQ8+LF_vbnmpSrC_=0LCu_Fx$E-FZWf4mod zbl+rLc8BPp3{qd{T&A~ef9v9j=lHPd%ko|=MyS1#!m^)YW;A(oZgu1b)Q^8M$~+eF z*e{_kO8ucuNB_SU**pTv8jJTMU5$1V^nl`&WBC`6+I0DHEe1|PQQ3w}@_@Nzd$gPQ z;9YbaM?l+-N}7^_v6mc0$AG1QL6Ts^#F=?+!o$Obt3nJ zK1`*m_$}i1zx^fyC$2C~Y$_xe$l_yWY#DcKSC8A_V0>$XcH_hLx)pJ%c1aPNL^0BE z1nJYJPf?cbVZEi1XVF^C-yL6<3*EJ_=9k~&$Wj2!z)0a+Gd#d$9_?TOswM3Jh#72Sd#{H0Q$yVA&-5tRzlQYIe zUwydwgAz)*>HU?;-}F@VB8F87o@3L4{!dQ0$HB@BXI}~0$ScoQJfO%QUTbyGTUN{dxQ*wvU*M%RJpZP+4ZaTl5ayn2i&$?nsrOJbRopP@+xCrUPYs)F zJ)yKOuf__Fjk5X^zwXb=5~bLs_j( zs4l?t`hj++)tl$kfnGiA?5%^u9T5jVDWw>g(_x!|;8UAhCE>-zC;Zr#l zN{%RMFrgeq$M2r&*&Ld{?rr-E!f=7Fo2>!rUG~jWyk}B*ym|*d#!o4mUb%p}z6V>g zn98_OhJ8YesZMOZZOex79XiE#@3h_N4ee}#o#wpN&kL816OF1ycu?;?q4fbvJj zPBMU=v@}pIa3R9C6Q2MLap>4CCg8$)qQ;!I^cN*rY|J@V)Zr^W#vhk0G!w$6F-!SsVI9b)@sA$8eiqr|wu2qntJjLOOOg#d4 zEy^JL*GSsHje`o`lB+6?J#P-F#z{YoJ1qIC$A98AB}xeh$>%l)4vX;f6^_mAK0f*> zgnx4JuWzHH{GRW-=Pw+4kTR;1+mai3U|uC_`%7(2{t@(|vdeK}E=2)6e$3$Hf;L~D z(9TX;AGv?8Kvmry(xC41G?A+}Ygha;%cGP;Mys@xd~UHu*Wr_n+RV;u{OTSNa7QTF zD@}d)hW#*ZX_9G zBjt!7tC@Y1w5Sj8qe7;TMSm+9w5lD)al>HbH^FS1yKTSGy~2i@U{LG9kNwZZ zO0q>Nie$|#^~rxOhs<0#QFP6ysJ%3z?Uxelj0r~Kan)nIjQ&0m%mz5YvJ1;Ug6gm^zjs{m{*>}ezlpOEI5wt z2KeUI-@Q|CN&@bMw`w%wZhra<=8X@DY&@(xB~AM=@J(D8KF)AAE>cURgH&9um$6~% z$@{2_oi6O89Jz?~Yu7ReO4Ac00YOaCq?byYnuC%955i-#J`(ty?Xc z&8wm?!ZinV0%KsMb$kZn?PA9xKXf)7Z}^H?anlg&p&D2G+Hao1CqFiGw3?66+EJ(& z@*iP|JF7mo)cWAt(j9(;1taf|l5!(jn6AYwRR_tImNg*6w{zQETmxG5ToPN=qUiCe z!=LX;9>>iuDmyWROn6h-fcMh80lyexIaFVuV#$Bul`k{cO6}#$17(*tSC_x}F|>AD z(+m+eyaKKI(`n3&=o;sS@>68gWK~)QUA;R`k7wp zvo6?=xs|*HKWX;P7Tufa-*fTieoKnCl~v+{y(-cV;JBo9ZHw%^*#9&ZR4j_%!Ea~P zFXgDeL{^fK9f4ZbBzlKXQ4;wfMN2lMMT&8|ir6x?+#37M_q_dJvAtqw$}NLy3cqCmh7EW*T;aMODffyJbSXfrj$a%YsS-2y0qr3JG4r?DZbrkgzx<5Xe~Au-%1;C`LglP91eL^~2c09;N||07G`dr0*k`>;-8C?cfBFe= zgvpdDY#nyVtycUK>g2P1m;0oe?7P0O#$8<_9I(1h0HROvm6u)>zhL6;nDE#%i1a4q zz3DSLCa_$DbLN!uYV0xDSFq8MWD+$NbiuD*gk3xsj{JvAg|H*aOXUKJE`5dxBFAv_I_p*=prCGtZ+Osc_L$ zhxFdH0O9t2qWg997X=OLnCO+Ke#5z0_y(L6)q)qVR&60&-{6BvTDgN5cX_S2qWW}8 zNG`3{zvqXQHEQX%=9AYz^57|%LL0f*izki?GUT1vjB}P0f_8cv3^*(r@;&gcP4*3aG5yDb?;JWdxbo)JP*)GlBhRu0pa`HO-OM+FRwqC5>0~Iz z)x0~wQ&+B%iJGc^xMK8bX>~rNg}1penKX0rhg!kU%ccd6@9gW(AGx)Wl(}fk3_Ydw zy*BJU(XaQG@7RnNfnvlBOTOgg@WWNd*!;yokDN@|90upK6(?*DYVgDTqk7hrJ~C*RObuLN&1#eif*FPyGH|u-chWG|KWXC! zub16U@7?KmJD2IY_glif0kfLL-jdLB`b~>oMko~R$mvV5e{DqXe^(Nd?0&jow}04^ z9~L}$qHwrKFXWqGUreOEP23~@QH{VRubQ{6rx43yz70x;YbKped4#S$d!whtRJ`gj z5Layede2nDwVN7gbz$hmh62JlOuX^T#FF0~57W5SU0Kyht7p^nfcVzHP!?pF!q=6TzEvkqc<>uu!i+CTd^?HkR_0g2d+mG5ufQcC70?P`V}b#=v#>Im-Vw9G z^OuwevB9Po_(o(!@*3CHHTy5}NIwNY<6;9iXO6EIgCd3|&9#m{&*pN`ai{G@k>A4i zUH^w^+9`;Y)a(w{^#1knf~03ERzCw9n~l9y_laz~?a``NHEGu0p!!Lyj?|dTM#=Y= zNR}7>KT;t8@|np?_lyA`j>1g+Q&we;fMaS#u{1QOWs+wXbbD5KaE<^N2!kaRT!4J} zE~p5M&cc#tNnYvEv|cs%-~+c@%dAzmqL@8M#({x;twr7Q75Yp&hI_61Da4n=LA@h` zi~w#Iaqb-Hp{D%G@pubN(sF*OY>vr_J-RZgW@Vg#i*)6U=@`xN9$l{}U^L9E?~b-4 zosPLph>IJ)n7FpeF(mhXVGMm4`z64?o1n8b?!Mdb6(qVm5!$CBI9|8D(b10C7L4ok zTgEyrl*laz%BP}4zp9FPyn)Xy92~)2{!!fj2 zYhsYI*6xwQI4*KdBB>X{?9+Jv?Nxt4sPn?lXaPCwi@k>POZPQK_8}X+SAxs(I>tA2 zjYNHo?;bV&mL(;eAQc#@s?sC3U^bOCqzJn!tGFN>_fEdYPqL3H@3Fv+pf^vh&!}I~ z)%~JY{WGZdfP96jJW&l$ae|Z%E!GHcFAY{Bd%aR?Z;*Xjl!eD)IIaGff%;`F(a4Y0 z{fqel$ePH-82i*#149v0B|V?8rgM0-5Z-1lK0ik-T-`9VTE!*PInHkdZ5CTU@FYw? zwPuueae}aMK`pvR?UvPQOSJl?MMl&FfzO91()@J%k(JjC{>TCi%(LfBKLp|$bT{s( z3-}6>H+)a>X|8|MQuok`KjriyPESw=D1K45*~PX9%Ca_es7lhXey!W2xOMnTTX|4B z;5R72$k_6JzOHc6_Ke~Rat$)c{p7dx;$(DWC3|4Z>$1B#8ZGM9LKG8uMqNH-^?&_hJtm(SL;@*B}@=^%yImbpdHg|@05h%mm56a z^eQ7wR-yw(@|&XKqDJ9mcFt(4mkUbvER9S~F2WFP?@VyBj}~7ej6LK_`^5Wf?rd{E zfJqCh*+S4!?ATA?3NKJCkrclykY16{c3coyZ9kQMtMwszgMBM*#CIw+sGc0{I&5ew zuVKqCj}(+YMPBNB;=dQvAqy=@5UZJ>7hr+7?Pu3~Z8POW>&(G&QFf zx5_u?gJeT`%PoWO8vvalMPuJ>G5R%he(Sr3XW|oVrIKU+ic25nz@*08c7dqG_a}bN zMyu3&w!})sVKjSHcj=G4a6slVQLaa5KMRP@X32V@@D-^F{eSo2-5mQu+*Ovoy6BvQ z`>5EABXF{2)DP&VJN%Ry6)Fz@(KP53OYbYq-b>JlWQy>}40^uLXGun?e~(i3d}8)n ztCwZgQ4Nz`0mvBdPx&c)tOo*FCJMUv@|eht19dmK76V`QoDkWF&C)&|Y^&+$eRDE= zf-g+OS+9WOte+kqGtFS!W^{bDbJPzOe6z36ar0Dqcv*A zjUog-QKBU$1k=7dCE7T3IB0oYB`HfgF!KKf`uoE*iUU_1Q>oI>Lk;YT!fB8V7p@*< zH0r*2&;JeAAHxt7p76*qUCbYBVrSkflVvBhoDgki$_S$LV*S32c8 zj%vm-T=fH*XU=PFn+x+@#hXC51z&K7;?<7i~h z;!a6;5qy$#EGi&tooHtot0Wm;U7^b&FW zY#%s7jyw^(d9}s%bh~Zy<)gobR)2g-QIS$>Uq91&?%WUViPxj&BHPxk@SGR9cHV96 zJQWsjMYg^J7k7GNI1grMqJLqeg^CpqnmF#1(?{LBK=)uqDy*V5lo3R|OUQw-MeCW}L5AsQgQ=Y5iUMKrvu7FfbYYH4?`D90~i2a96dN^05>B)kZH%`y!E&3`l(|(+eoH%{g^Ypd}kjzM;4Ho`lnr)LJp9Y=T@I8`t z$*3v!$(f+ks-e%upB%K+(1%`RpE+~o$B)#6ZLK~0>rt;M`(9i_K(}WqW&7H-*I%#O zx?b?T6}ZL|m+c-ZK#X z{Hz5pVNrc5*Igpjd&9uy0}L)9Pl-Yj0WyF)9P-EGyae0gg7Fx0NR*0Ylbwl4=rh+n(6c3tw@ z-LCq;@%N60{+*r4aPqb~jTLxyrq}um{o>4Kz(Uzx-A3XGA6(B=c+ZmXB`tZFZ4(PG zm-9{bgm=VZ!_!ivf1o5>iO;e@$st%w-Bw4AC89!<<;BIH1-q}=9vK{PM%JuCx!A;a z{9}-%d*n3Ha`2H{?CZS=ug{%%U48A5N2S!cV=AH7vuB%RA%F_&PYo3%>DdbZx}&R0 zE_}II#yhR6T$JeQysuY64u{j==m_b%!HB)Q6+UpB6i@oOz7-vZgcJjhFF|*Np70EZ zrA(iS6I43knP}0&w0M&E;`2aqueHSlbC;r$aC?yQaPVH<;LfKrCwzyl=-b%mD?PY; zC*;y__rUuz{+}i9HK)`yo|U(H*Ww?1^y*W|l<)Q@N`74xb2s$n<(D13YdI-CQyF;l zYhZO;ZidL_)Sk989d=mWXETqV3yi+neN+=KVWO$kSLIh1&n5&uP)q%3Y(xJK);AOT zuv0y4ylMI$MQ7pGH zuLS=dZpMcT*=h>CGx@y3r3GsYka?2jEih?Z+OkQUHSaY=yt^&+IlF4oswI|v;Gmf} zIcPMn!C%74@zqSY*kivXzHsTxWuvH(MKv%b8=XwGk9& zFfcIz0APl3`VvZ_xKUe*smn8fjF12YSuw}~hOI@g&{%JF03STGmA=IY!~ZWze*5f^ zw$x+(s8LRsx}6+SIzjIM=6nWrm8uvy=$e*=vZz!qA6yom62?nJ%a<<=BS1I*g=0Cq zUtAvG2}Vu;xdqZaCqN+kZhFqrI6&?vg9QTZVW21RqX>Tsf`7L_4uJLRyS&za2*RQ& zh@9xGZdj6sL0yYQ5Ef1u>t^U3|t`GDq8QOP!7I$T7>&)UX?rUl7sl1qwM~6sPkIo^9hK3s1kBK zVu)ZlTHB44m7{jRNOY>J@+^kk5-(V!1T`I5J4RwS^=} zXxO@3%VajUe8yo=(u@AAU?eBU`E14SG4G<_=d;{eEn#oA09Hs01{f3~YZ18`q^{Y+ z!)JCk{})<0GxD#cp?&?mG{;%ZGrCci3#yg}OV#ffn_)TEo+TVv__399(Cat@USlpP z1Bhlb9Lu{Nrh^pVwcBV)FlN!>zG@C*8oiqJSn5s4LMO997PWzUU)RzAT8je*e72SZ;+CU6{dEi(<0xUclp&dz(N`bgn$8;BQf0iCR74CjbJB2U>OKQ zcbd9b^W>UxMB96~{>I-oOTS-txtG+dm1`g5V3}|KJML+rLr|S-vBU34i({>Ho#wpB zU+)v%+hz>FLWPpWp`*>|>o?<^YNBVMSp-rWdbGm;cYrRO-y(`Xg#?pVNv3SBBq5S@ z^V*$jhanidB})E(PRooUZ9piJ^@M!AY3FcU{Feh1k~%}y+3$gf1EkU;-iDaH}1zU=}p1b8EN2(nH&SC|XG`2a0Ntq^mDuEqzwkwvB z^UkNDKBGoSJb0?)iw*+bS;-4aAtHN7_l!VRAbyq_uA~l-dw$0aR#qA9jKcY8dbMDS zzuW{ehwj&iKGSHXRXI+jr|LKYLEslSpFRMpxN!skQwZNxbiutH8_nAwHCM7}YX73I zjN^|rcr=YCcGL2y-sJj-2A<^3cqnAuRe}Xmm+B&KE8!`pSN>SR-X-YpmlX6M=IN($Yq4-<$1>G%Z3Bz}zQfzb?X z-dQ|+*u*9Svlr8dbw(`UmjDvhC+L4G*qj1Zpjw)Lv-O+Ljz=CaipnM)UsHkzW&@+W zc#6Xsf|aX+IVeedh$I1UdR78k2`z)TK_7DH3NowQ)*rpHY|iz6ZhSjp=1TjtC7wsQ z=D;j~LS)#j(O<0S0Pp^`gFa9(Sv$>ZU zn}|w`cFOA)+PiU&dR1)!QYd{02;{~F00<^L;%0n1n-Qu*xYmr>Uo@|G>7q{nFS&Ae zZWga8`;3jdtLEced({`8R$dB16N&SkV+T0NJ={aIz}Hb z^y-zUN}*-7q-^TJ)EnpX*@t%Id4I5cQy3s*98V9Y0EZiqUDMgaw-oXi6QuZf8!o5S`rKt$-9gE@61$Ll?0r3Jwt*M7n`PYHC)zAxIZf2U(KF`LWBXW&Bvq(Qd$b^5 zeDpIJjmP&QuYnpmr^hk74+Pg#iw?iLxh+{$O(dlmDU<)UuKy9VnKTs~(0X9K_EqXf zrOEn_;J`2TRSSKTYULDF|LJ}FjABUzbLcGzy}G505^9_rNwoA7kO}O0UML%ZKT?sC z;uBJ5>CB&?{CpWlvQ($PMuQP(8U>87&+t!Od#X21E(e&T&6J|~o9izja5LOAA$Fge zJ=#c-1y2E=phzRGXuZ<#gJ_viATM_@cMj&_Kc$1xd)2<-nM=VYjhao=knB5_LN@w# zr$D=f?Al5BsU=|sw%}|CCBI_q&AV=r7$AL=Tbn}qX;Ui)@e58h@uG7MrGjATNMV`+ zB|cJ+LN{*)N^pGkx1|y%P&C}_P_aWcxborP>ru0ZpI;GLv-6!1lV$k+m3ZTY#iq4u zW8`x|yUCB2TsFbJ5*-G#ANB4yPuU6!XR;!a5{s2RPo+20e(`ivhPZgo7ryKJ)%W5x zk>Tenf%&Fida|FN<^6qEczydT=D%=?*~lOE3Bfzw#XNf79I2II*=1xEmy_~5c0o^^^ZQxy-O={*Hu%c1Wrd6<_Q*gUSZ!Re1 z`2%V0-ri6xBX*rYPnu~1M{&!3buZW~|x7-ySn9e<(e6EUk1ZEhJ8FUdIAn zL@@J2>Vp#Wjp0eW*=!fvDf^>ZX=T9m@>`#GIE(9%F!gae z>*w-qqZcbC zVA47AaB2aKvx@jXiKe45RQ@s|W*K zGa(D{#|bH{RLScSsp!~lel?*1<C! zo~jV35gk0XS|hOfskP=2V~X9_u1Q{$X~~sj4vn_3E4q!IE9)i)$RMUhE=30|XJd8o z*MOG_AKL=s8IK(DVI6|7(e|;7{7Nr%0}0JL`-jm|vM*hP=nWr!a;rD|G9hBu!)`1$ z5+QsNnjemRvaiYtjRI@M{IH=RssX3CkrSMrH=z=P-@~zKwkL1rDtJc|S z!r3);{gEAYLtzHEc6RBP`nqg1JJi|%*C3#-B-@O(%(D=cgp`Wo)~i)gi|qA)V1 zg)P2cE4hMz$XSw+9W*c#+T2B~Dm^2^J(}nlIy3qj1iHdvWm@5&sF&>V=l#&FS2Kx` zS_5~iE7!S3zuxsYnWQ?Kl)9KSY;d+TlIQ%bU5Qq^e33r>XQlv%Z^XoJ8TT*v#ArXm zCV0eSvhw@$lWy>-m@LTmBIO;oX5f>LG6r-D;&~7+RKwXZbn8=<;FiWl&Y)P zvQ%jQNufe@q4M(RJ>x%z4YOMD^TnqN_YnF#CrUu!&qT)YN&^`oiAo8~?77JYTdc79 zDts<1e7c0hq5zJ^>jXq$7!w*Ey#oMHiii#@n>ryMU>|4w>W~oT_@U?1<5wGx-+orm zaZ`XC&i03iZ$+h4mnQZ9jUP*kJEkKlkd8@cBe-!C+r~GNAn?-H5o8Nt zbc|g2h{$gG$YS*XtVH%qY$b+$XiP0P9!2u3;*q-PA!V)>-=>ZY zN}BzVGAB!0vyxh4V)^Wst#plF5>3BZnr~p&gC!_}krk8jQZ&D+TqolnHZJE++_WHl zZ9qRm^&*X;R8)@k5wq)-5brhd-`WY#DRryFx_t|mC6`dlcoMt)`YrA9Zonu01tZdF z9S+6%)ZS0AeJ_6Y*W15nPaUXFec5F^ICj=0Rm)%^3W4(wQYX^gH|ruw#KbQc5-iQd zJf*=VJc~!;c4Oenq?8Gf+r@}4G|(AN7gW-!KX#fZ6Cx&kgBOkFD@Zw|hr~b+VrWhq zs(RL5JY;^nsbN>9Y1gL3TDnTOp2s4o~N(L zZnnq8o%yr{q889$v4J)u(;?Xfc;6_QR8lSZb3PT+a2#fKXRO8`gKQ#wMF3Cvlr10% zPLEv6q)GjL&}=k^-QNq-bbhFHY~AbX(dQbtyZ6Q{ZP7^?qygcjGOBFLk=;#kdOQR1 ziayx|EaU|6IktAYXsr%j<*0X=dv$aSv7uv#oQQN62=L5!k{cd^hogWR3gMIUA|8^w zb%HW@cZDtCePY)AaT%6>?yc8g%{V->uWoCE9vIvBH_)w;A;`DK9N(P6;)e(E_XD?P z?I3o)#wVMg=5?6|w}+DvHiFpv?~&U^qrz2hUR}p5KTN47c_4u_ZCasxM!oBCgPbDOe^Nn1R2x_{)Bgu=cDT@F30-+4x;ZXN_Z zgBsiO&V1pE3?mWAtj_owTVS7(p@>F<37ek-F7hXaeZ%I@9!JtB?jEb$!ECcLtYWYe z{VUkjq>g*uNB7}MnuoRSr9X%ka)1Kjo&^cM>upYi8p%O;X}%T8RWd{xZd*2C|4{QGV(i21&L^W%Yq#2TYK<6EkGf{?ZwfbjRT z3hQUR>C^?!nOmi)-uB74?xpDg?<+RX*zKJi!9RYm?QbIsM($G{_)ud*VhW6lI!Umt z1^}Ct(pBxAdhKRs-IOj&T--l3%sySNsen5Od!z;QKZu&nipHGtj~I% zWSS35Pt)Xf^wnqEck#c~88+XTHbNJ$G-eM$bOH}A&YhP1T$*1BKS>yvDS`LW3W zB_X&~@}KHqMALzOj;5Sa=|2m4VC(un+jA&qM!oh+a-in-j#qn~*RJtLu4zoS-Nhd# zZyZRLIeDD@kURgIUv{l}p$gwPqm`Jn{^dV;^P?c``uiPL!qc5}>26c?VDi5-Q{TCG zzvGHS!`Ydz9k@xRjSf=S_xL+%+;zh zbY8iQRdt5vOt7A-YcCKmCIL^*9RKk00x{zpu-hAe*f@Ur$)dz1E>Y)GPK5!eku3np z>&iuv=)ZSFnI?N)(_$Cn|58E10m%qFqI)1)6bg+u2O|W)P_{Eb{MI2pKB`?Y_3TfJXFP4%4;LTLU+5S$Y1Purg#U^i+PmQOv$jgXLnd6=FNP~C zT-}CY!8Rh?z`$b(fJHAK3z8~TvnzkjpMCc-w_W|o^KX0d_4pD00<|oKM}~D=t4^fJ zrP~v0`HPGIMlNF8_MR;$(Q9k5o@08m`W^|in z@uN2!I{1bENK>mpDsRHebs!AOnK2sL0GwbuXi(E6urw@?hQD{W>WngQI{!`^jl(r^ zsStPu&OgsP9QPnUmpQh!HAk>ayIB>+C`vuB^{FH29<=OQX}gQRWHpiOA-7R{1%5`?|?3e;7jDfIXF6 z!@#bTo27xqSiHqKWp>GH&(@6+vA$WTD76OqDfu#G z`Uh3Hs(6Z_FPkkd4r?TfgkvhvE8{JP9Zc)%=vT;%zvW0_2{{Vz5jjr+cOW(DR9m2> z)8d7$YCEDZcpP-6{@3nvQ%8zp?ivfOa^>%nCu`S#zeH@`{4){V`Yh3PPb5`yskJdt zj8KCmcb5=QTlAz=`~#4kLpe#dHkoGK8@Rv>Kl8F*%I%}Fo}0EP1AH%dn>V8AE*NEi z22w+t240@_Ihu8DIH>;ooyc{IPeEgkha>++r>NT$xfZj0O3w-1Bsz*XaW*b>El;VR zRU>_^*-m>rSxgl1R`>9W3|Gp-uCArv@ep}AEal8kuJaq^*4u+i|Gnbl# zzRWQ|J|!qqVP_ck0JZp-OJn0rmJ_Eo1EhRXqII9qXRNHhh}&JJ@;V)2DDXe~WVu|R z*6@e01_op-@v3R?;DnLNWl9@TqRM(Xg)cZiY_MCF`XmO;ib@FZYl;-tMUy1RBJ!O-N_EusAz=ol@BZ9zIT~aV);>2B9on@ zW9qOwex-f_ZWuXbWX=*r3S&f6g_P2;2v~U@G09RTn6$#S?H;GXPyOC)pZor0#R_u_ zx`@Fudr0?k;o(Y^sR(6VA z47}TOU=t7yXIQ_P-c2-9Iv-3_Q{=|%4hCgR9|=$GImPdiM&-XPn^k*ZlJ|X4tzE8x>_83|d!>urs&Qv`m6jtt-?DNy zulx6;>ZdH;iDn0Kcr6y+9PA;QSr5P;1wC3!zmrZV~aafh3YOGn1^q;rbm)KR>=L#Nb~Ov#Oq zDyT!5e3Be~j@Uhk?3z@td=VpSmnoCo$=znSR_wzrK44^WLrI^Vnat(4cFnyT4omNVGd%SK z$gxN4DF+h_IJsu}@OO7HoU$$w;H{=`zdStEy|jnj)tX>t4d zXQg_a)RMFUkX9xo1)`n28v6yGve8di3x%0#u})q$G(kl$Q12|t6VTl7e^A63?t-|a z036UDLeJ|m8{V-V`s+V@A=ot}SenPu18C#7MK}nO5qT^mn8`2Fsq25;;EzzjwkGf>t^ z%$-K127Gsub@U(XQv0%tZ(Hz>Y8o?DKw>ahvXX`HtSVj2{gTK_a?~ft?)hqy6#fVF&AR&I0 zf9@gk{Mp0N-#30V{}Uqe$O5(p6dZn|lyc&-vM`a85_u!t z_5pu>oyF$jJI>LacJxH|%w>mn{`>9oxQuwEI`oghnaQg8A5Eb|98zgi>)G){U8hSA?-vr)wV4F&@kC-A`a%; zr+F>OdyPGNoyOqEcYkyh;mj!B*e&K*9P~iU5$`aAF?4Lzl7o;xafyLj?OdS6Z_Js; z%!@x*C@**>F#-Bjt9O9|uw`v6Qlqvu^ zBRJd#qpnGJ$RSuK1cplJbY;*rgvIc=GVV`t%n>3zDNP9gYc+zP)TuF7Hpe`$- zMfEZ04_u*a4|7emD|KICR;;yKI65IXLzL|dAwu3Fq8};>`cEoy16b^Z?9+ge-~$YR z-?+b(wh^^Mj=oHhvPH79+cl-fa>YI78Vlft^%flzN$qC*a!N73LLVLm=bg>Iae2)P zZsyf}&zrH~n6XFM*(cC`_9JWV$Hf%I{GWF3EIYf^F@rVOJH}rmq9t~n7pdwQG)28J zJXCtTU3ODc%PiE?Kw>sN@)E+nD7UMJUik*1NqEUekSHqRG%Ogn62~R*u!^FZ*%HEq+_PTX-M^%Jo|)46m>LI| zMpf7xc}9R=$asUTf85~(>uzexVapnKiT7}(1U+lx{7zS(i zQH#leSD*tng;o3tK>$#s*jhnul@R$vA(YIN5l|HJHih<;W=xNgYqU~JvC=_+vS=!| z=a}+Ey2`~uQ$yA9sGiEZH$2CSyu$BQ6WT}`y2#FUsB?VCyZ!6tZ^B!CsuLDG&xuPC zUJ!sJND0mf+YH^`w&L6WD9B%~DI&TUw~>)9zARpmMdy3LZj`w)kbW+$Gr6QzJ&-M! zO5<}+hngWL=cD6A$wyXwN-;J)r7${myH#RWy2U5=sO6qI3F{lDnsNL7q7E^e31vKB zW*%W5AK9T{{|;7ImjlQ}j>@U+_f>t(wRUJ_T>y*i>&Nq|U=+@W#U1-xX+QClc)V6f$&ttpP zp+@6JeoSpw-;(m-h@D#N>B;=b@@vfW2itT8+8;AQIzpO8O&R#S9s)8JA~YT%LbR&_ zj^qXId8NY2{A$&gPFnz_4U8t$04Ey&Kt^;Rnri`jZ?)NgXe8V~c6R}3NiHV_yXnvD=SrA8~B z!q2g8vD4`4_bXv3GokN6X5szJHI^)JVd(yvZ{wA7Embwu!ZQ*YfUn(BLHC|9BUPlP z!S*ndev#^ao__x*|EM_7c4cAP8enfG8T*xJrGXhmRX=PigW#uRn*~sIGRXhZc*f-w zX{4(!fSHRD;=%G~;oSHh_MRik{ZSDCs!}S2Y?)u6UHG>73&%Tk*6^rz^dmfvhFAp` z~iDT;+38Y?f=XK$K5y;*4w(RQ2O(mE!p$(veFkl{ra8NgAf?^ zC;$sH{itDy#Q1|YVEz3dn^`8@3LS!~W6UJ=tT67OTu8Nrk_wenzTfeQtVAFrm$S0r`<(>4 zgR_%jCxji)l~W(7vOL0>2`d=B3Km6mj{eYfnp$=6!L*O#K~Fr8aA0f5@!B(pm5@uB^eO# znI)B^RALW|QU&NY$gBdc6T%N37guF>Ju)! z{gja=b(h|^`UciBy+}VqXvYA*Ttx1NHSSfqBHqwsL!&c)MA2lYT<^p{)G}< zflA7?L+ABQ7F^M4h`zi|Zt4g1Ij^`(dR$nO8*o{$nK1^jTg__HXsxWXN2CawHw>Wf zlo~}$kp^@hZIDl;VRe-n3pURZZ`h=-c~9?Zh~roz51H5oNr&4ChnG1jZ}Ch^kZ;Zh zX*-{j@jf+g?fCO$o^f~H>YEECK1W}K+nAL^lNBH9A0>h<0NKqr@p}6E25n{BslxtC zE~h_&6@To@_CHj(HDI(^$zF}`WwS|?8LJD%XotOVBH^0oKGQ0S^H>kw2qEW|imqo(bbY2A z`ZQHuuYlkG=D|~LC3qEb=W5ReS076bAL%x{JdX(!m z3|Nj5vS4)aVujjv$e};Sb4@e)hZ5n(%=`KCWyOb^6c(D-zw=k89n|`gJQyK z3A*~NtG(RKf}@20CL<^&hd2_PytNhkRlj`0i-o2sDiPcF5Le+ks6l1Vuy}vb!+;Fz z2nG<0f5S;#F$lch*T18&Sm6L1gusiKC_i7oyVk}}#{vc~@GbEFX3wG!8q)vd&hT`w z?2+vNr=N&AVU)Tg9Y3gO8bF}&&i@ll)2g90x3}mpZ#6m2UH=(AV$)%El4tp#Y|**L z;xzA*-_W+#3#;$>mOY#2L9eWT6q=mmV(gjt!6tuIe`eRdfQ9i=CYS;ciTrF=LUOP z$eXtX(_hQu(gCUfiS5=pz@j#?15l5jBeKiun@ghEzOBowbR>?tMRz7h*-db&U82`} zgf#JQexq)^LTlcb##!9PgBjekHTl5C- z_V+p=b_?JZAXbO(2(SZNJbaahofY{@d=CaYUS<{j=WW&Z;GOSd3FD9ckNf<-1X@ev z?*Dk{ZreL;D6Z|BUjCjB++2YozMUu{x-YJftr_I`6bmH&B*%CynN1Av9+_k-x|dSr z)96%$lx5^yh)$ zSc^{Rl+LN0mX!+exN*w^)$>>P7F>*;v7BYixwB09rW21$o$&vD)MvO?%cDNXUe2y5 zS<>*~GJvsR1(S91T6oTf|DE_-4F4yzn&A|i)cmQ=@R|M(7HX9Ds|jL-maAt0)f-v? z;m@z%_~EqvIn7?2YtRU}g=Ju8I4j104oB^y zCs|vB37DWu;e)p+R6d;=3{hSIZ&5wsPy0U6fL8;5??wBi5+~iu3EoIr)9~myd zs04a^L=9YCZPx+dR*vYcW;C7|=i^k~YNXiZe!d-|>2cwW?wjyUx_>L=dC0U`wBk~} zSfl3IhLrDL%Gq7YPSzlQe8AplDERehk;Vdg<%Nc=>2{DPXjq(7N*@If0DL~C_P&YS{uKR#v#29A9ET$av(Nd#A$t)5DQ0U+d*xOR@je&q|h=IR~wbh4H^DFXdoW>ZCDH7AG? zuty63g3Qs65JZ@k48XSJGV^L&Lpk>e!zE&pY2`eM8cJn25Txh)Q@(+gu+m5>VbNlc zv*681TCq231oFv16iY@%(P1Tw1x_fzLAhi$v+DL#B6b>H^Su+nw%X3U542;BSy{D# z#dA@$u|<6ZS`t4A2q5*O;l`&T$FHWORo+`IrY2U7b+Jj{`Hnu&iOaGw4Bhja$gC^9 z*{i8u@lVhEUC(UEN7WEyp?CV7dJ4}Zm=d`u{nl+3B+Q8gFIbYL#smQ%Ij-?UJrT>@C16?VyP*7kf=(y9uNt zziZu3*0mE`OF@0$9&QDlN{yR^aEa{T={munBX9tySf^8$7`%KT6MOmH z*jgBwVxIu-D8|%r!OhaAYdn97|*aUZ_Gm@rZFTDUdl*&h9}I& z=#I`~QAly;2$|x@2JaEhEfY#LFl{N#>gs#=W?ILlVBMiZmPi`Ze4I}}-V*#`x~7d~ zoXZvZ;CV0GLC7Z&Ic|aeyFM-p4W!tjCwa&_vpIuZLy40w_qTK0-PfSyrLn#qrN@CE z6WRKM#-B>Kvb=0JR@;2>B=Cpa(QI)m=lA8)0b!0)qhF);bv#8v*`iK#Y%S|;K&m(*qIxY$HIr_>Fuynm3&z@ zY1M)<7W|4|ae>tC%KAEM%H^fPY`RCki`>?Rt5l`~rnl{vI(mIy{nT07N6KSpHSABX zF>-W&hK23`eX<9YYc1qpQ{HtEZ*9r7`yQ5K_K8&D^U$jrM$T2~qLVq|Sj&OqBwKr4 zGp$cU>9bv#p0k7n+&sP}zarnj2h0S!Y>ERDpC_o`i#o*KSZ7Nb$3_wY2yhjB8Cm5c zsp0tNcZrXL&--rE~Y>d4_E0J#k_LSzs>DY;fjTAi%o?a)K42<)XRs zzyLilKtS%4kv3pPW5rQ2qBF*Q`I4FDKN?;@6-AS=kl-d{-wOjfL9A!?ukrUBsK5%?@V zs)8jEAV|H*O6VY$@YNbP$RPUkAbYl`>2ivCIAc7ipx;?lwvt!2D|LuuOR1x=D3q?} zr6p2nD}C&<0QD2P`xX);U*#~waz1vwW&i znkmQdI>Z4_I8%tItsuh%$Nk>!!*e8Dcm$235p9^TYw8GJI!SRF342DC#nN~r z4_RhN`-o%<>R=+9H?atldHyIpS&?HaT;R+HS%FJw7$%q*5L7V}1zBPh^|H2Rq243; z^wbZx>iat|%7Kvz!=Stkm3Uk~E}A`Z@iMx-5_gD##NN|G{tfK7&qT^~42tuwr6_ej zdQ&s-ru*fa@xjK+-Imo}0V?xR$q?d<@Yn-~7Y*}RoSG_-V3ef(iKas`P-y%=ZYf2d zA)(LY)+mXife9}(S&4ThnC@QtjhfNE8tP2Vi*>?voN@L_2tRn5n4PBcWQ_I6bNWxU zg_|!>A1D)fO9qyN@Wh21TGS;IvEG2XjhT8VVO}qJ}fTq85RhRLB$jGTg55H61_aZ z68|j7_Tuw3%-fqzn&o8h!V>cmi#neHs4rL;6Ua6eA1#px&;nc4-Rj4gTbaaB9a1~_ zOGWY73E@buG=9sOI+E~G z&fNQNY6X;8wUUG`leoL#b!KNg=Sd3*8#h}gcgm`ngI1GjbtJn0)Gm6kh}1iAv=T58 zI16Bjn!E7{5P+nJSgezI3?>7Mh-Uv9C^DGIG<>N+K>NBSor`BvgMLoP0ySp7y{J`f z?#+QZHZb4iqp8tKq4%P_%VRM5%)XFEG@KqkY!Z705S7GX0er#@RzA)6iJT^5^Rf zg5eFC!J-i>(nlq!fgct1sfb^4W|yqjS7hbfOvfvJCR)&peT<4(FcpOdm`rD~pFs0x zpF`TinhR|J9vNXILw4X&;jRMwcnJ&p5?|D3fu*W5BgGrd#&UB-9wcKW3yHQ$r&44o zDP^Z*MAO+6g^xqii5oN&D%l38swK~>n=Mo>cU1lik%-&1tbDdEt?VJ)dLg=~8(1OW z1c0{$@x0992N(!IozhL8Nu!X}PhnY->mLbf<~&O{*)Z$6zz2(m?C?la`vAc=f7Y73 zpHu(l$lOdVv|-FFR_D9PEG4Nu8xuT@ia*z#$&DrYT}&qszswP7x;3VLR!>?;jKxCe zWAK&XPY70R0l<9Paj7{OX;?jj+gJ+?G|e6>gR;f!oa{}8K&*^8Wz zPq3SVLfVVRL6TTRSjJXB!a{gV0dB{@4}bPP*3+*8f!~7vlb8g^y;DRFV1<|ED~b}> zkA{f?@hUv&8_^_q7uoSQ%!6lekw@#T&&q)_EuzAxymMwfdFG}GYkf#HfdR{w*Rq^@JHH$ zdn)SK9+B5j^h5{<6u0}*xS(5Y?J3Kj;xTBZYL{7v6&+^ z`Dm|f^2C4YByPI?=>xm|qns4YnMi}25hlyd4$8_t-a;xuVHb#*BJV;tp|CSIdLsTH zti!p8W>1S}WoY?pSf*q?MOAk@+jAmqLo#6w&~OFb8?E>=I^dF_xHJxmDSi;{WovA` z87$Qv?xu1p=djsbJ@4^;w{Np()_S{{>xy1i%iH9B-xH}1FoK`0X+aM$Xvg;OZ^IFe z@6BqOt&!$>8-=e(6&2d_sii$j)C|5IIN)Pm&{O98=M?=j^B?s=J81D{k(EzP_j|%C z^rTs7@FCe${dCRA@FsctbUP&TZ2i1mlUqgqv+Y755KD+9EW!fTu?sfaZTBm<@mS&E zC23XqvIR$4e@nJAzLzyDny3!)9=)CCAjv&AKj?8OV?AnP+cYF0ub!gax_yX^jy;wp zN|24|&p5hZmRmD?nKAx0wlgi&N~KGly=^c4)hD89QXmN&CCpGRDcd}^oHqf5d||Ap zxnlOhiaN5o8j}-~jtr3ur zV__{`k8!C3RtfT^<V)7$ixo_E$=?gZ?R(oEIT z>dWN1Fte#&g?}yb_jXzErsdj+gP8wU9PnR}!ceu*065aGchI!&jg{^qH0Pe24{ zQYJLAp|Kz=0FYb|0@3nV7yZ;zdt!A?R29Lzq$*xb@Ayl1HGbMz{@UWywqRO5Yvk5Z(QIL|LPY zeUKFE|4JzW+kAPXllIoO%kaokvWDreY2`fY^J6#vMV0XJVTzA;R{%lyC|2N`8E7j3 z4KOE7oB{kl!$!Y+JhoHZ0NUhH`cD5N=_~`9dgC^HHpUp;U1M~2hZ~(TQc4;L0Z~$N z8x4{I5=xhJi-w02C?1HoMHuLeblXnf% zLQ?a<-2ryOzy-*7?LtWtcgrrt1&X9OKu+~JE2hk8BioN2JM?)fzL?q%3cssSbEon1 z_mGIYeS4vAzwTMx&srfQc|g1!d|mNp*?&rxD}tu0N%T`sGcm=dHM0Z~5vRM01_0W9 z{hpwaBAN%w8P^RwmrUwWYOH^9C{4`0Z%$7v;MD_->=?nY5S8MRq5&e_^?7V8zG(Wj zNK26cdExj2V8foY50G zXGj{&yr@h4NW0q3W}uI{iUm7oYX5&i%eD8KkkAf;5aZnKh1Z1*M(5|L#?4w^rb|C` zq>9&*mj}g)bZGL5e0(a-jwlz{=(ZBUlZTbpdG9EcpiC@G%>=B-I+l9zWC1Tr))AU@ zaD&Z=m8R3Sl5se2AS4pfnK7leoXg{mTK}PeIDO3j^a+P zMZowfQDo)-@wLq}0n%)*A_+tD(dzCLim>tzCzklhrLjk!zI{1B#ITHfLHH9Re9D&WR?goNrwGaL|7XkoZlz6TAZ+rNO zg;2`pqZdNuPAxsKez}o#2$l;_;ff@|q5(?kL1PAXVi*hA3!Z(pVS|24qR&NYY)y^z zhisFbjfaKDZ=1ifQw_KF$VFz3wY46~*Yq1&7k?ExSf&7#1V_8aGT3Zfpt+Sj(ubqOaYF?7FF*Pett8Q!iMeNkD0YhYLXz&~y_rz&Jv%mgY}$kuMQ6PH<;{uulv zXi%b@t9SgJiLAqlVsTB!E}B91^}p!b4>Wy>Jta z)eL7Sizd!sybx@~+TKLY{bAzEc74a^E`!3_q!fjk(*Ryr$@V_H6``G@{eMPy^s;4wZsyw9dXPF;#@|*s~;J6 zzIsC<;y5-}%!PbHjsXyyS|Ay+e%J-j9&(G#H^;l`VHfMK(zAS7GL`gQ!8dK0CysPK z?oJW!Jl%!=EbezJ&5*!JR^NMCYv3$1u2a}9r*>C}!J!grE1T)eNBG;{B`@n8rbew2 zhW~Opy|N40z;nmMWfwFQlX@%9adS^5HG1mj!MkNC&63}{nBf!^DgAdA&K!mo@wr#| z!XtpSnPKj2sRBSJQ~e2H)UL4f!+;Jn7}wc}kc1;Ua7z`5gqhKCE>QPh?-5+TwnRrg z7|^KFh&jNiH5!kx)F;8h7+&BF=xAiPGAnd^M{i^@*6z#D zelwp|>Errr29WDnl+8p(`Z!tsyA{;C5Qq?1j~+RhN^@m}1R}9W4*ggmwB$yISf(n= z!RX^}!rB@Eh93f>PKJNKyL0@{Y2|Os$zR%v;owWwcrqJH$X8c=n|FZWcjO5A;vvF( zD}z=>6a!FjY0rbH_h2Za8$Q8(WV&vmnjUW#xnKMFOh!cMF80 zEcV_U(wQ6#2jrlcLq*_eZ8RE7QP%?L$n6GL-GsA~%*c3=z%IuwLlkvx7~O#T1=Yrm z;%sE79ZAD6n7)fUJ3pS5Sxir0TBvIIkDlkIyRELaSM!Rh$?K%}R=tsuP=70XQF<(UUF-#;mU70un>0M{9#xnR81$W9{`LaX-a8sv8?jy*BZ*t545rs z7o2Acxsr0NMp{eKGI6%I03ggY>xWD;l7uxn!OIHE3~MVq$4PPEm#C?064bu=pdjP< z`9RCJWA&h;Z;G;!YF6tvjIRIgB^8tsjq}8$eh}7mCE>eqN^R8KUtyFezp}Tw0>Le} zlhW}_IvBXI0^W*|M(XzcYS3ZeaA2m}4ep{L#JMbo_<&Qb{QJ3!^7M!(zpBY~rqj#O z^2g4bWhJ0zy{QW0k|eUMK^5pRV*VFP4ZywCug|?>cWi&jU5E}UB($%oPJLi1xhDQy zUc0naOZ`i;U7byYVe*-k2eTov6Ln^}^u~2Kvuo>cq>`x+2gmafed<>c7|sr&udEb+ z;8O@*GHX&Kpbf)Hjf^Pm0bqUo!~lS_AIaVO+@&k?Y*A%l{V}yBS35Q8I{;i#V@?}T zb!>2e9wbJO1SsHm@+m`dd?5-+#s}vDHFnda^|tM&IE-d;H;%p>c%NK@>4?Alnrir^ zaSr0Iw3gH@M}X0!oe*yoe=)gKY?#~%a8NHt_z!TCRK`U&O~T`!|AKP4iCn>5BH0Lw z`3;%}cqpsk7#MruCO9d1PfYxHTESIl8zSOJ{7*_V=Q(-PHXh&-?YZOZ1DUi7a)m+h z)^KNvz|kICgG-rA%l&{eYN?;p0l%qRZr(|xhP3DY#sq z^aD^xyAVZOWEe}McB?kD8GP=^Jg^xY$T6LulBvzfAAr`3NtlUZ41ILXJp{~j z@4?|11$&XuD;R_b09?@dHdGuy65vX!WN9c$5vN%p)ot;Qs? zdpVREL#gWy2X!n3VCWARGJ)Hoj;iB%IYmR&|)tDa5shuZP?X0i49`TY-c?CWU{dZrPX{0-glRERK<52tF zPa_ZCeEQaTL%IF%zmAMYe)ebx4i1j-AoK;I#K$C4qKzQb_bIuCMTxY4)oO5k7yUAwU*MHGwQNGD{kAgR%HUS;T|?QAG{zfo-N_-n zI>y11Gy(GReZpctvFr=Lpu-j(!(Ed@F)D6JF7e%Lyy(6uy5@TMxAik(Kbdn$vF%I<@ z6LDfd*)AN;ASUfGRG5=XmOJ{2U|mceBm9;#335&Ceg}Xqj&Kg8bAL$&KzRs>1lTzr zKvAE#JhEqngUs(#mpa39!Ek3KfEI$tc4mGr1=uhRVE}OJvG-M+#_c2Lna)6V&96h0 zya`Kw%#}u6bLoseai3I!f|fd|DotPOOkAraTOE6_EZv%AWcGzmR&4*fb?p1@0fIz5 zFDh$C2?%E3uLa1t^oD*S-jEXSSoBlHu+1vSY}Gq_>AJyXaZQ_KlH-)MPXQ2-O;b`x zPDDxPkd)fcft4flWa~GVY3|PN;s-DGuDLR*zFns=dRup`Nqh@GA?3PQ_BEacN6V0S zf6t@SaRx#dh||%*T;7PK#&_fvhw8>Abz)gvBb!V?rgIqxfFYgF9B!bO2|;L$Q?;)n z*zYcqkq=ka(^<;JP~`tH)8=^6XmR70Zg{OYnQKxPjI81TOU50%ek;mfmsDokVyT;E zuGw|q@6y^}l~Twmx)^ZCu(@TH>{Aoa4UWeRY}TX#?+2rVx^vI@gK^xzm5$+5BAa_JR(~TV*xu8_UaF*1jqHOneXx0!qx!@ zzBLyNh>>-I$Xtl?+X`GG%}73Vfl}8YfHS-v*a5(TntiI3Yr-fD9-GX}px29T!_y#SX zr(7@KwcC29F;?5%YK@^gi`4wRl@$S=OUF&L-$!kg-9}O% z4l32Kgsy*8Op;!s9|&%w-uTT_L%Sv(*Hx=Y6lHOT@1FJj>Vo>bk;s!F?Iibb6+Mpw zoo%+`yOnplM!`JriVxM9%{1SZ%*oXNVLxu7d13&VWElbgZldjEvMg(XCtf6WS{$yF zEdWoPR0d&*$O--w&0~Z==G>~v0U_GZ!x(^eKn(3x#+`t|s}bvUz<_mtdvLXqr2^&y zfRI8%Gyv%P)g@*L%`?Q0p)Y@gCjs`0^&g6W@m3VEaCZuaMJ90aeqtd}&cknp6c48l z2nmjp?~|MBy2lH2Xe)UQ%3*8&y4YL7RzBDxlO8m4U;#lqNcUl_kcPXs)|Ht5#tH;@0KgpQGIpdp?s3&6_L%) zZ%Hj{f)yn^Pb-e3Zz4|4TfVQoXunMOKNh~9?RSirONT*-Li?aRyZzm}auzi*$~0Mj z9o)WUAuB$31E2`~5th^f0Fh3Z-qjBsYm9B*-eh(M8gDTCL9smFan5AP(`ABckJdYxzt5LPwDbtCi|pbD_G@*HyRqaL6El^2M8kXXM$!lgg#P%^S+^n-lmo%7O4$DT5|5WmRh7d7h}aG0c0Bif{kuHU_gSA8N5)Q z`&)qt{P_jNMyWU>&%P=K@Tc_6U^m3F@i8euLByv}%*!O6IMz63@ZtqomfZwih*-5! zC@XkS0Q4dJn<{-%Y)JzCvZgwGa^mzed#&NW8HM;nHelL|&&6iGI1Ipy~6CR7|j z{MXR&1n>r!5(kG?B}i9;Grw~*3jVWefd{!=DWEPx&~O=lyX9#YsFVjZz#H1)yDUCr zeA_a}h#gE4XX4o_UB%Wtn9m)Tu6&B){Yb$rFvQwm%!Q&*$6l`OcBO;wlHq9xUL=J6 z7n#KKmlb)+L~QmjWX#cx1);nAZIlaXd5Tn^2F7{dNl;BV$Q{0VEGB>8zUA+#cdVgz ztht($qU~=+lX=|-Juq)2OWd*CX=O6kkM!M7D07oCy3b~~5n>o3bwrW^Sgj)0vSU>=k{Wdcxu~<6Ur&~i8&y6DWTB|cp z+Wty*%bm>sIc3l`9V#6IwvBK)88d>^^NRkO+60%Wgo61184uCE2A)juV=V%-sD?eJ z69qUokOy!ME)q2~Q7w1*Re;Cx#Gbi40xh#WfE0%6y(HtI;o~ct19+FoG1&mXLH}Ol%(_Szhj-XJwfp+mf_zL~OC>_Wu-Oeff11_ILM1F*?&I)L#iIW>r zX-oKLIYdokXda2`PANO41!)r!QO2_9FC!}cX}lx^mRdzuoA70I+!_TE+C5>T+-Adt zBLIn|I-EtQoV)q)ZM9m8`oDmP@rIx-U`J02NVGZfdlHetU^iCN-V&xEZ9xS^PaQ620qJ)Rp-Dhxn` zl*6b8rXDd}hI?%gqSI@}Dye}X!9Zl~s$pC>4_)5%#;g~^@kRyBoX z|Kp=8l-Y?!5bOYGAzHUZZjcvCDF99rh3Pq%P+cob!;fR#6_R>dtEe8L>9|d^37;*n z_b7OMnrwET;%5N&y2wCPOgvts?#$#hM3emusg{ND*6=ebp;R44rj0t>_?Gct&1A^uV6Y#xxz?g$Vi3U zcbDc;b}m>|)Y3vhSxt6SE^yp>^v1$1-B*7B-T34VB*AVwMLf1gl$whikEfzXa|wtr zY}}>?Z*x;SBQz}$MBi8Z@R;fDG&x2Vop6Wxr#_a1v!|eDYmPjF%#6f|R_edDs^yFy zR4R2c02=do^lHVU<0Wq)x2qu+X!DX5sR3^B{4hOG?kMB(o$JiK2WOXD;{zYiRw&nD z;O(&$fI8zEK-G6R2ZZ>wb2Mfpyw9!~+{l=N)tGpEXbJ8ZNFMjYy4T|9%nsRmZsG#L z30jxk#q-x0R&Djx`k%3zF!9b=uLd{r^R={*3?xnw2< z0K%~jXVQ#^bE7iP;4J!8mq_q3(9*HTnDg$mUtvolh7qn-pUH)!6hAd9wRE(~R(UO^UgYh~irZp=+G_mj*>SP5L6R|U_r5g0Hx-VXTCgT`U|ZD-~2y;e&KoOk)B_Am%lOF@7Kl@NK)6$HH0? zTu54Cyeow8H7Gsq005YH2=_Y6^MV_hwxR$(>#%r>#Hrq0anfLV{MLgOg{xFdenB#o z;a1meE0zfNkG_tzGp=S>yZri;iXAYqT3Og{<|7US>R0S=w0J4uB#IVBc2LftxpYMs zutrE?u$?_sw6ssdE91`C2$a}{x{=R2>F7J;sVHUW(b2Q2PH08}c~*pD0HKG55R@D} zZ*1CB$y>A|`l&U%kv*t;SF%C*hX%3|vkFly9jru>eh6#u>2QJ3xM=a_sxg5)0}FyA z<9nM#Si-2s6*t8_;!O)eABx2W`MoaI35}GQpekD`o$6*SV&Bjvy`F3p(m{wt*xjz$ zV^L`#vDV4s+K}_uIH31j1%W=K`Fs-C|f1!UVmKTX>1ic)8=pOn%7!(2Ja)i-}m~x-#v~adfsIbOrCVDO1vJy z_bKy0+UpX}YNE!4rBlZqGtbh1LEr6n9=+5Cx!G^^$x>?5(BXEFTs_Kz7)?*S6cx1{ zP+AMa8G{v|*$Xy-*YQred(F3vh)>4#w8N(y4x3VAT=TS8*uLy6A0{9AHH$i0^lrYk z`^O&v-kFhgm6+#ar#8m$*Xg8C+4Hu!7$8~gQnk|g-%z$^RK8u&?z6crPd)LWn#dSH zbqZYsMLYz4Q|IzV^M-UIOd^f8GqMi=_-bfssP(bMdazHX8D`|OD2y+eNMgqYU!EGq<+w(u>N?JRw zr~SFN8~>ia?c5@T&}o8BpY$(+$_+u7-u6;B6}*>FSdgM8lTYVtPK<2Qm61c9Jz%>N4tt}9 zV-WA4P`*pY_mOTfN-yqHJ*quOFDpjVmGu4}f7Qu-9`7x!rlb6eV|}GQdCy;LI^UKO zz>e>5rfBjQs}$~Uqbjq1#Xe;?Xu@L~*qp#>2AY&}yJs+OmPdSqGjGXSf z@_Y6s>+VOhj^DNB-f#a-{+Uh8uF0&k|M)lc4)Et-#<3Zb=&nLF1P4g2zz{I*764~~ zgDL)txdi}vHx!Vo=zbPII8i^v3*Z*3cmSaOn+Wu-1U+hhMMRYR4g*NRn23q6nqNzW z&{Uih$rHPHm=y&`45tCCI}?oxQ2-F*VF2Kmx5PqF9l|ddz(hFHJ#=lHBPAqOvn-^@ zs%gpZmHja@d+y}7;5T>J!tH3W~Q9RZBYzx5ns22%1Gq7`0MB{hq?+cM@J?+|e`}6wyc^|m& z77)DmLI7sMfdPBQGSHyefLqAUb&B0o8QiT>XC&2ZjAqxgm%>#^^`3bAAL&dH`8R7$ zZ^BQVQtv$5@P77AQpCUeol)6eB8lX{F`%3Jps(Z|4e#};8g=**W5 zulFbkdnPXe48y`=hb3t^jtEiXgAX8~=ECrk_epWE|8z5lB)J4y&u4wviB)_*l$jL9 z@(CKwPM(!zyN)-Cel)rl-w3ckz@q0XBm9OZa&H97WYh{zs#6YxKqXRj#NwqX<_uM$ z`f%thJlT*TMM21669o5M`lA4bhsgjmajd!oVaZGqz{Fq1F$RnuHjBT4xk;6YwHAJr zk)S+ZFrAyKlIt4%Nj7KJl579A6>4Oka- zH4!UkXi)YD3s(Ga28XxT^rIaxBra^`0N~wE4;nd;1Q{3);*%77&N<^sbIWm2ukLGd zh0vF`&Qz#&p`?PO@guF*pYqvuds8j=t-gN~GMEi|mcbJ>UM5*)z8tLl zDrF9n??}zw$=haJ@E2SE_Q!;XfC{n5xLO$Nf4338#A;-DgyX@J)9I}+l$p*(sP`;G zCK(aGM2~mVuk7~k-Jj+8t(HD9O3akl-d5&}GNc$DIHn!Q0f4M|H9SCWkSa6_c$Ps& zeVId&F{?S?X-zKWo^Vs-V~k~&dcPN3z8p|sfa55V;4niBsd8y(C-v-8*3_&JNu8^H z7B>dBCs}#2EcCPSWb`GjuuChnL% z6iZ~9h0G#;sPYQDxSopqYZ$u?=5PHDo0npssxbyZGDA>65}8kx&_q%8m?^Bx193)C zF2^)rx564?Extdb5Jo9x6x6PM)B}QVEk=24s^)v_|M$!`P4Z(o)Q}pS?0^`J|n#_H%DZKSOUfUOC%H^hL z>@DQP)r~5N`-2p=le7;uac}1C9nWT$7zks-)DYump9vu2Mt+m3(ARP!*AEc<-g4?X zx;jq3?M$}*D!eS=Dzw@sR9R8N9!vPgQC)n#w=3FdC~Hg zM_>L-hdkCyR1b$e&93i_7}{@}k01K$Q`p)v){C7OQi3o@;b;&kg^el!yhs3Mp4BLx z(UoEc@RW53&#*OJq*-{WKFF7sx7hctuC5hu7S{u}%!mGwHC1_IWl9IJdco!Blbnw% zG)q7h1UdVlo*}a4BcHldD^b!sA=nDS$%Ctj6K9x#)ZophdpqWVhb}=G<6Vbc33n1P zWJb;`g0Zu@T!TCih@jn5j-cYO^ts{(bW*=_cOzYy2kcFl z&Ko0$)2L-L&b`zCXHpq#5-$c2Vjoz75Fxd3fM!k@vxq78SU?f2P{Mx`A9W=2 zRUE#?l34B>=yokC!hSf$U>3~s-r2_(a6Jy44ieNW$Ty|95Kxq#erBYp4Ei)6W}tYc z!lUgr6gK(LSUAg?SEu4H^QX=Dxyj!OeC=u(73YFpXIt^b>92b+6mdeiZEluJJhJXR z&))>Gw)dUPrmI$t|LcfCP6v=-t3^nvoywnE7wfFt!xcjSJTOu4`l3<#p15o#2~cMl z!{3z|`eUYS*(WBx>FBM!Gg-B%`5$d$8ZAng(!m;_h{+KQ9katod5IDv$UZa=ItQlucy&4e@I zjAbdy0c(N= z&?l0{p-f!P+s_=ZPIh+dmHr1(O|pdjKnxHWw{BIjk;}9g$gv0`xoReL{=kP-=YDN0 z#R3Lcs$hZ1T&4dd4k#viLGl3-9Fm(AqlUY}fou**P9ZGdBMI-o!gitO;L7Ct#nrM^ zA{BlVL>txj$;jUni9}SfvlI0cbXK)GX^Fn*ap_g5lW(12ug@kMMCT5+xpD|YT0T@% zZ_)KE(Mqt=VThPG2A**&CZ{3xsa6W5r;~VYZmHrThRP_I!7Ez(0JPTU&D?+*>9=-~ zI3a19Uet2Q+^9^}f4TM_h3dy-iiEn0B((n+mCT8Y^E7v`)0VKnFmEOyq!+|Xdg`Qv zEd51$%ld2kr*B=MZv%tyT3|*Z{pOX`dSA%f{{L=ie%Bpn=r}7y4oPVs-)W$`bWevl ziz-;Wk6(J>NNOXgx;>Ip{2lbinUi-EPn$?%28X z9=5l3di7qhd@4HZsY|*~wLY*_snsv4QTWT#uVh#T(wz{L|Wzj#%KTtw zuJGE1z(g0cUjHNK)nFZso(>Bo)qfm^|3uNchw)ZA86iIYL#-|*ZR7ePh_vtFBo`&iMG8h&8UoKDR=Y{YF( z^!%oOL(BL^Y-U1SvUM&vxqI|YzpcNInGMq&W+IGB72 z4G$=(9Al>R-jAmO8`m}7UGkSqa^Umlzue0vRd#o)?Yu!nCIRgAj}36v%n=fBWMVxs zHpwPjFDyoh1|UJ|$_5ZYFX%C)zh}dBg}U=HTr~-KzB%nXWuIv(k@VzpRv1etX0!oQ zD+exQj+MC}*(a+)Xx_mTW01hp!mk~iWO76Wub&rHJ=!h#sSR)2otn^PxDX$-d8gbV zM+WLQ<{PZ80LI~eX~Lmaf5+Ek9EaW*s5~F(i!yILOQZfnyI?$?1xOGjr6pp5hvaRT zELf6?+S6A$T3i1hXbKl59A2Paw{$v5xf@z@x_(j?LT`z-8E*(%9dkD3=}>;}H3Yb< z9#|KlCY3tg{PgR%_<7qFJ-pBfD+Zf^+Gx{veH!4Oq!0CRwPAgp{77 z)Q~42oLI_UlIAhJb8>-D3qY3L@gttegGYpx^NVwSa``hD{PEKI7#JZ8gsHL-q_qXq zX(=U?12|!^w2uWL6>hR-6E&`1BwUXr&2D-)c@$EGqR7RllWfM49Yy(U0F6^D@w7*p zzHU6M4C>`4VYZdHnA3C+hR!TtJqRm){pOjurXAZ#sse|hP-CJOl(ZBEu0`1V?RKD!mJd8$tw?usd{=b;&2zL_fPo9~<&R5$2JAfNAVxvSQf zX&m%LyFWE(ajk5AuyRl(`4hZhVQsW#ZBgRx(bq5JOtj|DC^2Q)&WGLgPH>;0C-J*q zQp*La%-O|F$40#qUbvYIVB1{ltu?X59>+qyTW@||w3EtA%2M98{W7V%_BGy@dneB+ z;Ba~3TIUo=baUu*6e3%sGP!>E&MS`#a*s3ca*E60eZ!C3nHB0w*yl^ixBp10+lW8z zl4?OIGW=;o#qQUQ-SxV{>UX|Vf=WEv0wPvS-QbWEh)VsWz2Y3(uX zJ4;XzNV4poFe-nXWKEt@oFOG&KmiFQs`p6zXGF$0EVEJRN*j`5N!pUDClq47`LFdp zSKED&Pe@wUc3G0q;a4rQdi|WWO4eQ_7|#)WNE~RKWc|ssVV80&jNkHE4 zeahO_(yLr&I%or?P(g~5ltq;YhGTBQB2cB=xdN|@3ZBlCXS;uRLHsGtJCtX+$zxJ# zb-v%yZ}Pc-ZI7Yzngx1+Sbx56(Q;KCuKi)Y$?4w0;@xToV~O?gD#v2!DGnE^8Y&Nx zsC59ah*utGGGj^;YR;*nW?#+cbG0s`P)VcwM(skRYJHO4^K}nq+9v!Z$v~QM&6CdI zz7BRpCugNC`szV}%-+!6gWQ0<hC8+x+i1S-7R7tB`0)IMBqU;2vVD2(bdJ}Et+ z!{5}MDN96aY5${mX?(1yMDkR_mBTL7v^X<0FNgdc?Vtel>F`uJmG`&b;yG{VP>UTT zU2IS#Z-RIyjxRhx={|>7g+hS`Z=ooRu~T7}n=vPtu+t!!jE8%RCzpl*5$QmHC{Bbm zcFtp|B3<~C4ik@f*9+NO%n#!|G`l4R1vs2_3Yj{`WkC(x|>Uv$T zpaJM~FaQL^UKx@m*)io)aRp#WRztJi4CIzyc6H~PU^z0HwA0=cq@y7zXfU>$5d)AA zjY`32xGok8YIkpIM6w#hWgUo9WXOggiK@={dQFS1j$EOZ3HH^2PJTg>Kbr`Pq2arQ z|E;|#?=ip+3@I)AH2d4zunkRo$=k4}XyK)l<&y4u$?uMp1 z0jHdQi2frIZn2GThP2lZpZZUcu4uR%$BBJEcQ*TTMosV47<;vs1~1a`@O(0r_ho8| zeiA zhp?gwRZ6`g$QHwaX;{#@49+io0SR=Do|1W&#jIK(@qN5 z@(lJNGjB@%@*zDnQ>G=z%T! z=PWjoMPreMos2uXRCZd5jz1TsqzV-rt3FFkx#rISyKGCpB%F%A-g_Aa3&BWSW`>c( z_=L1GFXSCm*v6^4j=0=Zq zD)e8_#+Mm~6aUC008C5-5VB4iDF`tHxW%1O3K$Ep0Nhh!aPZHNVL?@5i89DBhE(7Hi%MT>Ad+F-aL(h{lee1*B4B=5-owr5lT` zGOV-o(cbk?t+qN`V7{4rVbS{eaL!)7I{aUWUE@NM9Ob`%T_)AjuYUaeO%#n0I8C&l z2Cl7|F;qk0nE=g$9z5{u=6#@X-!_JNIj-lGG-%C}Ms=0U%>{%J&;FBo-EaZ+c0@?! z0}25W7{CK{14Gcv7`rdqFy*-j_YCmQPw2eM{kR+Wc=cbRUe(+|aQIsEh-c@@acIQC zVWXtU!)J>@j*n9>XEs4|65-BNC0|9KVx+s}23mk)3vmo!JNp;_d}^c0DbJxldkr%{fyz;3d3Cjl%#E3Shtt3+X3cTYk{<$Oj zMDG=D0;k+9TQ9RQ*)AA7a$D}`@tAaqD~LNyc}|~eyZs`JzAAz#l%|dhLLk4(~#K`R1}z$Y72aWAQ7TrbQ;QN^h_0#O=0EtS?+6XIJEon zy6JHFUw_L73ybYa%b8DNaUB+$6yT1RDVIRW%bE2q?#dZEfJ^($1(=h>3m_KsT;rSV zrjlul>HSEN+Trsg6a2JSaM>T=TKcd{hQ$CJGNeyzW<`aaTR5;lYpj(^^Mu&<74-x6 z*b&J|5zNm$krp7To8De!cSB|Twa_L^;iZCMU{A<`h}m9d^Odajo89_Z&l0=IrG_^# zj~O8gX|w-^mYa->sss6d)6YSp_?}+rp$P55FQG4xpxYMNNAlb(v-%QS%*OX@O{f=? z3ZB$A3mWFi)x>oaI~!AQH;w}$RW|0fn{TWQrxQf8JE2Loippf)uN!j1TU0J3*ZIvy_lHI_#XbqhS}AYWQdu~$0lJr0O@`zCX314@~1{Gu&CI22fVQkJ4^ z1cj3u5iOSFTEi~!Suwo9*L^m$q?Xxjr^$^>s?93YuID49HZZ|0n0|H>N zd{)a&FsXA%w+o9Wa6lyv%L1whctoILd^9lg1*U|RHDrAwNrzH%wWU>g6{j^Pgasul z#e%R9XNYEt)~$`vWelK6Y~~<=gIPIMvX0kOvjF^c1@Hny5Nf$h5;eJ6m{F^lmwcZx zWy0^E#R`+oC{L?=qTwsK*U9q5e%8&yF;#;v#q0CR=d!(I(durx=e2Y56(7>X>Y!7G zWQU(6U!MJ}C0XV8iaC~^TF}Mw!yUGTjm%SQ6K;(j6W{^@Ri@dwTuDq3b94`0w&+;Z zEv}j@T#xvfSauKEC}}!iCB3BX(OGA^&%1T2ob!J5 zT{*GuM4nXr^fk%MUICw4SJYFOx5s^@ZawuYhyP`M1`CAo$gS&^ZUTVDYFXC?fET|p zGCX)P{AkO7Y^70lvUM!u>G&-Sk`#`jU@1AhU?o45i)u1^p0Q;(!GyG8MN z+aJ5rLJH#V;EvrdwV%EM$Wi`$%nAwb&DFA-CSu~M$<73-P$`*}4Canh=55jedpkm_ zEeP*r*T?dFY*AVFys2jV#GuK$N@WqLk@r773~S1KC4|gW3o0}h>*=1rXz8<%aA&PY z6lbN#;ekDxMKLHvR?E76&`NgmX$+lCkda%5AV13^6FZfhspQu`Wp$mOrk}Eg0B8em zXDJO=JV1(>0Rz+VAC!6~HNT35*-C2W8>Q8ACf^?E{I&8tusC?~_nx|Pe9KgU*GTSI zo;FAh46} znUdLnQWx|BtE|bShBsLRFnId>mVM??8f~bq1F@W-Xb@!wjo^-tMX_rqlcS;jgh1^_ zDV5uoh8c3>i}vMAFM0xn4GeEfDt^eda~dyEEHDUV{Wd?6SJW=yX=3?i*2DL+5nOb9 zTw@uhI?NTsFtt={J8r|jh(GtbZBH4N{JZod5dVVl^m)wprh-Qtz> zd23#ApmZZ`Rd(BVanrn^-mvvhZMp6<=sjCg#;%|E^JSr~6*9wBfwo-Y%hg@zDsFWg zEw<{z7t?>q13rDKl@j?*~|yw;N{RO$-f!4%Vm3d(($h(H}Gr$esqjTG+l)6x*Wx9LcXo2hme$3THfOD>`>T+YTsyzbP% zkR(2b#2u}p75!E}=ZlV6@T9%n43Q3Y28N@Z~Mlt<^wwtj{l%NQ%9Czozc(ceSJ$;{| zdjJ7b_($J$#m@-QJl>=iGK&l4Nh{%L2w1Nr{2y+p(|noz0+{*(J|`vcRTu#VoIt&{ zORSXN_5*rN55(vM(J415Qz9V%F6^2LNsMgIPIuhp7jkPRYDyL1KZJ;`FrTL=4@8R$ zaiC^G7GIhR7!2&6S`bSfzuts!CX;ca%y0Ei(jlZk*ip`H5;DCU0g|z-Dwz~qkGgnz zq?Uw{zKDR^GLOr_qq21(LLUbhBi#d2qWcIQ7myq7&XxhUp>v!}wjZB_+M{4m1dpH= zdL(vOj^?L4y@kBR9r@&YOO*{g&|Rg5u-JffpEA63|1wQxIG2kv3jl!oHxWc|bs-Y^ zwrGzTg{7xZ8(z!EI%qHs$_>EoY-|$g8G@&KpCZRe2Oyvkh##qe8e&UeN1oUqSmcCF zc_wc~I>(?zb71Bv^;zu?v+h*`T-#ZZMr-BA)>;W~DzS033BfdW+P(|Z2P`8Pu z8~mK^hO*20T*HnMEqO4*;}O>6W!zL>hL{$*<7fCMO`AtXdsXCIcsQYs&Wb<#t^f?j zC;ol^-1jLT2Y*G}zzG>PBd-uKTI?nTGH<1yf?AJe#I(Lm>&$<6%LIpm&fK>ZN?Pko%Aw_G3 zVO>tB_xJ%bbe0+wksB*c(n3U*5jX8z_;N{jaU64iP9cD>cv+1GW|AcO4(tx$#lr|> zmU*GdwBy*UTwu#dfoh)J-PB*DyPjIn##&h<2z$`+w~>$e!JfY>_7$dLafP!w!fne> zX`*o@cl>OeXb{e};dtl1tow8%XjH7&azl?I8&5Ho4sIfUFR6N23;YHk-hWLU(}^!*gF-~zulR3YTOd%s6n?H zj!moIm22WfXc*x_7sZUj(i{eSoSdOcMmzD@JX*<9F)JB(o;})#i53zyuH?52OCo3A z1wDgbizZ>f4*dU#{^HpmpuYW(@yxCvlmKLg12(+ZK|*9^2tB=Vux5RWmm|VdSO|4C>Y{sN=fws^!bbi@wH z{_q_Q$A6F={;yTRT4YDfbFLaGPGR@{6F`tS@8&9F%N+^JP@NRMCnk>XMVTzQR4&@X zWe~H}e_gy=y??A-TRx2wnpO+ZxTTz!jaOQ@#wuN#p)x{9y6phaI_vNP05YZ(-+IdF zlv#0Ln&>;~6g(+fV2Y?^Kdy)84;mb}ymc&OESEs_NHlr4dIbmm-LH!?>X!Ks;P<^e z&7HIP(tw|v+S3hKp0ywd{l$-E6YZYi#N1H$U2~zI>Y94`?27sdmVVfK%+xS%(LT~% zaatLeoR-exZ$6t|SIeK>nbx@qzQ>>&JQ81EjQDLX|F$bPzA7X?uIOY*&^_dFpP1n< z39WfJfMpAf31;$UVFN*Wwy){Si>PAIlGTdr`!(=fhju|NkuOZLmjg`PHkI&A6f1!j%87fIQlJVDzfK6#65hB4HsfHFtddBh z+nJnh%TmwMwHCF4v$Xjc?s)Q>X`W})IPm4Cf{_BWWp@-l-ihT2cBU@kCq#g>!~NiP z6!(fGjOun8np*x4AEC#~PWyo;)MpmB=h)!UNBh06_QDHol&^(Yf#Aw87R2`$Gq>+zO zv=yr22$1@T1nF>O0iE+I3`rPsbc7f$O+Tek56rH5-knta--|o;5f-iyn=ZY>*q*B% zjNykTT9q>D-U)T&UBc;XIOI3lioWiaa#&X*x(f<$7-xEFwBJZ((3&Q8fKt*7#yG5 z2F@x5zY2&s_fv@6FX5M z9mwBiLmcOlg%DH@R181QYe>PXuAd;x8Ex-)RnTiKxe+{dl-(=2_!N|caG=9z z*RY|-6s{Ilptb~Sq65n7SfByMJhBDJ4xQFQ>0Hk!n$`@ADes|Z{5Q*3TU}&^qVSv8 z$Q?#xhT=;oFT+khbQcFp*&Ysu&q}3Ak3=c%epZd>$3v#YypsLhGsdO!%sbw*m92`L zK05z|gXR4YF;1+ZdP*$Wvr

    kEg(`23$OSRIOK)?8UJIe8S)lsfI?}0Pv&|&>hJ8 zF%7DW9sj^Bh8P$OY~S&cgsi?|n4T40ObiFK`|+GY*c}_WtD@dDy%TsV;>f`AF|q1J zW9Rhz2L9aUFO(EDd!t9R-Su(k*bGD30wP3gdyQoXpye>_*}-3Qx>UbC)8TtvueX>o zcop3{bp4$rz9$u9>c{THpVgPRD+-~5Zib>ScRlLFUq02}g5$tp?=z^6#4!?em1 zLeOxemEr{ilrlUdmM>)vk}EUdq?G>)&eEwi{hG7>NTuAQ-uyV%rtALy--T~pVVR-WEz?0gf-293pB8TIa&<8zg6NNyAfnLhO>wR!kH zJfHBXbM1&D3zIT){K)>)Hzi*}UBZ>bafKC|2hM%#r{)8l(=1+#%1JjI{~p+L6>uFt ze)597XN2P7Z}5}~Lhi^QE8K|nli1?-SoTJN zLrCd3r5nJqSFR6$CmFW@PzMvt6g{u$J;-wX5M)v~*>ojA68caXGi17=|DwI_Hh4so zZ$X9#17yx4007?44M(=JB#eb~@=%t4dj`ZWt|+#Z?*9Hfd|!ov>P0Z;OE+ekXoFJmsuONsV z0Rb$3Dc0B;u2o`K5m%ATNGfDk_v8`<{mSax`8b2}Kv}!@#(b^AD^Sc~y3W+wHjB7a zsCk$pt;SgCqqQ3CE_^b>TuEoj5f!*EU(SEQWTM|_7bs-kf{_N4(N^bRy*Xk6paK9K z+=*SF6d)djGP;pCK<{rLuelGQiIkiIgh)My!2ip}Qg%G4=IroN;P&d^Bw`+v#`QM9g6A_X;2NIAGv8|Fq8hz1HFHEhR2F!}~t;5jtu6%#WuoOa-(b z{LpbwrebO|#luJM?Xx54LbBh3-E@NErBq~R4ftog_yC=2mBTFnfBg{v{`3cD3kOr5 z%RH?m1(5iFHqjNtq{b!%Wt#JoHh3=CuaE>0^4Vsqi6YL`t99PXq0SADO5!ZJc|?oh zGQ+8;KsqqUqJp%oPFLS^Mp;BUL64T?2w<)(9wAaQ^cc5#1pxYw;o0fxg=0^j1gl07 z_+&c}##(vzHNPRUvnO2lCJ+7}P_+i6bG+Aqh!p{NgXSrj0D*QE5wQA`TAN5^O1Q~a zHee(}+KKaBg$b1j*A^g~Dw)kh1wb z5qtL<**wp3sSSO&>QBc3hraH6Zg~{`%NB#k-|vXaK9dQgL%(k)bt&3ul0M_%qm*T0 z=Cw2bp}hOknSM|}*}a_@w3P$kFAN@O+g83fE&eZqM(RYcp+7+A?5B_yeTv($NGW;w zl;ZA)Mk(}pMZNG*O=4c=eUbZ?2PoBuB?h`l)pbCAQcP=i9nQ-s9D0#O_x=WXZA1)*$`Wp~@NOIz3{6Uf z&6#M@RBp3$BG*T`I4g4=a6= z6Vci^C~l3I0A6l7GNlbi=99tTbS|_XgM}J+j5MEp#2lMIp3Z!f^q(`5+lnLKE-@uA zbTtp?<>fxc70|r6-yvO=N7{k|c1urJYCauWjXWEmshFOMdYDA2b%#GV&r%lc7I_{r z3-&EmuRExKlS4wki4r;h3X@j*!7jR#5_WJPUBXu;s%$3+R zo8({BsH9yK&`gS{?kV9r12VqHu=Iwq1z?&k~%mOjBpYT z%wiY@G8Yn?0{A)t9ux-2a)a!P0tJY6`m@krs8u+IKasGNyt)jEhZW9S6D-66^qH|3 z#D~0(hIGqy(Dndg`@+<*4bDj|w-jQIw6iP5fpc8g^kLc?f44OgBoD4l? zs=NUbxAPON$q8Ha@ogvKq4)CY9<{>>b6_c)CYx}0ZxZ9T%2*wy=@yP`Thep?9N;lo zDhoKDBd<;_X6a9%j!%+26SUx*>L`sQ^l+fBsMd52@ux$P$YiX*0QNgWqe-7#!kvQC zLlq}m$m-A4bswkXE-LgM`_rh&NT#q%RnnKnVm3G)$w67PELOQd4*N22(kKzsIKlV{ znuV8gLi4b`npkrcKv=*-8+DZT&1n)1+yvno+2?io$cArA(AhhBaO+n*JB-e zswT$Mip_7@h6j@3hiP&d^mK^l0G-eVPXFX#@y_g{C@O|8Wk4q#M=c2^Jf$}(0qLEY zsREnAOThSWaxph2`@yYxQZHLkEH7UoK`ka(qhUlu?JUvYJIt9P{S*jX#{q>A0*)ZU z=>m-8gB+&W@i|+rlqYIRMunsQp@jJLxku)tMthY^G!?irp`~4!Kgfv?-QZa$ETqIC z5^~Iu=x-SB0RUD3gy!!Uc9)2S(x%Qq{M(w8`jgBiUmNwXq`kd8;v$I-ctij`SSJEU zn8m`PLBk-y<=E!S^u}9ejf3QsqH!?MI5ow1foToqmpB(S zc~SfPm`QOAS!MKSZH4~$X!}5rb2EhklsQ#j2{2ILD)+em5TIR3ncsIj!)@N#Uq$m$Sdh{1 zP-NqoOhKM3GU}qpD5$tGY!}(oTpx^gccFH1nBsU0po}+g*Z|n!FX$jR{=#mG&;#Ha zD*i?tri%VYQVso3mMmh8Z2pcbh1-_tZ+fkYx~dl>$yYg*mpiJ1uk!VeRX+))z7?)X z64b%gPygNk#IDlr%4hhKFcP*I#Bav@BPVXGxHCf_=uwQASHc~O?lEtwKe#-9h$iAE zOV-yy_?|W_G4a~~uAnz>iVj5S5xXG4x-9ru$1VJP}_Hs*gC_^I?X_Wd*Qwe zKW%vb+=(@|8OD+n^}RBjC2hUZPcOEn;Ij^p?LL6bD2gWrH{2eFh$qTi0P3; z_(LrX79}L0^>BjF+@pjC$b?0;^Waey6r>0^Q>4txJFXZ9(8G9$)4l&_@n?2~RiK$Zo09lpqGmRkRz(};tYX1}x2A}WI6{!Ir#|6; z!TO0RoO+-srs!9zEYDTXjn$}H*)A_~a`GGTrI%W3C!0l7-}drJGuC()Hfmbx;Qf1b z(~|x7P4d`_Rn69NqNwJqM=9R^sM!@LCM**g6_0t4=b=TNiGxrVF!9QC9}#U?knE{6 z%e29Q^Vrv@?{j5X8m~*LqsK3;u%HN50IT%&2o&QOVet{gQP)*H>nB%Ws2C`p^z*4b zr`&4V?q|)t&*ndhv90vh`^Uz_1G5C%k1UPD13M_n^6)DN7y6 z&0)3D5k{Qr(_P^o{_c#+5IXo0)y()g6k7=vpXJvxFyDc-jy(se#6aL{M{QZGMV1jXMKMUpi-sO7ynlAO6 zN}}pF0Jsn!byIggTCbM2|F-&g6)u43Q|>V7P*Sws7twwwJVjj4n{{vU6RqhYr%4x! z$x34UmOUD4J5>UIvAJEitBLh2HqDGms;FIh*72&Z$1*~vuCLSfQE&3>uen@vTj~B~ z30ThWV3)eKHw$wc9Y1RZK>{^o$(mOcU8uSXJS6M8PbLB+sbXbk(S#;mgliV@xQkCr zD;_bH$RCy(_GyRl1q011R8`a$lVUkc`iubeTGuK<1D=>emx^SLMy|x3Nf-LFg3!@` zJjWM!ibjw{E7xDvP9sC-sL#T$@81tTw0u-~s&jAdWG`H}T`m^A4w7pfz@04ESrq<> z`%oGP@bDqjQLd_}POA#O*TvmKeH*`;_Yw;r8Aw5 zVeV4CX(@&Wy#mg6JpFcR1eMds)*1PCIn$l4hMhhO8}Ey0C+&3y znx1tq4j)1V@wqnBec1GqeS^&m*Ot|Wax7pq{O@ogh$hd0_a;WHPc*T0uakz=v!IVz z9iBjXZOrTREcpoto!Bs_FF7pK#=1_qo5Dm5eCks#T8L<-*5XOZegm)~Lc0wbC>zKD zS7L>VbyxtUu*y!APZwzOiUiO$ZioTziVQd1-N9$Fc*{((4K-E!u>F$W7$V>eR$4YC zUXf!Vnm`P9bp=8!Kmgo1m4P^MC@r0IZ~EVMFJ&4%+4daS_P!Flt}YbApGnwDAv#4A zTlOB169V(cVoZ>Ps~@mJ9Vr5jyoZK7MbwP)zaKV-+Aet(ySsHzqd4NH_#fZ9Mq1;XOO4@K-XF3?*6WU0e(#0|Cu~`dS2K>c zEb;BU@#dGs{yL($Lig(^iIem-tStYaadUjH4 zIGHDlCKtNuUd>t0S&z17H^xl{6Y$!1Ay(O3Hw#o*P> zrS~T2bT@sL6bLpN0)+*_wj$!n%rQV%JYE)n4t3ossG(-;1{EQ6bDo0*HNt38%<9s{ zxrG8m5|@Js^*bEHgg&>)eunmGyu>ETNATYxEEVK|C zOhD56k*KR6#klA}T{Izz=f~lr|rrIJZwl5yP88^?AFd|qBs<(y|A%sM4-K73G;SxP zg87s6uWBSs2nMtZ_+JHm+Bw-%{#)uS^7-WaUTN)?t(){C<+915+(%XA_o=MQjSN9w+K*JNbLA(*q~ygpZj27_nc1UkU@K?mT* zK`^Ea@SeBm&Yxa@524hsx^BgNr}jYbas%ei%=bYB=H#4z2Y=1 z%@u6Z1(>w_@h+*MQRYlDGXe|in4nqFQxyOMp-B}^Sx5vPS_72H_ilju^aOCgo<6P& zfB=WHR8eh&o5bw^I(Fuy5zFaAU2VQ3w^5l37Rqa#N@Mn{gf=LpZ@eWNNwb-Ho4su3 z`>7o}4Xv&x*L-e2@c1*dWN&fdv6t3{;jf%8W}Kvr!O_F?8=#10*v#BBZ7Ah;M}S~@ zVwY07?be3TwBVuylX$f+&ZFm&jGK&6&oU#;xBrV+nF<=r+IIk5fJF$cc>hLMl*QDN zbAch0;O5JkXuxmXu=vG_L^}Y?`Fv#NO}-7vZ20y6ci|H{Oa;5XJRqN?+H8eVUS%`8 zqk$k;2b9#V;56XiXwFQzJ+UzYh3|q>tDYq_^|C#;I1{UJ>t%&MoPnl-9RNZya3KU1 zb7MEIg6j{XYN^hwxc_l0C=gXt>$#*msy_GaUVx*46#vwiEi?7nz>^M>4`rd=8t;GU z--V_=&Z;U>drbX~Xv@*8dnEfEwD=e0umoYOa-H#OTHY{Ih+p;m5p`4S+f10X7 zP;cst_7PkSo?T*w5Z5k^^`HX#oUMVRoHyekIE!}cU3yDps>rsjNbM?thwx-cb0%~6}{FYfg8>!V{tY^rlB zSe?i2>BmIkcEk@cpeats769x5xMc^TDBbv<{`p=r?c%L5aXZSjwP}d5#|SjvfXw7O z0w}0Fl!0e2z#JajxPEwM)K?cgq|zA16ke38gsc zn(5CgS+HPgsvI9zL#8O&+vT+X7w~6eqsVe;!Q`K@CI5rv)j_S3iKv`AASoI#RKsYL zh{Aq8mLd~uvFW)F203u$Y<;FnfpZ0M-Sx;`&bTr>#JVK0nJ{}^7;M>cqYTrC2B~F| zVYe))E{}GyYW=_4KWwj@c%R9opnGa^EL1tof6B4{?`M4xJY*`1X|R{XsLIUsLGbx; zJ8{&JK-KR$fv<0u%?VVA0Wwg%^_5Eb(jNe5pv@Q-&y+o$OwVbElK9(M8RxX}Vwk)3 zhgVHsr?dDL1HdrKL^y%gA)wJ0f*+&kMzBuZy7hyx2Wy`zLLKVOFOnXFAdp6XaLRG7 zt+rWHp|uN3Rqh)A>|kL{SoWO)f2x^dZUHwYLYoq^*wbU5`Qf9ehhv z=9KxoYbS|0t=Y%Ww=YcF@-b9u0OSk*c+-uiv&#(fFeU-}Vs0pTG&L~n=rR}ly;Pafc>=B9!YoPcPUU20kaVsk z5K2??ox9jPfo=MMI2ZQOJcoz?2KYt8iK8mAc7k2c*K{>4#Hlq0zYVd{jMqA>y-Qa2 zo}4u(M#3903wh)-{=uXgP&zQwlPVQt$2n6s@yc|iu@?CG*je3_KD{pX(Cd4k=KYF>YR=3oBWtWT zK5`47;8-(kZ1eM2-Fk*VvXoH;Q9hIqNaQY@Y889jlv{%I$2}i*dk&b_WZ8$Sd zWWf~E2PPdpysmL@*f*1^*m=68X!v+b}QM%;&sMcJ5Z1 zw`P^8UfgSJ_THC)TcpjZL?!)Q7FqamTwydZ>aHQ2p*(r51=4oHjTkrI)YP~4XYo5y zvhgX*c}Tjh=haS{hKCgg#jCVus^h(VZO%irJj4s03Z#G^B}NA)4gvHWp`X!l3UQx5 z?}n?ztbg&7%BY!($8S#%ZrXh4ww+F3b4rEdUUCIGE6?D4#9J??2K#r&t5a_66H|8t z6YR)=8~2bcU#T1XvDAeeZViHcHyaDCK$Nzdbxj8G4%*+DnouM=XM*&@PO6pKKf35t zpKTTz*C=L=nLx*H2m!E5j01|NUC_TFhTtD>a=4<-)mH2b>(nh991Z?o*W-HWJU@n`dh>>IjXnRj4>@3ey2MRpyxR*t#6qB&K9C>qd3OT zeQ-Y|3jT#>O(s4>ZdWVVwr8In>ey@fFcR&C-UEQf#q9mHV&!fH!eAWLn1W;Dm zrm+(>tXnXNEnj>b{)o9Eb%NmP_JvZb;OaBET!?Eeh65r6SC=EDhc?07;4fnN$Tsgf z?YNzT?%p3&+Z6NKrc|Lu*)okc%^BIh$@o(**xbnEZfoyqc*horBj`l0??{(ig`js8 zdOR-0=xp5cCMTL=!muIc?z>WCRTIh3;1jiZRsvpHM@xOq$knDmqz+P$(_b(a@qRM$ zXzZZ589wA*!rd%|L;YGDxuwtOTE+)oW};teqAfJ7+Dr%VcqXC7S{qP14yY(mCckM~ zQ+&19^W$<>oO=)sP{3>wo3{xZ0Ib1rmpUL!Mfxn!-0b@q_tLg_okVXsv}FOC%gt}i z^@`NErdLuzQqT7-wu>l`Kltn!(R?FO^^}!oX`i#a6hZ4Aw-u@t{&vo0UBYzKm95Qb z&1$D#n0pIRzGtO&MW+_$vkj+-`NlNC3+8M`d~uDDY!BC|)l3tjmFSH0S@-4v!Be1mercrp z1@><0rHe=6S)G%W;5qjJ5~|daEuclrzU81hBt$;f4IonqT*g2mxbz+r&`Qnx5qeBz z#y$5!ybAv3(yD5@gzIHawNYNJ(9M$X4_#9!Nuz#gKU7iHne=wCkH=JO zL3C(o#7WB}w6?Q8m2Vkr;IuHerB~X#2K3I@jUuH9*T3d(ddoQ!SymS8UxHOBc@gD9FX%+ z0^rz{137g%&QYq#WDgIXA!*nRjuW(>5LdL;wUek(1j*`(rK!J0Y+pBlzPZKDLEu6- zZ#l)#f+wbs5H$r_)Gr$4HQ_Yo33y+ABK9ENNF~vktUmR=PVzh2X(XMiTZpG_PO5jz z1DPEwPod;ru$8-A7U8%h)k-Q>$77{o3EClm759O1*RWEyfWGCZNud<=)ubw$4p21e zk|JYJDs#@ya`Tq>WJ_S=DJd_SXe(SOb;vVjo7~b6i2YB2HirxLO1G1sFJ3LM#ShzT&mirtJ*p{ z+SYa7Topa-z!~#c(z}0=&&b*%t5(GM!$HbP<3`)JH06P3j{LN4`NiPxp?F@x zvm*VROTp6HIyAIYM8+;{`j3bAwRdvxx0C=tfxLSGz@!pXKtQ!BUkK!co5qmi3i}92 z-cg`z(r!ZXqLuFmTy2 zVpR`pzJG|s2}{$|KQ5Uc0s7l1)!TlT>bel!8qNU!W8<(u9^KAY{*WL$YA>B7uE4|m z1(yeb+POTb_Rn34l5%O0#`vb9(*_j%e|wBqd_z`_+iBIa;pRLcggZGTR~Y`AqfyAR zpI5K}S8#iE5SFZHIF3P$J@k2&=^01y35DPZLxQxDiSToCU(&W};c)qn;jJ3+J&hK| zoN?r&9pE<+7e7UFy*o8S=u`BunsGc%Ti9P$N|hpWC<0{KC{f@lc$ss%XG8LoGKSkQ zwU;D$UqzOjcYBSJ$fD{O&zqzUv&z-VDs|cFxr+zkhMcD_9y-yy$>5-!D4+n%GHu_` z2h8qBgc1w>yd#K8_IJe4Pq=$*iqUNSB^IRo(qj^k3SS4#3o zNhSC?iPJg>JOPg6R!(LRr(XpZi1FE~Ab!jH_WR^4(W4Wlb8hQJeU?@5*PF<${edQ2NKd4jO3^^>L}(@)MM!4@zbG%!$7XF@A^;Q#7Z~ z2s0!sT|mc$i`nE#L%QTeDm0Fq>%e7VmdI1`aNq5S0* zU^)}Bk)B6=$TeCF)5FUBH_^ZTo1%Uw{Iao?CH;oU!bXn&A^J-VwZ632khHc=4TRZ# zBrK|sSAuRYA^N}Wogk0&5dG+5sts<|XcV2FKC5~KXrZBrK+98#Y2cAbc!iUTo32e$ zj;BDB1n3)Rbd7z;67PpTMcImQStx!5WF}^Mw#t8yBqMJ{f52^|8|^VQLQ@b~{?cB4 z`DND2gtnJ|Wl)}}rGLini@%1e9V684^%Dj)$}5@4+L-U>v4A@{NR2opp;rA4x1*IVC%7QbFj;jr~(bpcAzx z91~`QxzMyjxLw%h)hnj?^W{``?!J8Wt}p#Z(ccNRzuUeAz8Z={f8Ld#ucM#;XhD8_ zHROX?{Gcvyf&TM5nOk%nw8f^o@ty(>u$0dlIoi)!~e{nDHI`Y+16*w+v7wcGu z8RdqUn4OYAS_v6BH3~ZTG2c>}75_`ps_ko#yY$df;Iw2NeJ?*W7dXT~2Gqfk{35Lf zLT`U~)6gBIK;RUUe~thU7;t!b1`%N-OT-b-y{Re!v`MPlCRk$vdAbzf!Qxk%bRC*B zod;X|Rs?+1*`qEOH=Pr%Fsv4b_}8lUej+%pUYkJijuA_o4j;wWF-uRC;*mYcGQ8Vd z@>FxLRWBZq4zZ_GUb#tepPBw9pqeBjX#T~U=dIUXgnb&>*J%LQGbYyn7IG?plmKr5 zG=Jz1(0Yx{=^V<0kFhTx$%;6jsUT5+QrAWSND1aOcy z$C(~Bj5%n0#_`;>KlyNErgaMX^Z`E}x4)LdOBqb|$JhhxgawNUexaKle(oi2_9rEo zYj>}&sYwWsgh7S=z<`}NKr((|4iMq(y%;jayCU*Pe^X~g@Ra|^@ea&`E($yz%H%|x zDlT}jYza4HlcfhNlMPPupN40d;FUujUg{wJ!;_jsnZq;4hf1$o?hZhdiOwIFtKLFA8v>nL zs{r+TkrfnN`FZlGGgh;JVZlvISvwY(LlA*$5`e%a&eVBdu4@ox2=p2EFB6Voz@d~E zV&#rQ#(&?KIgfHnK<&2vz73w$lQu()*wu~0(0F`kT1_(xi$|`u_s}Gfc73ZqtG!BP zb^BSWxdmK9BP3ltV^P_zX8B%4TL9-1-NW0rpqWd%OJxqi-KO>WBk!txHK@~E>d=uO z3SdVvi#-NAcmPlm6hA;fhH8hC#-OdBU#mr-1b?Lrsc?c{#1JI&-Qiz(%l84Nq_vjQ zR34RE^&&Lo+mGB}DYc8~BF#?88aDL;`PacGer}(BYB&l@cvZ z?YzGg^>WdA!SPw0KljuN-O^OB-Mo{ZvtNUT1pzS%IA|`21rD;Z%swu-3#~b9FPE1H ztAgcpXy5I1x-$-_mWq5;M9m0Yw79Ky^$I>Qll4gr#0d%Y8ejP>J?Y$%HRxzPly5EO z{&d#-g&=)k@jvFtF%e0zgXLzDnM({_>yaS_f6>}#j^w4(1*-$V7cn|i4=undOWnzmwB+A8BexoM#-k&3ioS)0~*)&Jr|H^)^TIVW&` zy7N2U&iwBgE9wmm6Lzc4YS?*-fFO*G8$&$^pX0*6LuTr?vWz9Et{Dwp!0 zIPs{L5eWoC&ru}_*v|l9@C>7|WN6G-7A>kK%c|K~yl`9y*F86&=rHz~^dL9J$O%FG z0X%i9dmIi};{MAk)#r#%gwLn#+8b|_<1EBs&XS9xH;9ViA&C=ohEu%j{`j*ZCP$aH zbe#%qexlCutbNk@8EYnkjc_#={IV6=j}GRHk(GJb0fjyIsJ9;jtXy5w`t&-9-y1hd zIqUbi>&ZwhnPoi@-HsDWOsJ4gq{PyuIW$m!8B~a4>!mdX==doAxh*d~aOZEgmU7!` z(NR?9-nn~FxD&HYHjo-fL@q5abG^N*8&vuX*J$z~QQ0^)Mcr(3SDrpzdCGHHW>Wv0 zKEEFyGXzkOhXN#t8UX%D4K5i6q3?zqFYm>3I51-Q#yFqZc6#}XXl|Eu3Td(o76lkN z9K#PL0=@<^N1SedF>?2hCk9c}c2VUnyZV^uYAV*fbA6!^CTKvbsdUXOYZC(6Oi6I8(0Qp4|?e#9G<4(k;}(%qyU^(ZWsWeoFe|$!7Bi<@O}zy zc?K9K%wd}?B*C66!|+C{R`-QtIKFtPzF*T5g{+q6On_cVKJsh z2QkxQ7pUkx;vmzDup5i9e}=BQjX6dpOdA&tf4=TLAFA6R=zd-+{(#kTM3|+Nu0UOw z$C}s4#~p84Ul?mKjp9vh>YBaqwt(@%-FvfoyG?ge0yJ9OQo^t_?H9!u4>AZ65KG`K zlTQ>h7w5Dp%HZvjSuUqCtd7j37;6(aZx0+d{aT`XU}-z6Q+JQ^<^if&I4iXxjxfk7l^g`C=fH^n86ZFuVqu#vJRigdc%7w4qKf-m(kAY`?J^K9 zRi)H|u~Rz|o~a^_rGaSPjLDO4!2i7koU?;*Zvn9(lJQ$}fEaHPBYI1HZTa7G5c@ft zHT?-ylwLLEhWUK7cEvHaY+MOUw??zcq(QCTNfQgNE zIlCGXzUbHczQ%L+`J`XWShuc|zJH*T)9d-u+5wUr`7idHsNeb;=+C1xt4fNaGeVr1 zT$O9Fu8!yre%p^Pf1Y$)(2aNltRCibj5!|x2-}qdKc2(g({H@6p6h?E_-TGJ#$gmi ziXNH2IUj#GBfdu*61{`-wZm}>zL6bL8UgJyf;INKBLF-|q}TtM)5r`HC;NSecwL#K zh;DT>^Y||X=d8CH%Tpj=ABKD?6*sG#c`i2dzj(b`rcfZX$*zB=87O4d`bP2dQI@0VT#6;6Pd}9)OS{kaj2x9p818#3u_(hD|(yh+$UuG?31ejR!gg{ z@&*ITtIk$0LeKyKC>jQcld3NOK`fI{z#=!UD>=06u%GlP|JzO@L6sJ=w-D*t%M!(A z+~$6p3SyTm4|kn}SZi%C8e-v3(Ah|W z=SJzK{`reVa}`fDSqjOf5BLuLffPG1Km;cJ>n1dMMy`Pq1E3f9;lpUT_f7Q|_R=qo z%zWF8nek5eW$Km;%*<0-7WZ5GPgI*bY2Fp+9sPUJeDb?gtGLj@&vmy4ez@WAl#x8? zv%0qX$8--2ko9x;Mc38Mp_<{vZCgc)0&yF^js*E2bAPE!(XHcHN zSJ9eJkBVHA`)4H{$BN(QpBg`Fqa)^jfZ|XWb5D&#JF{{${jLJ25ZNETy1Ug|#ARoK zvkRgr!RP(td#4k@Mhu4#jwk|j|4h0r3(+dFkMOJ-SjVDzT!Krp3;d_ z$Mn8o*p}y7kySkD+hc0pN9477?}}%*#}>>?C`}>}UOp=E49+FYJ!l|7n zE?(4$++z!&xp}APX;gC;!7}W>LnxLcFht{?hSOQkMXQ3ZZm7wf;F@RQq#5Ipzz|miJE55Sq~i)FWbyw| zbl(3|{%;(=&*C`tF*A~(?jy*ysl636ZFq2dWAxYK; zmA>cu58OZ9kN5q)uj~1Iz52NH zt>v8{{f1emE7Q6d+w{*XE(6Npf``Ti=Uh{nA^2C&F zZLRtZa+#pzKJb3do|w+n-8Crh?o9tALU01YDvW&|`v#JxQoSW1Qys*~66$c*pRG{W zOD(Q?uwlg8odKW1RR3huV9f+GMx+-j`+D(dsMj&*|K+>c@fb%wB=amY34D zG|fM!$hB`IUr3kFs+F9Grb)qB>R$-|p7`fMsYpl9NZC=#C#DzeJ^7rzwM99&L;KYw zF90+sxPwRVWH=(qV6y>1lKD~_Phq^@lnV2ozMA4fC*(LEYXfzR0H7rUz30J;E~Z+P zS_wcfbAkygqOv(dvb!v%@X-^J%L`)3^P3E*IbmAb-Pa-lKYe=fUlNO>SJY_f*YqUj z5~SFW?@4*6h>jPqz(-}b;cN{$hOI*YU_VVYAg+IBWzv<6N`B~t)HM@tm8xR@=2;MJ zI#qPhIPv5bF`*kEjY^8G%+~_wNP4^+!YqTB=?Km3-i!g=Rz-07WhpFs&$=k(KKp(! zcqIb!?0KeyYNeZ5e~P@|zQ49i?B~e5u<)VXt=3%$(Mamcmzdep`2L|YQ)ReUKx)S2 z=_P|BkDgUb=Pn(Q1`Gh)4w+$mkyr=BT*t+c)g_@W!;^g_jK|*bjsAwUk|x76j$FMx zH_2F*RqFe5Z>>d$f&K11gLFOlc#Qk$4~cuHI@18}VX>E)fXQ>Ok8q#&LRZ`_xewgU zsiJ^lbK`=3$BTN=nT5US+IdVIj7kFPxFFP_d5Tcu`Y@-jcgf?ce4S@k%+3=Y^0H}O zv=enL?oD-Acp4vz5IoMTt=x>3#C>bv*I2xNMafyY!%vaFIxhU%w~r%kv41rTZs>e! zoK}Ws221%rYG_j#$Cs}B;atho&_x&%kUT5nPS+Lmuf;S96`{)!9)^G(BwnSy+lEO* z<}FJ%1}y+xLRIB09;vxB>|zERvK2ePKsRbRAZuBSak)DPmu^OtSD}~|k73<) zpe8l_-wj>3km-ZWc~jqOoCcBb<0zESLTg`zTT>9n~ifp2!aH3lWy z!sH@;F!gpf&N@DENV<;uwfingK4w3Abj#3V(2vhy<%9|YfN(q%;xGf@?57pwXWe12 zIZ80CS@ZR=@}7>8MPLU@b|NDBRvJ$hEPeY;Ke|PRHD?366+ozBFEeVeGIz#WM2iZZ zA7@5L$1?!+&HmtLW|_P1Lji!<`9HeYP`Seck4O`}O<6KhvFc14{GWhSN5Zv1F^Yt^ zc+n&&yi_oTTeb$o+#oQf^!BwNe}8m_RGlg{vn?JMHO}(@X)ogUIrJ-DsLkcyYtFKt z3yQ0e3d3#ZH`JOHV*T?8|Du7FLebg;bjW~4-yr+35zB>pl5X!Q(W zuZRFZ(@1wyCwB_}6sG_~vxrb)T=218E7IL8*KX<~yTl1~7XW}(b#)iPKMEnl1$yde zVYvhT)fr+@hy8|70T4hyHKMufw!emNazGl!<+z{eElZksfwtm-uHr=MghA7d%7uj_ zExWbUJF5)5y3~@I4J7gns?SXVheD+_1B3H1wxNXWhA@vw?5bYcwuYX(p7LAV{eB78 zuLP8(xiQf#Ygvl19S-0M%~sAqbUK0t48^ta7UXBQewjbE#&3ri(@iPqH>YuA7rRSl zM;ByB`o^3&&&^OruSGAZLBppnQ{$&*}P|Zsa^DP%#d8}p%S{$+{`r~;r_caiMPzt z%WC4UC5VbVmU_Ub^2d+zHfZpAGST1QEn8^1QrjKtyR;Hj$B$)q4DBUW#gC)52b3_{ zVt3iCf+5xej5r~?@`0DA#46m6c=BQFg#KOBNdNf$N$JWy2k530NkD3ulh0WEl;I>E6J=$p^{zRI>`E7=@20%&=FcV(CZ)^~A54G?_4V)@1hb?}bMz6bS2i?r zkazpvt$AjvEK`$&xB)3KQ{Ph4Yw0F+nH>h~u?CUA>t+<%^pqgMj2mDj;~o91?Go-P}(9e+F6RO8Uv^j6oZ8S+_|={6L3k!XA^&-L1XoOQ@`gyi3g z%`F#y$!#|;yx8K25>|M5b7$ub(e~G1bGXR!H%~7P*&1z*c?1dSP7$&^nnB)W48#fj zl~F!_mmK(^%2cz!4#tIcxjNaE}3=KTokU9;<&X zxM$O%ulI-HbLRj3{3?ME6xUmu`LF76XP-4qPs9E%C53jo&Ns?;h3Lp5PUc^)n-agg z4ptfJzwfZOoO&jpYvQmnjm&=osu;LR;Q=gK)V+JvGt)C!HvjlqrER%bUhC;FVn=}; zP`HcE6d7uRo5b=nI{O#uKI~FWRSmV#{yw2g@g7q8?~E?>&NvV*g9UwVZl$Q*Oz||j zZIN*2MxO`6;;oedY29ho6OMPUvQbYZQaTQVz+xs~5h7|8gMJ=$6&vtkbaDfPyk+DB}hQ5U&)9fkD$ zo~8I~zs*_KOErEJv`NggyKuehk4d9WUi(h(1)g688=3cha67c*7Y!5)FywiM@5g6x zwXkurqYYvC6f`%K2rv-GcmzlJ@@hDI4_$Q^?mai%V={{InAECMnEy49H2Q*TD008V zX!kPQii?E>f;zlQ`Q0fXB5bKv8#=5{jO{24i_g3%G%fJXMKIe^M@kFTx2@iviYaFS z=@UQ%KA~iddpNpmgR`1`#Nx`{mFZWERJP1R$eqaip!|Y)P^b#+;AM&!*st)k>Xs!} z0#^9x13y5Zqg%z)Uz;J_vtP&h?U?XWhS|Fa#n9W8k42O*@}lJZzn5oj&!PNEo$b=R zdk{qn(X99gX(vF&$q?c;gDrw?yGUSJ zWX$)9c|WTYEL%~{S&Kr?^xRT5;kGZ{P$4qvi6+OBkiFWkF4`hZ-FCY|eSKH^Hjx!J z%f&_2D=YQOeBp*J-@uW={?P~beAVZUgM9UL#W}UZawiO3irv566bgXG7lJ4&azq9M zFT3lrjyMhaHR>k-pef0!)y#~O##@SRh>%O$F~iPt5Ue_T{~nOkDv5gczi#=S50im#9-;7O+DuY4y0 zcl@jdb0Ln;cZWmQ;flct|9W~(WlV1Jf>u4$B`scy8Yn7Mg4@BrGT+=+;^6`Xvv>;N zY53mPG)W~c-s%{+Iif~RTv%L9B&DEp%8?+?KnmE4l(d=P?!zfqn7v}hRa%EK?14~p zP6-|K2Q0M2SQwNOZyG>K@^6K7^9lCVuPCtb)Nog%-pOi8xb_)^184|75ONVS6gEnc z(OeXZ?MH}nkBY~aap?w1=*DvE%FC4_@nwq*-jTsEHuB!*LLKBp{4=@#Dr)TMgt_Wu zZLF|IOv>p$#hi8CO$VIcl`0pDcs$&0v*t82eP3MTX1(nC3%qx?gwUO@l5@08SnOV8 zfmteJeA8XaUIJouj0NL9GpW0Q?6Wc^8A}lu_}XSc##*lXJ;MXn9l_V{t#kTaqlj3| z`zERo?z)nqFPY@hchZ#_M7w$2Fnv1!h zu9avFL3UQX2M0l!kaD%%z9yc&IsmYQ!OED?e;6nLlz=}O$oyDNe}F?$F??>p7@l%~ z`Us>g0Ts{;$0gU_Xi}%>K+)8TR~g+}FBlMjQCNU)S9XVDsN}&ZVUr1@CgC2+z50-A ztd3&9BA`E|AoTU7Dy?veXctXmy7@KX9|$x6XQ6??5&(AqZh)kvNzr#F04#_Lh?D_x z>j@44{g-XHVpW_OZvx93^Vl=dB0F*C4qe?hamo8fm+-o}y#)Fu>_Yb2nnM6O%wh1r zdW+RJe7->Jp{=LgB8Q&Rzv3CO_GL!ob!w7|&^ys1ra}O0-BiG}V{-DFq{dIAB^%lR zk&^c)KtaVO0G*;-x$tje1^SJRLw?3yQ_ z1M@_H0t7R}W}cG`ep%f|JsU$8_ld}lZh-4wehE6^Lvb;u4SltI6!d-#PXhz4Jf_@m zG5H-I{xUpmj+#te`Xj+r77a)rpH&cpiA-***nhM75x@M7-@bibeeoAXChXuB7^F;_ z3yh~RFc^ku3Oif;5a#k$AfS=R^y|bo_d8o~d#6(*qJ;n%GI45n4Xb(Pr-Bx)|uwf<~yIm!{0G<^n zgv`cD6Y%V;M2Os^Hj$RKKL~(DxtPB+{;)VpY>_{XMg6o%eXn4q0Mo8fZ2zrgn!#SH zW}#X01rp4@_cS-ZlGtXZyrKwh4J{w$UJFBztB(P(BD=vZ$;N0ii?_?BrhyJT*w6n zHj9!_HUMqCof{FT*exd3p1bo2itcQ*;Vkq~LxHITT8Y=D%DC*6Nt@It5X45i6SUHS*jzeL=N||2ZYmp|c?gsP9FO%%&1OQ5;^6daJo~ZE5Q0)}} z=F>|H2H3#CTCSu8X|8g<_DjpB%4lv{0F)`8d;+j|K+UK>W$LuS01REm2>>dzKpj9Q zD8~x`xk%kK&S>xFi{+v$u;O>2j8D2;>5KGa3}@eiCai{Z^c_MeYH-Pc(|vBwGW)W| zePy4et*4wZ@5ItH{TW&E@7E?9EsASKRFzccdlG^^+FDW%Ec%+7Rs+)?!U=X+7~T1z zAf65$@o=Ygo3B|Gc|u`m97}&Ek{c+XGZiSH94e5Xn~e%RsfW^iv|Ks9F0Wiw4YbN-Ga6vyN7upf1>bt|IqqXlgxd-at)2~ z1w!FBQHpnsGmsSqbd%+pp}oH)LJXv~lnaqU7T6K;1PXAzM#>##&%$5p(*HwSwhRVY zJ-;e_ZQoYvBg$}OjZq*O7%uWJFc-AOC#=28d1fXa@lit$?Wce$b2Lh4b3rBq$sF`Y zy5634K1sHE$YI>^@Dn^dxtGpa)U{&@KBw)M_yij_t8|ss!*kLy@q#!Z^->(06frjv z8rNWVV3aa?svR^g%cFZ3l`?uFO%bC3;{YCgJXM-14r79$B?muLp#~}ziNb1eZye7u zVa`LGEYQY+D*9Lc&jpuf=f|bAzl((|0QAfIGE3wn7le~R z5GofSi&Lh5VY4(YLRm)<09%CeysFW55olS79sqTz8cq2CDN-uQ@45gmx4}({7%W$J zLpzhg3qkN{(6U~vP7-?pfMzve;hdmsMGYY4v*mp)PXv`$m1QZvv!#jluv zZ;a^i4?!&2+C0U-EB9je(8u3?Qd`r@@FH9>%E=1k)WsLWDtPQ}6#P-9UpPA_FIyQ0 zFrZ9>Avu*r#4K+=olA{H%$qz7{Qso2#ZPZHVP-*>yS@QKO|*$5 zT(7v)eadG8Bzui5k}WZl^_L|PUf-HJuY7-StA#IAk!VWI-eZYC?d4k-`(|_CAaae?Uz)s zZ8B2$?rotqR(l2~K3JV|!f)|X#b`J_t!=uW$W6mwbtkvW36|?l1niR>UF5s|R*<}T zQLP=Dbx+xWhP(DPny1&D5swg49Lr;Y35l{ zE1#%~Oh}hHj2nOj+b4DVL**3c_h9snwA_vW2#o~RP(U99dEtzS@b{6BRI@I-*!?J; zm1oZm0#sWI>Ps3@Ln^u?vN_G-JJ&9$TGy*KlG4oW;I|`7Bg+{yL+Qeb9%{y@s?|}g zvd*0=yykW?n;#7q3dKpxTATl5wrPZ-CQ~IIG4D&#i=|V-q_R>wB_c`k%Oo02U0O%H z1mzA5w_i8QZTheR@^@u9^`jjBxyswccgMID^&_(Kb9j88Akep}rl@)yUpI?t`~nHo z|BCjjJ4+!uQT=01h#0eNU4z~TgE@f}pRAppQ}Lo@v@D%TF-}(EL3;gzq5R{_;3#If zSXiqk5x5EU3nN-x=h~x589hL7ce0Ef(_dI*>(*?b6E8&%(qp!B4!YrDw~bP75_756 z4SoEHXb!hLxR?a|_F)e7=6&)&Fs&(f>vQVaR!c%j`u^Y1u4R+W2igiFD6_>pI~yKn zU0&zIJYEp%heqw?s#fr>HZd{ZT19*2n>OV^!v!VTuOy78BqpYZ?e2-^fL zMdA2m!PnL&S`};UZKh{PvbaXq5%Pn$!FNb1I-C~Ql{^|yQyiXRtFAEN1A|+`VuoO1 zw$L;fk!4b9^cP)*{GR(CRT7i_lr$<4}%(6E$#EP!OaS~H`Kj0x*kE73f9?+OX)gF#$SKp zYxH#V4h`Iwo5x3N^Fu1(y@qe=@Evqc=B@O-^J({yRCJ6$#Z-1MEM6;yNYLyS<078Y zF@=n!OVrXHq~}CyGN;Sr;m_bJA1iL65sj}VC6jC!(&r}A8Luytbdl#0BjLm(w&10- z_(%0P5^b9g?Vjr!N?4-WC7lyLkz)9Zyu}f@YR2Hk2YG%MPsJYjZp|eWz5Zm&V7Ecf zedj`1J`isXv`WXjs3hPd;VjHbr&gJ^FO@QQD`&s35+@i5hZ(FrIextMluRAAc(X0x z8OfEo)+*MrPT9@ng>*i%JJLKc!`dc73su<|PZ%9;kPL~h(qL0CpcL>%SbV2t?Z$k- z95{u;bV_6=tBcc>ize-Q*<4;>dABFApC=7HxCWt?7jy(2@6axE0(fXYUI~J`D5Mr5 zQtSZpHD_m``mw;Q`a~lHo`GIx$ioup@x6sh1xWE;MlxGhe^Rj%lskui&b?Gos!=YD zscePi%3j;(tO?;MQA(U6>LQb4Hf~`ZO92DE2Z*JLM1nz*mK-eA2>=uzVv5wyL_7;s zY`g?rZK4r#rwNIGG`x&278gNR#B{0Hv5o zP=vrrF^PaKS0pVl_#184?d<+25M2Z$T@|+A@|gWQG%pEo+Na(2HV#v?a!Rgq|74Od zm;S*kE79WFXnkEK;v+c=Irfl8KiK;BZR-#0C4ZeuVgHG<+YiA`&=rrT33XTE#|$SD zuFjpLE%Mt>)0_VIlQ-%3P??yiem`fkJ!>J>#5cMC?(v)@JkdQn<-{wwgUm*U<1YM2 zuTDVBwxqplsS-=?!$%T>p}CGiwQ95pW4BWFkR2y+*tXZX-P)PRH!Lf3d@pUV6`H#E zT=gu+g}Y88hDr9lP>*bJd_JwlNBV^#PKFZ8cuj`fWFzM`xMG88YJ6>ICy)E5*A-{9w~guFNrJ_GC0PFj z0Ji==34G7TJ1akE{t|S2UT?8NctMy&) z9QN|3PjA*haJm2xObe@r5lqwQkBV3=B`b~dn4%0@U-?HY5KD=fzJ%|yB{gi6zo$K_BwzVJj`yhp2>Joe>nSC30@ei%dh4!a$ zL1sUd(W2X5d}P(nND|CYTe{Nm09zaZ_TqyI(_PbExZfXWjNP|zY?%$CkuUFm``s&r9L+`M^L0INm^Z;eZ@|K zqm_-0TM-Llt_ex^nk?Wi;J8hvp2Bm5ple#5$T%@+J>|ohK1WYQ@PoHA+!C2WKHd-) zC(6OH^fL=rFI}SkYEt7&9X%V$ufmpnB;Je?yXb2og~1k+ByKjp51X(qr$e>y6wl81 z6S;A<5L%EK?1bQn3x4HvkuyLY4G4lxqexwRQ~*C^B|4S7#{Uiu+`shnxyiNxQD& zr!C}peg}RpX|SoQ`u^S@B}tqRc_H^URH_A@7t!lzI%fO8(75<1|Lc88&J98-HO3L+GW|`5aZAa*W|!krBY80c+-}~XI?~o7Gkyna^yjDwoD9G9xFh2 zqDvr+upV)@AxkKuU@x9_H1?$Lg+}l;-N_>by5-Sf%|*7KIn!+KO?*<6ZUN=uk2Yx% zu7XH6t!d9!va+sn`pyc?3zpxbzjc}R;l;>an}7JkmftTv2KVupKUI?BZksXsij;qm z_nw9oJ63+AI_iWCiKF}Dnz>*w#&P9GZ;hw-LlKNEW;T4V3#l7IvY*s0^%o(t9$ec$ z{Ni;;BPVaePJhyG#^Ey>^mmfgXD|MhW24%O?y<$WMxMHM2@xWlCGxK0HSdSN+W)=( ze)k16nYY;SK;}!M_?P3rkq7l>?7#>d4<#CLXZZd}6`r@Qu#KH~Nw3_;F$(&}9aA+Z z2^XHrpl*WH){98~ghnYiWEnV*dxZmXabm#lSRD%U9{m{&D3*Gx$iV>?TBzY8>s%Jt zIRGXJp#k=+14#fDzsdp{{agmfas|kNk7Duxh;E1#+X+2A*nn&!r$m#|0ssbclx?LhP%}J`5-E12RXj$^Vd;4zbx_OtItZJk3 z;`_LMcd4!b>2J(w&sTrllZd^@5i;f-==j}B?@Lj)LCb08Mv5V4ukT?rqe`v)qh9B= zkZV84UxX4aV(n9NFZ|^I^`Mq%w^xdRaPrJDplLD)(7sv=6>IjlF0C2;@-gPpzYn6R%NI@qPjX3ZzazAIdel45W2E3l!~yMd!LaqX{P{27zGUeLBB zbzQM%uJ2upAiUq|KH|M39Zyv!)=I;mQmZlHVXR6rRo~%TbH^2O)f5A80os{75ZYH_ z`4>6>3eVGMp7~2Jwq;gx-n5i=%%C&PUu*Rj9Pag7u@pip+u9G@ zo|2`pzm=@Q4VL@y&9A|&Hoh_Mo?|*Xj;Hm$d&^$B#D3F6VMfBXY;)M|$Z|V>5#Y$Z)iudu?Ish#;M$lWLw^#UB;?ov(scKy&4GM=pP z4gC&j%zE+Kj#pmi_t^|Lhnt>P-DVhvZV-sDGy<+Z6FG(kd14K+|hnb?jx4Dq& zpTt-U4$Y9+EmO)45|;s;M>QgR5uge)jOHD(@rVC101AspwHQGTPLeEl1Y!i37m%kPMAuCe!e>bo53OoC!zAyQZDcD;Hz9)t1;yQ<0i*o^xPg} zoVe*O-{|8pix(MflBMrj6mmD_`!AY(=jdv+b69Pa=B>1P-JEg%Y*^0h;BrsfP8_V? zs0Yhb|4Zr-7u{Za!V8Dye2C7t<)1K<;nzKJvhbhmrY|NNkWhC=BPSjy&^&?e^Or}4 zq$D=hYPRA)epbKVLPog=qefLk!k;ZMHN@x4NA;R7nOfn)XRlH9Vn8IAVD2nShXXj3 z5UH)I`OWl-$88sbZAq67?EcYO>75%LjfcI8TRAzm-I#FEm*webvkw-7CICVUDFCRP zI*&YL4SW}sk(Ubq`Eme#)}a>bAN_kD^lxGD=Z&5~4m+Y(V@M2CmF(<58_Xi8e}V$H z{=YZa3q$EaQbX_c-+!RDmYW6VtXB1>MtfPLXQ``ki2YgG2FGk@8w|2x%V*5ZWxqv@ ziK;zfw_vxlso$62DJW~UbAKB;en+dWv-iau@>)8S(Q@Df6VK&Ta`&kNJ#wN)_G zoMN;po(YWQ*e7Mb`DIXSwh(R(9njgA4Vg>Jtrm&GvlPN|7B!6H~WU4{_NnGoIq#mupo$ z%Hm9UdNA2lX-Fiyy%`#2#L8XEuApFSy!l6U-!3z!;@IAu4IoiqMXW45P5>{n15+Ys zVAV+fA?d%1-pbpSg#?|EeK|igHGoTQS%d<-;L>LSlrfPIq6P6 zb0%%;V{T>xd^&Zgk;3vr9kQHWsHjrn2EM4gzSmfIdD~!;uF8JR<=<>63y691J9tox zjs{1)$ypH)SVsn6UkYSu$}Qnd`e#IQe3={%!R}&zy=zAIKwAvV2X$@mrRBOV9$3c9EQE*<>#iAE#=c)9o~vU1z#Q)Y2E1;+=L*P zf724G#b_N}08*<6W{mJ-zE7i;dKks-QhOG)H0lFX56c>|5=>lFCR3HUiLwogsbr>|3g^c4I_mdqe=&we0kY5itsyN=idqLdd z(@V9sw@qdG{x`CwbXA(F+;1icDjmVPi%YXCJ|@!#S!W$hKOmMyTwo4nO`Qt(IQdZd z(}P94&aS-(6LCL2KKIAr_sKFFD^toIT7Stp0|#gtJZ%GgCEj|Oc>DqX`1#x->gqjh zo$!gmk5AqlDe*^dL{NZZ>47z7&~-Qu_(3AQJ2nGUV`h&4z@=Akt#Vq}xVo_M_k#~7 zC-1AAA3qXaj9!)a{5Nvbr#URS+E#e-Zs4_)%@2IR>_!fPds4&l+9(4!w4p=iz7R4f zFbCV|d+o?z?(6zhEW@6_)Zz(FObb>^QB4XRWzo&!1c`@+a%hy1_C41>CX&ORZ>Efq z-R63=+*Q7C$u4CLt)%hQ4TP5|vTbR63U!?tsI$8koBl@NC+j^{LOq9cy~o46bAH|x z&8d~18ZOIFReEtcNZKk5r){x`_87dL-~J&@R^tdZYW0bLyh_T`A{H1MFw0Z*ZiP?M zz%IQh)X3qvgy8RNBQp`5q8^@N)CZo+XOHAJ6fehX_EQ{bzxLy4f8UYiX?L_PLbzHy zzllxCjng(?ent@(ktmD--t2*MABB9FET_$Q^m-=~aVi*{=<`D{bV{kc`HtrGP{7CT zAK9iXh$85I=CdpTUTb=!EBC1Wd^(*5l(`|MPfWpx5Y`FQkTDfKvQqp*99E%fTq!Vz zN4lwME_1qt1s}Yv_r9_B{X5I5)nO&Z;BfG)JYx>@2Khs9sC1*AlC)z7ytiifFKsP9 zZDV3xYxdd*lAJNQ_*G4}Isc_+hoX7i%WApn9uG|rI$p4S*J^5+5Q5#E$|$d~k^Ips zJ^T{GRL|ZxrBFpOJp_-^3T_=ujQ(9$Xw+Yd@;_NFH(J5TFzj{!gsxT4IoLyE*^Fp3 zVzW9d)+XjvDGpZfBxbDI{0RKOma?`E(c6R9=rg}(qCu%j%A^nh-rPkLh(Uz(nbX(< zJRFEwIYt|_bq)q0gLNWndM#+i5!D7C|DrzlN23%U;UI{n9|duf|ca~wFMp!mbN#%Niu)=*(%QK4V2 zZI4*P692PSl`ea~xiw3fB~L}}p2~HtC^r8(D{|1N5Yu%fSscR;i4Ai-34n+&XRyg^ zQ+VS(d$O{@*5?C&mXIqB&-$i4D9GkjTdn}H$W<*B(>2l#O~O|~$1pr*(&4P~7*%J0 zDmMjha_i_RA_==Fe>Ae_@y;9fPF0aft%M^=@SX*7P8h(aN znipsc z5?n-pi#*^_I=~-8VW08TO2i~PtaWVFsfg9jC!^z+<;iMOn#p?aZBbHtR#ip|vi)^IjlHkwqUUp+XdcIF`Wq|zyUE&rSMdvf ze-PZWdq8;S{Qkgg!PeQr;-1NYZ%@b zdRF|p)Ifs`HeHu!K^!O6nIE)zo7pWlAlV`%Tcc5?qEbm?y&rp+!FXh_oX4}Adw#KE z4;uCvOxdR2M9~o=FcdDyRr4pF#}6|%67}?=nhl~L-5nVMCJqv@;V%Lb(U&pAqh&Ck z-~tu1L$=rPlkl9Q+$f(wkXWQ(KQXx;W}B^H5nmd)z0sb&@LarrJ>F*2;{-)zz{?$| z|DDw23>^Z@AA>TvW^|cuMt5~S!8q=!XzZHV50k|01-qJD>4x6fDvPNPH(5tKGVOlm zX!2h_GP~!>e%Y%--?umW)VyQ$7yEA3XiY{cWk3OS$Yo|Z`={@xFxs5buAGGx=Q20= zqbcltDa`~kt)MwfgSq5*n)p^|#|mR(3Lq_=`X~i&!-V4%h3ABA<1uCuyS8JS7XwlS ze&$@le$ESxb*l1Tr!%eHr?ii{VW$G;nF}zW@>r)nwQ`s%Ng<$}fOH2{h7~77yvZJ|3(bE(Z zsP-?o;u!Gm72oIw>A%@rjTI%PS6qAgZ2 zen-=Rp9+94q-ZNQsAd+i$3o;iL^UYTt$<^xg=3bwr;193?1}@`(U?yOdNfCC3s-Z~ zT~dd!mp1v1?NIIt97+;w6>h>6ORCFAD(G)DGOrjBsbw3u40*ULgOkC&Gh6e)^ey2* z`!s+S04OnGYeOj{BA9;OwiN}Fp5F_#{VED1o3Ue_*Hpo-*-lrGY89b8XZ zr=R9(anikOOZCI=2nB<^{t?FE53=oQ!~Zi+*?X93z1rRaD38uOy60!wd80hxvPE4( zKkMwPj?KrrCbwE_`egYlnC%YlnHCnFR!-VSc9xhA{*9*DbPfM2xcT!^&}G}7d6y2& zxPAW#ILi&_yW3`74HcIc2K6`#T5)(pO60o;>=Uj8#P&ds8}9uSMTT4K->x?Mt66t$ zxj;vpk&9DKal8>gZs`sPsD~NAdE;!D`C zMYk}|XDm#(eH$?7RFi@APU>+UEz5v2nwW4)k4RBqP$bvMZEz6fI?sqb8su_t9*0r5 z?;~@T`6mcDqjaPVGmHHlKRvtcQ?>9seeV|Gn`HW&`=ix%lH>cUj_+0VHf+`Ao)z)J z+0;G`%6E>Y#;Mw8Lm&bd;?tkW!XuE)UK7_!&g#`wBn&ky*kd0z_O;E86#Y;V92`|% z>33dPMb6Zr1PvK+BK#HK+s4Z-U01994=NW_FNl4Q^O9?3jctK=h*!J=^!Nmp1E6c= z%;-1jKr+qL;FDWW`=IIm1-^j91*ML`o0>V#`6ObC*CQluv2#YMZ*5AE-oMn{M!K6* zt%*-U#r(Q!=p!`@1J?Q`9{AOKOXx941{V&ldHhF2(L(|~HZ3l=J| z1UecsYQfYtoIEPe9-oQv?P-fQ<`b$BJH5qKJaDt*FO3FzbVSwE;dMmo9UI?!ohJjR z9Z7+ug-iQD(FnaA_{BuspDYD|2;WcUoe4sP3qQ}Kau;g;evU*JW~Kt#YI5Yp|0S!PucwyJL3-r^x^gko}!$}}_(KjIezPT63CZ{Pf2l4yTgdpD|_f+y`l1*nx ztCMfV6XzKocSsnzKF!}+PZgv{O!*zi;s7q)&~lC*s!|1#-2&G%&oppXyOz24uj0W5 z8E@Z7`+d1O?$jwHmiafu?df8$C$sC(NuZotT~1f$f&NPT7q=?OkJ2S{YHw)=8K1o- z(S1`3(i+QXAck44tDNk}Eq%|v(Oq}0Z0`NrJ^RqAzkv)NfByc@?*$?Tt!5chZ+K`tHg#Bc?17zNU83#Xr-pP-kn=A5 zq>K3g55I~p=+2FCClwic$FGrvK)3h&PHdtyP9@2wCGoj_yaeiC4@J}hcVZbS&#=U1 z?bX|O&ZZPcOl~A!-p1Q6zrB?l-mZ;4>3?YS@{4~BO5K#Ds;_bCKlnW%Ls<6vfmIH0 z?@g15!q=7Z%Lma;G^$010r!dcHyg}~Z+G+&Eh>9&af9K%PZXHX#<<97`QksZjzLaB zx5xvFS21x@zsKzmu97}nWE5>`y3yvcS zv@FYk{`^fPUbQ;8fBF|0H@GsjIVfW$k~!)XEbLKtiX~A)q|q!4Fq#Jd&bFj#62|uM zwNIhRUrxr0B}B3ClEd@+W;N3iVdFPNvVolr~%Yc^j@vP0TjD%7$=}ZX&c`I7|u&c{xc>M2h8SaeH#vGJ!*8GRW{;LqkNj8 zv^Cya!D#**Go}&W??-2|HBYnNUw>*-_9^Ug>-*hj6h@s|_s64eI?LQtDsw0wZMt4q zTHY?`+c0?k5!LjzR%G+|lwao6_4~6M#}U)0Z;z(7K3zQOZMk*(%db2uqQ)JUY`x!c z`Z(eRIQUMR&+}ob6klQvpw^=j0r0nq;{<_JQ~v`|INKztrl~PCMWEp;`+{84eO!vb zI2^d6H&RYB`KY4H5&&1e8~#Eo=mCYci?Pr%jHK-2%S38d&Xb-{gL5XT=n(HtP1?dA ziJ9z8KWD}ecoe=E|ENEwRycxF2Z6j_$1&o0)956ksP!5kAZ!u@&iD2>3wc0=s`8EZ zrSOkLtu;!RI?Urm`UlKU0C2nL%5gTak@YOSlLAq=4VaH@uz*8S$0epcfnpM=t_utW ziIoGX)h(v@DO2UJw=&vWJYJ_4=kD5He#vovwd68m(k+)Bj>`GX1?If-T&vwxk(|M7 z<&>+H$hpk?MNZp|J?DChTY*lD(@sIoDnCkGM8)zg0+-;fGai@c`3h62loI7bU2=!w zg0NhVS5vC2X47I9FT;NLUG8Fh8z~%sV__mfd>0G=n$sRC-|FOGT7GRGQCj(|@TK_Z zvpsO^$eb1U_OepaQ~N79$^(fXR0!1iMxmL7%D2EdQ4c7vB zTT7c7UNlWDz21FLtMW52zulgmAVn_&$z3*=Y3$x7AkDVVYvjx^`V4mA4?Jof<+i7m z_q=V${~fq{U%K&m5s&Y`-JS2nwVgj^LR0+SFf*5T-qQ(TYe|&GWvcHyp z-7lMIEnCdaQTujq{PDrGqt-3K z;-}n2O+M+{E7uJj+j*F@6q2pY6J)v;o^Yn0T?wg==v6!H@YMM2vYYw`V~5|o7ynIU zl16uw<0X16+`}c5Q;qf5Tga>QO{V0JNSPtKHm}0c$Y2ruu_CCc@meha@IgV#0B?eC znumU5V7so}u#FI(P$J{q-1mB8!s6VRoeqH62ciG|Y*~pZ314|khq_SQz`?Mzsx)I{ zb>WxGwHqw|ibH4EN_D%$HpXho)Q9Jt&5Tv{=<4p<6t0%cIQgc9&lQqR<|!}Sn84mo zxJWT_^vjGl0C;R(#JnNhX_~Q*3V-`7Wr|6+$lvf`5WhmZ2&1N9I9qEYPsx;;W&M{2 zZ`8-`J0ve}{;sSHA?zw$4vu!Uz-Zkt)p*$Dw!`-#Kl~fdy&?aIi19Tm?Wyn+BY4jb ze~fi)ZS$j-ZO(V6TcO70W6NFOfS_T*M`}x>5dthHZG;CvU$>q~++1f6;E+?SE2?hV zbTy`%)$*(kIV=tN!%E7fE}zyESkM7~1-t74*D{B?u)2<`nW=ThB13%n@fE4XzfITk zFK~FtLsLusipn|(R}%rP(akfC0Vu#!f!Qaj%_kBqDHUSemU9Ml$`LB<1vNe&Sv3dD zX^#YW1P?n?Ho?XT9dtUuay8b{fVPaac>^3SMU zI9rWYn-$&cjr_Q#XCx_40f?%575$yQU{DsF6iZpFd|Wa$kJn z_0TpxOi2QJW9*r=?|Q_|D}0$Y^z=pK8{0X`RcM&=CcxxAe22@O%2WOJwp^Bmv+678 zP%yV+8wQ7!^UjtwR{6*^RTFAH#Wo=amqK<$^4E(k!+3vi)Y3{su9e1o^_>${-!?x~ z=TT|)H+xv!>AU;l7Wb?Kq;Xb`vuavNA;zC|Voueg{C^akgNLe~73r?|<-o&U4Ol?&rR*>w9@KwHuW= zR;XQ~+xQrXJ=0}RBsn`)sSKh;2&@2>DqiNwyovTODwB2aL@ykU_)D48IT7-8I8Ry6emXhHgkfkX3(bxNpz1b%jY)t|A zXLyKoaiZin7L-{<*+7V%xKm6AW4VU`O{-0z_B(a#68}?66<+>%?X2OwLH*W8Jkx|gp(eIC zLRx~M?6#~&$x!akvD*)ho!^M+U2T5rBQkLjw$L5iV#YUbFL0_cOBUxWD?I7HfCI@{ zYl$6Ha$gGz2-8I~HOI@|3lt@YmS;O$WEH(Go$o^|&MtQ6=@KNB-q^Kw+r5$xW{`yFpzk&Rs%pcZo3v2o z(PM#r2~9J&S`}|TcTHYFmz3-zs{!%3lyyd#mzth#cjr}Rq(yrDVt2Jc>5_4Znpypl zZG|KO-yT#>uTGh7g?W2Sq==KXXt4W6CatJ~R^@J<98Sd>4cTl>^3Y+2;U{`L!~pn7 z2ZPkf%Dt#}ZK$tsLZyNfY6>}4nC)2uHinq}G6@UE_|V4U*fDqGEN#9PYXj&t82j=# zYchzuAzb7ZHarZ56UGr^)-dekG)Lu`@3{!k5#)vLL+G&hEK>l8fK0ebhecvN@G`~N zhCr`~e<>z6^b`M5er^_nE&epHA)I-X+Qes-AmUxz#SJHtJnG&lDl$2-u zC(>};7Kh)Y)>pvs3LDu~u=s~V?pKX1@bYEn%PQTm4qZ_lXIduWn#x$3_d|7Jlo~Uh zHL*%!M^4!JM2slD80_9aKr+GcL;^~eem*vNnigvtFjSGk5W_0+-3e}EJOc7e_6)Cz zxM}MJASg5L+}jkYUp%&3rPKZ$ULnffA9)X}i#~sN_4`Mu_No&7JCd4YZL9KHnS|H2 z4F*(HULFyCkWCeP6Pk|j7Gahu>woX zh)rP^V(kc#72jmcnaEe2?pj)aR;oAL^$g8NVz0S|wZ&tzVt^wm*;t3{onryJhOx(8 zvoYLhRma^vYgC{hee^$xlCH$|&+#56(kLqe5Pi~mF$NKZ)qC8KN|Hf1-{!NC3sTG$ zzgtYX^!ZE@8bYy+7t4EhDiGoo3S-IXLF6%jYAnA;BQgAl z`b&OwtI^EOSWvZwqx)QycA1W)CfJntvW;WZrNFjxtjl?*$~c*-7k=v~sQ%#TP5{R- z@N`pa-W$TP``_4PoaS`LxLWUcU$o|Y&dV#pWHZ7#fgVwTb{aLZ@(xS9_~69bkO|Jv z0bDYb;KpzcAtnFUq#JZW2@~y+t7rmAvX@%ctwVy0X$R8tInkw}aXI&HxbBF5m%L6V z5#MwApRXwzbQLl>lA9({Gil>9wSQ!#dJxs3WnTL`B&<87;vDefM=<{XhL7c8*CQBy z7#me~%I*Y_3K6B_1T$y4&Pl40ycM%EPpNtZ^InEB>b%s}kjK2fXnw6sH+N+Hzm)SW z<&yilTlja-JoAm&j2Q@@daLA>`Cyb4jm?Ec-pw@lTh^o{olI%cM0o`cfB3{0`lGZ$ z2WC#91WSv84&H|x08p$Jt1&onFmPCRI9o*rL!X*75j_M7QvD^M+i}wraQe#34n+^j z-j1LK!hkl&jEo2kK!B&dhyloeoV7IyR$1N!1o)w@-L(}}ee!mdG;XAF7hdeqgA9uy z=%<7h>gdx)LLwG`utyB~r4=4!RJtSe*PA3o7mHoH*z4+*U21@k6&iB|AUHuy-{LSr za5NLhI0hr}RBf<|#`$@+Xn{qIsZn*!yDk&sS%B&0yA7f9*n;i5?+t6K!1;Wka2x>W9LB zLU=7&PQv(38|^?K3P4sA*m(&uZ$70l;+{&OD!uBSO75oY5U~fas89Jw+GF&Xb~_ry zXjhDu2Wq-}23w^TJAxNH&O<@W(MhBs#~ogGN7H)_?7mUb(+e-3^iJ!mN%U>Ht98E z`8Dr;s&mNkY7>WOy!OD2!#vDv*st_7CJRzbVxI_ud-fCM&e*CR%WFcPndp(sp zO(1BU`&Uz~{65f2jsdlnknAkA*(aRjPkMG`Z%3>C`j`wGPMe}5Ax3pxa8oRpOs?N2bds@WQ!Sft2au|&S7i>81 zu!mz7bNJDQ+EPrBx=09s1?<2g;(N%TXj4cfL6S#2j(m{v>_Pb$&x!t)r;=ZzN%;K> za!M6erCV~#80N-pDmH&v@OcdAsyJx^LUOZBU3{R(*GDayg^{M{0lA_jp19-*`Z532 zc#qrk+ufUmv?|tRS{K=rbnOlQ(hTa9E48lvKw9HUA#&@nKU1|YepAcjvk=)WqWOTq zzPWt_pA-4dRn=|3L2n`DA7|y0MOSdaGDgI&DrqYakWGxslEwEON<8obAR|oDuJkM8 z>|+@M?Ad9wUfis7*xD}$O<&`v#zNVL?gRm*>-#BS^{*E1l|^TJ@dUnFh?wWEcXVqp z664JKQ;LP7xYYK){>b@A?r^uKkaevY#eI%v@dwst#A=Ef#zRFnv|TI9@S~eIx&L)} z4s_`KQtnUZOQK1+p25{2Ka6K*h)!Dw(@eP)m=BFh0GAz)I|mhj!>d12x0{D=gjssZ zF0(BT-|E9n4k4BM?4Tz=O_6^FbehdG2 z=JH5MgK|CODw+#b2@?%U@^Va&7J^pj<`zPrM!KB?uLwWH(*w_r9MG(LjKyAx(0LHd z>r6M<-`TfGWTFA_SOzO_TAyW~q<)2awDjI) zP-?9o31wNy{WJT@kdMc$w0qZjO=o4*ev<#jG_7VM+uu|87&jqngxSwB?tra&C>JD92L&c=y~x^*iQ^r9T;H3jshx zO;h(rla<<&{g!R=pVR@TVr^-C0VkXxBqASz!`VnP>Gx3IDD3kRCXAm2hJ1KnZ=k&x zeDe!u=HB)R?}HL;RCY!*29Pr=XK|3)({Vm7;xqTKfe|*IHBAc5cxzBYg%l5Mjg{$- zQ`A3RPzHFFKA`$ps+sL^QXZ5%YI=H0@{KmbLXU6i;e&MZz&Fy}8b48-aEokj!Y_G8 z5M1f$Uw$*w2KL3EH3ynN*1I_d`@oUC?~@L}qr%k}PbI<;2I+A0W2N5EBJIcom=y*H zjGwp2#s>XB6MQ?`^uBdSH}B4`qfVzFqtb5iu)etSq!UjB)t*O#3MnxFX#Q@j&wWKZ~St8(MG*3MP1}DGS|JH{E?GoY* z5g<{3_NrAGWs-P>%d1?npABuT(ahlls9d{`mG zuh9NhG8*u!C&NwwR)U(sBr_n{wXR3`IlI7AupD=>>`nK!y(yPnv_mpJTK8^-MieiC+cf|nhoMdY zWFu4y17Ml=%5m-2rR->A79QIa3cmEhFc1E8EStGB7HKkLCO_DI8ylbRbMV}d2vye=vQ1o$jLrDR-l_U?N!6RN#UH7P220D+geK-!_NHTt z-m})0o#xe|34&MRe;6!txcDc`Qzh&j)(Zrf2iZbWZonftW`>8eRAT`;<=&%K(L95U zf*)R>S&CD67uZKbG0;9~O91MLvH<|k#c%*{x{0~7ga>bTiE;kcFuEHjgH_T*Vddxm zWMG0S+*B|agEhHkf!yKX6o_$%P`XOA_`a0LY~GKn5Js#l#t z0*~_K{Jkr_OJ80Nt|^d?Tddxjd!&z5VtJ!M+Bc^h@vQG`zhsa1A%++auN8NorObVN zZAN{LPaBG8<3JbI6QV^wrz!P}idiyM}ltBb^1bIOkwAd4(_mh#VjVP3U7l zk3|@I2k6L*p_tEYW^^DS^*wF8%qye87wIOF48810l}AV-4rxFR~_o`sk`108?jQDe1SvN-?1%ibU&CXzkE zwEY!L0rj7sX*m7ODeCTNX#Zl<7kHBe*_e6GqyG^x1k0M9rRd4SnCP7UW>Y5*P#ikp z9t#7Qt7`1H*cTNxKIeJxK_c1f)>rP7VqVAL?&6d%U?Q2y%SC9412Uxst$=ZD(<9=z zHd*2rAq0a(Z5UZ@5Lq^(FFy^0-HCc|%XB_!kNW#WGL*^26jB^0nXXo=q?>!8T>#s) z%G@SiNu`A3s8dvuwLg|{na5IL00;@iYwe_weItn&_slWTa-HED&(R@w_6`^bU?4*Z zkr!uidaWSluOWax0P>%pCd1x`#gh|?@ZH*#Z$|SZhTull@YoKSp9J!k{bdOIro+r4 zTKpxai2ixOm-_IMOah0pt`Q5v`X)yit$rJ2GpL?Ha+*XEYZW6E1>Nk>d{8UwU16>TAtuAWb$p0` zdt55{&JmL&aZml^X&zxMb}@c95l*c?a*~&AexU492rB0kbWN`SWaB-aA>!~o>L|YJ zqEs)Ve5K;vT?fCynurK{8$Y2eHUP4RLs=2zsbr!u5ID{aepgo{Y!|2iIQY!0Zoby) zSv%imUXV@=vmr!RBn1DRx25K%BfKa6Qfa3QE^eQ?mx^1cr_lh&8fF`l@59%;0fLJZbB|+xc(l?N!Z84+11}7b8Cm z;pq~b{9;2Lv6z8w+QC_7+~8GA()q9GxI;L#c(iTO5qXr`N%wixO2bDBKirl=i4Bs- z(~xjc$cNG6{SQ}d^FUODgKzycGy+6HfhsIBr2csh zMAJ1Q2}9RlK;c70{7f+o7A9~y6+e;>@++^=vUGjMSI-sh?<{HfWNi-i5g8D*8}VgXJec0x19yNqnld)eJQ5KZP$<6vROYe$Y}e1zP5En)=5PFZ?m#L$x` z`09eGo9s;yX)Q+;hJI-+=0>W^FJLs3Ex{TYCtvk`#@0IRU#REB5woQgfGY$K5WA#U z-T31gx=O$P#uhex?Ux#Lh>V(iB6UN#wi~%Yc+OGyG?D=U=cL z<`YLT?G>@G<@CnwG#~sog4B05*oA$|n7hjRA#kqGeJ(6ryD%pr?Dg%`W|(3#ePQ>T zhyd$X(%oZ)0)0cCkrpMMT~!QtEK`%h5e0xw=*Yf+*|&F4#4;}QJnARHP6TPYS>@B} zJXk*)U6_!bi?HjIQRN~ST!n`ouLdZIw`|PLShm{W}%ArVj zoObUW)P-h(Z4RVUIe#diRvaIhi-!Fyv&N zLmeJh181(?W>sOOeyB;q9?IXrxSXQItHZtaIh+H$!{-`YoxN_OO{eU=^woNv(1jqd9F?<8 zXYYsESt8MBncP76mCsOqX8E_&EoR1!GX+J^D$?x}N}dMg7)|P+VgRhm?v40l%7q@K z=61YBj-Z7+dCX#c?w|K~>5iZ|#T0_3gfD-l#xkh6-kd;0yKBtjOb|L5{=D_CkLN}) zjcbf1%F26xUtO*n^+|Fj^(Cry*tn zOY?Rk4FO;HMav1r2dX^n*BL>|)91pHHea%^@LB$JX^hi$uBci(_v7!kEh5?Pj zT7hv$ozZAyIKIA`OI^((_oD6e2;=l?6GH`g@Em*0j~x^~OAU+-BxfJ9Nx5UnU-?m0 zYhnh;2|`}an#x5dR6VG6X=6T@qCIA$_72&spO5B)Dv)b+hfEf>H|%cHQqK zMNL1fEN)icC+LiW$%Nj^8r(dSN;sb+EPQI`Uo4e>E#o_bFrJmT^tGS*O?;kB=>LZJ z^H7S=Xuari_)mV)9nQA-T>zv`&4Uw!_C`60rv%kiB=nXEbh!{P?pRvwer2wyt8_4- zMC_fMgFkm;N=Etcy01OwPA!RcQ0Y?(zbGjZ<+RGk+rmzTahIbYM{V(Vh> zp}E0n9i*s3)LFWUir=BOoe$p(hdH;LVQr2S5yM<-PKxHSh9Uzl;}vJ=>^y-51BdeJ zzW<}JQ`(~wfn<-KjFSdewFN%uM<7M*mZTZR^w1kG{_^6nAAS!V{9*k5g~~x1wt;x0 z8uTGS)NUChUY226f#xv@VQQrtNB$h;YA&>b_lA=+pyK{s?*s>Y*s~aW6v&(Lfgvp8 zAOHqk=Y$VhBRPQ=p$3mjhj2$$x{TD>2L!oyQr9JnxR;C5CvkJl{w~9c;z(* zl3x{ijV4v7)OhBc`5I|aEYj-4O^_lt(pGwE&Uz)oQo+cNpuG#_)JJSj4FV8o6^|-s z`J%A%)0pta4x!5tyZb^x;k&Dp{O1gx3|zzvTuj>DlO!3W2lkdpGO&m?sYyp!M@4(RQ!b2Hg$=`274*djb{dqEKa}rmdOyBnW%zC9ihs`!&AoyGuP$pnM`Vqw5@NAp(7Oup( z_Bt?0w3ITehTy{#Z+K)jvFmOXuc`x!VFe83HiiCM$bL(}+2G~+BJBN*vz|!GebQ0R zppqJYmA4KRX7jQL@Z9rV+L+vs7RiOX<|Rywig7+h)e*ucCqX`*Av0JzDQ4kUia1?MQvi=+Nv=w+J^@I z1_^H|Huf{u7yl&*igo2*+O3;N(MNVuNxsKZcJv(#`(i01J{-s)kC6y#dY>xMDe*q; z6OsCNzaEBEnz@#KkEQ|;1j^CvGu3z<_*wDOr~P6Nxp5GF1L^iRXQqO8>ub(cy6nGe zWOpu?;taV0xaJ#3*?wB8%sLpnDoP>rz=632!r_{Fmu|=59!WPCt~}ZH_&CGQit&jr zrrn3ydHK|X7sJCxC~}My^kan|_i;AT{4#gjiOR1F>pwtyea9ZPt*-p1x~CmCvY|+y zC!Z^ZY!XI)b7(z~ygyEQwy^Y7vy?9&jp#tOAywcT^JAO)=HV>*RBwyEYPJ$*(XO!A zV)$jG!tZX}TtR_PrmmI&3N9yNjNj34b{9v^mfW!KOwenNyXf zym{OYB}-IYJ7kIe#@~TBd6rYuZ%iNs!+)R zTs@J@(Q$V178O6&rDXrOx4l373D2iJwd+$keQF2MUC|p9oHu#ypy2mkUSNzm+oH zD3L78DYJ!D;H=aE*^HWXz~N~kFW^8siUy#d=kJ}KUnd3DRF z{5Pup>jA$#g~a|$1?}&z`~ug{{l-!x4G@3TvI zq-ox0`Ke_yYkqgCsTiAdH8OdH5RUYftX$8IM1 zNovk4cudf6DV7&kKimF`RDLdtU=?`Ca1&kQK2J!efL6JAu8aT(!q^Ow^=&aw6+v?V za2$Sw0d%Foe7YPo8nUP2@`63Ssmrb1-A)9!a-Dqi98duXAm~go=3D`T2eEfSP?)Yb ze4x>(5##>HKLfYwa*)GT5IGK(*2S}1=KDcKT`NT}GzYM_=*R$U8tr!s*|)X4Ahsrp zqWdiY@1KeawtOdeDr30WQUgdae8ESvTS)?VBkS`u&>d%Eh?IfaI{}HLrHts_pH7-! zljRiN=&8=Jn({q8@!T92ozd}P8Hossg1g*Ag)}#bz~rb}?|%7W!O6|VCgERfVRhmPz}|`yzE$diTDKx)}Xpz z3MZ8a!YI*lBy(B$#T6#q5I^gOTc(4!odKT`xbDZUMiDWe9=;Q;&^4;a8g8$c_Kb;Q zbW_*n@x7$vXy#lexv>epX++C>oLKNrmHDDQ4j;QXA$7D$woWA{ns}i&W?c~geo+li z0HiyTg4Eb!vu(i?)=(*$6~;^L=i$ogIm94+3N5ZF^7r{a69?gv5iHxrkov(bn&oYG zcme{-FVT{0yrqaF37gHQ!A~HgzhV2r3(jsMc!2@FunYoWgzWl0>gT;y&L6@u_jy&| za=o$mK2;;VXkALjRo+_aC?SgPAQI#M@DXSLME-*=A25Wvz#xrrZn%%K_Yu`6r+LQk z%JoAri*spB&iwN^2FbM&{a3hbT3oaIqYdsgZL#Jt@|GBQk$62lXz13d_*-P zz4vv_im@Yakb<{sOPZXtqGqvr%RSc?9=Xtc%~Fm;GL-`z2C<&c5THWBP-C)Q^b{QmunJnmfnfH3yhT0vUsV6tP8IA9jy*>b8+s^Rnu0#*W?8SUUQ2i$eW*+{ z9cC;&AWfc}&FeAF{x=flP~;e_+>^Y@P&bX$e2_oc=yT?0M``3+x4+cS6-7R3W-Yj# zE~?hr4J*t?fdJVOQ@q=#%s6BDbl{8KQstNN!oQF_q&!$jw8>6l0-MF#RO835>u zLyQ419=#r7P{od{0*+e?-{aNxJ-~r^gR#uBHk=cu28X>LT5A4ju7?QQ9o+?zP4bjI zrIVzzJ0_N>d&Jo+9^pPrf5BL~QT|k3P1bYnzAc4$Rlk7dJZ+sS=L!}7tYh~gqp;P1 zFU0r8%)oP#+0n#0rc%RIO-FFup2@FPI4|*e&i9+e5bjDJjTeR{KX>0HUHuUqeH=}F zN$(uD9zlr){7Bx?e@5d-RXk|V z#JPO;Lp_Byi9(3`e8+l?>()jn!~M_=54To7c-n&n;Ae(@iDt9e!EvC#8&ion;+5Q> zSiRuR2ewEp+>!ddbKaU$GHs;QRcIYK9evzVe?Y2KJtL@J_+XO01kPF+Ewm zL69Y$QI6#$eA7z8CxfR$3~=;rOX#1Ms77%DNOG1G6c~RyTx4Y36@lt{E89^83N&-6 zccC#EEnL@?qaX`&FM@q^9^OXs{_=^vy;IX}BGfN%44=J*YmySU$VoQP!b)XB|3L$=zj=1l8U^z8BHH|PDS1W^|mj2soFbjpENWNY6v>sB^TxND8x>(q)RsW8P)L=IL(; z(%Y-c_>-!gHIu6Y7$P50R8dt7QwhoJqp;WaDsD1C(K73M*(m|aIa+-$BLpJL`+h&B z=09icJBh21dn)=M;oKPjY#|N9K+Z_gc66ppRCTs?J`V4BN?c#=<-M5O-Xl<>6H%Gx zSGG|ZfyO8I+ShaX$vQYq)D}NAJFWAG@u?ksq?Ch6c+E7QSg8M!&TVHH-4SkCWM<#| zmkZ(=i#TkFg|gq`} z`LTHyr@72T`#Zd`M_o^${zG$H2qR$#a+JL*aH->-c9Stx=U3FJqc54RM82!DGZ5sz_o7bSBtdyW znYQpvf}rbmiO$?fLmhN6cF8GqnyE;s&qH@-4{3O2*UL=O-peFy0-9cK&`?MmP7Fp) zNiPZlbnF=`cF36W$S_}sQgLIGx#J76QcVBY`|`&37>d-}Dnb0uUD_*e5+z0fY;1kc zK@DX;ZaOx)C|3(RmD}aw&Tn1aP+3(>WyzTO`}zEQcYSZYb%B)W6P1)q73R07?RphB zW@tA6r)ERA{AOrioJH&flXovecuz%k=gd*=P);`C$+T3_BC@)HPrG`ckOTuL;ceed z(jQ980Qd)n!&WN1|cM*Y6(LI$G3jPS2z;T!*Q&8o&` zWE%w?QU#63?36M(rZPQF=#C)w25Z$y&-((H5RH*9uIChdPv^JI1C{CDmYT!Sa^_U=lMc^FS9VA{E7(C$Cg}4tYKT66O^9A zQ9d*J0Op)iL2TPt+@TR{r>00fWAelQSOFXuL;ZvNrBrGu}-%pXS?q#X=bf z(ah#sB=*v@(d3MOIbKCAKsX?n0xqk--T4`E*P|MY!O*t!gf^G|b7Zv*^RV8NXjsjX z{nH!%jPJT|8K7elDzf>vG1ozYv5qiDhZPH=84SbCM_@KwFcp%q#lP_cc%cUbuVnD5 zt#*?RqS668fZZN$l3B&ig^X)$u!@6j!iaaJYAWK8)-c$*zp6(>eC&VFJF(+kqs=3H z**_|;@^yY}TZiguF?u(-lCWoyr_V8{dK)hT#~Nb=0Q1U)#sJ9kB^6g8#$!91$<-y0V^}1$f;E_YBar#|T zC8GqAf?!7S*Yk3DMEgl4-R$jL&<&3N48?7U(89#_^xSZOIw;l+!5J>gdRctevX=0kU>tB&7xVBEy)n43xW=rcq4Qtieo;O#^{Ug^=eE79Jv06 z*B(RwJTRKDg%r*LS*w#p=Eph~`bzCJrTP$^8H>!G;~e#}@x8LOoQN6AaaUHVVj7cu4n5V+ za~-R#f9AISc#cQSHh)<9U|ZBOU37QRNSfY(R*XS=%@bBcEF{j7fG~3NSn067vcbnS zxbtf4B6%_AD>Y%5PeqFA1sy{Jh?kVkN;dZRGWMJ^-EPNtlaoT=fw6XqIxayR?#^gS zk>0II;t|%0ihu~vCZW_7*NKx%e{kf46?gdy5G~SVw-rR*P{Zqtk~yLN_-WgZ2F?Kx zy$W7{UCabEOcY;9iUjA<$m2TwX3WFh)rU~OPfyC9Dz69onru3ec+fY5fw6}BvZ162 zrf>h~{yBDIfMMDzRZ`8oo+e5S9*de;?6NhMoT0;!QkD2IrbgshaU~ZU_hj2+cMkJ$ zkLPy^*i4H(iB_;f&C$hML@){x#)*NK{OMNL0N#O8e0O$QcTT+aDuyO6FYt#{cvNzL zd(u@Q>GqTM{f6D}PQ8^h2B|XZeRg((x8=(+HYTEqa%=ZIc{aV%7ldkM`vlAFVMeZm zHmT`PF@FTMZt$8#6Y*~Wz$T%T3zPScJOn6QKTeUsud%w?cV42#Th9nKZj_rHqW&*4 z+B%2upGHH=9)GX;6|OjfZnNl*o#>8n^)reTHjPq~=HTP84dE?Hcu{T5`{SCoG*kL3a?mf!2=_VMxmMZFg57mPYZ9c_4^|b#(o5L20azrK_fdR`aZ-eE zdseUr4w6ElE26STCaWb`nhDQPm!4^sUim|JrI4O}r?CkqBWJTDC&DL}#ER0zAYx2$ zv$gX8bog9=Jcbs#f46?xvA+u1*;(^f(7c6B@kixYwPqPb%l6GaM0b2 z*pboKiZWy_9(1f4!hNJkRM$nAHZ(o1#KZh%O|HZ zpjJ4KM=z@E%sZKe1Mt@kKATZ|_INVGq^uQ(|!{ohCMn01u zv8lIA)r);}jdhF#snAPGc47@&^JWaw*=q8Z!BCFOe^m?uBLy}KIx>{;_WtH*x-X6< z;(dL_hhtLX?qE{4GhdB4mF(#XO~%FZBYI74KX=xLV+qLPdlXxH4U14(dxwyVWKX!9 z<$m~oI`v^02cRUDyd;cv0{?#rTw6faBa%3Z=NUu!4SnLj2AS&4+VR5YqMdWvE|Uc^q=Lr@X^vY$A~eLClt1A9Ve_`TQISW)50Gg24d5n5sydSgc1J5LE~;*a=_B zNy47Liy%1W?6|0-2oWnpANe~5dT(#E9mluez=edd5!SVV$3g+c1tWxph~xFenTUu} z?!5}yycE#(=bRkp^CySsLY4bg8qpRLA{?M5c=-?(b>nZIv+g*i)v zxp%fds!adbXn&J@o}D?jcDKdx1Z8QsY5Xtm(>;LG`E{!=zZH20{Xh@%%lTdXCiOi! znXs9s9ZeK)9X0)*&1VN@BabqMy)?NsDE3TWe5bPh@tt&EzL^dx`=`47`GWdy?^f}_Mu zV5M)|N!HSF%T5YG;NaFh>K2dw23}vli%4eYf6?}tD)#;)$-IgEtlb}`3*E?za)zqp zEYlFq-|prb|N4u_tLpr5t-Y58y|H=P^VlQ(EHAynEH8qeDfnULHRqNI|LGV-~NUmJa+VbM)<$ zS%uOE-(G7`uRnqy?AovqX0E%2VpU!aAFoEpk-FZRDV){ODV})8>BfX{_=$l3o&2W; zXoIDr@Cp-*!YBkJ|B+w~+#~DA0=y-+XUe#L%iju#Rp5+ycrsd<#oNTKMiw=)7YH-2q9c8x zT-A1{&Z-ZjYwounQqMWFB)w&)>We3JB`DUc3*00jP{6C6c9LkI(X{#-J%tXC9pJaM zr~m}Sc@v_U9G+V9(7-g1%>++04|1ojhHHRmW&R43s1NW2#WhH>`q>{SHMq0-ixQ3R zURPr(C2pvG5JA#M%Ek0pEvuQcC+e5z`8_2ApUir+or>Z^{D6r;n_i3l)Qn=)tKYnw z4@2@+e4QdoSU-saD`!27x1n|Ebvyo5k( zRz>i8I5}dV7-%Y5j%M8kozUWK11JR&LqrZM0%QIq8b~XKMYCV!31&2O#%~_5^6?!R z(O^Iyb!bokYtSbo+gs3%1CjsMUak#Y?9KT6@-E<8;#-ngSLHWRaLq0Izy} z<|rOfV?NowRAN)dRsnD5Y3PV26PvyF;d<+RD)ZFbbHUTzzawFk%JF)Sj-N#7hMDIl zIi_@rVVq$0{%uaZe!Q7OdX`)mWXfv|DV`#DPSGYj_VJ8M5x?7u9k}VUvZm|cw|VVH zfrAsAUQ_**JA#R}V(pWv!kMnJ9T78vR*b_90{S;!vs{V{F|%I;SZkZ7Wp^W<)=vha z)8rZg&tHk8UJUq^RDh%n$WP=c#|~#}8C$sX1Bq8nbdKI>c~310Cv|FbsLNDQ$mea% z&fe00ls5IYz#9%Q-+;X!QHPGJlT%x64T(BGr|-ouDvtBcb-Tc0Th>n$s0Klp3x$L@ zV%RIg`oI4H1%Lc+P`d7syN@~>1Jedy5gRW7(T{xv`uT;L@yE{f@&z@T6evzLVIr^B z)PbZ@}Huaw$_(ux?BT(*iWYV`}^`ayaL{MrRX);tU}2o7T>oT;NvXs}1@mFcD>JW-iM z=~_w3bNReB;@Z&ET_?uH;ZNP?ex9?vaLJONGul4Yqq#sl+MS<(OYTBa-se)2HB8)i zDj{9hR2yUBFPN^cPoQr8CE3+Y|H$sCw9A6!9>x=gJLTf-Ah?JD2(Tjn3g0O?uv~1vFCzc5N7+&d zGL1wk#sF!#K1I!jB;^`={bKO0m`Sw}Nf%PO&!@|(Dx%f8DLeACE8WmVSL2<`CsVD7 ztapdQa%1LjxpUyezG%nTY2yApQBJ%G)f_|TJy0XR4*SRFWA4sPYDfo4#{GKj9 zKvj4E;+BCBAj+vmDjWm`(FAOrS2DQR-i8`#Z&Lp|ASPin+Yt-^miO$Tizy(2AJGD_ zBFe_~h0;cz`ZVTyX3!ld?swA>n^*J&f_AyHbuyM>Rm;UB zzP0*AAF~(Kc-=ZfB1i4w3#^ah1oi($O7%eG+yxA#_N^bv*rj#5+wyp8P&Dn)i0U$S zFI1bc+UEt_WKG6U+RDCm%j&2P*2(tbz(+nYhC@_%#j5;*dBf=#nN{2zNtB=O(2(`> z51E@;YK_@dQs{pzz{wN`7#(Gs27b72G6R);_=jZit#Hp$2X)?C+LEJS!^>kxsD?$` zCt0f?KJ3e8@L*zP(jzy~M8eOsQk*}4-NqRED;}jsq;J?dLz_rk?L&0@(~q@&+mow5 zs=3L>Gv$N?{|9*-Z<8Bfxq0R4<78vd;gxqf&G6Fe$D^1YIFSwApY9WL>ZnXjeCr;u zK@%UU!2By8nU_j=r^JjpkMGg0E8b`b{v-Mjo|))x$T7bCgt1T}rlfi~c45Ntntju! zn5hruVybX{`fOX#~ZbQgyV>@c5cdDs{76x|PgQFLy1g<^l0 zc>^TCJV2nf?vlvvfy`R+h=x1_Y<~4ncEK0H(Ju}|D)(E+?smZIDWPfV{|tR z7%;k#W^{LlNK1(bhzO#iHyGUrN=busi8#8Y5wU3L77^q3?)?wWb*^(g&wcLu{(Qbl zR(V;0oznCDlIK=dd6~7Ua{BYvNcj7W zSxwBFB7fq%y}#103#~O*q;up9jP5s_R4prS9X&^(VGz`=Pz*hJohHLCzj?CY zG)-ylS5%(m;y*~}#3fK=y7mAVj26h!W4;CxXd3_puz11=t1KFLb9+x=MiKyBHoH3{ zFGZfBRYn`GKtfLbY#h<#6Q|26m@`mr;mYACL!K~vm)^%X#)~>0{S8lgaCQyAh_wMo z_qGb)+QbScPU@y2(9bVRNH?zuj-F_r5PKxgUnUH|ePJ*2@7*n&`Q}AkMFbV3*K|90 z<>4|d!}Blh@&y=@Z^F+Fq-1a;;s?oT174Q9z5Cx4-*`06P4!vQCgzyRq<0VL@u$!2 z$=(!o)LE%6kA|_nefs7O3^Z}oxuP;iTm9wqzO&fZL~Q-)gKKAB37MRkmDO&Qf816L z9}dI9t;md-1WCXSc&6}_2`qErFQ2C0uH?&*XM4}7f*>_q<$$V<(JbJ0+z?GBjR)%P ze*9O8uIY)(l}%D|j;;0)x&rei-oS{tYk!?K!SRw*0N35~)QH4VeSn6>BZ7jN=spVt z=HqVsYJcH+nkxX`vqS1`?5qNnao04j7?s%J}W4>CtQ){uU z7-Wq|PcpN$zV!4G9ACWcYi83%>}C5Qi3rjBzE%rI9 zP&OSVQZ6bXM}np=r>Cm|#j2&Z{hb0g$RBie{CInReDsWv2Z~mZ1!xc;S%7_HuM40j z>ZbqzH0`z^*N>V%3*58HGtifKxk=VZdH%b%EzIM;#<_(Se?zCz_o(caLSsWR`p6H2 z_g>*9o@@zXB8Qd)^%snD9LXm2Gb$*!bPGIvZk!kRz8@@;6Kss@H4$bj<=Y9(U;&~!AsLhWa1yR z6%+-nv>#g285sR|>k+x|gG$h2^(Xxne1X@;9QL%-;bnAiQz(T`JU4ABnIJH_Dw$m} zV$nzdhWM`l7VpCJsJcg*X{>B-=1v#}KM_M(Z~dlezaTVHGQ{HiAp zbk9Q@fpFSf)I@oiM`GN@~RGnW{s@4z40cY2JgF_P%yJv(UWd)g3Si5#@T6(P;H^{Ap8kxp076!U2DvOw;3<)NZLiZx z$cQisP{h_=e92`%;bd|&0X}{wpXK<;>A7(1X$-8TlkL+di#tJ~#&3(S;=UC5QQS>s znC`wZk((OKx|Q8Nls-B`N=9KRpY5EXtOt8hZ1pU7R|zUVyTp$BUsm!_<^kZ64@(vLzjSFAWbt> zjkshGfRt#yZsNT~YV}(-cK7K!o*N*UodGdqe_gomsYA1IDNZf)902WV>7{dmT>)~^ zpf_X#czyUX-6R=^0IG-QF~-9qvx7*~G7V6sW~x+gVI;#e5f<=0zcCi+6W$u&4A|0s z0zv5mz)BP)f`toQhL71%;%{w(r`} zCipAlk49R{s`b&9iPu1)wCxKElFv#08e(5Qwb72Mo2Rvts$pe$y%?2F8z!fBliSEB zJ(X$6sas$7i`%ny1YcKZJN`&4<^wJ%3+H0&>Wk<(qi1%km9o$5=GEknLp#}nLf7l> zV%#@5UHlpzaw)!&!EBt5=9l8?K3iKbP$;-;kT?RMH(7X~ke=TeL(PgCus)na;Z$va zct3-Nq;7A&WO_lR0&Yy`Qr*;0{PaM?@1052k(7$Lk5+a?e!uegf}Vba3&dJF-P0^; zi(dGW^qCkax~Aqis>JccSPuu)`=PZP3`bf(_d@vq;`}x)E2#RsQ*VXA)aU{Py`8)% z_q?4g-S4*H_(Lc3L+d9~{+joq_Dbh?+0sxhJ7M}E%JIuoczkE3f|ndCx|Y;>$9pWk zx!8HD;t_6XCo1?JjdDfdF|E$?pAzh?PVKe6nhh>dH7zHPYb5d_{fdjY!u&c8-^x+R zEl$jjSjIU652rxXc15b%>2&~P%qVFVfRKh?=+!HfjxupPp&X!;&E>qBU^Pakm#3*5 zf!L{*E!Dx4?;#qi%+#eDDgbaq9b*=o61|dHBYlpfarv>bg0wrAU{5emjL8V}e4=mu z%LwwBYLG^NGfR?~97IzFZ1nYFM0QL~qgEuCHp6cz*7rU7`}ymqrQS}%$6tz{N?zPP z4L-TxNdAz%R;S}~S8~z3F#LXyw)5j>WlM+Y^A;&tB$$Jh=AATukl~oZw*-Xc&TTb5 zm~QwW=bIh=!Ti^>8)^JpxrdQ;gAD`W1;__=BT7D z$jQGOg+@V1@IWk$|6$@u>Wl+NRa1^UvFFvc z!gh)40LC-TMVy;8yTo`_Km)vBJep+l93+6?ineCfy3yjrD}Vp&t=Ds_^4v?rQ!9Q- z6&&cehX+7Ypb-Rktq+C*K&Y>2mREi`B_5<0hPVxwd5RF)p8d|CL`J(a(CBZ1M~?_ zXzyXE-jy^@9_l6qbMI1j``;Z~;51E=OWjG-K zDdc)OhXz=pIj(3}$*`l@7-g`Z9%C5~bl8wSZPNTrfmr7n1AV(e92q1?$$ETfg2ZiJ9#3~OQ~ zSaa)fRZ%SH>fY>fxD?ZZzNDz}l?Xz-byi#xCf}G$9H;gs@4$ z_ef1XN}Uh1p37W3HwJJR*;)huz^UOQVkl={y=~d*AOr0tZOug4oj{wxNfNAqv<@vJ z)v9GHl}D{?^ z!A{JhU{P&Ob;53OSvYsXJfd==)8aJI*Z+#8CsR6Q57YRdnE;j{?tcxDweFs!K}tcIyB{{> zB?F}c{9KSTJ78DB33o|-|CA*C?XrY9TAsxfnnmR~C= zA(C{L%d~2LwPa;<*Z#Kbd^{qCnB0NrURTt5S>G!PqVb+SRaxAR1+{nv!>p_`he<*| zl2|WU(co5fSHcEenj1c;Okjd#zDVX^?djYQG=#me%!GScFE-e z4e!6&1fzl4d6D&1<@Fol%53o3O?>}9DBe?)2txh+Nz?v>9aL6Yc+n@xgmYGoiK>&? zf74SkpQrUg-2>~1DOL;9y|lQGT6R!hHt%Z_@*10WpPR7GFk%W2(+yx4Xl@yzjj-4( z(77+Cv3q^|+Hm;98lO$=DZYISF*`D!Cf(XK`%(R6fZczSS9Cy+3tD(chUk(szc=>OFFKQmoJzr#*}kS-UKd8iK?M1nSdb( zp)0{g_Vx{N+1aw;7Jk7|Y0tf1J(Om$QSUrr9IHPJbH@cvy$ydQ^6p-=mfi*p+eA7ioOV;{-KHIOf zG$jI>Ygp{hcd&ehEJuO%J2{JD_r@)U1%aerByQHsfsc9E6vT|cr!MOxG`W{~AkhhT zDIRSxo|K+6v9q9fHb8J|z~c1icnr(Tad6kY`0NFr+%35c?c(5O)nXZ_Whgxrg;Q?w$Rqr zeUQ%PHcpE_-Ns(A@n%@c19+sAX}#l_~*98gcnx)!gy}uCS)G>lkV6S{drsSheWEq)Tbo< z?DTHX-9-(SdS6twZ;PnHP)8!SeEwh>sMVt1uiF@#|GW8Wtznd>?G18R!t%7h*!f({ zFT#8vep;8XX25#=PH( zhbhmA#XgoZPbu^WVILNgt*VY?vFz(ih*Wb^3h=IZTy66Z>7jW!0?og9X2lucV$9Yu z^pR=a-Wa9e@4C|O$qa7?hTpwg>UbiL^rMW~Ag9#(tgCUM?Dm<2>=c4@bVcJx?yec| z1snLlEi}dRbr+}W;E3K8v2t946|3iI@qFsOGN%}mwHvVx*^3TK=^7Y5;)tCXMEXh5 z(|$9#SIf7aeCh-~CKK%^3sKETkj*V`9@Xd&olDNP3z&PY?i4UmcYT^Ws5$4IA^)ty zTHNCLm(I#>l&n+xl-wtN6Q3DbeFe_=>0p(;o~f ziGI%U-|zLZThbzJkKJt@Gvgu-9>b0&RsUA{G){js_OI#9*KxI}+3>?@m&CmHrE3N} zpQ+as;^caa-436kpov=j^;v}gK&7EI9P2e%tL(%uN0k<0s*xCVdPzAqgm|*!tp=G) z>_6CC13<1TuxCmXYb7FRxYqg&;28k8_wei)&9l*Y#1VHioSR2{KVmypw9jff&C&~e z-@E#?@V3TcRP@p#CS1g~y9#?r$3HnQllf z;J;XnJ2R({D>?uS47w62G0Fn>71;4awYMpNX8>mjKm)oUitXp8d35pXHT<+V*OZvD0+D>Amx%c9`G&!jA3=Q&#b%v zm3s`tiEU`lhlO6bWY1sPNi!PgM(XGkSs{OoGfKBtPA#;t`sO&!RW5D@+lbvZovC{f za24@)C;4tigI{%ln7CPF*$cfL=l6orWERa<^(uXRg~M+vY;GJL%gem`@)C`Ye4m#0 z_OQYN#r`t%iZb`w;ol$Xmortr{}Yn><^KA= z+-BMc%Tay+PE5rKXQzUb5Q46?Q=#_8V4&0uB@oCnpg!e^i9CeEx`uh{5JsU;zxr^|jB%H{renl1RrjUzFf? zKmBLfxFdXN#o$Q;K%0<`y-&5UG~nE5(t}}csoJD|RwdDkj?*1nLfdv*0X^H295s1d zvA+bweq^fwl0G?@`rPlT{5Rk0R?+9y4>I01ZrWB?{u21r-rQzcaL-t@_r6tkci88q z<2Uoq@-#jjg#Oc*Sr$Gw3E%uQj`$pU7<oTV(TmWQDH@?$~6TQ zK)v8L+`IaW9^GIVga_Iwh9T~@)Q1rP7=SXZTmgW7NOu4g2oh(pk8v# z0zeh2DZPxqFhs6%564SalXe}$7wAp)rm-5We+)}*0?m@vLkHxn2|38xw@3aOF+3E4 zWhKuX?f zB3Nx`x8*f6+d>f8JTvV^PfwXOuTq7^lMI_1UG0)w8XUBh&KlFs$l=2iAo)Hsfg4oX zG7_)NnVc=qdt|Ph6<9(-DwN=8^J)BBKz#LaT@WdlH52frJY8iC^HV1eq6Nokt7AaM z0Exl~YYC_n!-Rum`23ZMJsgysXILc5sE_e1sLh!r8Y7np_NNScP#EH%NIm%I{$2k5 z&V*4Vuit@cBkj%Xoh-eS&Tn%BrY6l;BX;ul_C2?KYdcsMH`YCW-ZB{iUJA%=-EF4~ zYxn_rL-s*=CL%I~!4K2i+Pm{50x+%bxic5Xw8sP5(a5gNnZMRBDh2JukfLS~d?XRn zNebNh^#BzUi85q17k~^oQb+=%Xg&g1up2oRCu+(y@FL8Uj`)Rs=*bv@GV*?U40U-h zm=6Pq9+AAJF606T{bIN)i+CKGAZhw19%?HTBmTLKlT#bts3%^OdAKZ8OWbd0>QjLjY>U)@y(h|>v zm&A=sTgsKT?QAWj9d|#{FkZ^uHx`i3%5-Ae%=U2cEa{M9r4C#q7fKO!5!6PSu=9yE zU=HMh>)7?{N{UzGYZ-uA(rEg1I-Gqi8`G!I#o|fMWkF-L`PX!g>QG;5US5P2cKG@o znkXx?0-2t!C>6eeNN~$gt>_mqy6d_TlzsJZ%rZ&I>^m%2IH9OXs*1+(Zhf;Lma4dY z;H4sNKf#K!elK_6GZDUon{XSUT7TtA?*x_klxUOYu3ujzu8_#IbO9!1b+;&@Nu*7x zr|foRr7@q9`MJsq%oKDzR(C`CyhBboeooZZ9uUq%lp~M)IuW~Z zn|GE;q5ey5UR}M>MG|g2P4$)~xtwsDl1>T7Q%2fdu>=Kx6Lf9(fwo5}gU7p1`!wT) z_O)kvwo2_x6l=jpm#gI#kE%c}=7lx|6*kv15;z(FOF`N7;Yvhnz!Uy0v?rSXnIf*1 zg+2-IHen!DpA)EnM)I-fbuX6^0!vqZ2Nb!HoK=#uM=0etH`7qT>EhThx*|xBv%BW~k&!ovBVA-L? z=tG|Hf9lO2G?!cbo#piXw6_MOc#Ydhr4#X!X1D)*j7-K|GmwN@P#o@^-yaPsC@9!| zwe`8_U9hsCM|anth7r~Nh@w}iW^i7|gT^rPqF+ZE$~PHZzE%`t7p$fFtd@*btc}I& zVkpC~+Okac1!6VJ(Khsd_@@9U1Sg7PWahwqijiB`ji9MrD zyf%w(>O_-KkzPmj8;)dU+(TuxD&lwRrKcz`bLFUbiY#h&M?Z@6N9goC!gLWF-WiJ# z%bX>_r9UZfCr2wj>W-Fzn>S{O!ZZ5SZUybXn5!#?H8EMzWhJq5W|P$y$rs}!yNYh5 z!=PDPV%-N(Jc`Vf>n2q8IfHLf#e!MHFz03NEPn5cnNrC&X zR}3qva}(W;$%E~fL8ffM5_04%w0MxvnJuMNr1l19(wI@)V5j&NPpe-T!vi(k;AiL= z6&X7he+VyHXp;`?n>*zL4Q@zZNh9|?hF%i^a8kP2Cz#(uWC6Zp3}`efm2S5aGzd}~ zQLNvThZdrwb&bLzA(+QZQm3Q<1{23OS848%5Cjlio5i63z@NR)|1BCGkyNYjDu_hi zwG7R=3$P|8HAQn+owa^!;gEXV)bt^LKT6%9p{OiDbv>^t%jxYQ2}a?vMU+MvIVFAR zN$GSe2gJ(G!$U42C%7QpQht`QDP3&+`keU6YNyyi5TLuY`BC%RXplZYWAwh(+I4pu5EotfRn&oMWUOZka{= zPSG(`)2=tf9Q6WzPU@HHm- zkpZ^JQklPn{^d-FUp>)xbN3VsfJ#T>-`hd|QT%;=_)S9GJ=qM~pB8Jl}eeFqNS8n3UGvUWYd3cT3 zYa4^6yJ*0S7;K0RBE^dCQ}l0AXk4Lvt}*wVD0VxgVUU+TpIZik%HXfqChkm^Oi}jO zFKYKyaXylgoNbLGQO6o%IUQg)7aKHqiY4oV)YXeOqe%~VI)!)GydJy}QK5w%ZHuc}0HFPDD z3o1Xt(aHL@GLj9_W~oI8Co3bW7$f^3hRi!NYw_i8A7qzYrf<8F`Glj# zpduKVm}Kr)ln|{el<6h9%YAO*D>pCsvLq|-6B>lZ16ENA3Fm)_(hUlQ;G{`pdOQyr=1)egpP@nW}gDss+v$aV=N$Sc*ZR^_Ix44n5rAx6|7=aM#cg` zYYh`JJ~V0K#_BJ*=X(nY6Yc5<(&)beJ&Es2a?uzvx-N}4z}BG22LMdt!9E6On-n$T zwi*2J3@SOuMhh8c;$iFy;)ewq%`5)9hBV}&POY6+hV3z8Y zfwZFowfVPM^3Ssk6@tntoPM{9x>Il=*tW~GJk{LJ&${ZNjjfDhGFb*6yFr{;M&9=4 zx++rjyUiIjjOlCDiDS+r`st9R2DDE=q9F;>W|5V#Tplob3%;zyvxZa5C9{;JwNFda zsMI%qtdD*QhB6acDse1wP&iYwYZRc;^!~Y+TpbriH)1v5*Vi-R&&A9;PKl!10Q}PJ zb9*_xukBzUmZ0`6GuF3P(TCaa%vauJc$&5QJVw_lyCgOmug0XO9bW%u6x$e5#>@7} z^3;t!pJ$b=0>;*b{XDOz`K@eYBtpb_UbTbOQ=IWTw$7<1?v5Tlnn~NSE4Q96N!?}7 z^Xr=$vmeeHJtP48Fzv13A=;dh z3r5*AvoJKELxeITfRYK%Ptlq7=4 zqiUx2_1VS9!$fTC0aDixT>2x@Fm5#@C4o>OBy^zb!K9_fP?pHVxflXMCm&i!tPhZ& zJSz#9&R!YX2U;8X$ba!W?1$cSDJr3sI#!P}bz8=*O@6jtto9qBvP}PN13RRrQDi=( z=z#LX))`OSlUI{+)Ct;j2k_NIV%(e|yIg8}Ku=2;ZauvrJC%#6*96-5~M0eYe zRY+7yw~D`1I_cdI7gZ9`8*~+gS2I9C;~Q7Wg$}C?k0b)jv4BN?I$3u_3qxhZn8R8@ z9Ys}-AA6}>rq6<@p)53#ixi)bm`}{&N*Wt3OpCe&Zi+$sb5U^2=WfqrPLObmC)9xF zLciz_1}|_{7W0tJa9y~oe;J*5@xJR3(z#64&9o@@Fx1RvDgU7b;u_Ms7DYPFvsw51 zkV2=J*|HpHO^sqKE!=t&Q>XR8eYf78>Eihd#^FY*XY;W2cVE`SY`zSK95#+*ka_AZ zSW4=ozGRYP4SB`MyZ?=HGesdem~&4|g`B&0Ei$n;*uFVL$x=CJr%A%g%|GLj%gG(; z%33$rT2K6ra{R$i#N`|4HJVjqA>1OsIuHQ#4`U!byU+9x|G|H0=G$L=(Ol~6`W07V z5SxJ;T-{|f34V9il73IRU1TW39gLOQ01)K~_Fg1w05RHu_@*o|^;BmqI(m%@ln;PU zrNGdU4f_rp3$VBgK88NofP(8>0TQGeNfSWqYV-f_k@WDz*{tX;_UIA-ydn;^T?e8Q z6Zfl1sxvn>nTQln%laM(`frI=Og9yv9{SH!!spgL*Sd#azPTYaW`_+PsGgA{R-O+S zer!{}lDEBDDsvFGz*2208#JOPp(S=3L{8YsA)A`_Z3}@ zjr$M3VQ(qgbXzaEI$}#Bx@K#U9|rd{-?+AFe_Jx*cj*l7xa~LZ_xy&N|Ba1XChYI= z*&WPqL%1WsEX`fMfdYh|L~wz@AR&p)EevUHg4^q0@-MYEj$I@C(vi!;l?w5-j$`Lwa1O=-+xGuS-krw`Nu`a@JDZ>-ocxDeGAyp(SU>JPwzVAl^r~K ze9rPNu(NOFL8xNk*O+dmGs8}Ms@Gbb37At9pm=cc1E1_E^t$l+l`2K#MoTrpA4?>2 z9I4w_dML}XqKxG&dna?7xOsFMB6W7{eQi@b>iHhYGt8VD@ zebu53P2$On8ukRjKwlr(C4B4&A&9N*=@!wdabS%r+)JqJRC}?fqw(YaJkddKd&l^5 z=XVZnll%V_FreU{2^0y4kxv-)OHK@Ox1(!*@bTL5UFrlYWpUaomev0FZI&yEWO?XU zvuyF@PYJc(MH(u{>gootnV%-Ftf<`uyAPiLq}Z+SB@~8F1${Qzkm_CgLb^|^uy(p| zm2H8ncubk?cWyw6{7_$gci;Q^dy#=_*za(9>x7r~6E!`&0kQju=o!e7*iOO`S5SJz zw7v}s0Eh#V56^K?4Y!p0!CcjwYzfh>6v1GTS{Z?=6a8RUfCG=H7r~SOC@so0&?%Wr zIv;$JuSutzqYN)~nYQA4<<-{tTQIJvlRas0>t2KKx6WUdIS>WvGyg) z6qVmkyPaG90S_8_VC9-GR2^Ls#FU6+x63@gH?c$888I=%$p7?+ePZ<1&dSyc2Kj)* z-#_^E9`C)N`%m z**jBx=ZZuOBpIf1FK&Q2Hh%gNAc!~H9zn!I3&bH3MF!X`S<0h$eYO%ZT7FRHPN)Zx zh9^{L)c}5JF`@pQ!8YF>!9<%c<5^bP}L= z+w>_9G~i0!j|M2CyF_XGuS)UKP7?95&$6XOAt<1MQ40Z(Tlk5g0Ujct2q2LhW5xrY z*<(Ecn3S$C3Sa`)Qrsf>g&_kW+I)q&ZDQa6k2X*WKoDLyJis5<^$Y-1$STWY3eh4( zd}P%CT7OB@__1nWvhyV3dhOc4!~0G}Dem=1UuTl%pZnH~Fv%Z<(L31<+uEN0!P0%we+gVB9cDkiQ5sT88CH}VJU?NqZ6-4LFkfzY+QP_7t5#GB zUa(rdG}-$amENdL+dQw7Nbr+}!~u}nEdWTT^OLp!HFb&JVJ({$|B*>AznU=0x`Y;c zHMX2nm2~lOJE1vEtof}nvyCC{r?A#hFWuaqNNDCbLgz@dC ze-*Ts<xb=&7Eca9zUV-YAPcX8y9#JM_wumPzMot z>#vT7HtHuBSQ1_<02N{iNEWE$vME{kBWo)?o>O-V>|{ynlULO0GH^3ma_>|jfuWyc zm&fhfrZVQ0ai@Jqzu{{|A?1e^6~lCeg@%%^8Os&{2#qH>0Pqu)gwbb&@qQ5b3_P2S zDCR2Ja3EgebQ)2ZVXUBV#C=r} z7$xpH#7EvDdEdw{>-Cm+ppwQVJsLM0q|3~iX$CD({DUZ=AR^e_RUOR>=y{88#RA3v zm`0Q27#~q?DLaCqOrA#s;+&R{1S`iCPXM;-Kx2dkoh$Ir)v7HWWXBXQ+{A5fdbwzyYD@YSrT9$#MqfY zs(&{H7kP}c$rx>T8j%t%=l52LL?(WJbAwde!s-qIImU;zwq?r_-xa8`d`d@&CLW ziLG283f;~1ELwSN`Pl*YI1L`m0HM1cVTA+$uyscXe#t-zIN`Zx5gs;ce@%q8APj%C zP^^yMoCMT}n~zPc@{Io&P)rO+)={-Rb`xurh)WS2XLb|i^W_uG=(gTZzYeensiFe~ z$dmu7OMWThuan-t&{^(;mf7CPSt~xQ%8__p%htFVI z)`CTYxHf@F=0-iYkQJz`2|-(ls_G;bagOzTSMO8E*R`sRIkn02fgA~yf6zSg7~riLv;6Wze6G4^gqj#)bS)8(s}kf{Wqkg21AaAT z*n29iSxw?rPKEWUP>fye+qKlJkQO~8r9fsX5TXC@PMmMCO?tBR?Y5;%(=BOpl9=~X zd2CZ2+EIyysfmDv!Dyk@ej{{O?rhR^U5CO{l78r8;+E3m zu2VmjgSuUj5=LP(z#3hs;}* zCt<2g9V#7g6s&FWFbxQx^7b0Q3RW5+eXm6)gSHdw&)f~f)1Xy;bfvWu`~tVcN&AjG zZtAf&KfHsTGjEPJI%<-jSAIjDT8)0gLsGhNCu52duwt>==OlMWUJ>`^_xA#zI2I70 zlq)1dXA|b>5K{_uE$O3ELs6O@xmIP_`@xYC;hv|i_ck0Ssr{S|jo3`jnDEcktPIOSnBg7)VTMg8uz4UG2*)gVQtMrB=}(D&=i?hE7Me6-%c zvTf_lcn41h$wiHg(kJANH6VvwPv2XrYqC_}2Dm_9xm*GIbu|XUw6MgFM7Eb?&6eK^ z9a^oX6cA5#KS`YYv(llJ;;Hm7rX*JKtITMRmhp?ZpeBtW>6rSKag4e_gR7_s59OHY zAg*v6YI?p$BsHf?V5lQ@^~|PnZ&3tJ`Y_G#wIv~ICy<&L{gRP#<58_7O^RB6V`iGl zJa!bo&~HHMs!Nn<3Uy5)jY;Expcgm4*d@NEEYo~nZ=N)U)uXYt8%t&o<5ZUYEO}<0 ztk#3)Sw7^1+JSfgP^ z>&6UjVF2g}^C%NB-Z{HujAE?_09Zgemg@RXB=odp_`#qxfDXj!*#C;h6(ECW61pTX zRMYg)v2Ljfy-77&X)PO}2?eZC5RN0)yBfGnBRB$#R?&&(U?>4t+!FEtW`D4D22|;E zkf9QW_lSQ@LZkNj;IK9+Sz!QwGJ!dKeNTF7h->T#SM*Ns8UpNH4yV!`-sEtfNR)>C zQ6VSU7LKc@x-F;6FXS&m)GF!ues!B6*8uXuIq-f!GM%SCOdR`Lj$ZnzCAcPVMJ$BP zq4H_<@rwH+jvC=fNT8*wxUUMmqVhg@sBml`@na`29Rx1Lgt)ALEFRL=@@~crc_(<) zk{p*w1ZnmJ$TYKG!*b51Qf5Vvi9UeVOHiCjXxdzFk1?>l-u! z7j%(5UY@&u%Vc^Y3{qmhVGB^6nwVs8A}-i=TSj8w_eFg`!zA2mZf^aDAjUZ>-9}!E z27@vaaT?*{~R9=h`E zRnaI*isDASR0{Y9gq9)v*6r^XRAV>uPgfy4^ zj&-ask8R8O5nW0bU%+CiZsj(no;Z1+1rxOQ@cMmScqUKuQASo61TG2y=hX0JYc!o* z!k+V(5G?C!bgF`I`y#X} z?=D|vJaAc-if$OBILG>jDC}VWi%z)qAhGtQ=YDh?B&B=p5I^;z*1oASh}Z9_CzW+c z;Nl#Ns+QhHqD-cAHMRN!+kSe2o}-*l9+sH7KsrH3s5Y&p5-(TFus!rDB&ngQk`$ch zS(n?F3+{P&Q>3;LnI@R(c<|@vtGq}1J^R=2(~DR+>SqrZ`dpUf6`m{z$dCq|m?KWZ{Cp!JEVH@4{NXIe6a6*kntTzBL? zdqH~sV`Yi(vAjEGQz*^xeUXjA%=jxlFT*Lsyop|fuhv0|vFRLpE14pt1x2TWy)rq1 zOBweAOS2K3=4%Zpcyn;0k-dS1Y7T|2%AC+m(tI-iAumK)AIJAX=&IrMhOWQYo7fH1JxhtlsQC8PI2KW1A`F$Y zr=&$3a(+W_@KCya_C?$aqhP@3F^deGrowYJaWJSN31!&rj9B00)-B4?USx9fknb<| zc2$GSo5Jo|?*VdfJO`*E#PH~pi|0E6tx1Hk1V9nYZqej= z<|@ft5^DKWLBbs*bVow7xO4`#vnp#OjkzEHr02P=NUU@}MW4fu6JUDqqpkPI}b)k8+qJ&=sxVM(i&PnEXSW4-{{RjKKYO#Wym5LI&#HiV=_Ztjq+js5i4{>EtB`EyRCs?T)c4>`QytbTud2%N#He-YY`{ zB*)t$HzIF;U6e2h5FDP|NO0c0ofo5RAW6MTaplN!4pcM=lZH!v&hOCVZnbg%i`*6L z?A(;;R_c=bt`;YoUUGWPETy+jLwP6bMPm1C!Mh_HS;LSN8qLSD`_W_0$52_h_USJq zGBicsS_xXgra;7F=jtiHkynksNdGEM5kFf(cvdis+2ho*kAD(+5>V$}2SsvG4>AcB z#C!_g|4Y)Ngd}J2`1BO8R>xBHvf2vQ$q%`qnKYtaaCG)fU?uui%-U>ugZ*xu#cBJ7 zvs}tUKyHY+o47YKXG%+nO(Ju|#F$2gJmni?CF;LHHcb8d4;eA{thJ=%l4eW9S;iR~ zt8j!Lu4wgdvv9~iQleN*H|p<~yga1O26*oOJcJWLzyM)E1`4{ld5S_yU;*NN0EFgS z)4OI<_%Cg+q)Dh6AScgMt1=J&V=F|TWag8#Sg60v@DhEe$(N%A1_EigOOO4fQdKWR zqpk8j{rV~VvLA0DWY0iC+6)FL1lT2kI-5p3b>38JD;>^kEKZ{fz-V!x84X|IK^YG)dwvXXm!a;*Q|;k-$*E&Tyn>8GW0stA z(CF+HksV6=Ts`4g%nxmdNbGx*jS%8#_iS3op{*lVFcIYY|Cl-ts3w9oTyF|3w9tF+ zy(8VwLzUh{rAwEpbV3Nyk*YKyRO!+?5_<25G?k{(R1j2}dh`GHKlj|^B$+ciyPNFE z&d$E`eDCLXmSLR29BrS8=xT%0I=K=S_B(C?lGO75Qc)a!SV4M6R&-2Qu&~F~6$;>l zwQ-Cs4njc&rk4O8f_aTl0Y|L^Liu!ErS?xa5ZB8)Fb5=yHr7}@tJ#7L?yDr)&87)^ zIOoR-OF(d^T>heN&qQlk0}e$!oH5l3v-yz>qo<-zE5_Yxkf$O<=X$&HKU&WS;Gfz?Q!@N*nBa*8o**lbmolVor&bB7X!PHHX$g~~a zqGe$|v(l=j?z)#o`>aiOdxJI~nyxgE)fFxO43E7pU_}rr_Rg5kAxg>pYc`m_dQz>3 z^VL`HxSl&n5+IcWu$T(MlG~{g^%|`ZS=~M?S^(&K92cWnZRj8x9gGqh)Zgki_@KMjJA9$V)soCA``0{%(2S+{*0`9NE86==yKe>H8g8^n-6KtM%*7*L`)f0H5D(fuqCnD!nO~Bf*cH*P+oT}n&I%EP4_{~9pAplT}01@N1+>n+>>LSIy9!Snyc(W4CsYQr` z;)m>jSE_$IK$QN29R<*%aXR<_X;ugpcucWmFEbkQ7J$r$WxnV}Zf&sxz#c1vkwT3q zV^65uu!zfQHH*9lCX;~c%`tx(x~SBk>po!mQZ^{VG@mZCg?RK$2K5e)XCk;Dw@o zM5s zYQ{5IK4LJjsn`@})xnPo(LWwCs99hYi@%n5$Lx^Hd&yI$7tEHn-f2^9l3L1VWt7xp zA*5@hktJgjcqb`SnU{%8sPzJb95l+%osZ0PJ_#FJJ59?Hj9~@C?gLz&JWGX@8KvF> zB&I)jW7kQmun^&o-Xozhu8z&;KBD_2bcx?TBrkL;>YC>;yPhdMGgCqiRaWpJeIyfU z(#b%(SuR}EHi?Cxf4n5-#vEh7UIo}HoOno%3u%$7;#zY%Q94o#qp&{ax~ZNw|2Nfw zGmili@w{^ChJUO*^KDo9cn&G23KgHrqTD?j;oWH`>9=3Z9`hlOWPIv8%IkIFQ&8nH z1@|XZVzR)Uvt^+a$fKBn1V0t^@AJfc9F)|y0$LrilkJbP(t zHoa>#Zx2zBNqA_pSsNPgwi1}?Uj4NZY1{g6e~-rPi~H(5YDZ6fVYpo9FO~vlKa5t* z-4)L1S|fim`EQFX0t~)YgTpe%{7q#nLBCmyI)oBpq6_xy^coz6E53)!vM*fRj?XW< zg%!P0lcr=b;BpLqWfO%e9S?Z^gRoNXCbw4-FV$(hdx#wQ$UNB=RI{Mfa~ymm>b9mp z(H6$-s+!wZ{ro3wYKy%q-I$>=`daentllE{roVgE)B(bVbWy3CdchZhvLOZY`bAPT zU8-knGruakG6sUhza~?$pq8m2&w^=F025eD70_6Wc2HyMGQO>Kazht1ASL<9w!0N__e$Z=%bKO#G{wXM0$86FKQTrwWPy|9F6Jl)S5@QNGHmxP z&{%2s;{@^Tmo9v4+sFFTx4yNl*b_ycsF5K3HB3t*7|_|R4(cQ}=j>T0(Y^q+x=Bqg zK+p^T%(R;0AHvKMXml8Y=i49c6W?-xZm}z`(b_^DsXdONIcf0FV{vt}G6=y2K2@Bl zZ08t~m?CMW2${MPIpTginw%cH;}6@s=GCGopGXH(bti;`?QISw_ykuzFfai(5fRkR ztM1!tB0()wixUnkVV&b7T;%+5Lgqc~T}4DWL^Sa87u#Y^9@Gbh0SD#1^3y(9Z(lMR z``LAX0>tykRr^kRnx~b6dO6~LxCo4_4E@A(^(5j>Z_hOrliIVMPI_zJ6mfqFIC#{g z$nHGd_>5}@H@5BB{2$?V%tcvmXcKUiji8(^M=f1kiIy#gXJzcG@XlZHVHq>>xz)gc zw(L)XwQ_BmGjwnAj7^HfKzc{rkV=owz+ah{=fVrR5o54{;6SSLu&(-k?#xMV#2>fM zY5nufS90p_87^<}gv_eie1*k$Bwn5-GG4#g$H>fQR4@xRjc1?~AWh?qMI=PDTx73I z`KUxh|iZr^ql-RG=E1-s6ClgTuL9y#M@Y0b6Nw(Nqn z5-*oRv(d%;$izg{Bf@<=q-Yukx5j6!ewyx$0!UGv6X*m%Fg`^BoEwz;?zQ4+lIII@ zX5BO(vX#>z?!pbv(qYc;b17`WkTINAMFl{sY-CLEj8HBGX)CR%xT@3hS{0+J zopi;z@UHT31;#vz#^}Ux7edKS(sUaX9+yEr!C%urCN%g7Oz^%S=LHov2p~Z=lTxRWcQ9Ro0e2dw~r9r!`>05DFT?95ME6;1(KCqX$9663>%3^6!MPQQS7UgHFO znrc7Z6o3cR2mnh6`(e9A zA~VDpg96}*;H-3KCOGz1rKvq6#6L)ZZ813}u|}e$7}!%5^*bP?07~ zk-)^tfYF`+=Yj&l6_Qi1_?((H^59$mRK%?@{FlW-^v?bz)r(8 z=ASkDVF(mV=WHwpB=L4b6sSW=z?~3_8QcMd|B0=%jse)mT z*bzHP&2j=FFBxd=%MEMuZSzq>&8U@D+lI~Q7HzcxrRmU8IXPCarn<#&heFPxg&t?i zBvHOXqv57=P9_y?bJJ`zdxhSk1Vk&zcmNUi8OBeCfEXYQaeLYbfO45gFM{K3-Vymd zUP5R>6_l6KnWjAeW*|xedqcb$u8A;$cADX#K+KjE0Pvs@0)6w8#``I$e!OT0W)$8U zlvbX&@v`fsP|ktiZC=AggJ>bmA$c*fjOLK4Q;V^;DK=*pv{`2ZG6c-{!aNkeX{mgN4BFvJ4|NI~EN03e1w;dp(p zE^8X|VtkMQ=>Py)7^DFTpo{Ut%is(#A#~|}7*G|fh6!U#7(L2UuaTRV+$oNgak~$9 z^a`9%)cjDDjfDSveWqZhH}uLRc7pClr{PN3$F zTXJnCCHhLJ6CkLvBMjmokdp?Ggc9brO93Ckd2ax~Yk*e}cX{*;CdNshgcd_QX?C0G zIjifgie{ma%ny3~KH5b8+PJn2WpbmM%=d@>_aT=YD~vU33S;|)>D4^RFx}F7rZk!2 zHFrCcf#0Nvn3oE367UN?t}~Hp5G|_Yg=8)-2$2!PjC%?m9#4Gx-f>4LNw4v{V3W~` ztdUlrI2|}xhDDnDq*^kQHxs#$(|A^4Q%H45#bXj0Uus|tU^qi6F;)6;biE{unov%; zRRvm7Gkc;lO}IP^753BNr7RS#;i3>2FZm9#uMTklY~5*4fF=~KXEibc0JkxK5&&?c z4WBX?e57cO#d=mCXO&3@D@WXJ>E}y3le$aT9}#$T@MuaOUjN)`>>#YQdBb&iK!}@W*pPP!-atg92nB2s{BH4{_^7UT@+|Q3e*XB z>oSC&tV=i5B{jf$TS0$G%idT%)j@>UOt&_A^)UUwxuV^ub*x*cmsvNNm>5W6#1JE( zNPr;3#+>s`9B?NU!3e?u&~)S{ggJp|Ka^3^0?Qt=&oB=>Pe%S{7PAD0h`rE90UV&e z<@j}D_W{C2FH)2Wq)`okX5YaYV@`CHs=}8L4X}jh>Zm>rv|NHT?<{GVM@j1TQpI*( z+c7WpSm@b?Jfq1mM*;eCP zl_UVr#7I)}>m!H-E#r`m0H6=$#X|f$H6ky;#b>= z{6cvfkx-v-LY(*0Edbn4If~!{oqJ=pEDz^hH}`VTY@@Nft?^aik4|ZGGryR`B$^22 z_9j<|&7OZC=YA<<#Jbw-8+tvq%9#f!OY*o_s`IAi-!raDIucZ3${953}^LT zfR3tG&sI_kT}Jf-T3WODWu3Nu*R~>$HZR<8yxj0I{PAR}emk;cgF#J56up9|iNFCmk4F`@M1kVoZ6*U#qD)(S1FU$>6R=38cUlYcuF z{4DBOCa=QFtsh8iJPBXQf-fXu-2n)r6!`lRL{g+q0Rv6fwQh7IWB@~Q70)|4&~RqX zDs=otPMm|~38xm+#DHXE%0ikFWJ2f4DULqj|7ij*#}d?;G_sQbNeB5grA@wHzZ|<% zi3#0(6gr{y_ps~R4;Tb17CUS-yztM|rttCEzem&hcZd3W-}ZV83a0)3Za-67g}RN9 zz+bm-An1P77C`#vk}MiPz%T5zzu{dA0ThvD-d{ksG>4P0*0u_eFCgUvb1@=;2-S}O z0EbdBf?@&kU)Q}rtOj2tr5_wv_7O%A4wc|%GP`{M8a>QSV}dF`KedMx#P@Uf`17`T z$e%wP=&|Ep$$afJ4?C>A=Z-}F^0_72a{TV8i~8-|x%udVmFJoqGwkHm=}joY_6%LV z=r--EDVBf%aFRWHw2&YGRor0{`Mev{JHwTqbj)Mx(K{6U#Nhqnh)365j`Mrk^dk-L z25P&N=|^vu4Ey_K-7~Hv?S1MHtXQwwkw-SUCTgWd|GTVcDPF9~@^KImbfS=&t~Ghj$_8Ws5TFlJqtuiH7@q=H4iW6cPNUH%_Yg)xumdQ; zu>c4BP@%#B4vd5jz@{?E7J#IQbpY9!GggD>jZomu8X*9J+~Rvh@`G%lkJHO4^|gBl z7}R-uZI!4z8|J>z=zU)FO)oX8{jiN9(CUMMS^lng&*4#ykp8!<^kwnXA%D?vUpvo3 z?CZP6Td$2 z3UJKTF`Jx05t*($1_<*ioJn@EB2WN{tFFATo~ zH~&sK4ZZ)O{&;xiMH!KFho~1>H%I(9D?nDpc@BWE`Mk)?*rQd5U}Z*;KMG2Gg{)Su zG6N`fJJ(}5zA}72!NV5j}U+kAb0^_VjR$hA5w+f%f*3AEV57lBata5 z%xziK-CR``MSnaLbpM#NrK*WKX`{NKE~>uT^TkwPrI^UBQim6wAFY*GFJP%}5EedF zD4NgYbz&qE1QaMBtAJc;88IM9hHmZ+t#p;rutO1;nppyn^gU@5*d(8s`{7Q%16OcK zH^4wJ>=ed+Uh+AV`?G((`>=Y54M3`~m0LkLA50r7SQV}_<0E_Lq0;e_BkRU`L)GkjZcF{^n!eKeD{tOh zZ)mKKhRw2IBBl+5t_o1@Nz~7<&kP=a!ZATvcMG2-@;L#7xOXfBjB;_!HdF)n)SK~=H=F(HzeN;qWB@9*8p z@lE;`)*H66aZ_qwXNUzhxfH!?1ktBPJd+ynqHY$u)Jp8kzCR} z2;wL^FGcxLr020Rv1($10T3$>oN<9^xKNM8je<-)on2&TKD7J?y{)@cm27S5Rl1pc zpTKGQeM<6RiG)}7wSA$lO@$Rq9@kwtasF{|%$4rI!XZYC&!`heee5+fJm0Jz*j z7ETRbMuOeXR-;$WFdAN7ErwJ|eVb#w7Ytd`Qv7oA${U6GsZ;jd3#y-ndCI6CkT0aV zmY1dr>Dwf%4lw+#=Px zwZWT?ZxY z+?VuuWX^Q&3;LYhXFKdsaJ$;8(HkePk55*=v#96;8)Pgek#o=ab{Dq;h_AAJ_88Am z0+V0yb7&mSH?OOxVT$oW9Mq)>Rw!aR@DQgfDGK1lG+IA@rp&1(iv%d7hSfFqBdMOt zLN(H7nJ1BAgp68lDH#Kv!*>OqB3A3-HkAla1H>F+YCw)iknk}ia(nN17^IS4jnrVUKIjh z5DwR%sfAz@$PqEG;~?X~%{W>}`YAD&&4myF%W~K=(;WaXdjUW;BRb%M1c)twafpc` ze(PcsZ}zMy!_^ONv>$#F;YbclVZ>HRB|%eAznn5|pLhr^ z3Wm=NBJxwVVbeQ$=KaE^v5ruPbx}=kZROq!tTT9UGAishb)MS0lvvfkG4^%dG}ST+!h0@+Fp8ONC-<5dcDn5f%UeuZDmh zSL_Oh`V|+1ES6sbsqRg$69!iY!?*B3(jfsc6!5LtZGdr->sM6lYE-PO`1Y^*ogX9V zGGwnBODgNa33Ge-$0J`ACXB6-3nY}(dA^0OfsJlM@BvTp$>epB;NzfCft8TD^iYAu zgk#T(>tK@z`MBfk` zG3Q^!F64*OW1YmQKor8&?7p0{a7r0jvpR!i4KZRP7ZOrcGBao? zs`bO!W8)L}WB14U<$DdD)M?enYx@_n;@Ex6xfleC-8D1*yun5A8Q%pR8PvG&y8}D$ z7YKT^`Z@oOCjtjELGp5Ni{tsXx>HfnT?4L|J@!F0=7CDf0amKd#$UiN@~t%@PA5WP zcMvZb7dI~l=xPuHLkvu^j_y!%G4ncBF_)H-qIzK-YEYCR0FtIYabb&DXPrP%;^qM$ zifH-+hx$cbv&OkjQZ#QdrL&!ww1OUTP?YMbNbASFSerCY!s58k`})jjzNm4t&&9l* z*d*X(d5_p`tpp5S>_^F|z4~Q|EKzF*h&8jX8Wa^jV8habTrlWe1&OEW8XEG|&Is9E zUk3Fcrcnio@8^UL?u1|ya(_d{fg~m&dg|8}WLwjuSb&tXhw6jU z)bY|(W^Ea2mrklm%X5LMm=Dz`5#Olr_r+L2H%De_Qu__pY&>B+=MX`JeGI@~D#e^| zXmS6Bs3d#B<)KSrUU}eoMHaUiH6dWxPZ2y?bHDMgrx_P{BehZ^vsadU$o7RPpD0pu zoZn%Pj4wdKjgZ1&ABUg?Io+bI{Xl@V7TVgUsNI7&$h*0u`EvjAH{uEODo1ydL;k2&gbsm&o zrYA=8$mzH!4SKx=nwY24!X>YDP0pAXz+>o(x6mVsc_B+bRh|0V%wK+GYI?tb7|Ob0 zxE=qR=x6eHQzIsHvhn<727+aKP?)n3_6kaZ#S-bb1G@X{j)xk2qKJV*_FY|JuKRK7 zg-rO98WB){z^kT>bf59uQZFk(3JhBb;{-^s#fX>-j)6@%BjNR63-1$E2o=0XAVZq4 zR#&|4KAlY$!NCLB5UJBCM{akIp_W^*5ubN9gSJ!B5A zl+U2g&eS=D=~s{;vVuE``=7Wp>mjoZ65O7m0n1aGRckeqe{yIyd<7IAjtJHj*JGm>#v87{3u0o0PzT&ElT(r}T=}%#r!e%NU~-XUa>O zk4xS$hXjHoWIhI%zms_QVSkC%cz!=E@uUA-td2{clsG12(A`5YD5}2CdO zzBn~PRc0SKQ;EljWgRW()T15_823BN7IG5uIG8-g&yiuj!?y4=n6w>NIrHZT+7XwV z+OMIUN&rZb##o0@9n+zqW)AxP@UZZW!yDK!A<5h!fTG~uneroR<{W(FJc}!QRrH!_ z&JDt$`Ybt`;6O5NH(IMd@E4;`(vIkYltP6StF}FLi4ZNQi0Rk-U8iLHrU{^aH%M># z5^s9Bd6t-20N9~0H8gW#rw2JOnqh@ez^DB1r9q#_PHPs0dgkyIh=;j!_Wi2q1czln1ICK5Q7vxucDQ5z3az)0;iP$Nwk z-YUM7at5>vXG_;G zZ9f|{ph0gMn+C+{pm&m$xo`7AA^A><+GV39#LU}iFE za376NpofB*p}BpAR+YiN$cv!$EaH7@nt;X4Bdv;{hlh$feNq8OO_(pHhgV)h>dfM9 z_h>i*1!tqmOn%Kq+)1k{PF!F|zAXmNf0hfW#-}KCTCV0<<9YHR^RWuszz)Atv24sB zOLHCAK`@RpR3w`%)LD(o_fmKO#i*D~go?>WXh5N?i~|Y07tDdaFj)sywP7tnVs65% zM?yzYf))JPWfxC0Zgqb5Oy@pEPGu*4O~pquM$e_H-4X!3JBYqMNDP$*j#$^XTke;j z7+M_IxK?~|W&}?8#0X3PiXNo7RF|Q{#x*a1%O%d?bXVW>Smt|c`M%L?Y3KluvPABtLXs6y9n4!lp#Q+h)?C>^h2&k+8!C<#u%RY8rTKT@?~9|1vcMf?86mHr zQZ)|Ac2yK{A@7H3k7=MRaaWpu8=$tluZGmr>=PQ_L;!;^-`Fuc3XA+8F`Su(14oJ= zX9X1G0M}IE$l&I$MgYFtE`v$W`JbTA5*8IT$?+y6eNM?GWe>PAY4;Czn;4}08;XOV zuT@V!zdM5)DkE2DX8empf^PjQYk1A^m?)5)f4}Qj7jdLNMfWOlvyqPZ3mv9g@d#s}ekzZKt79Cjc=o zlUnUu{Cvyz_(D^x|4}H4;Pe;G(g$aWpCjLQ{Ai^s23U0V!e?E%YgrwfdnG6ITXrHu zhjh%qLHrd^4hj~l-}hw$g*ACDkh;g)j>iJ?30u1jm$5#({Bu7Eo|`4CB@9XE4uM8* z!iz6Til-Vw)X0r{w~3G!S|-i59d_(;>hyX8GrFavrVtpwM5|5knalz zx~Infiu!}-kP)!ee{os^SO5+a{u?!jY9nUP1#Y6%I3IP?v68@^4i(+Gm9u!C7>Y&! z4sdH~qF7Ytqg%abyYpheN%E%WjNG$p*Z+6&y9PG0*2_n~A3T`TOKACXo0;R~*xIj~ z{u3zpU#3g$>OX{u77c;;q*+v>x}T=o!hobV?b;j4!5oshBy`PMzo;YunetawDH`=t zGHs|Pd_%mYGQEHdC_eE6FVs*eMQupT3EyGSY3d={DKRjkkFGfBacR^&Mz>Mv2wf*7 z3>sLt#7{`NsQnmhTpAG>uZ1>ozc#IXC$9dZ&Xq;^v@TFyG%LuIY39fIg6z!et7s{$ zK+HSkJMcQhnzp&@_=SPjbkFVirQsvZA(`eg2~pDx>Ueb=*gavC4Awa*A5dtqp<3TE zq6PTfRDEAGXJxW{697H18l)`0v@=}1$8#4a*Y@Or^~t?(hueo0$aeAcx@uTSQnzuH zRtq;FTEd4W*izJr4%WQ-D7CXsb?$wi-#hQ+aG-oL@D$Q7O7PBjL-_2-$zC+lrm>ZV zxiiYn^Q|xll}RQa&x@3uea(p!e!wT26$zf-pjvtxeE0X@{utMy{;rwY^zc^C=G@Lq z@|$CW13#_{bDFG%ynDOh;>S6AokKqN`SKgR)a-gc`S93XY{Db2lfHCu4@R|m&Qvo? zgtC|xijRHz)id?(xjC(c5p-|JBg8P3T||r^hq8X^N7d~6wNF)l`WRe~pwcgBzO;T* zF8cyTY&4wNSS!D^eBd}|KLXq#FAP;%F=!^}*Ur*1(s&do=CJ1cPPSug^6UY@(?zLv z_dZ+m<9c%w@9dvrKNN!A^Zt~HmeV$}@OemREvp^eZ}B$yVC3wNa=*a>e%|Y@3Ekpb z)puDxIXoBG3QsyOp3fQWuh^%0;gj<`kn;&rsc2CeDOzPD|529A)w3~bFXBltFsnLRe^aSl&+GgO=qEOD9Y4O~nk>vr=OeD7?R z=BcPAvS#?<18s7~Ba(9=qIaykf$V9oy>EJge*ECMd6`a`rYJ--d9_UI^Ws^NTdmFV z4J~FqHBk7D5mS@Ab-`7tr0v}ShFwS{_j~a>2c@s&HPCB%e+p`Sxiw2afz zcvP!boqkEnFqS{o^?BwCViGbV3k_A-VE^a8_GY&R59Rn(%bV#A?|L-;^&luI89caF z=GOZ9@~q;Yg;49Jv$kH8SyT5ET`X&je`(q`X;ob!ogKQu){GivL!MpuezItMX4MRl z8gw>wnI|GFlXp$dm9VzLywQ2K{%FkZvwLmQ)4(NguZp$F&*i;_oa*yyD+A)=PpvNk zA5{#D-MVk*ZFfK9yBNjoW#igHmI?cbDCa4LJevD0OCfwkRuZ;BQ|}8tHGQ`mGg6#$ z;uov8KU1qz6sSYx!_-2pK76$BsMhg0qw#G?nlZlo`~B@PaceL*u&CRd5&LPf+&jm~ zBb9J6K`!Ff`UUt*I*KlaC;J7jOa-Ah5v)&+lh zvU5!)asDH4ODQ(;`Ddc4bNTHC;TOptU4x?9t`w#U-QCS>z};zf?|NQsy4Uu;)E0J> zkzpc#X3Bi0)+&czziPvQaY(jNUTj5gg7Ad5{86A>iJXB-euMwbuE}HZU!sML-;0hb zvgMh+P1O8$a?5^K<2y2__Qlp_$^Oj?3S@C)>rAW|Kahf@_WOP_+&ooi_efPrW*{|}uHqtR$t^vkD7JuiGFYz`mFI$aX zn+zxTn3h4s2JL3Qy*CPauz;Alk<2aOw zR}YJ-h>{+hd~Ql37uNzd(w3TMbgc*H#i=GvTGf@cWIL%|~BVSy5dV#>qU zIsGXcL{wt46kXg}pRs+V40jTLp*oHKVuLB^9B1N`c#K*4dd$whc1AWHD}cC6rkuA_ zubvZ-ZqxI%lE{BCK`6U`DU<;PaH_9 zv78aK6mX%{*t=#om?Ib0cram;#dnk)TGI zfn+^tZ8HSPmS59CD#DZXs*Bo#F;Eu~o8DgtmB~s~KGjt=Xi=D|Q|x&yW)LS9aKdZ1 zE(du{edSdaMBkFH(4z-aCi$h-ET@pwCvdf{hTeJO=-77G?T!A9_=fqQQfz_O-JYXe zmOz*4f}mdM=su;dD$X|T%2fTzK2ofLubsSlo8j^@D;)#Qsv<73GAnXd2^xbZrNVz- z*O04((W}IQK*onc);8NUAUVtxzx<#sCf^AieS-I1%TKp-!dP=v0Nj5NQtn8ZQ zG-YIZ^-CnxEivi?y>IG_I0}yGp;V$9M#A}B)EJ^1dw4U7^_NA`|#kdXK!D*|CVm zm6n!D%s^?t(7DH}j_rn-pWCr3R;^{%;?4R8(eN|M(|bDQlyEY_9%rrYyt{7>k-F;r zJt<6D2ak9l1DrBnibJ1p?8d$-3rx(`YY%}cnXYSJpbE*KiBjkrbTuW7G%i}~r$jbUEx!r+mUoT#KE z>BBzL2%^h!2}PeOAfA}_IkTZSx$qvj$nUm99?9cdWXxd_A?M6%dd#$mRn3G7nNr1> ze{@fMwf34h3LmOX$=4(s8R*qewS;xnwGD`pi1e`5Oh8aPp3TW+Qe5wJn%kd;KIM~j ze528*4sz%Qn$Q7nQeEXi`zy?q@YAzf>ESg}R;K-0z8a7*zyn}*aiOF0)( zCK`Ext5SI`srC33Z=?9&dWnofTNa(bk)5&g-3i+KJQ+3$=?^+QT1)>6)VUg8CQynr78#U7PnO8K2aAe7w!w`h{O>8x4GCjAo zFI$75x8e1)cA=g=^M;QK>}VXS1cy9jnQoe8ZSG8^5;p9hD>rHCc2xJe?)INm=&74J z*rnmMq_m0Si)1z`?{7g*>8Q^>8=f>I%`D7#+t00ubaus&SR44ie_rQZSa8!tbN-C1 z^!5TTQ#omO#y5`b_t`cTrd^IYT9JwaYwZ@k(@yVc*;th}8J?%yY1s==uaz1wB{to0 z*4={}gHD$mFHM-eHT$SLy#|ey{CaI2#9ekYvOnjPS*uuZNvc2Aa^aSc4wNL&8$x4L z$&qs|hm&#yda(Eer%xq+^yF%TjD5(Zc&51M%zL#7dR>Z_cR0w!h)DgqCkI}2$W{uT zrcqkjbK!oy@}X=Jy#?ztH*pbp+jgh8w~R${uow9=Au*>7v&+B7p^Td|`HFac-eR?O zrOj(%ifPx)7^?+aWx%RwvR#$VUdZBl=+tSnV=uG=3#pIZWOO%7s|HiQkDMxm6mC?I zoV@5ynK29sk?uJ)LY!FJQ_iR>5M7*Pq=Q~wSrqkPdAHT13!anmNh-X5Ce}uqGxV1- zwnTXMyHO;o^xoT1g9}~A<#6kq*^(8{J-VDf{LA(qmAT#Ebc)60KURJm2)n9}#}y(; z2j&VnD{nq6Tl};rmznc`w!MEi0p)Ao>s#rwU5V9cII=H^xSS#$g|A=T*_zP{IG!h~ znWLGOFNJGVG~W4Yr=1+h9r8vCMqWK%*NA&DX_g?q)il`*8Ajq#WY)w-v;>0wN|DLy z=RCYMoez6|o0#=Q6Kj^$0>PUcEPtx+=EU!J1O?Vq4z?B@lga4|m;3L`IjN++r;|iy zhz0VKBWyQPr~3rSvmfyBG2gzH9SyiwSFsGUt&w*AyST0>%63b!WTw(^1lweiJ!rO? zr}aTwO14c|d#a8O)@OQ5Vj7n+$YhHvc=Mq^L0Q@~H!g2TE3ZPis8R?rCic|4Pul$b z{Fus``P-|HjhCCrM<29xjD;WCv8^%i{j*E%wR7&viQr#v0JSlHLmC-Po*v%;X(TOY z%bBURNnX-yt=yu0`l|NR`tYqSHxfx-@*)41NF$r7)^#Dej=?tKIi+XfDKELSGVkKe z09yc|`MHMJ&w6x~xh|^W?VQ!It_<~#CC4-=a?XNIUrNhh6O#hA7n4K7^^VwP`$V_O z{Ym>ej`>fs9Q89hH(OJ^ADf0v2ilhDs>Niul$x$p-={plv2Co2WLc`ueJJ5mROC~F zpE}!j(E{^LJ6fyCZ12rlJ}MX8XLaqS6YYs0N0jk#=#Qknl(A_M)1gyFd<~c3H|k$f z9h;%kMaCzjX&6~vA?()_$}O|;Hp-=@(yY_dKh>m$->?|*aI`dawFlVvNCf<)%i1~a2w z8hh3LY{@R+;0MBCxdFH4oQE_!Lq@}}4V>Q5TDxo8wozSG84U|}!K=6tOS2-eLaQ_wsAexk=MSWsSye;$Rxqv9X{ zfB*mh0{`a?^nc5s-~X-nPdyZXx*$N1|630b;OhzhSH`aZqQWo7TS(#CxPz$wSC8Ky zi0*%7{8AA8|H=q_nc@GnM}k=YzxJyCEB|MkX8&Kk`G3p*`40FPhyU)07{51S0Ki@Y zKo=g#2!D(J+`|Wn;1R$80|1D}<7i=S|7{7BKmd@P3IJN60>ICH0^slXU*~8DKn_Ik zLe77mCI%2FKBVM-4_5cyyMMO{fd9Pc@pY!b9?o8dj~;nRm;|^!_Hcb79^~QXW@H2i z0|Z;EDBeZ4vHvFM)^IfGbdhJHOwe*NRVcTj0D}MoKDL-%j3ar}g<28nK)@S|ay2!9 zQ>c;x<0VwN%Vy332|D~uisgeWQZENkclIp~d00ygKbsQ|%csiZPVt)i5fJ7n6sy;y zPkgnavT8sTH|H9u(KuARJ3h0ubfOcfS@!xhm0elypS8)gP%Bp>#2^2W_s$LP)wN3l zP;qiha14sC*LF4U9`+LO>KQ!k@c7`?R@AS17U-T*NNV>C@Q{qZp!juN+Ap%+seD83 z4^}U}3XxxId-Gxa*w06`odfs&!vUwjw9pkv&HUCitS;QA@1667fA`8b@GrkVhB3h~ zyn^uSpb#f}>-W(5ULUV}efQEV*P?y4*1uv&&c{%?nG~gh4$5JFIKH9fmx?DmTO)WJ zxOPeuYiU9N*&~|K@8w_4EJ_q8%>&{TeX-zwedO0czwuu&FsQ4h)+KFBSS0NCE#t|4VyXReRXWK85eA7W zq)Ho;Hl>C91;^LYgcE%UB_?T2N-f$Z5#657Rp8-q8~qe1Yb&}e?Sx2G>Ps_iB-*{Z z1~iqS{3g1VQonW8EOWOmYS=qG*tp}>c{u#dQthwQrHpR*Xoa9`bMrpr4u=L$m3>WI zHOUT*{TM~-ItJyys%%$cS@FmjLA(U}@$T1M;*Yj(uWg0b&hxokY}(!@{MfMUv9;Wo z%W?Kw5!Y&cZ>1NpUdr===h=hz)#n>e@cC9;!?-#MJ_&PoBnbsq{krQJ)k^cSJ=su* zEhL+l;TKc<4r3Z$;!Z9aigxOpl}p`$$+M;LDu^TETSLOd3oA{o-n7=$F8-?g#6-i` zCkq1?Zb_4>5Eg$XTd}DUn+$l~D!um2tzA}FJnFSDvzA4LOgDX5m8HScJC)*7VP!8o z>|h^VY87D<_RUv4qCK5c`J4kXqEj8Emikt`xQeiD#&^C`c4v8BRYezLp7~e*%DDZ> z=Nc8n1L6!cWP=^+zPP(B#eZkYddJamXOa5QBmO+6eR$LH4}nL zPHyvu`9&Kbmq|vNwn&cN^3CiO@GVTSgaBQACHp0}4_Q8Jq5`PlQFE+@Ur1j)lIfta z%N&$HzT$)$F)K@87{<&$WW6x6et2DV!uj_Bn>8SdfF6d^lRK^m;A>es)HlUeA!;P@5^nujZ(QiR@HD&u9!z#R zd!-9%XdSCy6s*|@tkKtTe=jN{Z7^r|NYw=RUhr5gB0*FfJ=^=VvDKgI!NFLfFa<9+ zU6Ru~G94>_Io}38?>2hR4~9DQqyw0b^e>?1@kee_wF#M;r5PXnJ~zvZ(gd@-2%EQR zy@&2gjn;6EoAIGZ|y`YB(lDH);K<*oMjfp;)E0Q| zJk*V1XB$fJ&9vy!LFUQ6%(!|wr_>Pl9VFey(*fQ}eCTsB;ec@Ri%m9@6~uI6*w0(N zo*_ZHK@)FjX|}efSfEN-Z}0WJ8rIee4^;IS`Kv}GomvU?;`kDJ`En^}{AIqrBA>Hz{A#AP;zJ z*VOj`N2g_yioT;wu?VBwqHn;_^!UqDjV=5%Wj-hw;G1_pr{C?M63I%EOcn~Zk_Vi3 zZs>{)JOxDDxB8srD*X39%NF4ET5fb!^5YV(5t|R4JFRyTPov(~O@(vqMnpXbkY2Y7 zw)U*|*HTTZRAaGOA9_CQFZiqG_3Hv})aS{Tj3nwUZi9q3F8aJ-q@O&rs)f8>D^j;L zJA&R{uZ4e)<;i?9diB8e{{XH)QNJqAWZdl}5_(pV6rQ+B=~pUL1ffbvzI0pR=f4G# zQC(?IDDKOMn@q5+nW=QDunISpQuhOu(>iaa*=v~%Nvh8Ym||xh5|?etcVK39G@K3x z#h0pQ-{$LqrzG!hb>O(QGGJ%0BVlP+`dVMB{WQth^`C`hFP3Kx!b_d$$z`aTzQthk ziJFmGkZOpMmpINK@o=uRbO1oyuRzs(O@?Qc%@)NFStyEHc2tEM=AxW-3M~aFm5n(a zDOgPEc^f^JAh1VdJ7ONiraS6%{25y2LniU&bBeU~!3VbrObge_Y0?a3R4+NG+RJ;c zT~D5fR_t-Ycr|ZslsnuMNXk`_)O?3x8|(O1-z1n&Dg<-3oXw2#~b=>l@g+XX7^Xw-N<6 zl$+0WcMaH`bpq|amGQz>F8NiMM{{1T4+b)k6pBm71+kt%eYuA*A{Wn@b6#yMZ+!A3 zcksqZshU|-wi%Z36PDp=^C@skEYIZo2HRHK(xskA!x&M*78{W`FYLy~Gjk$!DUC9w zO9kg#>S(kwKP{U6E-hHXV&fuzin^NkY`EfQ7e2d-innvcc^$#@OpN4;mJwwTYO%O0 zBWskgDs?BbT(ylQNhy6uqjYH1ws!Fb={hu^rJc=c)8`e9Sy(FszKN_~3jrxEUDmL( zF_rkgtTQH!HZaHm_nR2&X7nRg&JqcxWU9d`6RXe%edQN&VUtsx9SIMEk2}Clg>$vS294+}NggSbcvM3jlZ60bAz=OU& zl zCFA(tCCZA34Bv}xiB7KHP1L##_~fnvxiD5+?h@Ut6uqtX;%nOC$kzs|z_g`~x$C|o ztmeIF>jq_Tc5Y7yD8##{kjg>+kZvMbkV;_1@X7*F2nHB15UB=EZwoNAAx>!vaJ=Tu zieqlbZ_d=g@W|+ihHYuv3@LcXOc20kZkKMFlOil5CW0^qZ0YWZ!tf5puKMfB7VWOM z#H>cd>98;{0PPOkC`SlhDU@m{&}(L85ln*Yu8$B;R_kV*Q4&c5rSX1V&{?OnO56^`-7eh~6^DYAeIuIHdYIX5s)R zG(>OycLiS+h>G*$%CZVZHPCL(Xw;!Y=!S)18DgqVB*bS!RA?jkw8x1SrbhaAM zynCz)X0X=h$ww06wKLALb`d-&hD3wYM8L4_?95{{F8nQwKxuIXn9kV|j=Jk?L_RSL z#Bj?J!wof&4kAwSZ4o5!6Ka}o1i_`rNHG^&_Bm8x3e%I`L@$s7ZBd%B@?HA1kJgpe|LdzCM z4kJ--Bw~(af*(LACeo5M8NyB|Y|J}^8Z2ZyaN`vY4{A>IBmfG$AH!fHkzVzN&qM$PAv8QT zuT(7LxBzPv6@mLA1Ck)D-auqG9PLL1X}p1wntV#aio|5JQqr8yP(>qiKwtniO{&L* zq+4_MKS}sB@A`d9WT@$)g(BcX%7Xe2z*VFEAg6Xb0+OQY=NwR$b8TeO2xwJ?(3{i= z1B*u7rUfeSN`mONM>7pj?mGsKF1XM}R4{am614;o&b2U7yr?kW=#K^RyHiEEFDOY0 zHB{syeFYF`M3qTZ@9!GRtlG=2B2x8Ja`?J%l`Tt+FlP%d$gbruaOU$BG8LF46CGK# zpk#9-W0NSyrY6B@(yWl$l(SaIECVx@yywD(Z;<9RE~0lVB4ncu!mfI1a3VkzyA9Ki zHxqU~F*!N&ek}}A#4iUrsnt7`{w{2H6yifUF;x(j0IcxK3}(*9F0}8Hw_7n#a26w6 z_90*MzA{m8O(JmnC{jy9Wfmt^xkIxZEiEV_7bPVhMJ=pVg>M$^Nf%9|K*nGuD*}RN zD;lOMZ0WNWLqj<*pB^ly0cvPWh&(X`)Gva*P?94W16ce>Fi=Qd+Jm?{%FIlnRUNGd zPO4}hq4?NmSR-nrcxtOgaqQxwP5^)e0n$A}LHx~EtTPw~ok!z5;Fkx5Mb5v5CT5bl6jt>SBr1=HKbp4;j-&u8|fMOq6_z8gK zV&^XZV^b{<0^a{=b2F2ZHp5EoRoLeOX6p68wAH6IQ4;PLE|jC}>NWUelYuh!9}$r| zJ$O|)mF(mzq zyOjA9u=yDxbUq_kvRaX-DWzE*qC{cTyuG4!d?*L1D32*nR9ZDUwFeI?m$KxOQ(9WnR|`Xt1`bVTE5_pJ1|JHwzX!s?C9J#$pf@2jpLST1kIz`nP-1fsk=O-+6`_FJEweZrlGUq;_#0ai6zC?ogd%x0Cvxul zOu=bb$S~)DbVb6edev_3Aj)?(Z0aZX0u9m}?L_aKpHF zhS-a@Q2cI=l2-eP6gDX914$Iya+#QWxv?WQ^S8StW__9wWI9KMvxQ?@nlc~^0M`R+ z=v{0URYdp2Wz^yz)?oAStU7=c0XlRahmVoNbB;q~$=6aoSrj8$cafk5JaPae`Vi44 zBq}ahZvt0$l&;jE3;^S99|7=DLsWQJ$jqP#rGxcl|1R+tBClAf4ZAvhWexVV3 z@_MW+q>`bOH9y;^g))e!53x#RlmJhRA}Mi39IUq4v2%p3J3!J|*HG0rVaN zdl^a)%T-k=Q`)4wm%CRrFMC~au=?y; z_mQlXc~lb7tZ3oZbxe#%?W@q5;LNwr@Mo_m*#}zv*@x3oDCSnklHL;jyU?S1^?!eQ z%73?(D4QEsg@;)iB4S%6W1B0pQy;S(-7)w&V_Q26m>aeyCARgpz*rJ5_AN9nlF+-- zB{jtGQ0#CX4_$7modQy{vzIpxi@I*tHduJ-J|BnPCo~(KVs77IY>i;^X@PrjYJ*iIcbg@ zOJrQu&56HuBUc)n%AwgJXt?{(nE{YN_mF@Okiq+I_6MlBVUign02wKg)Em=TG&(p& zcF$31nL;`q(lYtZBUZnDl(L^<@;s_}qD6}HubNCmz8|6XcE`L(sAX`h$^cRSAT!`V z?bBN@mW_O8A%Y^>v6UheJ0e1=ePk~pv4WTqG4vj2{Q_b|qjN*?7&)Y#xlPe&Sg25* zy8h&=)$iIkBNTH2#&bi96r%^1L&ANQm7xLL&_k)Ev>2qU_ohTRD4J?3T5fM1$wysF zkyJgX8B8pChoV@i#9AYrx|Q)LG(ORbKu9T}7cyI1T>VP%ky%VAof6pN?SDl*aO$$r zL_RQ*d|&E-;s4|y000C1{{n&lU{IJe4hsr~KcSH5lnxyJe?wxCIILPH7=cBj5$JRh z4F8Biq>z~uT2C60#^f^zRE`@2mdRsKSp;@v3!TfOF**EFhdBUIVeuF+4qYaj&}q}y zOkSTTi_mJ-Pyh;f3V&BBQ7JTvfjX4XEHv2UYAJfxLP2V>qYL-EWTgp z6pRKB35CO9@fe%hO(tx;VzL<=mQM@<0YWmEe6@oV0ncGF*^D-OISBzjYkB+F2Q4np z=rvI2MzckK*T#TP?XJr&e9>znS$!-!ZUEi!U|P-`D~r41YB`$S#`lxN>T$Z{B^%A1J4rK`h8rzms{lm_S!!2u0O6_-QYdWGvNR-%zA+IzbixD z5qDo>0umCQA0UUq;GH`*S2rI!Jpscc(e;OUWcq!dG5`t&BB%V!i%iV&>V6+@1q1+|@3h{3N({IY9{@E_14y6X z4FugF)l%~0pAI!5qsk7d1tuh5I+WQ`k@4(=selRnRUmSL3sNGpO2qp*2_%Yy$nfos zq@Z>{17Ok=U<)QiF|th@rlq?|F`^Ul%|yZ_L0?e#5r%Xdj2P=Kg-) z%lnZtP|?p3zker);l9JL(a{-ydGHAiycd3a-;squM}7htv&LweR2V()J>V6@IGoda zi9;)8hY~0jbD9~!UiamQ&MIZ^GIt%2_B=7{G!NnPfg$jUy_J~ zcoo61h$kfETfLUBGhl-qv9SIn}4oY2q z#$gkYNI+YciN;h(6;~$+K)zU7Lx@Bvj2dEER-~diltq3_8e)h**U2VJYw8~nMbu4W z@*;ywwo4D!Oow3^s80taM=xSNLYN6BF7c@QMw9G6(h7bcpbXrg89Z`IxwMRgo*XMU z$qZwO(qd}50I#NG%E$bCF44e)95n9F2!I3ttquT}C|E(#8ec~8&2+W2aGsG_vxa01 zjxV+Ft_s@kjIC|eHe&E!9brZ%EwGw4hNjuuoZxim+@U%L1l|h~a&6Q~kTxPd7N&FQj|w_i=1iB%u-E{!+`Fv2POuRSG=xtzL!PF;N%Ds;`uxIE*gU=}nJXeORt0Urha9!sY z%FzUkF`t>$;qJqlJok|itvB`k_?&AE36;t+e0AjmzB9yv;5;fg5Fz>bszql!CPz{{4ulV;M`#64|?RrA?>I_U6EMgA{ z=rak;CJ;&3^I+V_agW(U!L(m6?Gip9%hpIJDDsFT{A!3rfB{5!MtUL==UuXFppw%# zX9&bZEKAm55aO8)A{i50=PrL;gPCZUIj>G>n9G+~wv-3jDo*UBHm_zkHkhOl3Q34tx5*pMWc|MiOrodM0|2wAsjL(}0G52BU&LAs79(dh<5KlA5!mKP>yW*q zVQ|7LU3k@`c6C@})c}On)n%yNbk*`vu?5vR%~;OP6EFt=%xO%xDfM$&4h(UaiU69T z!8M5MOj|P1X|)$nU#FuTTf`d{q%__D)-gJTu=a#frqiR;EwDB9I?edGY9ac-~4P4eP29MJA+m~EzEG^|fUDFDlVQMt4 z)y@vA)V*9=OhHJhWeTdeg9lJ*)nV6;!mn1H!MJN4;oOy`yt}t8w@+n>f{-G*Tq@vo zFEo?4FOc&-%LiL*5(%&e=>njGE{u1w4X!o+fV|i2?#}^Fwg;NV+Dk)l;VcG#yg2zH zRprBXM*OlTe%D%MwZ@N&;$uZ$k#XK6fN0a}gEp=%+Jq+WtV|Vw)*p?SI3vximk4;4 zPGxh~iEp5MK4wMQ^RTZ6`cRz2CK1A@g&&Sv zP?q{wwoGEhKQUHfx{h4)6ucGLZpp;ISJ`4ih)|&9%3zjo0ep~%{jOJD3a_mof;wqf zOicGjy~WtnCpC!?ixTaT%J&o%vFD0o`!rQioq0@|^hvwl9*5m<|Mp9n+e_qZ>p(3V zfI-^L8VbR|@#=lprQt%W>kaOZ^>%smc4iZ?s2?NcCMG1(n^q)wEpUPSo1|Z(rH5sa znK7%ASdv`k$w!&Rt&OCNi6uZ1&3nw?6ADKd>e*|?jqvxyR?KD(Ew%QY!*uC@AzwsTiN zgIcy}s=!IW7;{@eBV07=WGDf`smos~VyB6UuPM-xlsJ#7av`ufnl^#R8mWW}EFB@h zy|(!woYB9*vkosnzBZ_jsB2l8nz^AmuC*AvlNILthcBD*)-KdadA4h%fGYZW=mm_&3#xPrAU3yL>$k*%`bsL}|f;@vqo zml)~ft*QUT6i%K22C&H4*kgggM zQ;+BYqe^xV;~5D^i<5iaI@3p_;N+Hj@re0U6=7ADTz`N8N(nJQF_56TX#kW-lqSLg zs3`uZQync3e!X#K2&4g!=zlMhfiRJI8w@ZZqos%ed2>L$} z`d>v-Nw2BKHk6Mvp_UxGLNi$}4^*t9xcd$St|Vk_ikXHWA#*|-Ly%)p32ZZ|khu;K zH6(zBvg#*^k@u6zKoS8Vrt;%}3mv4~nmzmrKzVA2@`uZt8$oOip^Ox%E6|+u88o|7 zwW5f@8MVQ5&Kryb!82LF^IMSNqs;P@!Xyzv)F~;VhQM(Gll!BaLu0^bxvJw69Jtc8 z6KAQpOf*cEH>@QixZ%QTkHUGpPEprQz{x_SERDo7PKd$6#OfN*)Go05C{i2|VCOK2 zs1sWUofv(ukwwXf%ZO+K2cWwl8Ag+M1AsX+hru$V00cC76+3}QFI%HIcmx0`G`=Y_ zC!rRL0~(}pk3OOik|^mi>3XK}>=Hy|7CdDTOLjMU0gsy~(5W0I@%qENkPczsrr{7F z*$$ry=E^Dm#6a4#Vgrro5jl*!4&@jvbW%>Vl4t))BDJOQ8V5 z+~*A%*^BHuEL2~^h_pOxAPNb1rvW4(Fp!hj?lhp45;L^GxPlEqMx)5o5+k@SRWr{^ z=a-3@O{?k2`s&AmNebHvJpxA)SO*wIRfqXw3fz>7xkJ3ADi$~blp?|a31+rpQ8KUq z))Avss_GD8q!Q6z?8UJq{X#Bq8xOtOm(3O zz_TRr6B}r^iH)4wC9$a6M9M@O!GfMPgwPjx!b;+lLkt&*qK!7dkc&N3PD~`tduu?D zxH4#~&4|Ix+iAf|a!!Q~%c(xz`02J;fs*X!zLzqe} z02v^NK{S(~y0985)j$Ik!8_2AC=~hc3#mI8V2DkjD%X==Jb9j!f_Z=|000VU*fDuQ z+d&;Ef4-qkNF%n)Q7XOy{~+;~6@z-jh{D7*9yiQ1rMg43I#J3MF-tsO3la3L@r5Qt z{hq4e473s~IAtHL zjlzi`nK1-Ks)&vWN=g*^y~E#MVZgH%%uH7(MPV(daetr$!?Gz&o|&;x)G zV3YAm03ZXAwONtzFqX}OBGN7uu}_UcFryhcir~v#i4_fFKZroxKOl$_xm6SXD_HU^ zxh*COtKyPl0J(Ss-UO5q%2*UJMwpn(y0zqqbrnNftr-B(7b_(-SzaW$vekv;8WD9b z#DrD3FdzXTJwvD$uzm{RF;)DQ)*48OtCFuEuAzB5Bt1IN5CBh&4kIBgv56&s00n?y zRR@4~hmlHviq?X`LD6Zq+;KjWvg?Aw)HKqm#Mzi1{?WgzeNO5m?x$NHC)ag<1;q zg9)wwmX)N;+@V4<4oujK$ca8pZj}h->DkbXsI{&rGd>HNTe5Q%mpPx8nri9sS=g3^ z)m!$WIVEMRqeGc_h`JqV?v>SQWNFj6K6RIj=BG5o)v=wki-?n#fZp6R9kokKocgTV zHMum{ijmBJ>}ImO2@S<0V` zFC!{`5oSZexW>+6uiPcdk2Ipf@jT-(zNPcPV#t0jEsqnJ)BrU$mGMCUKm-*~d=XZs zfKUXo2!5~d)|2}o%1JvF@rhDVAW0^B5(s>fol?74iVbB(3Otxlsz^VT55y4zQ+@k4 zz6IZck2n!T?u-ybSm}<|GBoMlQ%!pIrpta<`OHU(d+ec!z%v-xhM_K~ik z0$>8^<(-yqg1_1HR|rWw)OHB0?IyQdi_+~#xk2KPVWywr36PEo)XKJ?tqk7_is1&NpNguF&i6VOk;WHJo%O2KyBN-IFT|OlpKUFP2s?|Zn zxYmd9H|=ErhvfDm*t(PPM~=B}%jqza9QuGMG!s!a8SJK@`MD1{qv%t)FUW!Ct2zJ# z`W7){&dw@g#Q>Qkc)YvGJ9K!6bFn*%-epE|HblZPO7m=KLb68=B(*THn|X`-8<(^7 z5byy!%#R^vwC|9uvROUWb=-<&+)z%3@{W8aNi3A2Fw6;63-LcsWr%WmU>q#3OS2`!lpp*=8o)m5|M(%1nm~JQN%((+)a5{_iL`YL+0esoI#IS zJ))s`Aak`!OOZrJ#9*BwLscu_rVS4JKe_R2toH=PJtmg#0B=N4xN=Qz?IA^q%5b^| z{S`4>WI^#t1uesVE6h?ko1pydG%MvRExH0wp9>%4P(~MgjTq0IU(n>Zi(`#$j4q?3 z4W*QM9O2?{lBt+`W+8P@v0^CGVmWOSyUJ~|D3oR0pa(OhS6*Q1Z zAr&bz{rfhV0H9Jy#Uf>6mChg3*l;dQ34efIwQ39e3t5uRCAPby4e?g2!eJBn+!ARD zrhsh#AQR>W1ChdJ(3wl^^&Wo6-|_nx2A@2#XJvBugu1^)ngD=vXY2N2{-?jIbc#;H zEmf#bFVa~ha!mq;!6~|!ej-l&l;SC%Y#csgl7_{kbeo)h4G)1qB{8U@_4&`H03Pp* zP$Utkp3I~c8pN(`TDEzr*|;_SNmAI~B>bJ$Knc|W%ir%>vVNm36HfT8sHyy;ra%i6 zfvfO4KD(@MOFY&zZ38xt!V1g&yrxSEPS!Ka8a&KIks7*(D^XK75VN0QW05XRDM zRV7Gg@%V(u(S)ZgM)KslE3Xpkrm?cIyrVD05j2E4g^=g8jgCNj8F;!*iAaD z0kKTIjC-zNAPT0m%K8}vfKxRn+^e7yH%DF1l2*h`Pl}?1PwYhZ6d;wAypyj=&+gxW{U}9v{*`5qySO`MTlva zD~P@lp@tSnO~a%l$H0?762j=o8BIuI?L8Q>Y(7?UDuV9R002|EkO>4SKgyuU5>`q= z(J5dx$ISmR7BY(6s`xkW1r~v}U4{WG|Ak zJtQA8izXcMc8G_W5hkN9jglEUg_2;Gk@UWn5;-SL2+BuDwMs~&nxIGWOobnml< zo=%cVN6ZHeEZ{Ugn9_1lr&Lf)rR0)KY2h9wiBU09G#OaQ?qMd`sC$CJ_h=-4|s{AJY=3u}#`pfx1k#M#mFu(k@sSF*-#iA7dkHL(>mO1{@xdopD8`o%RnD%hKIQETVD zp0Rb@y{!#bRVIeVT2*Y`UX`UYbwPJAa}f-j@lu7=y3;;mHf0_%GvHETy>y-a{$4FChsdOY#`JSjrbPv+5*zsLBa zCSie?aoDaDlgLBYDHI=0u-H371ayg=f&foO+_0s~9*B7P9_kn zTT9wRKL+fB)B>=ji19qo1tg}O^TK$^)&%iV{h%`p{3&P;IdnK@B*DQlcdK+h>JAu6xwDsr0{dnah^@} z>YyhP^B~khbMT`+#I{a()TE5B)asZ*ikB5VVtLng&V=hTEn`dRl9hUd%nHJeI_*TfS^ApB4BKI6%tF4EX2FGw%K~Jj z@cDgv64R?kzOxMG&U{7RZ>|;6*!D1k{U$&5o3(cOzf!<7R@Yw_?T@sTV*vkqlWV^% z$GB^ZWJ{3!3vjxMl)0<|DgqGzXn?8ec>j;^vEmTj3!?!GiveQ__b<@`5DvGm{<#l| zbz$@-!RQ`g+5i9~0$?EoB5WNY&>Ua@0>CcFW}=plel3VBMQomN2RtdP{3uLV{U+|O z%2)x%R)>O0f+ALP1t@l?2DpOy(Z)J-XG-UXP<2OGb-)gG1&FWZ=K+FBcL#JI2Y6XZ zPyoV?9_I$aB4{V0nxrq50Ht!6VgAMFI7p@1Rg8EvXih7E{G~5ir>Y`B%^ZqQiYQ0Q z*a9>y0r)0@K7}TbQSKP?={EN+oGT_51O&pUD4tG&+Mr?(hvKrOCQL75sKz3WcLHcK zLlpAOQjg7Gsb|=zg6`c<@d^S6F{0#6>|kD~{vTobTjiLDAPypd>>jNOB~Hk=XYM4T z-peAuf@f&e!sc(H)d7L(9--oKWngy=DvT(`Cn-ok=L95TB@}5ePsoZ)BRq}JelNlP zjzj<{!mQA*Oe;*JlY}O|AObByKx2#O0AqS=3|3r+Jir2=*N9By%ZfH=%N=lPGtIDM zV=ncnAem4a*zR~tjo%{f9%`>@L}WCbWMdpjc9NnE7ORTggIL{<@Y4h>0P;}ZM3l@; z=_9EgHjVt2=}QM9#Nh4*%t?hOhR zg$jEtpwlG`+XYyK?u6-LWa%>spaocP?sBnWSqWu?JOzXk0WuUo02|@J90cB+2%dKW z)B->x?f}LNz@7jAE&~G`gh`BdB90y*;2=TF9D?2xfjAT;hHyhXmViP807L))kO?4o z003A8?%*j0*h6PJv~1KtXQIZ?61^vh(_nMO4Tx zcqXRjE(?G_YnX{Fo+&g8{|GNYZ~Xx)PGbfXVFMbp<3T~|O+d6L#V=Z(sDg{5;!=WI zIqcO%0)#`ZdMrpDQbJsriip!=41)Adse?2z;0Z?K)>1<>EraMKLRv4!Mm8$wLQ!Ww zLi~;fDM%|oWQ#g%W@iXb-v}m5Zgcb{l(dVZAeA!VOX#4@@!rkitV<8PQICa9G@?j_ z9y?3uh)y`s$8I(&?t&yV=)(N^<7X1l*1a%sDg`ceVfjK++E&ZrQp13VAPBz8@Kz{- zSt2VK3}X@kqVvXjT!qZ^!SWu=5H<{?As`OHr&fEW6v9!w$t zLTf^CLu$6f%rx#$E9J^^X9OsRP9`7_0f)d@!UV$=7CI}@T!Qd4;?)%~l87J#a$^=E z2MWNT03OypZ%gl9O+h`PtUID?$Y;!X&ccz7Wg-rgN3h~3;~g!v=yc<9flV7M>xh}? zesDRElrt8?OJZ)Eu%yg}nnkHXGwI6HqO(Wnb4Ao;YlUqVmar%5Z$}hNB_a$u zw!~C~=WF7hB@0@pr=@JFY9&aREC&B=R=A1-s4AjtH{@YS3{yH}MFN8?wBxoV19n79 zkuNs6M)uMy0)K93okLBvZU&k%w_f#v>N655FP3zb#AZE{)QQemH)1^6BA$`S%rm8m zg5&)@jnb*Ecs(|Hyzw|r>9*rCt1hG>NAk)jPHt7VRFc&KP_6|g^ARcKD=?0LwfDI( zr3)}Eu%7qGGt&=#3IlxO=OE+mC4wmI0&ErmU>4v29iiU@&eR5A00W>v1ONaS!G!Q( zgcvTeOdy~NAd~vl@mO1c7y-gl1czL_ z#E7Wop&^gPc#oX2kGngCH9I7_Kcc`YN8mQjrfrk0J8pQ61>hi3ya3ediR1b{moP)J zyo^VHOv8RKheL4&5I?18h9`{O-KjR!F_ ztksp`kjogtAh}REKxqRd0^f0%9MTWNd&!qQcN1tZm z`ObJx#wkKWQ5`XbQcWE66U_T1*=+D|M#JR2QhKZAQgI@ha9{u&!O$Fl00Y200+71< zViO3EjbW8aIRj@8r!@)7j4y|PC^r;^##?6iRSM@?02$CFE3;AuCsBfFQ-n06=Ffhu z<^Wn^xmT3Q+3`Na{w&30MtAQK$pKzvQyGE=eVUGd2=snH0)eF@BxS#5>5`}-l3Qh| zWXQV3Y;5<{q{bqEA9gtyLr!;4j-$n7De!!FDi{Eftv%1ITZSwrwm2WhD&u9{2Ck&d z#!4xb4mhWjXcfA1!VDgv>@ROEc!KsLr2u_L;8Mlba%#dNC8A+Vm!NO9Nk~T+MO-mQ znxdK50~3;`pN1U8njk40vzn&PA>WwO1FS?6oiz*xlmF^md)icuS(^iFx*s0u?= zTjC&8;&Q_qR^$YxxlEsKiNAUbx?)EyXGy?S{3++3m)BQ)8Bu)#Y$2i=F_~|{Vk(8h z`XsNdQl_E*R+tP1Y;xiJxz?tWj#yU=XKsuaL zl!CnF8B@IDawY0DzZ?t4*g7Hu8IiPaajTLg<8;~tMA`&ln>?5*Je(xP7s;+s%A`BU z923HaL&yAzHLfWrq`@y+`jNc3yj;I2f@C=YXdVIJ9#tSIr&1{4>^tc6!8{xym!FoK_;A>!1&;`SdQ{OlkQ0SDn|3%(vAC=j6l5|eBwfKCL!J^%p144{?( z02Tp`d2;m_00ER3;kW<+Mic>FXP{mMuGk8otO|BK9?rrRp=uVu02$$+8BkyXpfmsg z>JLDxg+L!^WIFUMdM!c}E_~W=LHV_z_JKo?jV%=qu`<*7I3%MGt!pk&wA7#`3rz(7 zio!DUFL~Xn&}0sPJHhbmDrPBWlC*`7QUjv-rUOfZLij5TfG@Ki^EG6{Z;M9Mod)6Ox$oy@ zujqvn=jOH_1zo2-Vm1QiyaL{%!fCdJ)-Gq9kdw?Su8c<8$LEDL;E$_)kJw#kST;^k*Cs2$1Qsv!KBVai}_F5aT9(>{{3O|FT zdH}3Yi3EKiZFkct-4bf*xXkNb!jT!wxh?J_NQ4zwvf0H$=MPk`9teT}aEhoc8nlQ= zawtAKy#yrUj*vo;S3^JfNyl^tDmSt1MC3bAi}xdO6kzR%Q_Y>QqIvblJaVR!MCBea z0%)N^000320000C9tr?|!eL++_zVF4e?s4n*YE%e2ZF_(KnJ_k?E(Qp->=XV2nGoN z0RVu>T&4;FlgQt&n79N0{Di?^@^~ylYdU|wXAj^M;)gh#Pk>WdJL(w)e}Q39dCT$d zIey1qkLSb{{Wzb&ra%A~3>7Gs06=v|`~HOdufJb)m^1Da0ea6Su&C5V2|Jy{rtp9e z3=tRu18*@2#A*F>00IEeSgk@A3y9SrSzHhX?Sh|Kr#f1df+3oy=jza@SQ2phecm6B zxzxk~C5wT;*q5`~vI_;;Vv!g2-$|#z+v-}W?33vz&-Lj@n9^vo2Gr z!8%ZL{Q@FwQ#8#&&0H|%An;41s=e;pr0W1D>-PMiE5t7dzlpR2`@2Y!*nLKz02~J~ zhwE;9A1Me71FDD7^1MNS01^bTF{<$Z#V^u`gse(y?*%!pW3ZF6k%}V_Cu%!Jjij>N z#{EliB*^8w>oYi#pCAAXh&L>gdXu(ox&1h>Q_6O}%hT#@J%VgfvT9v}gxXdD0mNKzE?I1rZ(L$J6210d?2 zd#V6<91H*l!RoZ6=~R180f1{Ng{lAw%D^EriXMcg$MY(gEKxEN+kkGeWiU}Uo7FN) z?t4T4%TbNzf~Rj%EV3up{Jf*eDH6pzBM8g10HW=*+?FSooaCCNh=R{RtZsT_)~VN` z6EPtuCHn2Dc+MA_0GVq((Pnux|D5A^)5?S(**+xoXHOOpoGcH%2`#Bt_LqF;Xfr>n z;JQvhspwk{BJJv$niqv=7-l1cX!~@~rRx|%54OrW{!O~#TIO`RS(cVHWkozN*_2z|Kr5CpWHCt2VC0pNfcDx`J4 z7lIB-kn#~O1lk1>LZrRS^POY~F^j6QVun)EQgB6lp^!&9#~OLjAcj4qF=u$qz#Jg} zEARmoLJtceOXw#>9I8Tg&;ZnXAvYuNf&elGy`3orXohtKlf;}nD9grsC z-vp9k`Ev%5zL63zSRmpBGe88q5;WYzogvR3gZ&l3L{AjpgFG^%9rdS>10hW^P$Ee% zf0gpOM^}qmA_&x-N+XO|2kBG+;5-TufCySrA-e#jq?Q<$4oFv;D}f})&PaIra*YHE zh)2MI9{7TP;lb;E$UvizM*NVUI0pdasCg+K%Vf;5qwI&N>p zi2zY^lA_Z+8>0taeN%N8O%z!SKGSxe##R2`i8+x?#8n@FVsJhO(wqRXiJuV>_}y9j zK}u&`pVT!Hp;SFwtQCa&v+`zHOT=`3zz%2;fCfv4u=6T{Oh^ha061&0uPT9@GlgIP z3jt)SB*j7Bmw*xhz<>Z4!whVI0ZJ)FfB*qNCGUi=nzF(WL@+y55gqL zfO1?K17K7D0F)E~D@Q0tu__Z{U|N6ytTo25#z?Q)k;G=+(OKkyp7!>!H)?+7nq|gq z?R@q-#?*7t>nu7aprMv%cym-*{%4mpyEW#4ZrEE_Zfxe=(mTg^n`=#JP3gL~M!9w_ z(@besg^)Cx(R&-s*uB>=!QJu^e4Ewrk2iehwPyJ!A|qR3#5G9}Y!!lS<5*He9Rs!N z>3*6;{k)fzt=wzDhSK9QcZvq~7IFx7ClO@A%^~q#oDp!Z`%i1`T0pbQ*w`_vNHNmz zt4(va8gM*3PbN9m$@~~}VPg0vqzdW83=Upn!$dw#hUF4=eEQ8KCw_zIkbqDOK>%G3yT_U1&%svai^&X`_c@Gl5qLkqC9=b5!mGfpo_A0A3$;gYOY6UXRi8uhD z5@`>j_FD-IJS6H=oECN9#U=FIb@g8+uZFvUf&zk4N~#E`-+g}h{sX(V>w4}w z=iKLU?)&QzH{gi(sdCkC`Lwe!NXBO|Rant^e)3l7 z0CxYj7(gQ7XALjR6I+;#_|A1izcBCyM-@W{N^pS9ERXT00k*n4%_Jowoo z;Q8Rt?itMZyE$*ThH+Vda<}$bt-fL8y(?hAqJ&2L{bfZOC8ol=9`iOnwae;l?zw#4 z?yob;lgMC4_R!Nth=UIy60jmtasBp5=<1MFRJ~5AV7bUB>AOPSk0|c>FXl#fd1qTS(eb}%u*AT+V z!hOyQx%AHzqM8H~aoQHRXn=%bEZS)X1+YW|)Y%zB*nAi?n_|qO8XqDbqAe9Yuo9*6 z1s`6I&#($h-&I`I2e$YBb}YXyf0aCSp|u4q^EP?rR~$ zEY+wQscO;pHZ_hhiZiAwQpW!NHikdU8^a^cK>P7&JNREmd1`t`qp18My_!-&s5`8_ z6u=PX^VPQ##slK8gKYBu;}E3E}% zC7tpq{#BwLFJXfANvM}4#%0N}*91|z$rxPC&(^HSA>pX}As4BE%44~PCj8HGgM|_BuR*=k&Hs`rV9Ctfx+~ueHYppf&81P z{zSqFfj>p<@mU2~Z-AFc%~>k9Vj25-u#_S_#*V?g(lm!{;_$_RM$x200MFqmp4XHl z{w7y4kz{g1I^~MOahkkb*kD+&FyTYKR?A-*zSKHhkz^k3!b7OopAI;@5Mr zJ@U>|bCmN#5(~pR)pNG5G8ig&qm$-MqvlOT=3VArMJ!TbJ@NU&MCI;O$2tv?It)In zE5&Zi-%+A4M5ubKb|ViFl|~^-iBDWR-`OPHDNe<(Wo@O+|5j0Yax!dtq+pW9Zf?m8 zkJNR%m+%Nql)(mxyQ6?dP{2ObKe=1rSM-fYbO8YDkfN7+6XcG?Dqits~ z`s5+?3Mc@EDz7EPTqh%d6o(~z{O*K%ue9kJ6eV*31+>@W5Jq_*p2`73fHFp8^6%Vr zoC8g*J4E~I7#WWF*E8`IS;yMj3CgW-(RSF(L}X6ttNE0x|O)3w~ zIX_HXK4cUtN=z)w!EeOR_-R)E&FrYWq*Oq}TV7~exfn;CsiIbsJ=^>tUoT>rKB}1g zW*L!L!>*!K6xE^bYQWdjvQns!JIaFIWHsAlH4j0Xr_?j#=$GJW~x8cLohC-$PMfQ9DGV}=1&=65WW`VpBii!Zbo8H;xlsq3Fyc#bAMVyCKaszl%MS##s<6=;%UG>#kr z_;_#ml0``pF(!`D$*I`)8OiK>ot8Y3p>7rPBFe+n0)99)+Z=j`olcEoZ!A%OEF?pQ zWrt7>EJc}7m=@Ej%YmvnePF>@otWZIbSs}px3v0Oi3g{MTn9Q=)1+c6f3JVux%(D&ZBS8EC*-4+XeCItOsAEaH#=m<5ai7^C_an9FnV(4h%oODQqjDdbA2 zI(PQwiM8tM^}mZWMZrnxVdFoF5Wjm3p5)c%yq+b>v}Ga7I(U{4@{Hg{JGO*;a%Vi& zUptnvaCXqnA!G(7aGPkn!_|SbK-?{Kei!aD+vdDAe0+#!;ri_E=y$}D&quwUm8d5EvC%~8kmbN z;Ey)P_A=JEaU$4!X{a^;)DzIc6=DuWvqNxc{9j7fhnK-+WBj#7Fv+nfZ5(75AnQ(i z0!14?Pc%LNm?&988dx7Tu%JeG91iU|8VD3B9NDX;EBdC{YuZ*?Ib&h$5~^LCgV*m3ZC2=?OPmd&hSp|gJVl?LzTIb ze}^;IxVp5tGmX1E^~yGKew1`9QnOP((01FT=KZdPd;vSN%INpdFMt1&GbDG-HL)mW zb>FUAIaYB09#aY>a5Tlm&s==C8gGG1->OEH%|u_Ykfw{HJh_vr=f8pO|CBW47*8VH z)E)o;Vli+;qPi2q)e$H77_x)(6Gu4lg`EreJ(Hq6v|}g|ur+5YTK9a7An^Fr+#$C^Bawnk zhE5WH5_2K^1HrWJ+G3;l1~Rq1t@zTo0UjqtL0=I%OceqmQ7uf__fSuLs^e;%qY}Q{ zpi+`$z#KZ^sGi)b{X*mBziw;=F>%LnP>(&w25%}ujyO>+%qi#D{UMuMZsVQkrD9Iz z)M5XA2)8X`P48*f3bED(kEP9wd>wP+`1gH#leL2OeLvTl$<*9*t6sd*bFzT$nQv3& z`WrB}K7!I&6ainVu=7V)9m(u}el!VqmxNspnP<8h56za(nQN9a(!VNM+Q%NHu z4OCcndb#?Fh3T}K!DVoaivE~B`tp7K?YRdUje3R`k`^nY<}wb6MgZ6}vMB!vdi$5G zJtyY%9mydT`a++EI)nH4l-@l3$_!8R9IU=@6A7>d9ub5LYW%EI{GJ~FSOIgz`yXY! zsXv=)EUw3V(c07MIW^9`IaLtZ%*+g z1yHbjyjfdglXigIx|H?zgaP^pq9G_x482zF+ zEo130FC`!%_4?sKsfha5ui8%>TG5L^c<`cF8Fk00T|#Xn4ovQKIUZS{A>Mjg7NV%7ntf1#V^P#T>1kp((AvYlM4zi1z|QHinx9Rh*xNY*b?Z z3wS`2wKq%1d*5q5v?Wddf}>?l6H>%~SDeDnETpE!o-|^e?S}g>EH%$GGyi=ot7d$p zk{JHs9Q}x9M(EEZi)bcOx7dn*%~fAJ4<+LQ|79|0rFNtWeh~M)way-8P5J6|^WccC zb8I^enC^juV4q4t=wGO|OFZ_slLc5Wih$1r3oaH_Duhz_|G19}9&UZ4xW+!$R8stw zKI6CtFJ{x%a<@&LGC_W5c0UN+X3Ih63Jgr&Ns%B0a5gD8CqVp5dxH`=CyKjciGTB%eC@tS;$NX5S5Uz@ zi3Lju0EqPG(xkHeH+r~2ms3KhS2k87Mn?5Yl(@u%m(44c#hbl!>`^DbkJBR_&^x}i zuipaaRe@K|D>}_Z)K39>&PxQbjq;-e+qx?bj4gm`=X&zrY=Y-X zZEOk!P=mZw0Qn64?#e*5dxhQXNReRpX{U1Fb@78HU!7F-ubUnoRD|U3^tOc){6UBU zV-y}|W&seU%m_%o+u?mc^`}y~Y+H^=J48e%Y>0@NZ->Jb(y;NWTAr zSy)jdsc$5rq-Z-d$GPu3&9d24yRiKYYTygAq#AiE$DjAch)aK#$Alt?x(eZWUnZ2& z2=^}fvIrPZavKBu1krQ=E1G=@2z!yx$yHZBd#y(}a(LT>J4z-t)HY~Dsr0LgLT&WL zyjk-p_5`n~M?&z;IR(J{#_lhYOzn~=1_k*ImPY|dauHUo-8}#VPsS{lbuj$=QFUfF zA-_URkn%qX^|y%yweDr1$TS9LQuu6!B0mZ?MFlW@6&%ve;=%yoEMF_1PxH<*;*@}- z^m3S>JAgeM&JIY*ARG0+4DTJF9G(aOR5(!%pdmkItSDog3qWGzMBH!DBoO2dz?ld- z2N<9u6kHHt?Jal>%aBo2v{~? zzH&xiZxQ>=@^g?lSG~pAo^4*O{!i1^FV;yGmi5z~Db5URphho74A9J671QRWH4$&S;Yr(<_1ZM>`?;l` zp2SN#an4>wS~jHHJbR7&;1-lSG5yCr=geq+J;VR*E$!=8(yYq1)6~G!jIVNOLks&! zB5czxb_VSJs0h+NMh-D6RiG- z&F_Vf#jN-JF|zW@^Jn?Se2F#@c@koz!fR&9Q0F7~vU0^@)3mVVaXX{dG}%JGVOv4l zC!6!TNIuIoqxx58c`o$yhe_mWkavdD2x|ZokBHX>2voG;qy9SHUCvjazy5RP!;I zR06pGBQHVsIZGeBHgP1+{IEi@&Li(XClgsA6CQFY+J$5!KE5;x2%T62gm4Rn0ic^! zi0lEuh}y%@@u68(F{Wob`^cpFT6i70j4>1R*icxuQEPNnIcep;3{iS&9`uViBi&Hs z#S)vA2zSOMufRgaQj^KK5@E&>GiN(M5MU^Tg8b7%w$p&6UYu-tKjgsxr`0-s z^~UN!NKv6wNmW0q>3}uidF_N(;B*09yUplnSbkH$rksvP6qza;0AT1KNFbJMY|^->-U{(wl0*Y z83z?NN*q-$3IKBq;I0%N_2X3t#sR>^3{mQDU?X@D*aeau|HL^!?+o{<={U`QK}Xtv z1bA>T(bzs;4re-|lCIAof>3V| zU+A7hJV60!F|#pmcxj*fG+?Yi9lWG7Hbxf_{J;$}xmcCCe`v4z^{f7H_-b?Pz_Uvzzpc-w!c{HDP>=q->TvJz;1z5=c&NOvfA z`$YuMW69m|-mGkE8vyvtvhOLJB|8A(pTWi%dZagJQ9zKMXx3{yPraCGP$GsDOt}-5 zZYu0fc{{>)%WeZC4=D#vk%Qfs!1NV2Cjfv4!UG~^89Xh$ZY7&J_&Zi@-rDFydh?Gz z0a1}b9})ac;qGbqzUFjg&x#xFmq)SoxmRLJq}a+|sx0+k_QP4{ESa6j%L*3G0Fh<9~fS(++tyu(kO& zfAM5lyzeY(awzX?y=_csveV`mexb$QI5&XwEdO;y+N@(xzA+3{N1DVBQMW`zhk7z_oatld6LBkuLPn ze2DXks@+?)KR#*G*HIxCK=ba?Mcd{+mkkB5;L+rciCU}%F*IH z9Io&A>GHf(1HX7PY=fnoWZvU*0S*LgWH` zoqkszSB|W90>G+}TN(a!Su~;ygZ1wS)FFNvZV;h9kGgjGzV7efa*`#uXurWzp8*e4 zOn%9#a>)xYfy!9`vIy?O^&3Hccv>JA8y;-rn&UtYFyH|=IQCVMOT>MA&FgGk8TsIVc)@aQt)$KP37g(Y3>_C__WDqTKD zyL_I{>-D-lO?%}f0JOaY+zubOPWpc#(ez(<+4jZsIr=Hq?CrsR-x{yrSJj9!&h>}W zFLF-gUXmgYP7IHQ^Lhj_Is`Oh<2O5mn|oV3L(t9Myfx$`nKX4`C+&2zHn9@VH8b8>(e&~0z>-_I<_fVgANm(>Fw@UV zu|K9&d}4KGMjJdvZG2fd^G7;-)Ykm(ZRYr9)Usa9Q37|WhT%Q1e=cHbo~CeNTg2G< z@hZ179HOZI&a1lIBMj6DK9xYKEo=8$_&9R_st%S=<0m zRa_`Hfu&1>`65TK=bCe`MH0UEM2PGw;h0SIKTyykTsBgYlTj&SGGO$DUi1N>=lPY+ z`4R!tq)h?ww3De_%_LtW(7c?dQOAiLk?T&x$f6tq| zpuVEN@DINhJfZpUSa{D|jg*mOOw(^eP4a>C8}l8oGL?mSU?;myLb09?o~}uK$%-$F zxo_Z=iZM(uex?7({t3&)B@ESvaol3AC^h)WtfhHbBoOn&yd4gIUSa8fk@JfqLy|Y; zky*Nx1+{*~qPR$EqS>4?htBe}KDUj~CdZ{E*X5PXH2)9F!qB<2g!G)q$L{7m&JU<% zAN-o;JR3)wHvcAd<-d&2%AZqMo4j4?o6kSsdGCD(-dG$`_6``Qz1jp%p z(KkW0Spium;b?HbN}VOiSPRIf$F%KxSXQF-_&0>BuzCy8&jXE^{BXN=B{Bn7G5%4q z10qgH62L~Fx4^Gpu@gqU&u$PEli_H8#{7sQt%4>}QnQN8zi+hau((70hDLXY2kw=O z=t={pew8_V^FY{u!|3`wEVo`#h~q&$2j6j;xLUgi#L9{0p&N}0`%h1Wr+yp;9j@0VXcHC=~!=!!D)%YXivDMuz@gL)KQy-NO% zas8qFx&axzUCLf*51CgQGFmmgIz_YiLLGxbOxo@OS?JSR>qixFrad`aLjKLjblSi#_Avd0aD3Jq3JvsycOT`?m4`#Sa~`z}CC`y_nvs z$n-k%BZDeQ|9|V^&jT9osI@AK`2LeK|0{TAmGd>^SDIw#e6@i(tHJUDm!j)0_X}p0YhNDrXxR5;3QE5>ya}jqXL`^sZ?|rMBV!il3c#)GMPwlH zZdLJJing8f2}X9g6FAvP&_sOQbp9pp`2bq8XmD>T)?V z{Gc+}va&f*F@!vI2^N7=%Z&#+a(l^}(-lRFf!F6$qV37q=}1r@lAN{F+8WXa&(c)g z!lP4K+zL1`gz1K66m++)CL$CIX#Qk-Nx7xme)8P#CkLGEVtHbXs~jJA`f~idEkbFt zYCnjZ>trk}9EOUkTaymZ!$S(CHCOL)7n*!GJi_may-2j^XzE_%d(v444FzoEd8cY2 zJei7Tb2xW%!h3sZHj4V%;c;0HDwRtKas4j74q0#a2dw2&IrR3o1QCfoN&8o7-35JC zJ6g#AT8t@n%%Rr|gCP@wn{k+Tx9CrZfS=-Z*pZ)_(?qruQ&~Qli*x z+J_hKJwrFC%PjS3nukL~^cg5%m{KMO@zA83%p$tSEr>Yn?Fz_JE-8IBh z(&mjIrAqT0BxbSt3 zyhdctQ1tG=6Ye2V6X@VU-p_1b+w`mj>koy>gSM~x3$62i$9zb(*p9r&S!x>^KI<8* z+NO%s71+=yej8x2^YXg;^i9e)qGaY~wGs0Cj1BJ*iN-R@zTA>2}A}EB4a&E@%>x`Rz^JcyH`Io({{_9jOX``vYNf%=* zQ`~rp^|Xa$)#E0M-Vf$X)78?y%fx!HfFYOt(d^bxTtt8MvkM-D#rwxMH*5EkJ%N)% zZMDp}g1m=|kB_y7>NS~`A6EMD+5K+h+{+T^SQPWu$Tj?lfUEZ5uUMQcxiSD)nG$S6 z1_Hk*FeV34G@a|_y2iyLESnWY^CKzNhh-`rDhA+;M!17Ro*Cp{a6gJYQmmfG1M6g{ zuN<^DyDDk|xiXrgVzs3~Yfs(RwxdX*(JrEWpS{*4*$6k}4cp5J^Bz?V$U>A)jN1q8 zN)(4TBS!|d5B|P9?`B?R1K4ng?;rqx1lXuJ@Q7km%Z)v9xNvY2Cw2k4Cx+w%30jW+ z9$TiIw3#{_0r=v#e5`3|oTgSjUIrAIZ>q1XR??jL;tX7_(7s?#*-E3Dcl{CP5V3OO z!>&eOB~rZ1=_*P3_cjfbpxLAMn-;ol7Ofkn%Y1QO9Ui^Lrw?XbUw(G&op1eBfC0bu z7_@JvW1=CM;9tYkjNxz(f)=%BuxbB_i>8S%M>`p=C(m_2X01gFmnO50}Dt`B2^;bvct%wZ~uJ2aZ<9=NLkjMf|_d8_-n9L^WM70SNJfUSwz7wGsK118~H5$j}=nh%jR7uI6qfg+m#p; zBnj`oZf8GIg~gzJuL99!)BLZMIXnbSqsx&PKrDsxG&VXjHslllmsfuTv95HgMxwNZ ztkzK7#Fnay)Ay^ftcMPGsvO!jrHa*rx5bWJ0@1A6@Z^VS`BwP1zHT*#!ylFj8C1TEb~6$Y1`E!(<^6@FaD{NbJ=gbYn#jr>mMui>;}Vf|Z# zLR*b|Ne0imt7!LHs2!~Wzt=nx6u^Dn`2H{3&}Y2|M0I;~Rd{Je=pE4G{X$Kh%xX)H zOIEzSF{()^94y=lK;=I;o)9N60P$vj&AD zF(#>_;ajui^}fyTT}{KyIQAEljkUEuP7Ln0+f|F74tI@(olNw+3U4hOoPO&={>tzB zLJQgW#n0=%Q+F=DOy`UDq%LI(4}Qh za!aEF+jekmH-69=+u2n5Yq+_Zk?I$FeK4(%jMwmbVvy-1 z!gS7(Ht#Hb0v&T0e#yNjbSd)Fv^SM@hpsN|m+~i|cBMG+1en$AeDMnLrDgs8 zJ7_qU_Wf&G@dg~?8uUclcj!ld?cNDRc!gH0Il^2yv#Sfb<}?xAfAr_Hq+>7lpXM|SnC!Yc}LPBv+wIh$Cz5u zkKdrU6;*~W8^AQluVV@1Kr@sn$ZTIa;|c2p6r2!}zT9H_`FD2yCaPeH?oQgvAAlmq z>kaIvNOl0iDEB#KK5TE#CrrxNBM1QevaIDqZRwXBzjh1F;*#m(I!8;)9-Z>BUr=H1 zy>0Djqx&4W7W!IbLfL6JuUqRI^Xs+6ELoS@+PoyQ*5ChnG&7%Fe8K~#3TLoCjkSJ+ z+v1+rc>hocxAM6dD3TWb#`CjKgG&F3fX>5>Pm)$;I(?B5b-pXgQnf*#Lw z=20h$Wh1dX!iTML5qP^`b)t@Zj#NTPx6^~ttxhkoc#{$slwFDBVsiUA-ukFcXDCO}_cKIWjd5dpq%Zr~(ny&qA<9Z88r2Ic7NQ;sSel2

    6Y~edsa#@{$4etFf%D8eKyPlX`3Zi|*SgL!&aq|Ovv!47`dC;RZJ!EO@ z>66yJ?~J{97=`(mpU@-D~|KDaZ|9Y3a7I!R=N97 zf8gcTKe@Gp(`%Y~I>s5p?Oit&nl7=31E5IK16o2pcHzDF(fWRuBJ9i7T@}ao=Cs{v zl5g5ggB-*KXUuD8$n;ZVg@l4103ZPcS~ezJ#;{ZHlStC)kBVCLKLG$sVUPZ{?rVBn zJ)X=S_~8J3FmY2HGn*M`Z!lx)(>RhpJ~Xo*{izJkNZ!iOKIm%Itls>v_|3&oxeue7 zC=c$d5Z9V&tw-r^{n!q(?kHazweEFLU-&FUyUT1Uec4K5SN+p8XecPX>2J@bY1S8I zgdg_%fP@LzQ#vc>Qyk`w|HCp)d7LKVogxL%xe&c5)1i6A>eS#8vvWbzuw5sBgG?md zr+ap=DOw;-PHb>)n9-RoW_D%oH{Vt}=~FlAzm+>~qeX8(QJixBE}PdDL9WKIbgzNd zkPj_~fuCgsby9n_0GwaHE)|WdygA4AT`7o!UJsQgwR!ItJXKBwlj|_h3N{Ot-s7Nx zHcLL`mQHdtw!1&rC>O;Oo4n=80s;)@I7HZV^d%FnB%_b=?WFSM8^PnnDpmfTWl`9N zvP#jr<}JeJ2q>KsLWqA^&g@BVpoCCjth60CX5;7sYqX#-G{2ec2sqYD^D1SQA>qk!jl zJJBc!afv=cAOm~RK^4UYsM_&Fd+>mS}~8E%f51`@yn{PD0~ z35T8HbB>yeG{~4*y&lU|P@=Gs+zz}RjWe#jf%T?Jz|w~Z=OVU8apx{t+RpI~fa*OW z!Q*K*JPfZYi&L#w7DE6Oz)%1Qa7cs#SV4yj6YFdm82YFJnnDCvC9_U;CxsM=rLsas z=^UUoj|L7KRjt@ngDQEA*W%i3p=1CqcC0N2pf`^vV~r*Vt0K4&kYU{jiw`v_Gh|*7RJqF(1{Vh^HuC9+pF6sg6E2wfgef z`VI+dyLNF{3jF3~ZbM0Ns$6k>wih#$o_!+d0;2(X@f|wK0~*Sf@L zG}Qw|e4oz^W@q_1W?mg;XX=V7GhV)yzwR#9?d~JUHTl&2`J5r^M!6bBMVI&*^9pvv z3Ujtd9PK4okH7uk6^SEnVWJ%oWR{&X>^(?i(As)bW}cfyzx3|a) zN@3C8`97DqPf)(qQC;6DUQxP}(+ZjyNV077d?F8=^#6uf`iAiq?l3fuBM4t{AB2mB z1ac5mHP%MrO;uMKr+`nUub9Z|$vAt}G~h`^FvzTTKb>W* zug3N_4fE>-=S-1vo_k*;MtWFF*P*@A1yfKAMOg2 zy4w=}ra3%E^&3IRl*n`>V>5JKBk@o%MM~DU)R!qQ$-r4A_iU;~09}-AQ4s(yYsz%9 zwV~^?8R#jtMPC0knth1TU2OR_x48W3Wdx{F1DB)ZUuEf{)E0APzo)?uB1vrhN>)=> z(b$Fr_59XYY$2=6p`vnJY3d$qFm5 z#w~cnA0j5v9c0n?If{&Ie99absclw34dRzWBg}ARtaHxAAxlaSxL6@tJ2uMr-F3Fw z4nMeFiU`IDMzEj&E8GzMhwWmY&;Tx*so6L4q#C3-wW_(KIv7`jI9JpBiGwT<^=7sR z0u!Z{P_*CFYC^Qdl*`7jA4ATiw!3oi{GVx0DMA)CrnSu}* zk}J|NeH&HT1cz2$`A>Jk_Z0HS^IdM9O7I(+%gbKHqtP-HK6PGd(PuHeNv_)Uix!? zUoml1?fb-X+~~pk!D4ic^L=-X%1W)v@K6jvN6wr}#4CoaiH>ijV)(lmz{OC?Zt~4< zwL7lu1_n6$zCtKhX5aIKyBs`+C#fMyF^B51a3~N0;K;91Mb-e+wbU^$dWVPkbnG@9 zTIZ{*=nvX--vd&+iZ%xX{N$RHd7{}refebL6JPqk1k_NCbqgzXD=n}7hn43%0p!&w zLmvVHBDtL%=}1VzZ&@byWqg83ym#6Hk8>3i`;P zm|V2RMK-Yge%7SGh3f(E{(K|BAy|9wqDaO7XG?&n)_&Ps9aT>-W^9MsXM_Te*k2_PE>>4Xy z>?{!7^DhDBfBGDgJQN>=#V(L$v1kC8B0|07Bt_1fKjn6ESWj?x3N@V6dEx; zfnpx3Yir}g{e}PtU4Ap4tKNa?%+F7cW-1@e90a?FFX>r`w|z0%fFiAiIHA6NqtU5uX|%^Nz|=1&$;{BW~(|~R84u(ek1glJN&-6*wXC-zpbg$&-{!@k6T=> zrga~dHdv$aJ{smhh!l3e9wZ*P7B=Ah<~zW|x_-3pmvV5UT;0@BGthqCB|DMG$F!la z%45%*Je8}){1W}b!>*yu7FtAb`hhA`A@^r5t+mgWk>JHQ?4&U#q>Imi3M0eC=d<+y zPPy)f`PZ9{eCU^j-Ta<7`Ob6E?}f^lTu^(HxKcq= zotatzx#b;O`KKjMvWSp{Z-X=7|Bd!xYqigg+LQ(At8KfTY`sI_t zYKsCM;9BXTpzn((GO(V%Xcn$$I+0-Ek0_iVEhKZ)M!|HdIjUO%%eX_IJGgGasj^)YfXOFZ_TnLDxSF`~B5sLagGm z=yGeMhk`w3-TwRzr(b_xs!v*To2JPq7k+Nkz&!i5UKak@d)BogaAVSn!O)sSLX6mm z1i&M8{YCbLl>%l&>2`oOP#Rh$lSV~KlX*s)5}1jG{eRAT41hw?ssAtMU2PW$PkF!u zO3|o5^rbk#0g$p|d!Gvj9Zsq?kYTlwMarH3hJ&mjmO&i?D3?VcK{?|QfbyfZcCd*6 z5*GUi0L1?q-~X=(kg2*g2EebYjZyNqO{{GoBC0VoMm?e?}+?0!+fZ(h1vVpK}RfGr)q1QC21n~AC?`SLP0yfoBm%#d>x7VcMGrN%n?QQlut&zhtk>2_?r1FWcxzT6=D8mTMpXx1AJX7r~+DIqJzP|D`# zWf-i>O(_grzJJsWPk&R)9dV1CJDs=*#>sr1U7|wFp5r1=x z03XFVxCO~Tmno=wrQ6kME3dwZXi1`a*&Y$&|GwvgK;`(wX;9u|py21$*`C{vHE)CT zy?*co-Z!<+^a+R4EnE+s!N;GHQ1VTx6mez-3l5c;uXf(Qw#&Kp<7xQJ(=^Ap8L-_b zdGJ%1wLGmqbq%#QJ{!|RKlm2sm1v4;Jz$vq?uX)4C3lpAJ_?LTVo{>DGNp!LK;u8P z%i#n$jJ5md7nJV~**`Z2r!4~bDhM?IvLDeao`#3QPR0-`ujH&+U=zQWW^cy<1!|Op zE|F7mc$fj8DOq|i8CV7R4U4}|1a{mc+>PL?Hg`%{YLwR5JynGEXtKvPgUv8(IKa~f za`Db~Kq{^wmU)uL0J3;0#sCSHms7(^9rSBN@R8qnT89928H}%jp0T z$2r8FiA>7AMOYJVSPyMw8>j9?MjK^FBRxT{kRJV`nMrxx1J(FE0c%e^Nob#yOW9+J zxWL(-oKBK(a$ddR6j5&DQCDx={3eCib~pafFY?@laVg3A-2I{jrdN-~J5BjlDPGZj zU@1yTMTtUL#dEiciu48^xAkLp7Q3X*dNQ9EG)QF%!ILkR13gKX{>~(5e_?ALEKgwbG_mnj$w4G6M;p(;bN$$KM8xV-ObD`-S*s&oQyxqk70rta#KQh83hH0Fe`bj1#) zA`jmq@nu;NpYNsDr?$Mlu>eSr8#~sJk0O-;pqvUTLnt_#3ec;mP}eU4hQ z5H>&rcfCrz5~jjdLB^pz@RZz15Zm9bGc3PnX4@lERVODTBSj^Vt6F%;-52ZF5*kLLdJ+vcW1L$JN9snThX@@L5u=y2u&hNqYA`v%K^)zlPV&Mk{Wi1hc5{LP=Y<2 zV;3vr@qmvgbwoT#B6T3eNLEU z1vP`3w$H2oeW(Y3gDEC8B#_pwWj|Y>bU2?m=ufG&E3v?4YtFb-@LBTwXR|&LI?Hq> z%^OaaD_$n87h3yJB8Z*KtXEzL_l>{`Pn4DJZt!f9v@rFn=kKlz4d-2Zlz0}xm&L<^ zKTW@p$?N{PGDm78ba87(cRbG;N2r-yO7Z4v(qM-vp-j8aZtH`;AreI+s;$%aGlh;& zQpZ!ZE`Cx~YYZ6h9O_*ne(aKWL|W-f)Vq{Nt#SB`wOZuGJh`o^{_*eU-o){XmK0Lg zQwBnE@^8YIXIYe1*#3fd0MU3H4&x+LF2x}VA4D}|=2F|c?Dw-K3!bVE+ri=2yicNr zKHo_M$%YQ449YS*wmu0m_0n?cvh@1o+QiHAWZ~jK*3Zu0K%iL)diJbDcg)sjgwc}v z93=TcMbGP7QQ$t!+u@iBn|^MuXVBQM8{(GE+r#OSS}Z+RA7~;3Jzsf8hWvUQ&G9sC z_v0|_6o4g1lg7)lNp}DmFve)nGk}~j+TR?7eGuwgGiGDj9=pvlc+QwQk(0NDv2_pF9xWgaVP^#S-Jirhpd$rPqHt<<9q|7@wg#Zk1&;RTq8 zOw{*@YH~bJHfRt@1(i!)>Q=IR-m0lWQGpAM*BC}m0cV^SPh0lm%^$XJ$0MgA3~Gtl z05A%U;;ZKXePQu9#NR0c^wxED4XJjSCU**Yrlof^FPP|AvD9S7(dH$;xXPgOi4@9a>kSQI)gYZ zn$G7*s~M@dE%~_T1rDCA8>tM%P)z}?Jl2+{?|I19&K-=as@F4eI5jn$+npp*bD?p8 zuGr>4WkI5)cC(SF0xOOfbbjz+*{Y)B#?9DZC+H;O?`QY*tD9J>;s23z7Jf~(kK4XCYBYnTloo{U3IJc3tOnoX2@MZYD-#7KkA|;E2~$25ay|9;YX4 zP4xvUiHkIbdR@34>?MWxwl;$WpJ61`Rar7m2z%F#xi@ycNaX*HcP%pal3Kl*1v=E0 zGSucJ+l)`ufG;W1tVyTMM0ctpcQIiYO$YJ)6o;t9(}$BW3113qxoB<5?U;}&djHRr zg*e-cDk7S920&mERUJhSf^<*{)qaTf=`jWWF_yiS$cWzzWRqZfL5XFH2zjWf-EE9B z*Z=()XkVAT7{soeqEr zBs#ZsVBT&DS_X0_Gm!(5M2!DQFf%Xx^8m1s@x zdtDoe8Xr8tK)hLlPX;S1-%72S{&En!#n<^QHJd3uWM1SqiX%9Q7k^Q>+$j;G=7McX zxUl^txxNGhgL+c1;?ZrCR`Mnf5;u%&G9y?GW=UMxFO{!7)ySYe>(s-q&gQh34+Xi}iD3%rpsS#u<_Uq=$9-Uv#oKP2Dv>2CA!H2NmxzLlE54?};?_PsO9e$yF&U_o z$PU2)6Ve&&AFKojfMkb&sA>Tl9Ns}}sxlI5JjnFE#j%*8J5KkB{`TdM?RVRJH zv4mt^isp=60OE20kPd8+`5sXKi9%NgRd7%M-Ojw+zAeG_+^-#GQgY#f<|R7x9TJJo z2h3i#cFIi=OmRGDBoOHMjcM+*(lYf=p&W6Y&vbN3U+=`FB8f7h`~^sV3Pj628S+!w zy8>k=Y41-#5CA>X(ngeRjD0z02`4A)n`VTFn6a(h6_pbPX%InpgCirF^7^;(RC5jFCc$ zd=LCtbHXMJP06z2H|%Vaf0S;7Iru_I2Zgza=vDZcE0r4EhVXcp>3|;x@=B%LLH68k zFAxVjS7XPpXpNOsjVd3itk~f8xEGYJQYNVkEczHG8){d#K`hEIU}JTY(g7Fs zr@ulDYlmt4Z@pY=Pl+mp<_hxbIL{2vPA;Ztb#D;rk$RNH-{!hCN~!7hVg+D#>Ev`N z+W;k#9}F@PS1V1iX()J^*$fNgkx}u-D76b zV^(jBi~piwsaxQb<3Jh$k1$cpp^ofUCkK>Me)*8k&DFSg#LFs(#C!da&J}qo3S-WR zhDx{T*>&nWE*pyfcq2vfH0|!ESU$PCnVa}+dJ3BbgzA?#cdeCRoP(5@WM{@o&WqF` z@6S1r3i%rOf=!t@b`aHm?oKYLhIE&+0>?~oGnXNrwF~FWL2tf%*%-5E@mU{=6@X&h zXIRTkX@WtmN5ukr_C)_FZVyR}DyH~@Wbj{=MS6yY?N9)GBqZ7Lgp3qMb>bxW!YNz_ z?8uH~BIt&_ZN!Q{q6kBR0-s1~qsYh&EmY>DE1qjKh+4WsgEEyC_Dy`WxVr>aN;Hq$ zo?Qq9{|Y^Xy?k}@aFkL-_55|fue6}9f`e(OCgrH6x}qM88ezEjynR;Fgr!_G+y6-& z9dt$7q*35AZQ*B12E#wPH$5*6@BSNKVBOmZL&d+wd~cdDf`ODYFx(NrhzXB5vcPvv zmP*s!cT_=IVj*>3F_YjI_i2F4$&*C2cN{4|q8;0*7Ak&t_BDW_Cq>EYwjp8al01rM zo#?Q-tXt=2xm~p6WV9pglMq|&?X-s(%ZFS{6;vy}q2-$d{x|(Dj6aw89R^P z-FJQ(Cbb&;H=J`T=}#b$Ut1ok@?4ZcDxIC#(q`0+jWl<_|BI5qFJ>X1-ER?4fx%nG z$`t~OO-`;Dw7a?r#SB(EMBln=Twpa?W*Lz(?@KHF?7^8z!ralG$62ev94xf5sL-or zYG`3Qzg4m45p{t~7_|PFuB%M%{maIp7UrWDK_g-`wuc24b3S z4`k(Drc7n|3$OMT@m1%3HB{nM864G~J~5D+#AVq(Q#TKe%RbkoHItH_i5>LSa6W^T zXh64tB+l_g&>|#IA#$i{oz@;%z&k0Lb=wq+nc=7cvHh$p+4tk7U4J@P9^X)K1 z8oX)iWQKeWGvDT<1zV5F5k_+i$#VF>>3xDXh7QAr5jZ2!lfwu2ACyR)EV3N`iZgHO zG0Pf~nnExAoQ~4j;SYvVU9`4dR>!$IhEvWy) zc-w4LKif=-TENXe=l9FG-0y^xlmU|N+zb*qL1QRsU=pmMx z8hhY}!Iib}R(~N*xfnPO6rTSE%lpljvj`BYk9wN?*}e2Y--!Ig^m+({^HbqiG|4tL z@s!#XaIlYPETC{fa!EMnc@@%!0{NkqW_gHWmEqVM9&f^iRTzn5CjdBuC6TtC9J`N`TIx7=UQHiZw4g$`nzOaPOM%_{gFu?Qs(~T-X})VhuHad;IzyMYew_pKe?l-m@r8O)$1tPYYtX>ZM6T>E8$tR<f|c0eUcOiDg)`_W@OR_)Hxs!-*7=WCYSHCEtxlnN)>HGqf_w zyg$VN#-$lOL-8ixWZ8=$I81MM;7TKj7SfZ-HcceDOM*M=R@+lu<7EayS*{KmEW8 zk{Es@_=sX1@+=_@fVpJEu7667S8O!X`Ne1nORn(T$Ps1o`10f3q|Z8qX=^O2$j3Gx zD~bnr+7_ozVZ2S3PfCwINktd}9hbVe{Rbm`5^Qsu{e#h-ih(-JQo{0$7m$}x6}c_( z8XC4Ia?lafeDsHNVej0?=V?B>Rv|o2>62E>yQ4s@`k7O4SOp0tx)um!)fCEQic%z! z0Wd+R!bTuO|aql;KEfK63TtTk-qE6gSXUs!ansd)N-CQwa~$r7)bE+?GY6K zi&kPUMF-O8s3i|e?Ya#EzTgYcAHCRJ1&aB(P;JTh;&W{eDGvF5AIU6*k|Gy?bqd|; zW_Ag_jm>hu3+C>>GW?GRQtTNpk)sb{ecX2lA~`-LnYpjYfINfMsNVqp>2KkF!GDw3 zq2C|c1 zFHkTq`2nccz-c;$T8-WRMyQCT16aJT86CL8_roNrNZmi?i4ZaKDxxFG%3&Bxkj@8y!^xH)@9KgwRcRm7ls&*zAz76T{E-2>>&9-Q1E+#AVED0Nkn>e@*(*5! zZ#|%N0j~l{%@meE(8tXtT?j@&-PRo}zO2{nLMi1$bbylq4;Zy3nP-3QP z0B8G=Hre14&9EPU0e8Jzzmvv6%%B70P%X;|bap7K2LLw=1rF9Qr6@Fh)JT2|`^tWx z0uW?`dcG}DCQ9B)fmPlbho8RoBf<+>@&l-qIsf{XQ^%e7K%gvEuAS(M5|jC zC)}_)8eR%T0qAW6wLBQoolwaSpoui_5hEoP*7#x=<-)d3y@#0puS1~xW^yaRP={C7 zzye=@KsUbU0B7ruLZdo}vgDfePD^_kIc|#oVB5XWE$T{eW*!QwYKn-XvzI~fA+N)JpNXyHV2se*;tTDF>LN>3gfck z06_AFZ7(M5z0}jVim5&3jWE)>vP<@KxueONXllxON2i(;CAH|ap3>x-#2;*mLN%3r zpAdhft|AQWG>fCYD|%akkQjvFTLWhF9hTM`Wz_yf{>vY%L-Ibe6e4 zq%EfC($fPH=Jhfa zT53l&~cK$ax`6vqrZ)B-?@VQu^00xtAMiV$ZdG);m< zL<0ppBPw}slW7!U9KJ1AJ@fb?l~19h$V8jvW~#v0jmnv8I<+c=syneHNG-xoAML6U zi)rr7#3-^y~?{8Zl zJn}%3{fK6>xI?O?BQoJPl3(;AotRW)W?%dLIy7vJpCknfKyAsVM zHko>pbMZF0%o06ndz!imd z-+$%|cSkH5Ra$FFRs5P===WfHdvsg|<)`}aKYPixy_QfXxfg67xrBo9tjy;*?w&#O z`Z*HsC4V1jM;)hCEX~c06Vtt-wz?L63l!SfI_VM2r}V$XA6WLH+n-D-mG|z?A`^H1 z^XjDZF{wqMjaJBIVCF_{MJf-Izbk0Y55nxG zji^C3)kzxF87$N}#p2s5(@v*l?#?kF?-cIEQ?4*1%Ra@o_QQA1@RWymGm~;Xzp7Xe zLN&G<$(nhUGkP6J7`29b{4p{M=8D&GO83f0772Qoem1m-@?{Q6dsP;%CrfiNHIUj! zC$<$&0X?msi1rG`EHO(IDWHp>-Ve#}Z`8ys_t2Bw_oprRFI&_?(e36|q5>GsX?uxz zT4c3M87hS|PYu&ABiTM0Nd=A_v?Vs;Ye+Iu#i#i=v6ogNiX`w7;7MY5`!5C8uTS{C zQp-;9%l(9dcHhgH36q#COKyQlxxU`$wpw^;i}FA^MHXk+NBqT)Jh(`V6*=Qi6u1K9 zR6ph7@rawTn4qz8lR_CMmLG4Tx=s%UX!PYHcNB&%TLUTOe(wpFzi)aA&i&0&ajh*v zP{dYW)|x59W&#r8`K3jxqV@8}K%3B%bG?Ynyu^vMhLvdBo+NvTygbHTWu1gpQrp1x zqeg~#-?!?#>HDM^*$4pMP9QG{@en@+p-y2yh zBQ7cm$&w8}DJ@81=V9e&vdl}4D5&XP==}0-2-Sw2=7Eg@K-IM17u9GUC{FT8wEuhE zwYYG1N-$y&d(BS|2qD;ukV|V*o@z#@4AAk~BpbB>;C2=GOr2v*qGNaE@5FdaEh(wJ z_dSo@Gf#*xQu(z8WHEL0H+34252>NUqo9YPfT;#dtCV};F*(rqA{ImKjhg2i1U6%^ zEK3}3FzWb;nTDX3jabUs`2#(9&!(+Zp~dJsss^&^CSDI!Lb`gE`nGp4)o=#s%dRHH z$FUP*h9sZ3cwN8%z_AY;mks*xDp=j0P(2QuO(PMz==@=lEY%SQZ|x>W7CD>rD{~@t zLZzs*aILbyZ{iL#f6h0Z)xkXJ*H;~{G16X!8*E4}Ls=71(VnJBwj?JAVE$e~0(i(0 z!yF8lK(SsgL;x$-gs=HW@~v(h<~~5!F13k`~c# zt@3}rz(NmVTrz~Wf5H7>8^3_w?I`PnzHe(T#|s}oF{fj4N++-~&27ico_)=~dx7)T z9cAe`gp9*r&abI96rUKLGvP^+42b1o3nzhw-&cntDZ>o_w5-wmXDt2%0jL_lZ|)<6 zU;{4fXs#&6?_>@2Zb(JWY=1|<+`gG)NfR_(;~k z%u;XS)eF-|lPTCJE0MPRQcRX3^^RhrjHpPAu3@9KVU)Fa#7pf=M{UNRSjvMxsE1E? zDiiTWM&nsWq{C9uv&L@4)NJ+~B$&X4cR9(IBy=T3@QpFBum0%1@a@|&=liC>JCXEE zS?6Zv28oHJ&SuPBDD1O4)!uHbr8^x| zs}*h0zn@AGW{7Fy)5>g%*~s{*O*^5n4spT!!z7cMp) z4Wd`#Q7)fXK4JFPKqGlv8fQcr+BItx-M5;5=ZbByjV8ZALYvWX7CP5SgBI^20fF{4 zov0a=h;9BzH05b-+HPO2F9~2Tct_tzE4R-lMXkj>i{!j>?gS<<`J&C8nJwaC)*@Z= zpT(~=Jf+GmhCE9a|CmyP62LbZsX70OYcP^zK9=+vk)VNxte(Pw`^N~SIdy06Q;iY$ zS0nF;k!t|MdkJ;34EGI;vlhuaM|RmrbSdHBC6{u0$^ROx zSgJ-2Jq%{4`q)|xxz|TMzs99_^*#eO&7K(sxybz7vX1g}i=M0>1R37njh!};N;9g; z8bbbP*|06EE6M6|Q)50`O>GXg@f)4MBFRu$*ocdAQ2qe~J2?|72 zVwl?TLoN>sKmPe-@oK^sL*`MluN4+rk&F}BR$5kP!tYEd{`{L3Go2b{`=n*Hy1}tM z&2C)t+AId!K0k_s+-vJ~wS83cr`NhQ8yw0JmXZ51sWhBQBmHE=B%k{}RIi?a{ISv2gLp#Og!!4N`| zPaia#usK`9t-4#(Bh+ixkb`vCvz^#sm;{*$R#gckQNTi<- z!uaH-A7w^82XAzdH#xAWtl4_95e~D?T2t}0T41X?xFX${PUHDqZux*ZJl?-lVjG_^ zFl@AOxfgSzuRla}8xpn}Mwz&-{gQe(@T0_Y{Sr8$g;R)l@Un!_CgYX=UUklKif6 zu4`M`Y>J1?uHnyAn2F~GX+M+pGrp&*m2Fh=y+0Yn%>vv%@q^ec0#A2sp8aRFV}{at zZtLYrq)^7se$(lG+hj}eLE-x1-CWzxIiWMb#xrH)nVC^{6B_gJs=8g{T+axfpbP(B z&BiWTmL9h{J)S=qagU}8VIW#dY?N=psa|w7fX?A}*>`kvwwxqa6}7@JPG0@`uej5I zzWu*=^UD2qB*GUqDHh27h}&b#t#1^1zaeQ-7}={)#ahwO>d%te0KftEpBYx6h(=3} z7x*GyR7WAzul+ER}@^I*=K)}IV0JE_5LiWtZch@#C z0l^WZRa_*w+(-eQY;vhM%KF%oXNDlDl3znV=(jqnM2g-xBM99CJ)9b0FPpwfZrSV# zM`)Z*z7Qzo3hJ^gzs)CW%$%l6yP@KZ7{(>XHH?Pn-8g-+qftzDE&b2s#tRZ-{lWv% zS-I-8`*l?R>wtOA7`6${xhY+Vz4N=1i}qHX!YK^OuT3U@w)(%mcYii3e*461aF;Bgcw6fYXJ(~N?tiIF6X?JR1LJ>oEAXs|R( zJXR8u#%S(m+($782!*%i>%xIYqXzvvzURGCv@ zcPqVgv#uQgM#;KXi&H8zZf_er>-w%$mlftna0ZMzw(&J9L*wev;j6*tSD2*U=wKDc zMV5g4@Wu<^G||!Vo^X;u!nD|YS^I2T*q7r9wI-cE0OVRR^+^N?stibqoR2y;IXXfB zW#Sn72r%!)2Y}NxGD)Xhc5upe`@d~}A96Z-dS8+?6AEy_5(zZD+w}qV<>!AA|2+N$ zf+P&=@o(|De(1`zt?Osta{v4z+iv%Ya{T;p`d@Y6*geyHg7{DQ`44MZ%mU?*NQG|% zL=Pn-+J{#P`ZU--nKisIz(|ra?rS#A8G7RP^Lx|yN`fX@e+CVl`S3>K=n%h)(`yN7 zdZ7WzWC(*O_%$nZ1cy=S>M`sOy@ZhoccPPv2_6x#6%j^m&I5g!5XHZejelUIKQlPB9v+Oi}$+7h;uzelpJXYUB6mXgs8OBkNa=`$B%9o(O^4x8Rr!bA|2TP z?4Cwn_irVB)-X5_!Gxoce9%%J2^o?Guy`6rIvlnE%bcm;&7x*+9-{w*yuIG_BMIJe zPq*>ni;s{+ohst-y5%2+B0+Gqb_SgA{gHC)!A4so2%<#vanaJ=pH7_k`2X@=qV z%QH3VH7jllwxJJG9voxg8bt;41`|+S{2zY|hQzdA#%p!ZPqm!Yc#b!8+%acB!qW}^ zs6nK`U(m`b$adjr$Y}$xgUENk+wT7i;yScdUR^rXUaUy0w-D7o5 zM#p(zh=qjWrVO?p09S$d7di&%B@_cR!}hNw5Z#nuBp^Iy&?u3#Vn+d?#7f-$ z>1gy2WPpx6`6CTUFPKIo(TK>S0%VUA0~LavI`{KUf`c@<#AulL9*3zS9k;hg_q=`K z)6|iol!bw55=sC9atSa+ab`;>_DRwj)iT&-KuH`Sng9roNu{Ls#V#Fy^$-%V?WhV* zxdG?`GZv<>#OhMZk7GRZt_d`(@l!>08L+1}VBM<543 zts+q>m+CjmEVGNCd7G@AF|L9GR~;9XIAW@`B78^nJ_i!9DYE8meaYw8tD~ zXKNORhY+JtZ-%m!mv2kpEJv3fgwmXOb0+k~2;h)zxEuhBza^j($}Ly4=Z!l1Yk?Kg z_?*d_CuTT^aRl%KKxcBN4X%nck>QoD!fleCe!DgQ$%$g4sq?`t^ih=!XB+*q)Ba@d z%EUr3w5C7T96_YJSSp$-U?=+a%m#JIfME}K5gKcN5PbLS6zte(+=J%H%PQ;QrM;OL z6_y)yQw>MKJx}WY1;7I>BCDSu2RQUHxX(cHm}=XM#}ydGF2#wsT$C9V2Y5`XA3lDM zFuvB%i}4{Qo#JF5fLc-e_E^fbkUz#L1dS3%4Twg2Fn?Ck4ty#x!`9X{obzM&tG~3m zE`sDgx}Ol&GGbm9gK2~n=bds)WI8q2zsJ3jZ(3R~c4MB2K8VR0 zYMTD%w(n9Y_fDkK!{L3c@2u?I^dwo4i-P@sp6sp0r+_@pIl)u(UMI@v`;Oo!(it0W z##+fs6>*YgzX^ao(K~#RP-5lw*z43;hBe0`nvz;t1b_{<_ZoJ>s4hiwS07L_1gH+|T3%{pNF@j6Iu72`hMX#O zsya7@^}`^j0|go1YhpzT36*`&Xa9QZ9!sV2VoRx_-Ek zq~DWopPx*)*Lu5ePY{$gHlz?V5|Qqbq{#c0?=ly?o@CxrWp0f!`wAuPDiv*RVc$__ z-8ngqbtic}w|(rZX9`t-Ci)%@nH*mL@{O;Kt0}&@O&wmC>|aT$GV8Uv8c?u$rvplS((@v?Na`t5`A3B*%=!Mv-@i+E3Jc688=pEIF;QKX+ zC^UuHHyL+s51d!jtL^-~9923Wyi310i}iQ^<%VijKO!qDCIbl);Vh-{uFQHNPzTPe zsTA|PB&-LOb8O-z#8l2xB)Lzef9MOR#=n|qmW(OP!gAfG9_Sc@8z}Y&92d9p*`+a%cUiKlA;r1lx-9%WyW6-KHDfjFG=fV@%DL z^*%A!+rHQUfQKlDoEu@PdxFpu83LeV8qp26CEp1EKmnB8CSNg_|3{>0eu4mg|G*PR zjz#1kLk!P$BF!Wsm|lza%PD!0+bk zk4WOZ+U+u+VG+C0-#PI@+-HuORK2%%`11QAA1OZP?kOZHou&h;_K=92bWTxGZ-?4T zMWvhw8D|H(iYCWdC#h~x^b$6j_CDcv{>C4AoP}tgFpEr-qa2@ziSuor6Yji9I0$;C z%%At|f{VJEW+!&8r_t<`^P#ytLDs*K-mn#bcF{J@(*eL%EU#?(6k?*V7h{87MS(u0 zU0dVCc&=7n|3vHJZa_&6Ep(i2rRGZd1i0HV?aHP=|1n|N!N+8iTl)uF{w75~*Bv6d zFXdzA?Y=xy8nFj%Qgs-kYhmF^p~BMb`i`fIYgW9T&oJ46sIg!5p#`LlcLLRRlhN!( zG?p{NnWhtCt=YkOcFp8yw z6!#evk0rFs0Z+y0IL|brit{VuOTUG7p9X!!*$~Vw-f|Dkg zvT8Jm8H`}n7z$_*)f;FlYQbf@}Q~b zoinC7*)bTLt05B}?Nj8|6T;~npQlYs-7LI+nB^YukbCjq=KRhG=RBl%OFSEv9qi2e zS$9?=Ifl<{X3Dj-o$F^&;pgWfremx%v(I+LtXLd_Vs&VD`ssqDS&@0TvG(L3quPe! ztrZX_AK-02*MI=XcI3&Of{2jE1XD32XZn$m0B)Iwzz+;#8H>a% zrKC8`dRqDV%wKx6w7?!6n2GG;e!B0u_Na`qd`R~RAVJe|z=(oEg6{pR_;I;29j$8WzKD)M;E3bCV`oeAm z(hParG2w^7JMPmKo>)rzowvvB3X~>}or%cf;5N_c@T~C1H~d+;cIuqQPo>DS zUl3?5?&ZMfR1Axn6KPoZdo;sWSnaonn44%(Apg%ybgHt;0*>K(qx3w*D!HO++rY&y z*}?W$orw-z{8#WUeeR4rRQ1{8d?eh|%E09674MgnC*EfBm^LeanV&`!a^5O%UNNVt zh!)q_{iF@~2}gIc!7jkZRAtgwBj0&Ag+5-^HFG7-< zPE4ItaC9q19Q;tgS7oA$w8z>`+aTcPCkQbeGn6#dCVzJ; zC6v^CD>)U0-6n~q$!o%OU>*1MW6n&)=v4a4=k2@Cme1WwiIdunk}-@J6nA-01i<2# zW+zbc+D?k`y&IEQ$_FhTsw;C*ydx=RzUf$Rj(VjaYI1xJ#TUdLqV#D>gzjcP(qBG{ z+Hh^VjWJxWt*a*5T~W$ucj*is&H51e)Pmm2FfN+)eUJp+p=h$&)Z8BJaBoY1e4=18 z?V?i9a;9@#Kue*DHi0t6eJ-YlXM|y{!#|pf5hlDe?rl~uf+a7PA-x!v?m4^adR|y5 z_W3B$19c_B=%a?S`$>K)i+T|e$MTc)0mff}JckmDaWhF+^T9FeOj4uovH>~VXC@We zsa>e4$SGEDm61qY!`u{@k>u#-f((q6G39Hkr`*%{SNT_8n5r{NGu)>sm)W0|g*iI+ zEQOVRLG<1BlqBWYFU7yn`TC|nW}38a+NiE#_35)i^Zd_e@B*{n^;feYpz>cIEWhYm z&@kABXnX!luBLhQ`>mk3?0w*wyEPCT5X*}F=IeVR_4Y6pVqK^o|w6kYh)GPgAd z9ZSN2YQk59$S?ShwS1e`rL3e_fWG*hNTlNgKJtSTNS17&r)Bqo71T=`J_G=l#NaFn zkUgc&zeWJmXnD*-a|X~{H7R2>75qtdO(C!!8@b$b*xhiHA+!g1QiO*s7kb9I1UQ535hsN*^8y$y49^ES*&a<=vV=VmbUur7N9K%F$&ZEZ_2ySY<(rO#f zpO7e3Vq-R%4_G+-l&rWTUl^d?=|Di{ufI5CRFkegL3Hi^q$tZ4zqV^fbxD*h4|Yg< zSp9aWPFuXC>Fab-eGe%6$yle@LYp@&Z!FH;Fl4Y$N*&gXDm>BkU#~ce34ig_|6M*o z$~2BY$y|CpU}qzrt6ukcLGcfXPwexS^P^{S8;m#%_gd9Gl>7=HFsAOt^{)vTrP4z2&iQdJvA+)NFN#Wbc$Y^+l{6v2e~M9fbkS29-I!Cw zjb}|*Wu!|&f?eLVTN{djU}~O{xS-Es+N790BI-t*AThwFm6lT?u)Oa;laP}az>7%R z1sG#@ZUNXR6FToM&PE#}5OSoa0L~irQc0~O6ia{k+h4Hy`1Ru*V7&C7tWF24K|;T6 z|36`!AKv4#rqwbZtW8&^h%HLQ_W#+<1)hWWCy$l6?4AVPteUUpxa9J$2bT|cmISC~ z+sugYRUw$3gOz=mZ%00Qf5LScurfFHjCJiXlWp+a;vNlMXriS5`D!b-mHfrP@nDWi zqr>qlp0CwhyDtRdb!VpD;|yK{loj6+04i7N9Dr_|YXPkd&|E{`FID*oF+}0Qga+Zw zo>TxBp1=SAoOoc&D=)gAo@|4*o)^IZQ9|%GAWs~L1On({G>(I5kU$6n_E9krR@L_p*MIk(o=x6{ zjk#)OxFNB*5?qlunhVd6I1U>W^i>X0n14Ru7y0{JXrmnleVC73;6WoE7WL29dN{8aUZxN*${_fM_hrWG zAG(IUgX~s-7geMG6!Iv1;9iT0vDR+}KJQ@Sag!nhOl}qY0B}C!#OOFAFI+;6Wh4aY zih_l3Wi$fC7FcR7kMGNzCH>4x!hU0{W2(;l8I)%jd5mMa<4_s>XsnCmDbK0h&<4HD@I>Z=$U za*H2*(e({sU$MKJ-FTectVS?Iy+`1%L}b%~IrSIcWHet7VwZT80)Qpe@X_wW#BimV z2o|xoA{7IQQY!{;H_wa6M&9ar9LTw~3-GYDddqW!UTy1~zCY-=DDcFPp8Gw*L-z5z zfpNeE!-w05#--PiG}vJbn&B_1cxM@$ekd?%AIcxie3QpW@l4|-E?G%CQlLSvbIz>3 zzUfVSm*<2*{0Ipbq+lT4r^Kj{lc-qmgrI(%+!hncBlOR&M?5q9jN7In7G}0qG%uqG zF&XGd!ii$m)NxfpIbDyNPnmDxl(=es$&@|5Zp-t2u^RvpxV%Q7H_F&Y)&gJPCUf)l zXrPz_tdm@NIaTAm)5v7{orVc43A33^jZ~3O$Qs)wCOnymekbG`jmmCg_{O(7A2h`}{x0`LrKWq# zMb&0ki3s~k{=Ht|JWc?o_=ZPha9?(;hQs0X-n47*i$MWVxttk{+ww!irCZxTT8Lo^D`Z3q(NG;aYW_a>(on<74pqB&thzjA z;SIYgKuunNH&LnY7&I+b+0o!aZDBk4b9Bt+e1j$B&1px7Ig~um{GdqdEJ?Q~hiFtj zsLxtVHn#Um4&RmxEk#DFc~kJkUcHZYfck@mnkNa@`l=Z1IV7e%HrwcEmC8f?7)$gJ z%fQ-nxM}ewq6wX|G@QQ->R27fI4rt8?{Vs2$C|KQ@;sS($wiT?w{NN0$!@#xwX1ye zoQdbDudU|GUjC)iT$$@9>>5Q)IitI_pDQohW}gdp)rj|LH-WlV_vF8~VdIpT{k1y- zi6+bwj|5gL#O}}mn3A!iV-N#8C=CE!v%;f`%?}j*7jwx@e^|Ib=tLCcCbjo^q#d7D zUqpHSIEQO==I1@D7XBO&zvgjXte7NGNgZdA0(yQm^I2p4GuttB^_!<$9?P?8Z85=R z6U*F(!B_?G$R4epq{GAB$hRko-%tMgApX4Qd}DU`Vz&MLpvjlm0^7X5jiH`;21(z6 zKEr-N!H}TU2CNdGGDf9TB_2S45Ao!aUq1VY^B(jV%du3D>hw5uH&te>Gd57m!CQo* zvRv`Az+zRi6;*Na@4^JT>fEw(d{Wo3pI5KLa*@FdV9{#r_H4?y*2Eev4$*X z*9rc*tw1%@Fd;{#=3SA!$<3=Q_ftKesQw~y>$i7bGBz#zKtD`7RxG|Md|mhX!|~kG znvy!0(&>@yG=$>xIsfm!D4CE9{Dh7qEO{+UN!(DWmOunXSVbn1ARpGq>_l;j-yIl_ zTAPys4N9PLx_cibr`+RMZIU})~y|B^$a>djU4!U%l^~hr)YS;DlnFST(t3kfhy2!i={R~eIg`kWdri1S!mD~kD63|8>3@70^5>&XLy2sG+|2 zAW|wEnkdXFB6J0+-e{BFU>Dk8PT@M1#bD~a`ppfF`(VD;`aw`=kGH)Si;+%Vx=(8O z0Z(QZEc1{z?9|1Lc1-^0?W0rXHqmL5GDron2oC~%Mk4LNGaLu)NO!SzrUkl74cP@i zc5fa4QRcoJ&&fx`D`IT2BlGn?m@qv@R z5Rz%ZFZe})tZbw1TBvR#c%W>jVaJ_yc}*OBK#AkT2%Sd)#tkF@(2ZMG4HEfA-5Kc4 zvfjAR7~bPn1BOq-=MzT+Qma>{%pGJO@6U-Ao2tL?o;5Kys+yzbb?>W1O7{*LdK z=0X(WNcaaKYHj(wA%k?@sI&Mk&RK~dyhM}8DsSrUB+BOL&`I~mL9NH`#b|+(e~Bla zN?Fv3q_07Di~?x4pQIZBi7KW6+8rVpnI??Ko29u)rc4tuWL-5?mY|goJhWNc@``gT z{%Gi?p_)#3sINuYi(=|G#YfLKR4~Dk%o-W)YHh#E;W7qBe417Q$z&_-VeLjP<3{D? z%jqvz+)e^TrA0Dj4K3F>aWdT_G&nUQifS}PAAYp!kO}t*Cyx}$&a7ytlnsf{qDEF6 zh^_V2Fl1pGZ$!?FR7FkbVWv^Ycu^zr*yA@iwPSrA6m^0AM9r^N2k%vvk|=fTh@yD7 z(-Cnhj$_h;y!LO^$_&T+&E!F%iQ$s{%%hq90`(EoV$y67UZi@UDgPTo5XzCc=~U`@!)bLalu*L9w){pY; zsgAiD@Mb*;KQs(VlzmPx4@W*-4L5LpU~m{Z@7ctRxJyw!z_JmRQ0}b}{7i$~k-(!R z5o{yEsKej{#w#i7gg^63o*U?ic`;6YSmV@7frU8Xg4;q;G93$@FPM1Sjfg7KL%Tr! zOfg28Pp@V8%{}82?PtX#wECb%t_8|GZDpxSLljS^BVw2?FUC{`(q+lW_>1}oTUO5wIS|E!yO93!Rxq4l_W-26-jh;@cK4F-6WU_HUGk+ywUe=Y| zNJiUBkM0l3)Os=5lH01bN)`? zkSm!OtUzoqC$%8KDz4qFzpIK8N>~O{j$L#V)pqXuuKIr69Q;?_=wX4;x0bthsUM=z zxJR|xpoy7%eT(oGBFdJVM03&3bM3AZ3%2Irj!&0T{yPy_G4BzQ7Ktr0js9fE0;-~kX(8vscKEK`%jBZzdQw4AeA`P^W6`>4iscVt zGlEA$GgS(x2nFgBZRNaaPVMOr&$KtJj2%wDQFDA=*fm-rdT~2eXffT;@rh;G0@0Y( z;LeYg4?5Z-4hx(nYiS%G%1`e@?2JAVjzoI_0`-C1!`?x1sHyr_)=N-dXS~-XFVLm+sQkuV zPo-8T5aTJ=EqMNEx$MqaGTREfi0iMaW#Tbm^_=V9d6zfI)hN187?<-QyupdKakx#A ztQM=-jS-s_H3lcnhfcyG&EsJc@yx5n@hgUhgXk67UgaH;H zkY62H59+Z%M8eE%s89}l-@;=BS`ah*4&j;!c6&h5o>TS9@UTnm^V-?Lh4mMl#_e?I z3XW!#FPl-@CnJ<;@>+-wV`9ov-(-#X#|PYXU2l&f^QJpPtc6iUJI@xT$7grsOct9A zJMP`Q?JAvqe_n{@7njehRsO<9UE{^tspEWeX*tue&e>ff;q12)*0?!ihsE3Ln5K75 zxO5lvMo8K+C>PU{aS;jG0>7iN)EWDL?2UDAVA<)Y<&5`9RJ*r#$lL68Jh=0@zKGW_ z#4qRB{qg5V;|rfmZ~qkKwmM)8&j*#5r|IyXRiw1PQeEN#^MgJW-eK-~(Nc3C4}A-R_c zbgwRfIUqq{F5c6Fq#PhT_9Y7tll!jm8e=j0;<;!)(z7PmhHy+B-z$A9ub-pea!QXN ziaQd@hCjz$>YZ-P#b6bPLFy_n)3LSF9VG{eG{j2KtciNlh;(-sr9Kk4u46sbA+Y6ikHat?#Wu-XE$p1Zn{@s(Qte5p3kh?leKcEONSHt zkMmjZy=|b|30G)H%(D zQ6@jjm`@xy-5*D4Q3)QZCvzdcZSTszxbzyTd`-B2Y>ITK1+C+3!0ac{s)AocFj03L zF1GD#8IYC?8jRHvF#m2Uv7H?J6Hhyu!2P4sGf{FvC3EH0zq`6@%>{I`m)@cA43kS~ z6SY|fz9k-9X%n5OPyur z{!fG90ALg6-gxKqyz!>duYD}=2@mCk(fqzALZKgDvdpUg#YoHHhMJIkpIwikHe?e!K-U6Zed!X&(ZJZ zt=lIr)nC|)FMc4VSv?K~n5N%}lg?Ta#y|8;_uq(k4()!kdhj{e_q+K|>4U6mDIB zxDhZ4TvSS(qEVudzz4uOs0;+p>0}HAzO6qJ3ksC{KOQHCXZfr&fjUC4!(%}F2AODZ zc}P2k<$K)g$)ulu5gtclKv`XNVqBSEwskZ%>jxY0+w)HR8l{;Rf?y7s> zrjY_UFqx^@+f`lf7MLb>XcAua{$7f}on)-y+>XqK!?SS7~lYi`$QF zY6=eDJ(oF9CLh2gXSddfrZD`?T|RnU*y`+QRg~mJ-t{L{yj%GBvWe|12d?Q<)2E;7 zVvW6GsY&FZ$TcP3{BO0QwbinFrq@BqkkmB)*L~P?veLUS{*WK)6H@kPyAdM(nNAquQ#eRufxuEK=Mnp!$ zTW{76YMwW04-Sa6I-XIZ2dW)^y`26KYkmfAXcO-!iMY>>LCHKt>1MvrLQQ_;QoM2g zVMf4crloUx&S?IQl+RgPGTqY5TlxXv^Ke?J#Rq?I9g-m&pQ+`>7bKDdf;)djnuV%` zT_*Pe?=j|H7E<7{^OcPvn%%qU|MBN)<29G-)}5T5$5$jZM<#a|Fa z#Qf%4v>R`{+!NB|*HsU_Ri)O!nK-#O+w-;V7MH!e@gG^)cmp%fR?)@oxKL~;6-feO zmvOjSCT;>CK{wG(^r@`7UfQN+$KQ~%l>6iok&$b0Xr&)!|Ay6}MFKT(_2fOH-EKC$ zkKPg@t2zkDo)a6W(`GVVd*l6LC4f4YAq$U0m%+)qkl$Qp~k zwxwtd5>Mh$WNAM5P!<1xS|&*)X)477_sQ?;CYUb)adP|1?BlmAtb97GXGH@Yp%Q!> z%JjCM1?+7e2n7cB$B++{wvvY*>;S4=tt7bwYFtL#*^oK7_hal~P&FdD>Oxe9ruk8 z@q)(%VfRD47SC--x-#ilZ!vf38p1InaK6iex z)+m3(Of;Yvumn#%iJgsi;8V=i*InS`ju@RXZitNIlPy=4_MmuHQk#I)& z$KJrZumJ~G9`3}cY~?ZCpG5~=$#?E`7cgb5)$;$2+@&?-(+;`SUy`l)HJq#-a?vOt zW3J(FuIoq|p2#9^ZM+r*1dh9Y>-j$Zw|3Yl#5Z8c6v8E3#{khbGYsJKqVr=<3VkWV zu#&~Dr@XIys&P=pI485(Bq%){X8M$d-#8+U_Lywaay`V=SS`P`vEE=mPD$1EREJ39 z0|3}ksGbQU8)|07gk3?@JDj?Dvz*!~Wb!nBPk6j(`^qQsTnPUP)7nVIZF&c4U>(e@Uak47%u03@XZGzc z)g2hlM;X5?Qp~p*PU6WQV?qK-{gqjWUYWE;^4$`?L$bHsu~oez=?nYto49?P^aY68 z0f+G38F*Fo?k1ccEqAXvx$hQsLE`uJKy~EQI+3vSxc?#mEVAOZ&eb9N>l+`;k^>yY zxQ{*_W<029!8i&%WM}Li<{P=>_<3Y<>nppYw)5`^(_8&_o{9zzoVyr5muJ0u);_8& zCEq^7hAsL1=5d_|$EJstZ~gu6dTVEsTNJ-iCBAP6iwhII?t|@k2v`RN4aJz2gzkAt zU@Gb}>r_0*PhOq=&Rn7BHl-ap8=!brGw^czr|We3!*P*`Fb;4C{iis(h6j~J?kUk2 z!hX9oAKt+H=)(pWqPVx)T2z;4uh8uPq`p%MW2&XO6 zftAWZG`j!n$@08yU9;`8$TzH*V+7xw#@F0qj%M9r%z59n5*L+1()Hs_^6hGe+<0A2l3(P zJrVdEZL*<3VK1t+eoZVVsh_yfDh<-ipCfaa17)&+O8;|KMz7~NLkUHuoN`@aj2b`k zl#2vKKWxlM$eutO5 zC^|{-jwA>IonjUsEtSO()Sax#6;Vu^>DjUQiWP)>!#oDc2@Hqiq;n}$?*XM2sSrQX+BR`4x&8WQi;xFK6U1ZUL&o11AzwVr=uQA&qeVNC z%n`!=r6d;8R8;S__RhCo!FUW#Zt98=i|=%PITfe!5jUn9+D4&Yp9C(rkZ^nRdkc=4 z<`*5ocOmHoV5RWXL|!~J++!|d$FVfkA&}PE&)4&N{daK)r(U)AAOTID{=EdHd2-%t zWx5k6z70wrJD7OR>%!A!%r2m*|f0Fls(7~v<_@H1qUbk%7c^0O4%EcaIe!1HU z6NbD~&6kFqg!;_o*GjPQ1mMxM1EPFy2Ng@3f-LVt%zEcmE;eL`=W5WB~V>qYDlZEHGbZ_JSkZV*fc?Er|NX2}$b zrlmoA2Y@{)%*=l|S|lO2F#<#Em~JjcROVA+-cjHIS|l$Ve9qzYjsp)+0&jE(U_WHA zG@2WX;QY_kRe@yNNQZ38kN~C%r>E-WN<`%-05rr-#42u;WnfiguvlSeRd2Z1W@Oc? zLJ+~DyL9Mp>O|91%V4N5)4I9$^Z-0nZkXOkhCYE<5^Ac!mQ3P+)t#od{^sYzgjMD*O>_g8)Jx(!)T3lteif zeLg2~+D(0L;F?|tK*8KVbFj52i7>;+jUW@=aWGG#u0PL=&fUGpCa8FJJfAc1 z2t@e7o}E~A=lG;=5$e9ojgy|cO#!~0I%Ko{qxvUFuS9MwUL#9Q^_-uc(dz{7XWgZ z1Y1aHnR^!T{W3D(cjWucD9txfc`Q-CzCFUce$?|#iJ~&tjfQiCCn@0<54XtW{U^o946_LVmQ4O!HgJeWcE> zKNds-SR|N=Cm_~4mV_(=Tz@Z(sRezIyt};2-QXaiN29TT8ADY#JR{+gukGQUcf;ig z?5iA*;!3Po98Xys#nXpoN(0g>9@6%KaFoujp7-N!+H{*_i~n-zzA5_3%YR|$)z1)< zr>HlU$LS(M#;HaxWxx4+Y|oD&!HPZr z{H5LJ_1PClZ0?Zf_`Uw?)UxK6fvrE5NqF}!gjhr&C)K{r{4#x!5or^E6;OOhr^KVe zl}~EJw{{N_)$Ac^T}kU`LLhtJmyc=w_ujaDW#66OMKxU0Mc&?Z9QgNkXn9Xo)zJT6 zfxpY!-!*$K_X+EWcl>HW1cBxx-ZQK%_PJE#)KqZZafAYW!(LM<!<-GuE=NpXM{%cK6?iS&8rbDY|ixi2vU}u*W0|_b%@JkuWlm*(o0Y zuuz~`0zpvuxdH?y9mXCYM14UM04RjXDINfwb4l}xfI^unjGD1n2=_UGc0q;#A>rpH z(MOz9R^n)8P%^LRh5}LU6l-*&{ncjkEoAf7Zi~{dmi~XO%8=Fp>NaIYVP&?qt1s=g zcVm0+H5I>p#=0nZrY)}Y(W0`TS?P20fUUUlZ91^!}GPxBHy9_fd^DunZ<~iIo zGQhmm*6BKVI%|}pMwRneX6-Ar@SeO{OlzUSXll}Wq1x4po0+P=?J@oyLyL!Om4)CsK!nO#yAPJ z@B!tsZmKtK$?I;hkJl0UCnIdHbLfCTUuefbA!elw+5-v+bf4J9#&ExeeZ`6eH!KZ zqw+>M%fR`c7cJLdc2a+#L1HMFm{~iEXOV{tfH#SI71z$>QIAQn zG0={k8QU;+pk_Q+$G-+`T&ksE7)c0XBm!q~0&B&9D+gLd^)?6*IV|ykk`=W~#XA+DL7}$`u|TN+ zv>XWMBAuD4j3Oi+-1)Ugo8;cnjQL*!lvVeLho{IfC0bL5eDpW-Tt^LmOfLl0M^$ft zHx874{ke!&O^frHX*Xc_JG^-h#eM2z`_TQYyReGBW!u;i|4rfP3G5WGt?G>L{Cs(x z)D#LnIjC7Sn#|cGKS!o>lXNub0lmxeEkrM5BJTw$|&=?*~DLem|SbefU_msII5n+*J7Sh7x}G;7x1== z5+d_pO08Goq=@zG^9#4hju$e#<}dNf@K9T)7QQ`=Xh4qC!!(sn!EFzMA9W*{xva*S zyUt~Hhk76?Iv%_vp3{8C`-T~ZcqAsX$tq}wr?eu8uNnJNtQDBH0y>bsM;WhG)qt7C zq3-U^FVob?gi&ftEALcq6zrLh>icL*`d}8c>8fWx5G%yDVY0h;@KrgiSt^?m5^)41 zJW-uH094b*X!{brnwz*L#L71#P-@2j40)H*ZlydgKfF$@5q)SznL zbc1M|-ZWqP6gLRMowEG2OZs$A=GtpTVwTtTjbL*NilpO$;k!oNwx`{&uaY zHhJ{^osi?LgCfnFLNOe|_>DE9AQj4&jk1lbD=rlN{>|*y3SGj?u@sp^2nPy);M*CK zE(&thnavVFAFxjg*P%(vi?c3{s4Db=YU)b>`)-rRCF)$WD<2;J4%diduA%xIoJ6np zhzR;}Jai{)w}2bvotjI|EwPz&Tcp~!j93)Ab8Y@_K+lEjR{ekrjg+GJL*+mV7E`7Anq3k9>4v2+<*&a7S|ebe%n^TYr`%Y zWkr5A__@;pnbj_DD@|N3)Z`XQ?ZJ2{}%w&QYpxmsnV8h36^p8GHYpO;XY<@(26brw^1jsq6+_Y(KHQ zUGAVlaf&qEjrcVk8>bCU1n9P6F5KywA=sm6_R+%N5|FhBO*>v!4|_`*_Fh% zYC$n408wkmlY~+a*k)}8sMSQD=+s}5Opp>!8Z=wm79mlCeI~sZH3#yPW22;~_->k_ zbPz3Nk~+%-&iA6*l8dQ1mZ%M?4Y`9LGHdv#&Dh0XJGaWC!+zVYD6RDo_2w90QV;i! zu{EOD031?^c)f`fJSZ@LVUiPRfCgFsiU52mhev#XdbOlyp>Lj1v=3%4BrUxN1!P z_KWj)vt==GHP=+3EH5;YuQs}02W0%P=KIWci?UZ9mh)tK%#|!=?*&&Z9IyumbYXh=^3s0~Q2we3IxhjCa3 zAh0>H6Hopt9$Cu)Q?T;(zzWG+EmJPgX;3*ksNDLP2=#b!lAl8hwT!1`F5`bSQ zR3tKI0j5%Dnd1)ndqd*JuUO&{Rn1h@EPX*hk#c2_DuV+mgy!1LP6BwDSzU&Y2}e=Z^O|mgqftg`&1k4EgpAHFVi-@ zKnw6x`BuAWL+x_2cs-Y}?NKwcAAj9R0`x2C_Y>dj9Rc9va{vBBlQH*X5DH!818>q06M=__=< zC&~+se3y{0l5Z@$fD~4bL=v~0T$_bSeO(@yVV1~9wflKfx^7R*;g`&~-w?%Wo7?>CmmOSLMFaeBi(>+H6c!lM-F8 z#6;*G_cnrikiVH;iq0Avw2X1PsF%9lOTb{ZR^>Bo6uEzJ?)UR;-w+G(N%mFSnFxhMo3{Eo*q zZ)2TucU@`ozp*d?(x%t2mjejZrqut+POU|hY3vK|4Y@Jig{nCgjXa%P2XZ1OUGzFk z+fR4%qn=fm-eR=ARbu|@ThLKcQ{1uk#LhbXV?*G+p_Oy7jECXqyb*nuUX`8R_gMYl zWVv|;V=G)XWV(yBvG5oEr;xJ=?zsQ~@dG}ddlJoW1h*$a3lRsi z#Rs|+0{6cPkX{NIY97BM6Y@ zsERznC6;!NyaQwYtNKSGe+E@}F^X(}5$rm665ku#c)jZvsjxa}d(lzWaleRbk7iVi z&(9;75wlq#MK)!l_^sz=meYN$ zWaOSd&hovA=GLp3VytW-MpQ1=eORD9y`|f_m|ui5fAN_N$Or6vS2GJtI6drPbJ!ok z5G<*hOg5wnVe*+_u+;LrI~uY_qT4;-z?&h^0Bs&8?c9IbCs2B%CIf-diy5POKW8)+ zPJkmY52q3swfd*)3&Djdzc!=L<1oxY)K0=9`CpGZ@hkMdjmtk9@4v+Me2!+O*S%nQ zRB&B9Z(2`YZR>#U_3qvqiv0-DlEdevOJ=kwE<$A*;T z_GsN7-$@qL~T zBdbyoagTA=9mDH}-dRQ8BhT|Y&c6B1v!NcJsk6I5yhfC^iVQAc6e6^K!s2+8^$p*A z4j1vQqvdIrMn2wr$u?=L-Xad?g)AW>cE5Aen)d$gcX!?KC?Y_DDM5;tz8y(Te-;xM zQR#e66{s5hJL4&Zc)Ya(t=i8U3r$I~D?FpNuc-1X*U>NpM21KcxIZJ%aj z7=J&ne42kj6JoU$aL#CyFP(O_;kwue1M7wPTJ6!gznT@emz=Ihy^itv+uItHL_8R& zWfz%iq65XEH27(q)Bs?M3Q5!)i_1(Pn_2t9n8(OD=O zM}C2jM$*%uf8l(|+5vzH*nqPMwby&Mu`!t0s%zV7nJodT%*Fr%h55D_6VFEAw5Dt{ zf)@I{Agf<)c#*@(7L4Wxtsb;g5KhiE;J2*h*hJYXp69zitbSN4VJOe(Tkzl={i`oW zNar5z(VpaneihFWNbhQBPh#(TT$d(IDno(lSE+g>!XPp~j=$4e)0p>decft%OeGAc zg)}nP@@!s$EB8bA&BvJ->~-I9x#7FAR_+k_4!t_g3`(z-dX=Q#y=l0TQ}f5=5F$Y9 zmm_!6iE1oWQ6&4vKPO=_%uMUy{a=^}j{?~P5k2U=OAn{>5|zfF}Ew|?P z=})0YE51kUVQIs^-A*nG^1V(Gk{uN&x|n9Zz7#Q1eg~rNv!%YY%H(FkV|HLi)lc00 zl}=+%?A_52Uw@QjSg)r?k>=%l&ccQtgm%$%&rAnHW{%ADX z{IJ+4s6eRN=Cv{?-8MR6%)P zSm20z?+5^W4_=@i8W~&zzZ!~O=hUQJ9Vri{i9vi^5Y~LUlCtN!LY3r^n|Bo;zJ1)N zOA2hC0swrdr9ouyas#0G6nde|af-lGHum?(jkq)x^h+t!V!|~ZPKQVY*>eS)U_?^+ zf3J<@tw?ewLu6A_rSvLWfzS+YKWu?@azdU&>2%G2RFmu3 ztSUKk6@kmc>7by&O{)yqbG&Qm=+nLKulrlEV_jG3mR9FOuT;kvfHPsg>fZj}oIN+M zsw#$qa?rtrsgC<3P?%fv;u%^ zGRj&7op{@!yb#WbJeig7A@rSq7dfV>+}T!mdol?mPZ+9i5irFqXCNMOh5C9$3X%KH^ROqi{^&{lhnJ(8gPwv`iYRDXuyUSHn?Tun zCq@2d2g^V2&<)S;Wf$?e1%{1%65LNWL;!^H^Y!0oEW$j|@-GWHPK#?!P(_W8CVmVn zC0ME?PaHE^5g_>RuNY-KdgmM}sw+g5H&u0}FKTK5iC5dX!4h;OEf#0A7s&ivGf2DQ z#V`V*RShFNGED$r&Q+X%j+`e{VL_jW0aZL8@a+@;bpV9=iaF_$OoF<1pnf9NJZHPw zC%gf1zX3Q_)9*pwk+=)FWxW~AvOX~}7(W77KNS1Qlb+xbu)I7gEk-`^#y?CFPGwg) zF(J*&JnQw|>FtP&(ou-v>yG84uKw5Y+g$Ez2OWJdAGQ5|Kpa4vZO{r_MXI4G+_Gf= zI;g3*KY~;7(m4~%)jt?z@;m?0#U_*S8)_1_ITu;ZnNsCQ#Om*%!asXvUw-^iPf@<^ z8lv{*9c<31hQ3iV`SSOz{PAxmB29_WTOf_rppQ`G2@LgK(!W}jM$3X-iWcu*P8y3% z?01f;Ng&ucxb7aDMj{~fH-a8I2sNv9&j3I?1YO!QlCVXQGl)^ z^w2a{(KTPPr(Tqug~MN9g=9u4UYLF9ju!pAOdQ>T1xP`S7&!T$jCVPdNCd-7MT|fT z?-R!$0;fo#EfaZ3D}X{SUGwH=>;PCMlS`Z6_F=>Ur)ctLO=4hb6cXSL2USUkB(FWq z%&~r{{UgqWc1+Mb9!Y@)#bAoyXS6!h2w+b!wJTR4lRW`B3lM{VAi4sbc|!oI34h?c zdPYC%UQ}BMu#t|qnnsm9rA%?PLtm(|YwxavSlWj?YYVexEN^jm?|(+GLmdL$lXmpH zKMUNJcQ6Y1__O92*2#zR%ft7XleF3yHpl<$D0xf;O>!PYpirq@!{SDnb7#H2>;Pa+ z52aBwwxq=ZO(IFQu4b+rjJ9eVcDpMEp&nt+oU^TqDU*TDma8P%8nIIS*&2D)MG%*f zIcYl*@~%0GFJZ6w;WIR7Cv4)}eH4j>C@$kT=Z|oNqB$-#^2rUB^RNkzcgrzc;#iQh z#OEL5IAdwBm}J$&!pLQpxioH#N8ox%ZW_aWvWZ3Wa40rn1nIO1CeiFi(d5gt^;01#KbUQn0&`#@N4@9H1zuW#3PCF%-m)Wa1r!d?U>5B+`7 zk69S3RQt`{9Gp^Sk)k!u3Xos{I7{#=|WZ}xe+(buDU?!^}rZBvI_JQEqO^k`gUX6yxJ?k zQ-6(Fh`s1dKZzzkY__P6O%T5FBl2?+Wkr$PHuaQ;YJ0_a@p2XNiIAI=ehg1}0pfdE zkT#0ens-Pjv>=5HVltI&H?HY?_YU-j-m`gbg786c1%JUIjgClPOjS#;J@p&yT{DV>29q4JQ8no_8;`Q%K`1`P~rVZv1|TAP8VFT>O36aFhhfDt%RvaydM0EI39oW%G%4sd7F zVL!paLVv64#s;7I{9Dn7yatc0+NfexWt2rHgT~~(9Zfd~`k7Z-k;`hcBZ+1Gn+s#8 zY^Fg@qFO(YS<*j|fIb;`d?Y9HG=e(17l48Q_AFI(>A8<~Vl}-z1>h}*lo@C=+{X4s zI7?GrAvzJhH}69Oby_lrXz3Qgd>IVmyqP>?Z4SC~L>cQ8!Vn?FDBx^6zyiSTrI+ui zO%T8Rrh*Z z{n8UN!DePm2Ybx06^Sx9v`0c$x~k?sE24pI902wqAQP2dnG=AE-M-Xq8#%95ElTQ{ z0iKZ&Rf}FQ7tP*%##@J_9y!*1Zhu+f=R8styuZuD`TxD?xfJ1I;V3+)J8gJRd-+-c z1k}hp0s_A~Kqsz2d_GY?dybBw=f9BoT(UZI79%SY1PBO*F|wKhfIeLa0D7B=Wv#*M z$m{4;Z^30&3p3)WAJ)zi!wV<=ntb$)e)d!ee* zTbL^55D}J5I;!AqR@T`c-E#Jm`SU>uLJS!6u3Mm zrMaO}Ic1j~Q=?DGU?C%bIH=}$T6=6JXk?w@en;2hY`B2gKE0GxT0(LzA07z%<}`gA z#&?mJY@y4Mq4L8Nvb(|B$L>vs>(;7`{8Z|xzdQ5YEfg}=HNjI30+269cJq{aHm^+S z&Vn6WH*yQm)GTNklLzriOFZSwL`LO5({)W%%K&KsL5b7oKY5?m4fH$d1m>FRc>|&l zhN7gn39F@D}LOm5xI??3aJH8XNqgSENUiYy{hdL(#Q#5sZXFN{zz=m$p-R} zmCXFj-vn(W3v-u1lMpj1+|atI_gYRnF@9Z!@q8y&js-F;)$UBU``MgA!mNU_xET-H}#OX;? zSny2iUztl)JSFkfjPPJ4^n^#;bLJ;SH!Gp|=XU#YK~h{4C4I}8v~$ae zE}1+QlFtZ*;*QA_#1jf{iDIRg;w-SzaN|G)O9`k407CdT07&3q!rk@+O;5;0kOXsN z!VOPIonL}v3|s#xq@pch?qT+5za%aCXN;`^USY7& z6(lHRnaDGhv>(O5GMPTN^7u4L&b%EPrio=^ACx3dM?=~IQP>UgM6E?Ano>6u02+$0 z9q+M5Ub@7$uoP}3p_iqIX+A`pm~bqENFlQBMU{ER6I#7Q^C&J*PqSx-TAw1jrc)xj zio|IYmTj|6MDRI{Xd(+EW$__2SXs+9qwDOtEKIEBo3$+KZRr6?gl8F*h#Wa;@5x4Y zQrn+~`IAK9ZLa;8j!Rmy)g1(ns`M5(B}io=+@ZspXTp1v9iB|a;|^^dF?b6I5$h#R zNPssVVc+Uu0aM~r9o7-JWO=I!kVJuq6t;4p@VQ-6<@2N$DET6hLsV$6oI$%L*=`;y z=~NA69*yly>uSuA?U#Y|Zl+>hr`YpThHX+S31y%D&^?VKU%kbe`-sv%F<~`~iNyp^ zo-@4o#Rd>j#U^3}ALR@<1JWJ|8&O%kV5~x^fM+QnN%YtYEfM-KG0BWOfF*7C1G(`q z1yWhs>mcDgFUFs@QHnVoYnxtV3}mroS^B)1SIE>Nfw2ld;i=7@dC(`4qHq_|C$n8+ zuiqeSJgb$+-L5C~EhXbxzR&0uohC1zw{>E0bG36Ed-O}wopWC4bUJ%0J})G+vWk-q zq=o;R&K{ZMlFW{qGWk+SCwZZ~+$P{ZDJaF9sL{rD%K{SCo*;adfcG714I^F2g_Qeg zw?0a+ZN^H5%NYey2u7qJh@cnXSBb5~t4_t4fBDY0=TY{2M|Lk%gz{pxlt8v*I<$G& zc2h}Gl+4kBp;6=TD2~k+fWotc^Asvi;yx^-4MRB|3W;W>R$Zo+BHTHnD^g0$gQ2AK zeX3F;nNnG1t?;jqX%L0Npy5G1UvW4r_u+i*6z%dHul|ddg0V4B?!3{jqz2ULWEgdx zZ@lMPTvwI-puPC{94x>bjpfCHM5gBcMbEKE7Xl>ambf|qn4pph-+keem`6-RvFsh+ z>k9z%(fYKEqQs54q%`ahrowyi%YKBn6B>kzn%9{V9H1pV60{X@$1?CykomUh;ve%R z7CVi4*f95NRr zT-wC)N_vyNG>g{p&Y_ov=ArufP>LIP%l)vJt>&9+9BY1Ao(~D%T>`$HUT|ihqB*PYR7vL0 z!Zp00SmOO#f&9tJyzm=jC@J<>viV_FiW<&T|46LlAY`Di1t5m`N99_6B=8gKzAQhk zgJX9E$m>AZ<%Yq#`a*CV2l58bs`FE!R)EJG1>fWj7-5Ic4w>g0%-8UXOxX@Mz7415 zn)X&To-@gO(F-Y)Py9TX)Egw8j?8^TE|kMCb$iq zQs&?kL9lXW4nnfjAURHry&;G9W8%fO;avCp%9-pfncF;?(}=-omCnk}KH1S+8ZfVs zCBCcCBn3rFjUBH-Y3Gz*QXuA2cuOF25m44MDEdCcFtB-|9k3-OYz(3`^RS6zDRU&c zmlZi_q6r(3PaS5Ur_T}$N&$jOYewHOc$9pVj%F?*q2Jd^5UwBym75?1>}KiDSsBn# zJs*~PE;&pZV*pPwIfMDs7`~K;Ioxyj%DUMV=3l*UGdf!T)JReA!K}@itc~t7W#%sM z5g%oGUiG<4%`PBZj0y~tvnrY;(d=h6r=Q-!24N4!`1$x=w@S4kLV5s3a$ zN}gV7PORkrOo=(FxHo<}Rk@6|8&+W<>z1-wixFjDfd(~Ju9Z{CcInJbX7wf}Y!U-B zb0y(V5|)Xjn2Foi;Dl)~y(a+@O}$nTja|lpY-tkF6!baFj~fZBs{bMB%;TZ_{`Y@o zF=NKQWM{@c82i4&*mogGsBFoWEfh&(Y-7ouWT_cj_MIqcEXkITN-80QBwHoP`#YcC z@9+8Nemv&f=RW6pUDx$2o|bWRANd0_E_|ZcA3E~tcl+|ENO$f+8OIpgw^?=cNVz1>paS!Xc7DL{Mq>%l#2Ko*#rad>;ZtHA17{ z+5NjIc7;t+wK)oPS#PfN^_?@E5jhLVI?GP)2{x{M`I=17Ot@}91XhXF_BmP%`TC6s z!>f=55eNm)6T%S3ZNbT_x)$IJ&V?c27z(gFp*jiG)o*d8e)rSXdYgU8>Ioi-L_`*Z z2p|d-d3!8}}B5<4<-!TCH0r3so0Gjn#K}wBt^$g!`!c$KNfRQXCh1 zsk*`Y@%h)@%KE)-E8k!1jW;u&`4jF6`($nO%v=3@V!F}=1B>az;hc4gAM$N-iUjTg zOZPnQh5mM!iRxA3t0&)&xRPqd7TXqo&%2!*u{)mzZeg<{(q|3=CK|L*Hhv92?Ij^y0DS*e?RX*W!%YCB zNcO9&VS-6ymrM$hNGY*>Ex{6+dOyI*{otLgD9UR{K2pF;dqwj_&qnrn-fsBkuEFm* zKG(YIzgBc=WCv@GT_kr^|88U%J(zsV@;BGPOGRe(Pr3nwWy3XHTmGETjlA5GE8aai zfmg(`6CK#w8TI!YKW(L~1tNBTT!QW*R(Fv{W=xDxx!0j7x#2`>B+*>pRagE>&NI{A z8+mCPOdPc`EhEHT3Igw>-lXF52e$Y*}Ifo(dX9b(bnX<%te>b`*GD#*QM_{ zY>%dw7B&&fvH>HDj0=+ZD-4i1h---uec@-{A3Y7YS2_T=KYR?f7{Ohirm9p~UA@Sq zg(Y#^z$-I9L!}u=C5bd9OFn=|&)rPfzL|~{BZ;~r_`DEj+ZdhOzf~38x#PG#h^VVc z7FcVAV#V|qJd-hVHybN8Chq+k7l{28|J_NjPiHg^fH>ZzIL+m_Qy-mQe7(tVC1B#| ziOgQ-!&g~Hm`&C`>QH}Etc?-r-96=eUv#^iV{i8FjW`Z>g!KF4S0Bi*sf~BQ(1W76 z&j*Di7(V!M5M+7;N$w{o69B_s6wv>ieReq(B9{5gqshGe#LN#;r{DteN$NDXrdfhT zj@^0BA4$K*XkMKGi0G$lA*o6yexhJ>Sq?Yu!@!<0h-o@F3WYcW2*6s5Ul8Yf=)9q9 z;p5otO?umq!+YfQ`Re2I!IQ2H^FLz}2gUCG<<{6ck>TpC$qp~#l7JX}qgcavDF0>A z%MY1g+f4R1NPvQ@R-x^opbOMyGLVwvAVSMpBqJQ9NQr&+_AVl5WVHeK^LxeU1AEQ# z=ieWLC6L@VSBM;=J;$Y|`_9u8zwOJloJ!gI!l5O%4`bivzEXeYo z#KyvtN2jCL4)#SB%pyVd1e~WVoAV4)NFICqK_iWv9cKu9VNG- zIOXB`jD``5k)uz#j0@1%!O-xy9??u4t`o-D3HSE~tYw!;cNnzx7=fMD{7@f0|Lwz< zWT&N}axVOswt_{)JAH5!+WG1!U`J%V41|in0fVQr2N3~@^#e%l$pR7cBFAAol&*6U zVT3tJ0I~&kl~sVi{;L<0;Hr?nrGoWc4@jH`AHB!~ZsswoElecJVj)EGL7{Z=0w7_M z7JwR4f`5NOBe9x#6h|V0LJ1ZkWdG)yq#Pe}y8BL24y63!em-F>+o5lF?W#Dw>{~9r zL1`HTlnDLQGfLuv5~t@hv07#?1^T8 zWH;UD-Rb$^Hvf}&lFw^*XPoZ|bBFdTvB4c#8d$bf?aS&I)To@Iw?n%8Vx2}$-Z@+U%? zgQP+@!d~n(wuIYQaguIsBNzGpU{nu7*eZW!Idpx7vKygao%nJ$j9V;W0kC?GtI{rS zr4wPtT$2nty^cwU^pA{cY#lv>$tF0$gp=cx3R8L1F98@Knl5YErg?4g8_NxHK|PH7 z9?n`BFT`?$M*a{}b3ieYiR^UCzlr@P#OJj;L^^IpL3-56%kx^|AR~zv;dIT0|CODY zO$LzQyFL+*5LqTiv5BEI>7Q6ZpO3LDIW&MQoWCW$eKm8*O!oyDU|_W9j!R|GR{)Vy z5oU0A_8osdBD1%0y<6Qg zXpqaO!8pTyeG?S+zo@|s7!PE(pT>wb^Wa7aWb>`LAIL>|0De*~8bzF9fT1gHfn19I zhkK_SkR^E>mdS2*)}+fOg>X7AxsI{CSEoJ^ilw0=?4FP>o7*ou+7%kHm_l7g9!r)w zDcr~|5;w8X`)}m*N7t~^PIe)vX?Y)J|#v2vs zNW~LIYVqmc+#Z<8uu#*?Z5;TR>4o|c)s%Lg`$Qp_#iku<77;nkVIV1i{mrqTzcl4# ztAFX}R;7f>9Se1(Q#gp;biP?3=e=FLf2mp2$Y`m0ci8cjq3kKYfuJBR<#BB*_C7vubw6%w8b^FHVDap8fB=z;=Ibvp-ixMm zK8if~U{xrs*$$Nx0~ogZ9cXL9ur<6eEU*}24TrL&pBJ-;mx0i*ui2;vCP4hQ>6p6| z{7$ES%CxgP6B!ZDnF~rDKa}rqR&5UWah}Mz6Jz};Q@LWhPwsK8&$Zx9WdwUK-^pdK zyG1SYDZ(-LpNMz|8RlQmkTA-7dP%>Yvy+40z;s3BNG|X@m(t_up9;}jDt@x9t-owO z6{^lX$`0MhAzA23umd3&rQvo}hMrmB2LNmLr**hm1HaufM5WjdeY;*MhxK@bPiAcl zdcsMRxxk74{n<;k7bHdoWhL$ZjaHyPob~aS87~VSExD8X`OTh@bg8D&>CKCo-^52P z4D%K0;|1&v`>Z90q8=&lmzWR3Rg<^B#w&?9(*_zL3zS(R#RiGylZH!hvq7%8z)Now z;e5?p6**@jk?-vosqAxP5pfzP1(#x>3L=jDk{spL0t@e@_RPO zfpdp@#{VY_z%RkD&1e?K3;Kw^wm|%`2{HbM4)Uu8#y0kQM_z?{wJyRn*Wu=h*TTh1 zT&*^x(Ro)*Sh9m}{{B!L)aPIIM^;pF$ya_yA#YFk{Hu|HvTjpiYeMCky(tM6eVmB)dKT1EQe^hE>Be2k~&uVq^+@+5BZYaHDd*k3C@Z ze7o4dWBmzEtK3GYt;QbOtymV?31NV9NM+OXzV0x1n4OgKrle?k*a?z2N}_sqNDLD}c8EkR=f>7siELB%tRl z=TOobV9aL;F;gp54=!;}me~jy_T-2vaK?vE8D{WN01T^iZXuI#fj*@XfqV&u6K%{r ztl;AZ5F%EB#(m$P8IxEK78o6jG+Y;oP)x2ExikRr<%yR7KnN;PAEdBl1??}99qm!l zWss7}7@L3cZPyOrdU1K_iRn>K*^sB?W-oMBUhWZ>851YdwnE+Gr)8U`UCIImvm<)vF0y*>lX7bVTcSu=kP#G)8`q1^NhglH?%dlW4j&+_`pzp~_SPJfpQvWL&7f4DRGBS&)plI3D z+BK-GS{f-NW3ct)K8_@e;qqejrXVAapkbq6nVDO;JM^+Ul!$vp)H((LM$+M8OvHCvu-DOn2k45WF8RetJq~_pQ3) zCrQU8!1-07YP+oUhq6t+qI?g%yI)|9hi)ViGS{b1Amqy(VWvd@I5E)O$u)85O|Nhy zab)hGph~e!_>ne67MkJ?ZG*!qZz#34KcgQ2huVX^nO(d}z8Vw0Qs3s#6ZoDpSn7DT z;TC@;j|jC>a&cF1Qwfml&oY!*Rk}#{2I+*r<%UA>n^~gEwiru=%2cONS%phu6;3P1 z-_h{@zCM(jzNzfH{j7ZZ_t$+7*ujAc+LHm4nH==gT$E}Y77gi=Rb$X?9DPvEN&lQ+ zrqzCt_%QY#wRZ^+g8eQ{3W;?Op!pRU9zq9#F&wL3Go{C>U`ln`CwgE&&sL1|Gwo$6Z^ogUmLlHO{6k~PkQBB`lx-Q3OVy1$%mut zCU8WVl_eH-SlL9W3aLJN)nUyxWjT{_%n!*Roy#OP>egjb;&Waj6)mW%oa2^L5;V*31266@+?rS#5lo_lQEl(y?9bJMN7s z_Af))`Zf2EIETY# zec2xOSlfxQ$=A;8tLdv-R*IZ&q`k}t^_wLgO)Z?(2j8uyRd!swe&Q5@gXJ7zg3X#` z)y;H_j*OLlVW}HmsUuo_2mFg|NY6X`eft7!vOp{X=lRWUal163Q)$TK!V(5>^nj^8 zkLR1iyL{zoW5TM#BVs4?tKKSxZSRxjOGlVj=+#ie5^UTrL z&WQRUPLD%Y?PtJCE0$E7y`T)-7^0FomKCnz0>wJrTX2w6vBFYBUQO#^Ye?88b_@k! z9WW|36{nlG^lfV*HJoUGXs>Mzrxh4sXLbl*SYKqY1(yBP*E|(@_H5)`H|a;`qqx@f ze|vo>z`!&wMkJfqBz#tj|D%f-T`M!eiJ^r8(j;FD^Hb}kAnj5MjKX5Ez;JGnh8D?Q z4l1h}+TjfI`QZ(RYmXgW#0PH{RBXMiGPH@6H-ai0Y2Y3s%@#8@c+& z0j1MhONFX%a188gi#7fUEH}Vu)s<_Qc@?bEpjR9sv_0hzDw|oZ|y#M;=O?;#ffj$IR-Wl z@A{g&iZQ4~>yI+WIStZWYJgU5=fV?!58 z0bhwR6nnzZkdv-1WCDC-EDI(xwnAEenurDn{pzI zOGLmQ&Q3hyZj2Q%a$%(9x-3kvc-(jL5Kt98?ljJPlz?^1jKLUgX`0gbiGVjg#(8lY zBazM^x*^h^A!4{7O^ZcRZn=3hqv-ZYZ$~=Q@=SW6#^RQUu??C?VfC}ik)&~6)`#pc zMwzkRG@6b|(=g#O&U?XAIudl@Au_fTk&klo(%|LMfaLu)#;X5FdCXe>?lh%{-&@(( zYf_#nH<4Sm9NJmrdRJ16on3Kc6mLSfuq&lCQ01Ds7F0vBx4CwK#0k0|W2u{8so!)V zwegeQ5g}W=Ah`qQMKa9>akRb?@rjedQb0>j&a)M0VanQRKGS~4stfhpK z6K0H2L`m2Ejhd^BDjEqWc=FWfXXhiA;g$`rj5_~n%fJXBZ81w>O%WCExV4&$vq0yS zqoo9m?hSFqQZ8r^0gNdeEGdVbZjq+`!bsFZ0rHH0xD?xgy_zH!2?s`I41%tixAT=G zyfznOcHdC?$6b7)umghTAV(w{=seXQbqjJCD&PA-ynb^?C^EyTYxEq_e4`_^u<)-K zTgIuP*2lV@(LH?%TPvO}Ud!qTiK*C$7 zJX9`AmQqV+fM$(k!#m7*Urc;iE`Yty(dM~$Pmq}S^@1-34)5ds#0r!c^C<96>wzRh zy{xBDzMO6FszJ|A+Ya> z&Il_AiFmGw#&3uuxj;F~r2i=ZNG9KN364bp&dhz)g-#|vXJ*y-gV8~Z}Z5?aJJMu_B#iN62c@`r@jdct zOUtpKIV^R5v^8{lYb`c3^!LNUmxkc;e*#7b!J3yly_Xt$p(C!(dFM;pb4go9939pZ z7w(3Ja(jr!);;RgYr4cO3^}rzAw<%67=XSy?Q$RB*y=~aZ*W7+&!62!y=Fd+N%v7% zzcp{18TiHp_{Z5K^i}9X^|(>xf6Wv_JPh>*HlC^OUDVvWeXaANPVC>$4RO)S-ktjX zv%?2s-pf2CY91;{ESAYU7`Tu~W{hx4uCSL2fD{Q>{EZM}{;$~g{nNa?n(HSJle#s23Qg7B$8tEI zfjF+GhSGeZ@ta}PC5YEFoOvHcj9cjkXbdv}K(N7R4miLNJs2U|D98XNYXQjr#|1H< z{>bJ!=7Xj5(mb%RV|xIeRRD`-sLj8;F;OBvoF^1=&-Nh~Y7O$wFmKeOE&Aw}A@1(T z*ZrD*h`Sb5Q_|e)-;J_t>Ye=}0_2Y6aZUC(r)Y-YFh9~;K)~HhOYtmzU47TmcCON} z+_K@!xsswj1_+>0kl%KFR>E~?EWiGe!Cs6$pw~l6fW`2W1T+IQ9|*B9&`=d~bn*;L zZ;^=1@B51dqcpan43f`L#{z~DaO2+(t$QBz`6Vols;bpHA@6Dth?rWZ`wxDttNr@G zMjH65QWx|e(tGpT(aoB(XwT(=n9ydINu=^BAbt*~u+1=|VI!X@HmRH0LQ;$SfL#Kj z21Jn2bAYj*5DQpfe)LtokSlcqgG@h22hDrTwPGHASVn+MU6_CX@7S9vM99Qd5gJ6r z>JI(&@w!I=u_7r%@JpW=05KHhVfU{i;72HtVDW&AM+gxC37g~r7-6mCV)`H9u>d4e zMGpXT0;mQ^C~zH4$2{D?Z#@ZVwRztaqLaCG(ry-}qib8-Skf6VHeTM)4wbt9>PH7> zqqJhH$opw-?j5s<(`mPi>?5uyTAo&`6xevUeggFAng4B%(>32~{8JW4YEFHU`Z(IW z;-_OG9Gu!_Ort#Xb^*dI+2C?95%Sjc?)R{YD^_36EdXozNzQM?t5@X$Cz+u)&z?lf ztNnI(or}>GPj_q2ny|p3PRltxm#uyMj^wm+;abNJ8^>$USL-ftr#*h)c=yh4qls@n zpIxnw)Z2-v(>lLd?Cf;-FZp4O0wm@0&zRBtk0V-~{~j=ff}2%eY3NiUu~`g2siE}M zM%@l2C3`xeSs-gTk$+|1w*gE_QTun`v*GKEkY|^NAy6sHU}%{;P2!*sDDJW7dR#kW z*W94CYvAZn%=4l(=!wRw_A9#1?>etMiTd2qeIxm6+ZU@!*)E4i>c_nv0+ClVruYSp zV9Ja#n};1AEobPZU5n!be95O(y!gp7;}IRwy#?T1_my>jYhKPisyO(^wclf!NsnbjkZDyxvd@yV^sM7X%e`l;9Jgf1 zauK~}EFa_3{c-LfTbQVVhckc!z)n6_<->=ix)4b5HOgBlIOKcb!F?(`5|oUI;K5?hakF zHXKqgwP@spZo9ic&L*rha!U2z-%ka9F_L^KL=R@87lpf8;!3`^2|yVkrX!S)GoJO3 zQ$J;qOVHRam_FQO>|+F6P#=>#$dNb8R6VeKD%YVJ@G&(n6*JlucYk_1lxMF}vAMm1 zZCd1N!Ji4q6udKfW9BZa-*qf(0r!XiAKRb6OBl)>hDQ=;U77@Xhp zjhF`>UgprRS*exF38lxMsM)GSy6F(k5Ak< z%?Eb-{Fy4cR^$p0CImGGHNbi+4W%1E&8EoQty2XRl3wzR5S#a>hR==8HvG0JTFgGDl5E z*zy;1k9};T9$=-0E3MD=n-d7v+M8K*YiP_;xgS5Wtro?6jqlA3Q?4vL^Vrang@+=0 zDU0o0euIPrJSpT{7*B!Fj$lChg@~ZfkKc~>)H%3E+4k4hB5)rr+!5AAk5|2G9Uq=s z$C1Jp_F9wJ9SU6zb-1b1#Zs2m@3AbZuw^tDaA)9h;YIqeBVeKKhK7DpqN*?b?!P76 zpBqR8L)_&mx%V9B{kN!>vdf+rFaJK_Fz30z8rhQ`9dhO8vo2o5qPxaRHwDRO4Yn(> zyl6-J5nb_e_|Iv=*=+|TwGY5PE@two7$69fbj87og~viOMRv-C0N`vAK2ZBHg6nqV zM-hhFOJtvpXuJ9Mg$zzTilglf+|;j1UK8Kb&hL8OE{1FBLFby!zldkuX>aI!E*$Lo z>%zk`7F_1`RTf22KIQ_#9hN_=$c29%c+(gjEH1&>W)bj(>i|NDV*!8}N$VlSFHZ!V z+Wrd?3*&&JPLNFllQLq%gA2X?JM>F9COE3a+!XX@>QuF8TGXs~-$g3vP!zsmsfEmK zOrIYAOSJEP((iIvn6lR}Ag!W1z@vO;Y(#D15C6gSZYzb@MtZtFVp_J7| zbf)3>^uXFpb`QFeIL$6O*p&i+#G5vD_IPCT&O?BOV-|P#((65O=*k#OYbS6$?~K0_ zsAJBz&SI@?Bw4@*%)1V+k0^gSb$2C_v-X)7YB0}n#eIL+9vVV@FN^u09VNVa*C0df zo6^_K>uj)CWd!F-Zm*0p{{xz@)9?(m5`eHDKcQSGc;7=0!RIiq%e*8aK?`C98&SHI zTF-cY=cv$|Bj7{|{}TnZz}ud^0RENjwGJ6DP&&DY;0&7hNi_cSuk`b5j3_Erg9EZ1 zYFgOFnMy%vl?H(Iqu>Q zv|aAIZn?fGxx1rqI#P1~?&!X$wcFW&-gj1KD>@%I+Vh&h@Xs%8aX;6+ch{Xo_TJhL zK7^S8Gvi;WdnRoI^g181%Ms+^CM2GM1Ar+1iNG!hoklau(*-WZd=Q(9hPw8e?aFR^ zZFtn$btZl4k)X^cM=_0ttjH(*m=}L;8La=i_2_pOui#-$Te3wt?h`%2&W?q3hsjlM zUoYT`V4npD+Asi@%CJ$%7XD<9u##a&4xv!-I^@K9ASxT4&#Clma*id9f#UMLu$$Bj znN8cVkoz)rGVDfO>a{-YScBJpp9mlgnm_8?GptVdU<5n3n|qW;dR#jCEXVc$0GV$jfm;aE{FObc!R(9qb91=p|&ck9M)ui~kZ^XV*Wb>~~#%y2@QTNu! z+p$kwyNk+m&2ssu6gYcdg}c-u-{^W1)xNe(mIrxc(5ds)L|4tk2;Ej)jz?=!v-ecJ z726^#Ddg2Q>h1J70ntP&RcZ*0@t)4#`%mP`wQ~Y9w31R>u4Uk4NZIlLDu>asgKs!8 zE02>GCQy^`jQz229l>&?u~pXC{Ig4~y-^&apau}*1b;4UY7gwm_u8T!T$6o0Y8C_1lP z83*g#m4zrP(rvXEKXE8ln4{2Ilkb1nSRxQ5$q6I#Q;EPfan==puoO`Q%J4zT!GFl% z*sSWv6wh%IBbJ|{kibZv33EgE#fVt={Uzy#(Ta3UFF~|Qlm-}v-Ps9nVi>=yN4f^8 z@X0rNhySIF+P~U^CZY>TnOAGncT@D%ZFPh&`S#^^QjNIB>mTbiaeKeP38XSbZx|jX z=%8EjK2+rgELZQm>vv_hcH%DV*2F69)gFxY!eKmOGwWxo+6q zsyA}WIOn=yeT$q*`zW@FueQTnlw?~IcT%rIsk=vD|BawTUH-TcOOByQ&IW4leO7&$ zuB@TLRrgdq=sm5}l$sM{92>FidwhB%2rI_#6av6Tq>+eW>P3*ce9?!}@BhoZF-M-= zLZ@~cSk+k(zRSO!Fc>_3wg2BF1DNFKvJLohyX?I=M0bRp^u&dff*S(BpGWB?qQ)C} z{gN2=R`Njvb9E&9EQ4etvHk0XMD(SCXaZ{RS{X|V~x}GIUt*7C& zXJ5og!$e)B*e*60valv*Qg%Kcrub^H<>kHh+r=*p*R3dz7i~A+bi5JBugV{8{r7rjKQoST<#T8@ zwA(f_P2L_HNu_?BU~d%9FdBTKo>sV$#wqMl+AnKdg1r6`b8^*?=|BBL`OypQ@?{A>&N1bAg+rs%3)Ev?R-BFa@p>iLywu@uBzeWpp^TQ1) z2+Miozgcu687G;su%DUc#!z^PzF#M~c+l4~Qt%PhvM=@ZccNbsi5>gEPZFwy1;8*7 zYX<;Nyz3;4pic5juO$92pUt2I5Mf@oL!)zYDp+=-a&Ua{_vp_l$Hm75(VE65W+T6x z?bL#t(vl?MG|0r*3_50nV%a;(I3+Vp#6g*5rCFI`(M2%DHs}O3U*2i9E}WoaDm?*v zz|D*s-EVA6J2XmbpEzB0hPhR-{LR?8TYO1Pc#iea$=Vm-QRdV!R;joq`gQ7cNIRiV z;BgouF8E0(U|1YOvY$)Z2FU8r5+Y-dA2g+K;ejw`QH2?bOFz|S>TL9Kf8i&)Xo?ePo(N}nz3d5IaL)(>Z-xH1IpvT zBrn910_mS10{-Dp0AWuA0QoRt=E-6%KmRdHeo(2rkZ{5!VV}Pl4Re!%=&_T>3y^lb zW3V7`JT1F8sfW`wRq@#hw13Q)O~Z$ur^^+z{2KlU)~6f;sZ`YLUc1E|(KUdyxYco; znV7c;84w1c;_>4unhpgI3!@+KQCzuod+u0vCN1+hU8-ZYODi!xFK>1-Ra403P3f45 z31id1vKgAyv~}v%;31dEm>ku_tuJ+MpMHgB?r7LbZch8c+Jm)OqbmRD0*>mAhXi;bfv-^c%Fkl@yqrYr5f zVRqF`v@&?;Wk^x|mCR4CD^Ap!3lQ^eM;LH~$@fY*{61^q^4Nb; zQx+D8B6=O{_oQo}!0n4Wdo=wF2;4GL)`qy2bW+yUQ)X`pDC5<%x4w?Z5pkaYWtx$A zqg@F~U|nz zF(&R4^7v%~uI1!A?+4YG%9zBfD+HryNhI3X-2 zRMzZjnX>-32$Hi_U1EQwkFEMOsHmpa#)p4k`m1Fv{)xAzq zAD)|+S4u@gx8+mVTwTe#e3{wBDp8T{mGdIvCmrTxxTA{78ktzf?>OYNme(}KTh{G9 z5|Nm!kvE!(@3{}|R1WeO-0++l-fNARlE40NVDz)Y(M(YJu<)H0;Wzc4!u~`3DGykm zTYSpVaqxp83j>@QjIu)H=9_%IDQC`Xaws8hZ$smsY(Ut>ARjhzn*nHx(^A+~=gUq< zRoo63;&qLDJluV|LXxFw{zt+k#+8MSQy+>UH;hbwix^LPD1y7akZrERkS*c6@3U;@ zKQtAOE$+m39OmY8oc+Y}I<-d{)pethc8v%4@hDwqnDypi^j5?|JwlPlu1~B|0sPsv_+}j~aC;X+;+%w}BX|DhE zdD;wAS8YUZOlW65{Kllh%iD@77e;+}!ruQWv~qg*M*oy|$pLpuHaCeVO2%Osv6J^a zZeExrtDrLUG8_!7jGi$p+nxN)w_R^#Ydpv+oOR-nc+AmEshOP-uV|8m>m55EY1g4l zhrR^er|%q@>Q1H{TbV5TpndE|-8gi2DpO4bH!Sij8T(U+(HuA&>AL(%m77KNDHcMp zni7nt4MqMeVXSZ<;GS?b_p+?*qdcMNL`ugUd+`?gx7907YuOCf&%zE_M{%3hFAKl& z%H?--%q4hca3bg39Qko!M!)cy1H@ce^;p>JINf26JjMH-_a=>yqW8_;+@ z&g9XOW~+ww4bAd=*3V~!Kgbc6v(%_$sdX!9&4&m=7;-KFY?#n6JS8B=`on|-Zs#=TS0lmq zCMS86+MwyTY>Jlcl$K&&|4_u9J734i&=>lR^@fZ5#rURos)b0c8e&HJSDUSD(iSCI zvTK0-;O6svxgG+XWmkmkUYPYBFPr?0e)Ezbz0eMu!8yyPY7cN4NloFOrX0kwOJoKO?<@vxOs3oa7i5IiT)V?qCZ{R0r9BZUtk z@Lx5Mp%Gv^zy8p7)OPcq7b@UorzxjWj-uFv?^scsh~mcsA_-=m+1pIVf-ISXP0G3} zzy95#d4#&?N%69z40?sR=p-@mW~KHm%^WnmWhkHydQXkdU*LhY&NTh0=0lJ{+%wF% zn|f(=6;xtCHhGP8_g~|NO!IIx$G_+s0W>!0LDbx@c$K0O^*tf*!%qW%ySK3Don;6{ z;IR|$EsJ@-&PSz)7)gP&AaQ;Rsj~*rIkaP?i)Ll%rZ1wY3xpG4hZP#PITNX3_&UGp zRs!T`lFCS6KvHb~Zjqj)QGcUktwaxVo`yP>v$QU7RzDGCYQ6ss^JD22BZer(9{1?- zHu?^RsMEy&LF3r(0GbwSeZ2Ak0xC=7W4;53DybamwJ~L&FK`+i_u%pZh#g~h*uP0J zpF_uC(0%(c+Q_}m`qA2v0}}D_$1bSR0zmHr=`m-Btx6&;uJ?9->))ChAu8i2jdL)? z&~Hc=j}^Mf+@*yx)iEC!NS8tqHZ;t?)8z-RZ%~>;xh&V#*%+F6ZV{C+vQAd|M|A7 z8LtrZ&;dF(F&ieFpPT%Wx+9hAk{Zcs8j*N%4R7wdkVk9jPnpj(pE*cT#eN-9lT5#EhDVjQ3|Gj|rzs}v33M6Rj>9%}eykgf?~bj$ytkAt z!?~+f>wxcdzGXFR`|qacA78#+&$Oi1r9_5!cY|{KWQZBHNCM@ou@&PPi+EM`!>IEzoejJdk~k z$0QV>py3Nho|$j`b2GqV4aKLb6#nTxvF`a!gF?QpbtCn|{ob*?Pb_@B_>+pK>bK?| z|3e0y)Vx3vZO~bLSaJEwXbO16z#AzamL?1B!>Ozu)_0Fti&lqxvnThvwO?_2;ABgUd3zC=qDA z%lqNqBFl_1rfQA9QarY?#^cLu)LGp-gAdsZz$~6hF<)3O5>z0p^-MnKck)Fm*Wuw#pYk1dPtH&Na)#B) z14ypA-St6!GAymcmU8ls`dh86(A|xjzfwwk0c>c5?R2)DId)C9d^ox?>@!cw+O9T$-zaK1 z*5_P+q^{FCC0kn)D~jR_O`E&B3q$k$RX8*xL;qGT*Be?GidlwV3hwa{m!ijcjVrwD zWls+iM&5@;pE9iJhF0so!u^HW=R--AWTcUcKF(vGHybNKSE+wPa(_w!$T#i>IEMK3 zm~u%~IWEQ)BiBTsX-BgZ>-V*rc8(0>=Br8rMM5Ux&&{qjy=k1h_YHbs(>7I6py<`M zd)oO;hWjEh$(6aQZ2d1@Gl>dGxNi?hDPGSN%b7Yb;QRj-0WE(#h6gQMZo-w8D0Nj% zcQ~gn4vNaDnkbdJq&_RE=P7f-b0oTou#3Lrui#$od{g!9io(|OwoYD;nd}>mSH8c2 zX>tkQ{kU9u?~38uyT-o}7UeEif^VB?xW6pg{pJ`rSYuo1V)eNM9AG$XT$#+7;UKjx z?5Y4(Y|h4rtLUMM>07hxcad=yf(n8j2cG> z0LWYAQ=LNF5d{W|_W&v~grl~-MMsZ~G7 zxujJ_@XvNYj>ciKo#H^Xhye)D#t?1t09FxABM3s*hnf0`+z3k=fc&OFA$)#tYADN7 zc>M!o?r_Jz@=$O%cxNIl&WIIiLAn zWN-O=Il9i~n5LcLh!zeixykxLLJz+N6G38OljT+2xWlZ}4Teipj^jI7M>kV0mx))> z*umw$UVZ6Cra64fRZK&QO76?UIo;nrGg@y2J>P|>mvC=ux{l$pYUJ3G3Jp%=@!V~$ z86a(+a)C4}U=0CZHddd(^5q)l%w!JXCy!Bk2UcxF8?7OF^wh0^p&E61fMZ$9z2aM5 z<$aNe8=r6fI7arBxK^EVdM!e7uK0er;`Y+?fTzyWCbH=3kjH}MyI|>3|MqK{o&v3g zcby%j0H$`OC_c&LMd7QX@`LcqJbPVlK4i?(XBPOOuv5X1g6fyE;{vGGD5FEQ+cQe2 z&93hstDpxJiL>uyv&HF!PRXHBORd?-)jyZsUJ#Q#mEfo8RS>_vFI$es_ykEWh)DMx zCep=>1*rxi8k#l>{Oshg_$7dcdhtQlOaK`huLWf+$!yn=Gfm+*dO%ME6%H zddn)xp93i$^~H9h5dxxL?A*)Vwq(SJjK|n~NnRgFZZ&+HZg?O}9>P%P(hawSaWoOn zX<;%}*n$Ru%&*hnBDi{+1!j`svON5)s-%>|^09SNezw?sf(23c8;=|v?IRH&0?LJsBfA%G zPY*2NFXdER%%LcRbq=n~Xl};2ZYo_2YgF`w35!V!GaNmIycPC|^Y)-e&CKAYWG;vX z2Yea$(Zs78pwdR~*0u7>C5CI6b8NCNZ03(tMGI!!_v0A!tIG5j+Zy*)$f{o(S1fyp zZx3j&d4*Vr3|bv$UJJVH@`FSF+!eK}$+Hm|n~~vW<3Z!wmp$2+{V-(b5Zb)6=Wd#( zFOR2y1X0X7g)DFEe$A?&$$0YG501QztALX5H9t+LiGa$NT^bS8&(@B5Oy2|2sYuS+(a-DK8?4jdAL3o{O37Sjai z2Hr)-IqJ3m+bAS^J6U{~*dK>6PRo*>!@ojc!%Ojw=<2ei`L9dcc-NeajS!=8!`pMO z;j*&L_>V>vV96-~$}Tc7AzSGK9D?Pr*!p0#r+^1$Ck3GxpTGk6f)SQr1T$hlh&eYB zc^W6pc6b;i zY8-s?#YeTe+-mC+N&pC_O9(d&3ge^xA34rQq6*WbKkMeM{?o`yzolKw`qq z=RK4LPtC)FFE*m7sS4H+U5G)4ssQW6c@3k(OFzK9m9;;{)}~&fs^a_G^)sFiDdIi? zMsN$`K`TAT555H<>AqhuMtcY`l%Y`#1+HTWt}aOt$pD{Nn;i4S8BjPAtzx>Qb|2zx zw)cJf+v@vNR{tUdb=7(goThBm-q`vNA0)8HD`xH}=AIXSuk+$R)1A1=FYJeD88~m> zAj88C+5e#!8arkfFNt;#z7!jH#`1er2vR2`uXM^tv=+|%<9l)7=FgM$oRaUoUum@fau3i_ABbDW-UC;fF|C76A+JH}};5PS4gGht}ET1`+ z51NVp0?mbEb+GonSc0~;gHuQfYck+Y?l)@+1Sz5U6R^osx!hv5SFjaQ_F?cEFE-s8 zqtke{Q^*fesQb@lSx{|OI3*sHrC&czac(kVMX&C+8^MK>?Esn&YuGF}_EAXsaT}8w zhWfFMdMy0?zV=oL7_(*&r-5v&DsDcKRGXjkM#WLf;LFfu2fU&K?oZi2-h>~vL#^Uv z`F}`o^#E&AxXR{$y_xrYJ?j460)660M$mm=#0o|+IGo-x=`{nM`(Vx>R6}+Pjqw<{ zV3nDX^W`dP>1&2ot`2W(G{)7Qd;Pt@%x(F6wy$7(RAW5ac}y)JLM>-vIMO!A_=iw3 z@(P)KFi7nF+ZExVSWJJcaQv+KLK#|0S7bAoD<~Y#ar{(l)zf$=02X(zpNuhczf3(& zn`SO*85)`DeeT@vVd%vJf$7>j6<5)Fg?K9Q?u?|oRb=>uvHB)S-}T6chEl6yS8kt- z__;csVjKDULckI_{!5s&#~o?vRwx1RPy;x2$y4Th6^{A(FGbJz?MDoHm;|6y-vudC+GbS_Z;h%>ch#;tPyz)20_f+_&uxb zEchb__`3v2_WgE;pn6vZak#h<#srHYaLUGSLTa3#@Hhz8K%2k`U-y84D1;Xr)|qv} zP6Z;-lbV$z)Iyx|qg!n3pRc|5Ezk)u zN;~!D?JKjw%3pzBbPIZP~fpeBuakkz!l!55y_ z`8CP5a@{gMrEF!LD37a4e-nLQ-41s4YX2p`Ft zRs@k`^f9R{S-t$D(~6SXY6J9*k$48*7;ir|5yI;&q@VX0`qfWAyYx~<>G@%JoRgQ{ z%wq1ApZ%bKF~ju7!g;F|kLbikEn^b))LctnnZN=NhCFD5Yzf}`1>$GgC_Ezhbr)%z zc4}H0S^iKaTW?YkF+n}y&D)P%TEA+b4knHNnV$)KUYArYp(cH$%zH5SVTo|9Mau-g zA2#&_1&gMnSf+YlJVbEu>#obk-KHuy#P#2&t!Rn?o{5BkCCZEMH|pvu`l7~!9oqZG ztp&!#UaTzSPJMJ>KGhxMa5W?Gf(>@iLFvMc`pahgVmzM&N6LmI!qI>#La~4c1^Z+~ zh~jTxPrt%u*oIq(hF4v`9opPvmMWzC$mXoh#i5i4P4jvI`DZhIk@!9FN3mDN$E40i zU$gldr8y$LYc*4#=2ow@`wUlrXT6j|taPL%aH^_C5wAe1V*i)6F_U6BIqD!7fH2S7xUx?yt z%XRQ!v^h92ZR>zp>XpI=?7qGRQ{d9^aC$GLT)WX|t>e>ybPJ9^PpHY5#u^RGi%}C5 zd?cXR%uUbRhA%ZQQ@wW5KeT$%-@0BV| zt^^i3g(%MLRshBZ@g#BcP%LOm31&Qn?IbWWsKw^Wozsx+#5Ik86D` z%fIB;m)A>)U+?I9QM0F0do}O5oYVNB{&O8{6$`_RID)8OZP^GF zqXnw`=dq-}>bG379iHtMSXl1daJTFveSRxkX&J3p2v7E;F^ydV491d%WH(<64Z6!> z5h~Q3iTJDMS;xe%(ndHG56kuYGerQR*=HA2jWSh zyqn$zASfVZu!@Cp78Zjf^{+hVu(ki=PPZTm!&DD#(9E%b4r}*j1UT9Dy&EsL@;~02 z1FSqRvx7^<`PS8QUVRI3;-!?}s1OtJV{)v?b=~p#yj#aX^C5bk^Rr=p6G3c&PZ4;) znIO&vn{sZM5{DWJK$Pm$`ISwPE!aQ3%e14;gh(*(X(|5!{pUq7n92*zBeTJx)(f_3 z?Vi|k%UH3W5>ja+o6bJ-5B1A4UG>_+EkpHdQ$KfkkKOO(YkL_k@1AwIaHQ;iPal+J zT)azFUpgOSB6IxZ)%Mk`BNU`qQlB6oLJwNzTG_ecbz5i|pjhky;K#%^XME2dD9NLy zFhPdFWis`&ie-XHVw$8GBQ}FR-21BP1lD(WTDQOs(E~o=rzYjNNRD>KX$07N#fSIL zf3KWYM(Ds3nm_YV=-BmbJ|6RB@SU3{)(>DnRWO_Tx;7`Z9Rom{{CokZT+q2bEA96H z2%5poWp@5x7euk``FlWt_8dF}0l2Xn@{`LD7EvWKTWgZPe2j6o33RZm>QG|>QXG%G z(^u^xwGCBEAHzfB*y}2scqPL{K6OP0E|^Rp=)tk9cuuHg+Cf$rxGcYLyXy1GA7tl@ zvFG@Gp(ImfY;&G-s{Zo;1-RW#iUO1*lpNilXpK&()x4L1eu<~y3~#!P?+R)eBBtz9 z?>kQ%m2~45R;d8;PT#*~ZoRX;OM!Mp#8x&c&tAbc=v_%Hv%&&#Qfd3Zl`<yU#uSt{R$g4<&rD4yTX%qmP|H@)P9FZ+!|PE?Pv~ zRJK}6xB=X?+2Xc2&sOB=8^9W!NS8~3%R$x&mi$;&BRXjo;F_rKVur3cXf9St>b}eS zev;A>p&@cBBtEFDA><&fwkb5ezNIDfV5Dfy@5|90JyY?E`A)u?U)-6t!Fi%|&4!vS z03);roR*pk|x)g=De2VGjmT4slB*+6QDJ@@|U4DYY+KW`4Jzh|`dxK<>?>YL! zy5p2nT}*=aZQCeet0Q%b0mp^60da%t1cfvoux`*L`uLlwblSfzS2@O`mNKLxw6>9$OJ zYSe!BU1HUDx9E>hTDVQ8(awCk&aFMhtY<(KUEIO~3l^*1wG@oJ=$YNlsopP}j1g8b zY#=V%w-)ED*wWG?>pxUu4Am(d|#A=;taD_6`G9{&4x$fFClVlkW@pD81 z_?U87`ORImb3%E&%2wD0lOMC0p}Iw+Yx~ za@icarIlCZk+-r6KA#3DIor8QaF%)a2_G^w%uxc>oDnv0;yTnzPI0u7md@- zAeNW_VbRG2sds*lFGB!DL<;gs9&!4)qrLzYR&8^C&$+!mdfkAI-9tBL58esO*2wOh z!$n!Y8n#HWkzk2jSA(HtEb3x2WNN-r2z>ikA88Bno@Z7v{&D{RHZrCrtVoYUi3tx=Ya(gNVt_G&O@Ye zK3ZyADGb-s06~YxTvUWQ3;!}k;57tfWV$;b`_|r0aseJq1#{*;*&8lecZ-W=@wO#z zg;b3NpZ{&Cn>=WqxSOas5-q6^c_4N&hl$`BM=!*)U$8(xh(?21YV;VwA>FI-o~_U? zcjv67zX<|O`~}rp8|j2iY%Q}pdtc>*6+%pAEiAHjpwDnD;*<1Fz_t0C5FcAnD51;P zvc#Y=Q{Wo(oZJ9!?#Hl(`I_5#a1(O;`=fq)ft+cgRv8;4b;^WCki-r8*7LEsQ0?)# z`!AqO`4v{s!KtbM^-wq7s(Yy`chH&Rvge}Shh$ycHky1ctt=CCipS?~hZJy}?d}f_ zTf9NVVgR6+kU>ESQ2pS%5uUi9O9EFZ0LD|;m#xsd9Qj=JLB zTrEnOuD7cEHE|*@QVB5k$1w1b#@2-C@`LF;n9&JxCS;ED;I0o4a|Vb0RW@1u?*r_k1-hRX#aF zQu6ZIE9^*SyV-9#Qjb(XKaIe1M^v88@MsF*#GJwoe-*s{_TS=nJmyEu_k&mRxr&MR=B4=x9N z@RG8^0B@cOC;wAwB<`wON*mVsK!~to3 z^91Y;dOj|9?T?=F+r>YwSK^+n=WoSZ1>M^$dk6ivZ9q zP0diF&hv3{cwON8qL=N|JH`pVw;mNBD_}*9yCn>g3Ca#F@#k+HKIW+-%Es@u zT(j8rn}Pf|g5Ak%H?7L&R7Gwn-q?)W+nLarTqrGG0@R&05S<=z9@4G?>A6B7MDeje z>CUlQgg6XeByD~7(bGla-Td-dfBjfG4)qpJpvk=Y-9dTIKiftWjxJy~npWFaU{J?h zcR4UliS?VPEz@jr9AL=l{D^{(0Kkxuo;7#KlZ%M*tCW05T+EY@+*q6Ywm;1j^( zW>YjpJGjTpUcW_T*vG>n?36`00bM73G+#l>`e>l1w7+&3EaKJgrX9B z+t?rKvf_Fd^kuIY67y-~jCQ)3h zDQ4Ta;O82jzX@=ylW=!)lEq-UoEM{U+Bns8CiThX!{U(YR<+B=$9-h>u-WA@sFW;u zZ*i*-PgCXrNz`yWZ^y<9c9fW@+l}&1If(PqwCJpTcsAbZJAXE5XLE3z>rKO6ZhH}+Zi z(M0BQ1GI4&z{2tuueBjXxUAJ+1gSA1fBs@@<53B5!<$EbQ)-E2`EF~X*UrL-rFPc& zLzrA+_*tX5D)jPL&!*BnN~2MU-Q@TCS(MgZk$<&Yb6AnyUi>rs+r?S(_|Zo%3^7i>nzlih`26e>{f-&>ZX(Goz!=Ebc>@mK%31tM z0lWpdoyvWCCPKwL z|0kw`DPCN6!iyBViA!JXqxddp2D4eV(K(E_$gyz_Y?VV{yw8YEC3p)gdZ!ugKuzVL z+i`;zV8=-R?ny<83sH}ha?MzK58{D7;f3h$@bU?fZ>pB2liDA{NV?tF&_U#oDw zN(ydc6$GS($UvNfDZtgV+AzLSUO);j6r7Mt;G(yInS7Vwgj@XE&DiZ5%x3wH*?=cZ zft&ziYx)lcsNKqI_sPo7d3hhZeAiAf6~69%L4SawATVcxsq}Z0bpjZhlmwt9tIKd> z!<10XEG9wEJ*I!~poorq9s>Uxr z<4@+dGj26#g8Ym+skw2N!d29bO#u;_S262_z33;TkY~< z`!|*I^iKU+y)sO=KKq$-iT%CipUNsWt+jg9^tlR~K_T7^gl9s9bFB93oz%8-01%mm zJrDC1Y8bmlU*^`B5afFb6XN_|?BX7@y-@G_2a9ah*dEbu+7gkzoG*1!h;S3Slnz(k z;Ejl-cn+kqC8hU;lh}CJqFhPvb%3rg%&U-oTS8)eUi~43x8{e~dd7lLV83CiEWdKk z&}>~rAMexhsj#J^$yHNlDtiJJ@VeELUk={YoahbwRccpP=l-JZ&FiVL&7?>dkX|ZZ zq&r3UB>nwrUU2qF)FWH#+FPtvgx;rz!e_`@BRCBqb@hKVy)THTD-YXd_%|P$aA_#% z{X8!Et1kzwmq(&_B==D+|V^=LQeF1=06ZP*Fi^7u)dthq79C>;wD!E!6O z#V^6uD{X(HTekaz48dpjxsNk03N2paA)W<*C?2LP#q46Gn_bP=JN?%QdJ)M-kVyqu zVhD$xd%ZiRA|9^K^)olLR*Bbbw}6c2A#*UUJkLbHGdCx@jH%;lyB(r z{KxGr^Qlixk2g41jFg_~Z)^SuD;WjE)W;Fn!nW%MG2d8J&KF2j@7uE{4E;{F#ili0 z6x51gF?iBheUz9}{TV#)C|*yoK#QhXQ{g+chG~^`2DjH-?=eNjo5t)4Bj|nkJs@Q= zwtwR99g0mEv{{|GEWThln61BwCJj5yp)}1M54{vd)YdLx5IS()H-Ra@< z4aZxdXX`z~ym~}l!X{+-GG6C>4=9uqZM3Zu5;+fTtVt_HQh;;X`%!PP-=R7uDTG+Q zHtq*fk@UvC#r&vz{mZ;h9_6~!KDpiF?_Oy6=QRI@XV&}AqZar0$?;6XYi_Rufx&y} z%ZP?pKI*d)inW9_QIv{Jq7+`Em|9cpEYum@pY?w*j~0xos?kisUx118==1j~dY)!G zpu{hlE>=C&lazTDY{P_nq-%a`9sjt6^?|%n@>r@vbY2u#36FMZFR1ECMoGN!X_c$= z?0zA+KgGn>r&oAGqctc%*iFKfG$7!`j4vckJ{^6M5)qd<#uGqyIKqB>`zWv2K{LX# zo6+T%dxa62`9SmaTJ2`6UR+1(t&9uoRAH@DC=Dj^wyk1OB-vV-Mvx3+Cx*oKowC0E z=HNz?mk~Vrsb=`&?&swTJNHn&zl!y-4g25TSm|Z_ zle%)lyeUU;2D`N8?;ByCw-gA}oNS-6Y|ab@dKZC*$252iQ=|>=sQ*}7Xl&%`?BbQb zr*J6po##*;Rn61rl_DRX=m(S;PgeZt;&?PzNY`kyTkfC_J<2YbA? zj($%B09F)dZkf)p^R5r^G4}FWI{T^L7Sss=Z|X*+g4{j+6*8-%3x%7jm2z!{v!ol~ z-SP5p7+_rokVP`d{Bx`%>Z}Hz9ceDI{hTLHWi$zf7A?+87FYh(G2n1pu_v2CYv3>c z8uafC=E?*tKj@F}SLOQs>c%hWG_-5I$6Mj?#X0xM^7+qji7yP{vQ0sqUzpz>a%p_L zt!;?^_;tWF0AvqFh`7&4OruQknnE*Wft)0rU@WcC2*Q1{{o)a*M@%80)GOFUmMu z=;9S*QTj^YY+dN3$JhR2C-62gQ)yL3B9foNo*Ips0)67$U-`DLoMiaEwZ6hr%1U1j z2}VKENgEVw95!F~s_y^xz5I`)F&!Nrmj8ID>y&e0ll2f!<{h*)vJBws{&%Hx0Q#{g z{jam+bRzBSh$>m6B~}U)W_ubX2y`b=YE9VR`0LMk!oIr=ZOGE%3x7cP#(ww<@n1Tx z47|7?FzhaF+KT$pbT52;;quG$ucl2d=Vc2oBiy}nV(-7L66+Ut9JrAaPSPHN0Wjb& z3Bb;f5qJ{C~ zA7CYSmndrUKOr89%qn{Z@C#8lOH&iVbn%rWqauEPziHL*?l&V521$a}akF?mZ%{n)@wP6_t@D6&uc_8zt4e%CE zi3OlZuojsn;Bx0YUAAc*KBS~vLsgN@f{Q`e;VQY}xQJJZubx;7-&{4{C;~$HWL@rKoH)<6KW3&Wkc915;8X#LIgO}qG;06}Dj>`oR8JQ^eX(JI#xo`6~ zyF+F2S(VDk)(0Y|oF+959()fietJq`?ZWj=i5yVU@}lv*r^1q8>?dtA*wu0d6SuE69I|B!8Y2fNJs%PyX$XO*4FIv-904 zF0q_9U$s7E0v+{5&QTO&n3v}=o*Xoh z_1mgIE9g|Ovb`C_8IVqHH^;28c&Xa+#-qLw(j9LCY=qT1hA*NJAhp%pC~-(phcW3O2a{O?4PDUK>^=)Z9AA>chfx4a+vC6Wt; z{d`6N%ki)i`O;XrKd;Pq{ddge0$?#;k*F!TUG_QZoSo{MAN8q0egVEvpw7G;Fq|i! zS^no@@nsL%N10FP@|@YQP86I_Y|#=RI&4tArkqL)QCdyf?~_z&**o(T#d8SXa{aXJ4~?c@VwXjErpzZNK+2Y} z3C7d~6KkzeG#QA2uUzr6)IA1D?ur*W-(``-YoTJFF2vMP@Wcm%$_BjEQOfXsnI+0w z=W*cpez4>^0_Rw+qVUXTEeu>_%?)0*F9&UFH4I$a0*K2fB-t5S_Gj0JEV;})D&AbK z-Qn4x^9N(L7)p3`&KFN^Xd9`CK$^ZWEGo%-y?6@90D)7*m)fSmjp5AAG=guZSN~y&Z=I1piZkg2Q z7^=?6`4-oir;@?}(dqn8BQBTkq>ja7gvyv+VrL(2on(--ETev2ua7^Q@*Ee&;vN3z zSb6Worw1P9YR8kNhx$s5KRIq4J0|YxO4xUqvE{!F-=V-|&4Vld02c~CqO)R&FQ$%V zxirPGl4fbMyAf66tEd`de~0sf!8_5n4df(Ot|RZISK<>!T8xT{@P2 zEq(1FVq!&iF6xW}4dNfT|DOfIoj!0vHnW?@OHt9?AZ}eX5R|QTRM*zYEd5p+mt&i? zbt~`K@2B!ZJa?Rr^LUiL;8Y@T926YPT1!~Hm6oCYe%IW#E2o~LOT8NH>}>UA2Kzm8 zwdSRM!I#H_6MVa`@<-TrZ&&R+w?v<_6rCS4CvUtuoD!YAOGpY?F5~_=haXDDbAfCa zhxGrQ)m$#&0>|@X<|Z?S->rjGrZ%b4*r8#;k0hnrs0DxH;m&n3!Y!;Rsz&(fn=k}X7<&>+!pR~ObK&}Zme-dE8mCVNM9QDd^1usbm z=?~7dB(hAkyEtdR?t2CGaUGN73yp}EC0(SZ!fpH}8i#gORwI4*%RQcPT&%dWYNWH8 zADNnl9s;|Gjn30HIdy?QuZH*>18w~^{Rpy111pDu0ndxeicsQNZFT{4l|$XjQ&ht; z_z=@zR>5af{LtAXFs*nl*G+1T0Lu zadwKJ|BVp0_VKc<#^vxv2RtFEA@2l1lebAnUUl(1a(9khc@nE1}5IqRQ;An@;$xtqiA7U?b{y#WX&QXEl~!`$SxSM4!c-3&wOE0L zlfhGfNL#r}^9E}O7Z)w1i$OStUl`^_ZAX9dw*gqttB#I|cS$+26olo#GAMWzLgci* zRd|UMEIY${__$`!`eTZykwQ?wGvXP|`GqyDDDa)anbuSGyU(LzQ~e}F%_0KaWx28y z4~N$O3;bd|14)|U?vIecC5@Xf7ak~CSdF!&M$1H5e3FJ7*K3J&bg;2Y1AAm>%+rr= zUo6le^!pDXwF(|^c$D(oQjSjSr#OR?0H0)Z7qg&#|+C5_`!3`mKGe7;hu-m2@)yK28oaL8^mipj9B$9kZ`x7dH%U2@gS znk2#$8Q{W}nX?hR*jOyv0GxyXR^talHf@oco`sp7liGIMsxmQYmq)m@G8AJsqFn2C zN67$&y3p)91c3TQ2HchS6AxAG3}P>u*uO+7*! zggcWsA+mZGqJXpWUuyu63`&w72#{cL5S`6$HzXcycRDznAWaH#-6ZQtcZ z0r?fX_gw||y*ccH<3ev$+xNcJs+sJLQNC)b=FP9%Q7hz1C@c_Ic^OdVNP2&YvYZ=h zBwu8NE#f7&a-6Q*yN4pa0+0O6RX>KfuW5Xf2WQr*^dyg*t4aJf?j)-7TF3v~Rl1|$ zz(w)3e=(73y;EV3 z-|r+Sbu_B4%kfs~=4u@MxviNFP*!QmY{3PG&rm1!fHEl&EB>!??#L?YJZ}9Lw^!;kl-5ldiys8gbIktEk6K z7-8pfwLx|il_z)uO9TBc-}NlTJw%oAEFs^_ecjenC^T44*I(?w@+cONk{iMLGOqY8 zNKAXmuJkVg7@1ozU_JiKEzydk__P{B+=q{ce!9Z`j)b%+Qn4o$EFgOdg&VBO=l)LP zIrw!IqLyTWtNsbB<;k$nUUJ*uWjS+lA|xn_w>=R6&iE1WxxuH*@_N;r-!SrPVwoRJ zHBb-Mjs`#2kF#^_5-Z6wmSGtqoa~9)`}atsv7@Q5WNn>&D5KFl%;lv1Wyk2fLNLSh z$!QLMVjxrAIY6!YelJ-@X3!8A*ptsl3=ALHc^P($fl!G#V%K>g-%8LxK0=pq{78F^ zY+9R-NFHH-Hb^K#W*HR@XrE$XAhdN5C1IdQ&d<4b>M8f2AVn22T#zD?ARc9HP$q3} zkgU^8{{5J)B~=4eMvp3E6n6ayHr4Yv$q#5@S6@_*=^WPdcS5+S2F$xR**F%QLR}A% zYdLNDUi`pQS}sA76d_eT^D~&`76?i6ld4l<1h%Gmo-%H=2CSlcbvjqN;3>24z z0kb?=UH%d)GAOl}d)XKONN`q0FuM!p=MDmoV2KdmOMR;aPpx&2j8n#c_~+NN9ap&G zwQQv5@}$U*9?Ri~TG2q&Q{ct`48YHJ1+N^70%Ud#3SxPW_QhCpbCs*y&b4;%%Zxc)^ATD?j3k z#Fu>AAoF4|@DQ=WW@9r0_m#RZHu^?2 zIrk1IqhEI4JdjHy<>{Jyd8t{dZ+Wxv2VJfGrOFvH)6cKx8i_${m8wNcCJ=yv?=YiLaL<(UiaUMjEMHeua;G zZZhk=36@lve{`xw+UN3_!08fYP&&%s`#E*+(2k9=V2wk#?`tHel}-duMH{_8H)Kuw zudrb<0TiIrwui{m6v%hO-!s-PsdjWbG4)k=;MoUW?k+|>$~#+(DNSKxDzAFP7qer> zNN5?hu$SBil;S!Ra0dVlUf>FLat6yb=So6=RN*xrW+;4uwfugv-wUSg)J%;A4{yuL zDxUDXpzZe0YYi2xivLA=m44;XaA0VUAL z5R76p7~%)KZD}jNh2gSSeLk#rh4nytT1+WpT;6?xbgyaiHCnUWa^O3e!p(Iu9*p&U z2M9n|o>+F6Hxb}k{0X|icWO-wSh(NNB6#=Fg*EM#HmG#<@mG<(Un48mzWndy*Ti?z zBV27)157Be;@|hk+*3F~WBo@RDvdRb=uqqm+tv3#LR%O^y>N>HmWqo8{Y?bqwogL0 zTzHZmGi=A@r)zDsl2Z1SRZX-^e^UK*lzwMlO4hgyb_k%p2c_CWg1&N7Uh&}&5a_Hd zGYD7an~b_kzA4ld)IGE|u6vVFgd{Mgf~_1D9R1K?tl0#9_##vsw3hn^tgt~M(gR)r4n||NP+=?3RF>`doqZ_BsN>{ z*Izj1Fzv~*^P;`0Iy8M?)x}eHk4r55_QJZ=K8#0>Y8@!d;_h%0V^9L!h@$-`31y?V zgw`=XW5M9*`n=D7zn%q(CY#*h3I>dSjgEx*#i4GfeE~?-{j<+(lW&=YpL@5cZ6*X* zIG4+&0d)>W6qyIk;H8WC0C*sm0!SW0(kL}fOPhaS0N4V!^t*hF>j=a7b61%Ky5)G? zQjS3A@)Z^8ojwb7bJ8lGM=PGq&Maeb9B+^tA`k#l_%G!O=0CaP!9x|KzTlQUuAD z&b*Q31;BOH%K$XfFO-`f3={b}D?1jcR@)W=Hw0uG4kqsEGdlIAN!zmt`A>qsn*iO6 zJu6}JwpFHxg}U8!7|574o@thSn_4n8n3P4@|O;vhT$EYQP;bk2Z+{NovxnW!ys@j_xwrC8-4e4 z502;D$#Nae(EOAVc z3dTnAP{vwayN7HXHfJgqVkR%0IfYX6n=v=4za%+$IpAuso@C`^k@MRxf|G+8{VBH; zPsOYHwQe8CUcVLLZ8BsM7dgvSrCAJ)mv2z3Opxek?>=?YvAs3oaSjXMmfcv{ORQY) zJny2gtl(HE^Xbp0o9-vo&*@HYcgh#YPUQ16$Z=?=WmU>9zY=7C{5udj$4!LfA6(@| zfLNffJWVj>&*jOj>L00Ef+^>`78vChlSX!sT)~g5xBkJbX==Zk<@mFVs2jo4*9A;| z>x{3e9pa9>uQvJ;^5$!Bjr=D$Y(V`LEs|%ED!>sK2m##B4a}N|d^zb~o$^$5nk*8?j`&E$A$24(eK!b{m} zkaWaEWLBdk)RHLBhQ463)1}%kdQC53${o8;U;<>@(|Pfk{A|PB9$TdVmEku)=*So8(tYZ2{{Cb`vnN>zYtv6Rj|#dYjv)=0qJc{>gJ`Nt)7v5Czdwsw}>t=b2HRt$CV!RJWGks_xKNK64myaryGNm`CW2aqk`X=Vqx34{ULVLTRWq-;$SoI)2 zf(z9Snm4YTv4eBA8c8K%Wsd(v{JBhqZSG) zqvP-Vr-tVcX{+58b>k?-XKNmpz&~q{7>c$^d691P6ls;q*7Ky4_uhfj;%90&n3thK zrK94dDdzROqS^n6l6<3N7^~7|gFm^X3W4^?rTU`UAPYInN|6T7`TR1{NniV+l4r20 z^NZcfYjTWCbeiUf@k=j8ryCjnC9j89<7pwCfX_}4=ctN3VuyN0`4@(tyy()&*{Z!^cQkJ(~GzFQ6o!K@HcicDAdvU7fj2Ph! z6Oo|O5zxYKLWVd`b29bVt@ z)ra{4t6Rz#Oy@vcDyrf?u));UFd#x0w;D?JKCM=LbG7amU|$Lz?z;{q>Tm|Pp$Kyr z8tlr=jrsX~ZR#D~Mt3kCYlM`)cf0P3h*RkPjjP{8*Sbw&pJjEscPaeQ?$Pi&oVE5m zuu+5L3;dn|AT1%XHKRAP+XFNiz}JgJy?8uBxJh*`5`=~1A5*C5ch&i#cwu=oZ%euB zOo)@CYH#{V?dnCgTtTO*_9?M}RWKa23krgPlg`XQ!6G*S5I35EwTAprsRFi#iWmQA zxCTAfP~6uVoHFowaP2`{XV&a=OPRy}PTqxk`tS@KiYFi3mfbjd=ix8EAiCP?^7Gn7 zs|&CD(|j*@&1T_lG@!s33KiPqnr0Zvc><|eFU)=bqzQoL-RaZ1UdD_$KCyKN-j``S z50{k4MIN9d(nPw1^w3|rmo~G6qhYbJfU6ReEz%z$#zj%5Au&|jK7ibs&gLnLClr(S zWEp#E^wN%~>=q$!G17!i?@Sy0gEqWKD<4($IkD~YXPqV-3zm7?U#(IKjujD2Q$A0p-^jL+=&VMUys^FKxlmK9(r|4oe*D8~I(x)= zj-dOet$UK9oPcxDr7tBRu<3P+cc2Ui#YUH^8w~=q!E}4Vb6Z@*4IspvMkvh~8@}tz z$kGm^kw){?$aRe6A|rS$SFNJzo+9?0$m^`7^Y053>Hm3ZBbU_;y{@dtj;t2Ip5j$3H>_a+0g-|X6z*Pu1CY>AzDFy&vEkX|khD_*+ zw8=VX;2dMX!J9ufa`3w%>;z9bh2xT7t##EAQ z>_uk);FZgf5}l`1-CC2lmW~JFBH6gt)iw#^lXacSetHV=dl~Y3`qUp4%hxlvxol@v z8wh?zo^h!WJ`^AhV$K7gqJ`uoC+qk|!?i~mX{Z_ZBJCPZBqHNB9eznv*MBw|sipkK{cvI*f zg3|AJgtu*adl-}%29YY{IQq_NW_xBEA7Eh1`9CWI&0A6h9vE=SX8^8D*m;Nad-sbSLfS-!KqcR@HuKSRebEJZ@bR2luT`e$)#Jx_g-1om|6_ob*`~_h%j) z@Hu}OZKMM_(BmzcvwdXVKs7?3$4ReP?5c7(Ca}{_+XlINkFcPsHOT9dm+ODM5vXc= z1bI*ary&D`XD)MZ9HU_U(t0$t3~3mX(1xBK;AlNsEx*ZDJ<}!$5nMs1U5BwY#{W`) z*v<5ENdOQ@T2z7|vDCa_(RKE~3J=A`+!XVZ*V|5*$Lsbh4$FR;f7scEm;dEkpgyd~ zsY%S~;jR}c(97oZct((NYiU`Dr$q6$66+d;JZrm5I6W@N5_t_Do?xu5U{Tzgke0ioOzc-g>UfX%#522+jg&m}KV6ur|@yojJXr<`n9GW%> z;r0~}dZc9i|EXvmf;T-j;AJpegLRYLwrSp}w8T7Ds*-dT^((ht(xx+x)+$(zD4W|a zOYa0vdGcbmMZk^nVo1$atpv&vGyU~F=u>_XpC2QSR_JRI;-acm^mDLRC6y(=$S1W= z6l#&OR0iJ~i*B8BL?$92u*F%Pm#^!mr|xj^LaUt+t`iab=5g1LTo#z_N)ePA;*E{r+m7X?xd9wz zZ+CzMDpEL>XAs4ZUYdPSgKBtc*AD!wOrC4obQ2-Gx<3kEe zj@pweiS}?h(=WYUeY18N<(~`dPWq>OXj&^WpzADH~NE@EINfX48O!Oz@i zU~%)s-biOZJ_{rQrsnBn-kfd-SoZ^kre$p>ZMVM3>&%T1_OK6bVBV=Gb1S_ObQ@;gops+H#sb7Z*J- zA0@OaxfYqKRdQ%GxMfEAq`YRLsO>K@WTHYd+D!M1$-wBXjfwfcG1TE3q444vW%3*O zJ-(ke-aDA999kZ${!qzd<6mhj@;|$P5s#BW4*X(v^E*FJBAhZN5P_DHmi!LLmK%a@ zCLV#VBSB6dqD)3JeD2{-cB!38Z*cDNmZ4blNHN$raesv2(8|tWDo~|8ALB`px z|F}SRZJXgD@gi^Tup2&~)klY~tUP!pXH@6bM6)pJh!yuC3MI`b3R>bBMngwkD177! zI`C4Q8IO{z_YwsjMi$mz`~2f`*{!L(t@jflg~cK9ifT*KWN+bkz3{Xm>R7CLm z+wVWv^V+@7bMN__^FB)=tVq7Yl%eTz$ghWW9&+=sP--tSb_2R-gAD>DeP|$z50#9y zzI^4w&Sy+stz+l$cM#<^RrvAXZf;%IoA8sg7t>SKq=IzZ)|);Y&lU4jt86-W&MPn^jk6?YOT`dHv-0L_qRKbR zNvkBO@=MyTPOoj<$RJlmbe%*Lr-Xm9Bs^jN^7Bon3lgy8*e)O}`da$J?zZR2`|g@m zou;CL&e_86VzaDtI&>LmnMcdW6W9p%9iS|hkRn{x36I;9fFsy-gLbYwxx7d|l1R9F zqS)(Ck^Q@n@b`HO&oHRqOZrsvi(9Sp|Lp&9i>FP!{93C~#M2Sq3r^+@F+udkGs%l_ z`K_ef#ZJMan02^Rm;o$+=C|BGyGH=r00q!T1TA(%hzwMM17jgVw-7Fd|7bvf zAX)O+HuNlJgpjND4#`ZL`}Xl1_guh#+(~+C7r&h;p4&Zk@KE6n{r8liM!)je=_Os- zi@?Y0mrm{_P2Fr>d}2M$ar!N!b)mUX^C#uEPtvFF#}#g%l|2XmueMDAoMqVv?4|=2 zbZ1A@Iq9v&4oWW<=xv?4+OgFSmo$@GZNC0lrcvWp{TH4l#=F00BcRa)xdq?k69`rI z#SyHFw3WD^2>{VLrP_=O9zRgonhi1ik0TpLVa1As(ek7YiLm+hgvd%i99gvfF>!Kb2tlk_O;eU1-* z%>X@uvb9Wjo?xaK`p3(&LIxgSMW~~gvH3jYtyQa1y-FINa_^S|wIw-uF0~ZBFQL|G zq#5Ly?&FIDfP>{>#5aKHjsob}gNp#jKYRp0|G4LT?G>+f7z}}*?p zar7$jX|QZ=AR!vT*+>7k;>TYB5Glia8QhDo;G}K5HNXQV?MI6|>I-U=>Fra9if8Cg z-$7>ePPJ>^@4sQMn^&}cP%ih#k>LekYJS!#0Y+)NG!LvIQ@zlA0I=2HB1bifCb02^2Btq z8huJgXuiM*@I@yI2bc_)$fucLqj@WV5wQdiV9TncULiCP_kzp~j;TzaO-nP+ul@`G z1U9phfi`|L>7BxNOS=zr5JN7KqAw#z##}(6t?Jv>ujnUet@&rKzYPWfroOm@>japS z?UhO>4>c5IjQdPQ8f-}Xd82H{|DY=5Y04UIYPoQ5GTmb0SC>k)eV$@l^h-7u+fu3D zz^LR2T`U<8;iFA6DMD9*79A46BxlykO){ta1+}fA(0>Edm&}9hrCp!cQ?d*6(}?+> zr6``mlp$Du&Y%0(_{alN zemL`ShTA9`2+H+F12m<>=9*C#(74kvz_v71bT*H#8cHA-P_t$EUzIhQCS4~J1Wo*D zgQd63cO!uBUGvOw1i(s`&VkS;Hty!f9Bs_y<4gIJ*AZB2PLla9`y^xA<+a}*#&=v* zJC~J9)w}NDS17-lm62WAe{UllQXx-fugk8eeHgs>b7}raNB8z6HOooJ9f4&;hA=%E za702XKq^+OvVDyJ;nv-A7d5%O--yTW-r^?T*+06mI3HzBSs8nJF<{}gmR|3Xs|g#t zsFh4F`0IRUJGu%tau}0SKa*>dC^}N&^*0TK5rRy_E9CjPrGiB7uSfqP8Iv!5DGpYm zg%mdFXBv;Wu}ZG0Xb?c#I>r?MvTvmcXyv|4K%d)eMD1#4c$Kj4#)TmJfpq{xw`YfLIza^m3m>#C^>FvPlQf)Zgb^-KAq*NRg@W$V_V5Fb60?oyxcHS(+n+dzKB z8R!AklY~&9{!nXeH$a4jf}kU8!9irjhisMqsszKhLqrs<0Q_#c?W(^6^KE%SL!)ic zdzk$CR5=8J8MuP@E9kj6`8+SE@$3FSLC?9&*E1W&hAFS974i=0g9H_$<%=keRwzrK zAE+=N9yLrFR9NyVBx|s0w0%fWu4!XP-YGDD=k}sdKTy{kyAMiCq58!Qv0w!)46x6Q zAlSm;SY{hDIW6O=>S8n8E&s2gAR#ei|DUUE^!nJ0jQ@ zayd>0(CxWOKD~Mk%kD$W_4LykJ@)#O-1nk3B;1Z5&4G)gN>8MP?*_^MZEv?aByD(L z$|sz%z~Wu|ZpN?kG9UpquH4m=tbhZeX}ML(3H>~sFuehr7epd2h-n%Q7&k_}7bR2? zfW52Y9LU&xfZhNdQ1Pwk9$|J6Zo5xYI%H{SmGAS8a?eQPN|GOIw-Uw+=1?+uDHjps~!A~@M)6Pa5O7*SJGBIWAAalfY~^3xG6Ts zCjDFUS78Um!*}NWREA6wYKKLgC5vyBU*Xpm=>;z0u|e1HzcV*F>HA*A{$3Be-5+Oz zWm}C!i|UqGMG|y{gLwY2c0^jaU9c2S_$XkI>PnLenk3L>cd(48aNvV&6A($Psmk^= zj2nwjpZY&T8r`#BEmlwJ+D$1l$z#oMFvdaoB=qjO+ByFHQ6RxM;yeBiw{Srn05rZL zVz;A)5bpt+3ZpbTO_gE#GE`z@^OxVAk0)KqAE>BuIEhV~J9S@g*oex+J6GQ z0(g+ZPz4r{rZKFB4%c+mtS3J3p1v^4eqFCgyjbf|p|SDeSM%y$$Jw5I@j-1~OfT<9 z@ypuUYI1A%279+RDA?9aEVRdzh^LYU_qVs|Uv@W6^!8O%b(ioej^JrGCjgoPbWPif z8`#u5XPT839WS30cu6kCZ*dEGUG!;K9J{3#O07(Ije+QASNRRu_*g1r=yMnlqm{|RY4;NL2pR_PrQ}sfVnMlt;zOE)WCCj|vzj^sL)YI*~6)}D- zaO)y|+0@?2OQY#EwLrKuP&9Jv&$jpFW`o^SO*2E2Nv}i1Gt*1fIpSR7p@+&HG6-APo&2- zZGBec@gF1C#PqVIMCe~Ui#r~^-Va%y)2;IlZ-kDxbI9$s&ftwE0w664&AN!jEsHlX z!~|jz3xnq}!}VSFM&f;o_GE)i0^*r`cBdPKamauA%0{&$iAa~CiAuprZJJ2CAwR_R zz5S+?IPg&|emC#N^z1P2M{xe0rywIlXgNS8IY6c*!-rr|;^h&*G^3!?d!lLn;=-nt z&T5aqXf+4O2LR1-f3_$iXnn*T&C`I3^cfb(bm5OaInL)f1A{U^r?p zrlb$SLtDrXGC<-Hyp?a#SLa_)-GzRRXXz>v@n2=(k2%2VPbjAnw|p^`zrJtI>q@G) zrW0g)_bqz&-Kd7m&0`w3%nA}S!?!p9aO-(@!QUcZ*TeRGwaHq`$2Z0Uoi8lU{wM)DrXq<4s;c?^UZDfY^bG!`-+=97%~k`yv( zhZ&5voj%zjTgryW!PA6%Y~|u~Q9DB@f>>qjF(maLxFQ#pO8-p=K@&fbT@xO*2Ntf; z)fE;qpUT)H9>;DLrVyn-4F#Fp;<`=tj%8x+zjTWhXfeTPY zHOudG*SlxE=k(gGTN2=JVQvh)qb{Nr!z7ui(qtmMc*sK2<~u8Qg3Z77!p?Xu0_?yNw-?EObcRk$sth zR18@4OHpHKAQ2_#x8Goa7|v$29oFotvvG-kSU%Xl25`At^2%&njU~iDkIH#Rdn)t!M9j(>L?KZict8R8&`pyT$OV zb(%tWmyC|bSHu(RrTSXgh%Z29j_2_UmUDE78g;!bIgta75d4V7!8qg023zw_u3*g> z8x-z2TdNn_6^=>yK~2ffF*MOnn#jv}gUAn3;Y_9HqcH>ZZm-p88Y)7r2j3D?dTtIr z4c!=e>$&^MbJC7j+vrWT2~9u+;O1fXye>_dbQtRaBaGEPH_9&3`_%939_+#K7u)d-V?j z6GfWBg?DQ)pp`VrtSr@GniwSLjQAdzo=C~)giGT&Q9ooLsrF`uGxK^_Fx|jAY{9(})UH$i$_(FwhM%#`P zz+pLm?Qw$&(^n~)SdNVfHX+cy;I88%;j<#jig(o`=d`Dxc+_<`x9kUN6q#NIHwp3# zguDc+VyS&o00b*#?#(0W?U&{;o7j8gzTe=nxvnUe8w#C#kHG#qR@GN$z73n~-9-+k zOQP)`K<03<85jENA^{FZIx;{@zB*8;!XD&nkYRuKNpvJbj|OLXc(s@Cew>i#gqr>B zP!$tH`tvw@aT?egS6npLbQN>ZH*@2^4DW(1o(qZlSI0dNp!W?M^(~z6@3M6eH6OW$ zM~qD*%3Iomi3Pp198ro7I%09Z#ZqrEh4~BHBnyR|9aS4WXl!G>UXjBij|g{W}NU*UA|OM z_mIsD^ZXINkfvV2^ROl%ub)F+zja)?3O_q#+yC}y+0$2Rx@quK#b+v7FVhra=ImSu zIM@07qhS_`Jrt}7zB8x}TmZRmRqL#-?5t)w#!`^=&jey4cueU98XUn7G=VTqgFYcw zr4ECk6@{<3A_(-ctmY$Hjfbfsk}#Bo|55b32#U-hgZm7MGXtSrAh%N(+GF6P5DcJj z7$%7?tl03A2+mV5(&q|YDrsA|6m}F4=7AU52u#5vP=+yl?vqmPdiJNac?0f=G8p~T(#8|2J{2eG-6Q)kQ2)05JE7HwY1VGI$)Vm8S}gS#h^5D7Vt@ig z>P=~3yR5;|4PNGIyfU$v_VB2eso<68O>>v8&IVV&$BI82iW}GMF4u;%sQ$M8dFt1C zdiwkHmij9}x+t;yr%a;j@9#5zuhqCEKO`5lgOhrqj{Yg1)LJN3d2nNH&j!n&A;c!o zOwYSI27u~WVo_SLZv?z|QTiT$`$-J}`Y$*|&}tEo;L!W=Nj;P-c+>dekI2eCHoJir zYFDy#eDPwHUugj~N5Tqyf9GPMe^=t7pgv!rXOP~>HMZ^J=+VqOVxiHE5*l`<`cb>R zj>xbu)whh&8m~5^Z7qhoUdIjl-HA|wSER=mY149eLj7$oOgIWIWOQgm7*=0Ztaerk zIfqxP!S6O11X&IH-+#Mo3xHy{R*@sra**5_#^kdv*}XPk(K3aOl(5cwYmB4djB)=w zQ6|k)Szh#{f@tTrA@RRVV8&Pz)NK=|baM5igf=Q;6S@06qZ?)B=PFO#k3~zKj%gy# z8-%&ujx@0cB9=0LDKjlT4mb73+-7*tSkS(G)O_S*JLUp7R0CR<{V;*tlSsCOB2a9@ zcL4p|sFVG7Jn@6 zP$?%_^j5#K?_$UA&d*(`Pbb%kmd12GwD1pTMO@*#Qpyb0`!6xSRb}7*w^LJkzzY5q{OHPvGVml_N{fpeS@}9!gtYj5U*j$7*a#1dfJTv)$%oaaA4d3 z5Sg2q15`OJMdB4S-QJ9svDW0>Qb$RqYCFIeqOS#u<5F$mVVM3s7x7b6lM;W*x z3~E?Gm&OPHH{TNg8Z18sKwgfj7lDj=RegQuz4%nLHu&5A9#ZrjwI~mAG31T0YuP%E zORE^A>+#S9kNWjnaq357!P5{wT()g9?gsEBUHh3N*!ANu|G2& z$cSB+bTw6xOqyVhes%t)2bXkhynQZ1Lz~gxQ7yjWT5rCWrG-6^+b;NG6V39Qs(zdU z1VJ*~?#~%bA|A`~^6x1JD5j5qQ1`M`gs13}SUY!w2~uyYm6upbu+^$QrhEfm-Y9`P~A@ zevwCul#T{bhbawUxk;5ff}Z(21_ICu1&;v7Zvo_Z7}f8@5Dfq=WDyBidJI6!+L~s= zq?ZjyvMh!Pb+|TPUJoDpn)cGK`Z7AtMELY#W1{XM0e(T*9+U!fuoBRW^gy((pgKW< z_rZk<;QJxh0<;0LPWVh^8Pse8K|=4*u-St$fI%yWT<%E2MR(6t7|s2)fk=~SA85C` zj=GUkaLMbWvs!?{L_>gedax3JlUbQc+=+8a>>gE$Q%}id0|+-m{O{u}yW8t9-`R{x zRLs)-Tl7b$57!@HVEb~A)#3`5;X#5&hTxA3FUru&Kq%Kx+id{UzAl<8vcY9V4TCu2qF5@TSU7hjh zKQf`w58fzP_nw6pqeSc0Xysc02kC8kUyXfPx6c6~zzEFo<%E3+0Muuw&H!IMu(9+HY`dg|+(@%2;?{a%9S~Sd={?Q4&GOV_nh4KlWNG>y6Y7Vct?({1>wZGl+ z4%fHmV^{d*_un{AsOsnN7L&Dwrsd1GPg37AK+`T?6k z;p+9fUlLP1&_w_gLvR4t2D<1Ef$Kdx+b>ogyE_`CI-@>UbF00=RW0vqrii#+_C7Fp zB5ym1Nip*%ZZh-8Ih6?p&(t*7&?ht$iiTZGE7nwLMXbNIU7SH`1RHIj+Y4dG*0xgL zm1_wvO4xI)uda%K4cEmU_I}lY6%&ws764TqT_<6hsY(A4Hg+*@6QQrMNxs>f)%O2A z;FY^Ce}0~?A7uM3)JYJ_8H3f|o2MIdiXIRFm#KA|FB~vm7;vGm=bVHkdwu}GGb&6o zMl#kxANf;Bn?)%djGrPe-je+Awj8hCFyr?Y6mz$o$}wryp?iC@4R`s7UOmjp%ldNBB~6wpy_25%ac6?QA70E7P4) zhXhx8G!-8@avF!B71&c{_hkNJQF|#Fol@HIoSj6~en?jO(EVrlIJ6oD>z&FS$8YXY zLF?kVe_s{fXg{&jX+9ZITG!?Ojt3{^3z5yuG1&~vSfx`MOU3^4%f;-rhTD)FO#g9# zsFR4FWdN@liTiWrG>0k4L>}@jLIR@1!8%6#($F&GIMZhB-UOf`hD;FLDSTGwjXpf_W`oc(~@7v3X6YHb?(}`K- zLn=S7$vuv|cc-y4@y#+z{15MM;aOpBjIggE*SZc=ST_ERGiutSIY4oXY2b(8jKu5g zXUerDG}*(piI;%9;UOzt(O))$n_3?^alhPN%*Z|RlG;gP`RKODPp)_(Z2)>VVVr%j9ZMd?E9W@#5EOqIL&;mze?ae1 z&Y@zH1S4v!2g1^I8wJQHN<8qNv0|%or8u_>b~Aoq>4*c9_!v-TyLW*1DYSSKZ4dW) zX+(uB_1#KmZ`4M|KJ(L(#W3)uq`90@+IDV@K(xv1Bhk_G8&&z@8-sf^@oM>VXjiM`imTti66|K4dCI*WMDznD5qe*5mN*LzMaLe6x4Cj z@j&|vTBJmwZ$8b&@wKgOu4j@F_kn>#TK5qpL`4MxZq4T620*05e%P^(+msFHZn3(q z%-{a?$`EQ=p?n)YR)}kt&DRfZq$sU_E~XdQu>cq`wE!%rn3EyM%h_5&XQYB|Nt-)! zvc`Fx(x@VnM4c-zJojQL`+8x(dYvQmirg*SAKcgR92Otlmp~d3R6#~k4U*hmCIFOB zp9qk79N+)R5F2!h{WxD5!j`Ten@!8+FGn6z$avbU`q^Qz*xOAjF~;G1tNhM|L^AJR z8N=6WeVjL5xo%3*)jlm{S$Xe8x>T{NS+#gEZ68oelxWZHZ`!7Y>3-TfU9@IOSeVhy zz5Jj>S3(M$%!=E0fDxxr=zInMa6!{Zs==_;OA<5tq--!pdQ^8kxnUZ=CqKy>iltJd--9?|%U6Y^Ww2Phd=Tno@oHzbM(c@1O6iN<%j8CzH zc^m=ur@MNu^)6O(et>&!!SiSpqCxdhaD}`dkL~D%(oU#?S`yrtN0_&bod;X$g6@W6 z_NUdmL512ZiYC=0B0ZXL(xy$9 zDpRAvT#Zp;<;y7yi1>`VuNXbx?b|3tQXT2l<1!jf#;Uej%5d6N*h^M-ddZlFTl6dy zrLbB5JdY~QxQ8j$SD_IAbQ+sE0x#8Uc_@*e{@= zxR@&0nwOlb!|ldOpfYw$G@H=?=;&!4fi{CY-;FMRxQ*@8{MP5h-xp`ib9nL9QD?!p zW6m>c)oQz%lFOZCwu4lLYASbbeKef}M9R|>ZoMUbk|?3*2BNebw@8rBZsI|Yi zqbV&KfQ|T=M1W1)03fm!fZx-Y(M;Q(Na^fm?4f_W^;5`62p$DV8>i6SkmvPH<~&UU z6oZq4qaS3$4C821PO?i7VvBc%3W#?gW4wxQ^c7plj2>Yu!l?BLM~{%M%+ zsMU)aUMGR7+rFQ@ls^XfH$kq^@R5-)oBVEC@ck-_5X8| zFTxhUmA~imA5D6#((%)_XzuArq+p}rtt)h+(tK?++=@LM60zrKoM)Q>8)k(AuS7q! z!}olb3&$YahJBxlVSXbdlRm&3U&hxC^fIDpD{V2&H|^-)#~d2pt8;|d|ML9Ib)9r6H@yOa3u!I2F>X z;S1N+g-vg%j|RfB6QN%Pk|JiE2&G=TeJvBMzbjAwP_=N?Qjg&;F)9C}jr9G-aw^GT(0S2A zm0m-$j_x2|q_e(EhhE}yAvcI=Gs=)01(ca3?{kCb--BCKPQu;;oP)SJdW^HJd5&1$ zlJq36SiST2cQbRAXP+*29}DDm707I~@<_bt-;vQKU-aA)SUQp~PK-lfz*PHo5l?sb zdCS(ecIu7v%AP0t9||zPGH`oSia%Rueh6rvm_7NWP`Zc3y-z~8W7B17GtQM}>GAQ1 zndj?*BhM>Tp$gM$)>=~2ivOm01(X)+K1(Aj6lSmH@#?+4jw_M^-=k+Z^iF)uKrrd& zjN@Y^)}%OAh%*)yD^%2yv$88uHU=!c9)fMoD5kCY1rQ78$3O;RG!Z+)wUtdIsxl2VB-Wnz(Nt58jifdWuP*{i;Z1nQ< zc#21j<7>W(%3de_?Zi=bkyJld08N3F#KStF54rEf@`nOsnK)BR$CB{p+!TG*%c5Yt95FnUT`u zcJBt0m!I+nKi_pR`h4k%mP5hfPtIuhVrg|^do3LOxw<|*xf7fb#E?#+1(mi?8&u2y zRBS{d&~-7-?XVsfk-|MVf*zUv`=Gh#&%6CJJl~7HfIN?X_pGi|*sC}$C0tyibb55` z`_f(6qLAsLm=E_Yj;4u9uWuRfMKp0phQbb3s(`Fy>$S>bNt z+Z%~-Of#P(co4Sd37D-6EdWKz@>;TM^(%g3o-ODFescsZ0ryM=Om36Yu5!TJWH1I&Y2ilA1oVv+Gu`QeW2NfO#H&U$caYn6T zD}rE--yu6UVQ@RzR;o`byu2Q^;1-|Bbox5@YM;4u`FTgHbyC_)4a-fDhFjh;j(OAq+3U1s46GRP1j7g@mtdjy_|^j61le2%5tBL}(@pG+QUZ@dtD|%w#;E@a9^I zwsv-J>m$kQOulP6PM}M_~H&$f>T);j6LTknCCxSZJE%k5hi#^cxqKNGd zr?#dKbxuy&^J+X(_(IVxidyWUp)Wj5GD z(ELrAQ%sS+495=YdW-MKwO+iOBN%ezZ#CfWy80z?=d(X6KAO`%d@Sb$)ThPV> zeCqwrT#RG$E~BhVe%jI_x?S3C^~4nZD;bMX8i?!cj^PmZ7ci1XmkA_!B$i;EssAo( zO{IH2K%@V7{94YDz2+JLxJ|G=9LQ~^DN;e3|3Y4{K5=#+WasX;O^n{v>$=oootgYJ z4|dl(@rO<_!lVfSPWll>2-R&kz0Y4cee&KX*!R(j+4e-v!$R0(Z7T#0hyW*X0HELo zFfzjcZ35zVN*D@2JYqx~nov-Dbp0eZ^{6ulaPRFZ8OuR;1{CyeglM?vdMlS$`nFTER7AMe`g{B<>TgjyZw1U*$5h1geV@EI2|%33;0U&AYp3mCFvyL> zt#$rK4A5Jj)gVK00hJa_%IRLCe+>XV?8R3Bo&PtORsvX>?GfM(MKn%f5s)(ECjhm5 zE85avfTl9*>GyILbhcirLyFeV|D-`HP2GP~-`wvg^1Zek1R!XH<0o3QmL7e*-A@UQ zScx$fFBo|lRAN5-u{c%G;=5Rp$EvC<2C z>o$o|VVbpQsvxuetLkLwGbxsS65mr&v*YnK0kf;jijeqrI0o>MOA%ZM8cjyAWD66H zY}9xurBhozJvzB%RN20#{ztS!_H%!Fzn7W;@d=APq2NsNc&N%iPxZU*oeN^`?Yksi z93{L~Z<@xe+yS`(2^cyzz=tQ1Ky`p-kDk!bi_8EJ;OWy)kg@JfBDSZxHT{~T=z~5~ zkxnYpg@TE&F>f_{_A=r@Q4$8dD*Yoafc@!?*8ZpY^!EEsAAUXv=`^IPxr20++wDM# z-+q*6w15=Q@-mtin*3}SGN#A7SZ_cT?~u7J)VB2$Dkp2L0=Tn`KFLNVcSuJuO&J zk&SJ>SIPr*w|Y1S>qvmPt2ihbo9@J*4!{$6Ao*9ZHlhWx!G!8Sj*3TLZtZwvRi}R% zV-c>%o)DMDlX8>e-26V$DvbLvH!nY7h&-$9+V;xUWYJ%4A#YWUxB8Ec_igM(=`OW= zPaT?H9se7%)xEd;=D_j!@_7AYO|Flxg#vy%!NKFgg z{Q?2L4M_CMtnjxu)dVjG&3~T<2Pcsw$D;46b^6_jQLBqUewp-&1bQC2?!RX1=QYFiJ~z;$N#3T~z~rMp zzL01Gfo6~UHouPUalXtUF5URU9$*?cXHuO&z+(&M!RPW7+(|45MiT%o3o!|kt=k9K zaH}jd5ULOw^0jfHQsXM^U?~S@bLhf~u(%ayL2?23g7K0KNbF|Ee}gfm_f-Wp6?AJK zPhZ8D`y@kFeySD4En%FUt!NqFm(xV*e%5y~N*G*J#iMjSTmMZX0kj0638!@6uP6N? zz;c;%0j8wO+@~1M6g+Zqn8*P#TLcyKhxpIE2U#?(BxltGu-M>k-4_|DP-F*eCU8mo zWc3b!P(zEIcB4zsMuLu&^cl9^15XEgkz7Xt6!0y(8#9WvlA6Wk9v*TH8NWq4nj`a^ zI^DL5cGwM8O4EbE7txZs;u`>CuP?wB=ZNRahNQ5ZrYO*Maka2Jn7!*()y=wXm$e2o zaBNpz5|6ti#^Y7T6y1v1ZgObMBNRGnE<5ZnIaytRw|$7crnbF7(BAMLnD03#pI{CZ z=6R=HJoesM>XWDHLUYH5#`O#a?B7vqkxo1z)P>qz-y9n#%H>9_o9JW8r9CZqx8g)(qOsNsvcB2}Pl@tcWuMRO$_%$Ix z71!eCJg8syx-D$spEP^ikjqbc`;1nn93ni!9eTI4d?YWkFW}{>%!1Rsw-|EgpT7{a{EF3m`D6i`}hUF7@@= zD2XSAoY#&*JOp!G6FjLcUd z%S-3s=B;OsZ0(X+-H|dwh5G!CK6jWJnKF`WnEBV%I*$&)x00LUxkXnZKDA4p4CS`- zmI}q42R~8KODHQEjXeTSSX}n;dXQX_^UD{|)Dcb14`KesA!_Id2;fKDDspD^37%-t z!D$i@iu5B3mAoFC=oy~9FE~10heC_=v!ESeSU{X{)iF82%_9k$b|kntmnYa~%wa{> zDIfli!hWO2&Gw9Frj$qT4G%AVeCj+$U&&qPWOHG>{#>wH>B@NizY6c|MC;!edR{MF zh*;?%MtaDZ$79oMq2`mFceo=5opYIJ^+)lJ&>J;8y@K;zJI?H1?*}Z+yezySR@U*Z zaW8ed6&beWbW<~K>a?No4(eOETzN#(lLL1*^7-3ddkHx+w0>gi3u5}S#?~W5bp15A zI6rJ@5ZQ@mUA=Sr79J~8?d0+DJ@kq+m-)gaZ1d80x@(QV3n1s%G!=*LTyNG9`khY$ z%gf->x1b_(`TvltKk!?*M3sP7(lQS+qY#O4mqV{>rdy~}Ca_Cc2zuPGFA_vepCzHI z_50D5%C0Uiy7pmx@9xIvmT5_Q-mbj5`{uyEn6CTR;+0{(jpDY!s^^~NKR^Hdl(sjo zGhf2*aPhBFb%5xkg^4nouia9LAy>Or(Q1*ZtU@bS1rV0rkPAS`-vGb~#p8aQK75)Z zjyxt4H+-fp_qED38WfIm`&@Idu@LcGgx9ql(tR4?V*+_4ClCVlN%{GJm{!{~a#Wls z7^VfUwJV){yTq1#M%+EV`-V9>)(~ix0{2kGG$Cy#!kNVJ&ueTt0o#I&Vn2)Jwd&7- za|ZXn1W3jJfS`|+NHrD&HCS+LnV3Y(fTWc*Jt^g;UFq} z?NsA-GhpOPaQ0_2ix%VZ6{erO!R6nl3P1Pxbumu50JU`6{HWMXBE}b4GrvkBBe;iD zoj{2u`dkBR-xu@M8sfHRmgfnW;!PhIGVg2kui=WXWVz)l>0JPGL-uWiZ~X98O{f5Y z7Ns$VtknwqmG)fvngSRyz_`6HHe|+RWUw=_R@2(@9q%SIA>hU#;{FSUwFdxQCcimq zWr=9)FR%~<$k~)Lri2Af6DDUz`yUJXY?|&2$W5C=CjaTMlqI%jCk`!0OzTUr5tEft zMcAs_pGxfqTW8UCXUiE;T{2=;88Y}GU|3g#h~ix(q1_#j~x#QTV9K18!o^%Cw za*LU~@pEba2Kk$DYI5sWGfRXgm{;Bz!k`igz2ql-j^G*+3T*_YNU#877;+pGj{=G7 zZuYxELh^?dw zX@gJZu6acYx}Oxq?S5u-nfCIP852UU9@9u60jwV_eLl0>5Qc09?n8mr)SD=s)NWmc z{<8hR84<4l)gkW`9(SRnZ51=J+88uKX-%=`U$Jw(5SW zz|1e|+o>Y_&tZ%WgisNgVcxHOrqXvAHULLe1qos~WJoC3_9UocPZ@JYOHgvD%NNXf zA@SgXPCC@s`!%b4k%9>omd#OWnuB~`uQu&pDm_XKewuCRBb)p&v1AmOdVh(_A^SlI zE)RQU5Kj_}asTk~S2+4X(l!WN;&IdypE`dhPRVY&pYRW@5)!hld1Me5YuLHiD)-hD zH{BAq<)Sm*`4elE;3b()TXQRy#J&eAIk2`j)O21hF!|%bCffU#uk8)M+J|EuVKbAG zG(ySU%6(69)EXgDY}Qp(F!DLkUnEbfTUOTA(oBzX1goON8=XOH%oxxyKyeXV!-DY9 z{M8ct6|<}~Aw0NeILxjAhgi{u$6a`?xv-ar!9|piw$C@`%iF#x!U%p6T85;_lr{&# zzPRzUJOXzLih~%+P9(}5T(+8mT4t*Fx0CAa_X0eA9G&>H|4TZoPn<2f#g4ts{>?KZ ztR-AkO7_|%WpZXR(LPgUzE9h^e-p1fAR;nmv3f)wJBpNoeFnS@IaF*EXnvmHBIjVnv?7gW-jvP1 zAgnL^!y{ZN`-fD!DrKDzZfjI4xyF+EBMKS&u7H>tU#wXBMsRBNUyj z8O2&8TOs!cVkth@c`XuEjRipAJTFdISFO;!)xqn(ng(NH%*r!4YEc_$Am;TfV@kUTRxEmlbVq@1KfD`~IF{2wWA{oK9*4R2dQzDy!9VNkrCgO*;`EwTRFvLD= zDF3)YR)655KKRv7F0YY{xdh782Y7Gq=|hfbG&bIn06_D!IPt zqBzbcZee-vS*tga7Nt_!sEqUs?p~4QygaU%JiF)8wu!kd#A_O|!>J8)JT-we4?Z~> zMo8}!+bK4>1^-BYZYEok|Js{GPaszIekIb25D5s7l$`qodk-@W6zi(+_xEVyzkKu; z(`O3TM(5Ohc&|rfC;ZM=nql^wj?@Dks{jZ)&?8wKiOHSq4A(7ims#>6%08{(vmC!1 z<=<63R=z%9sdO%lR_@7!$jdIPd((nc63yrm6%^CKIy4v3Av0z8f zxRKBeGr=yU$kokY%p{I>`Uz%$1NjTUJo`qLh_8SP8c4jT4T^t;l#M6vUE08LeYp`t zFuGLa;KooHx9rP#)eN*t!*B*dQ(KATm}!&%;3_28-p`XOzFDD%r&T>Z&~J2I&R;yk z10~?WF9_1Pfv}o>x^ZwG*Jl6jBAJm*A_RZ>-=5mqEnISm60DMxZMrjJ>y}x}|C166>KG>&u4^{?W_PJ}{gn zk4de{w`mIY1OKFt#wR0>RXT1^`Pf z_k9qUhYQaZ-(!27W&tm|U+_XD$yaw@gY9oC(~$I|jQl z(0B8y%X*?`+2n4mSzm;4JZnxoc6*&013H`_@(v8k(TzxfutW55D2T9-AQ_2Ca~hq9 zAwcK*`W6Mes2(tn!`0qe8d&*wd2sA8>R1JBDw&bBeH+p#2lh4dZ}QV`REI?3s(^#R z5SiY6C)`KiL;s#*|?4deYO(AT4LG!X6Uzh|YHP5fer2C?ogLJkJzao?!5$w(LoKR05}ZvR=I#JAHPC`Ug=p;C896;@iaMQ~rI$;lRwcNdrdks}Z`wLM zF!1tO^U}U#%S8AbU-i}{*pL2!#pY&#)z6sx12OHU`qNsr!o7g?wMcuNT{h zDul}#TQglV^G{pW`eXA!BUSH`;P-vE2i+?N5BgY>d*8iwjA;2EMQ0h%bk~OQvw)3J zqZ>wd3P{T6MoL5;L_k1FN+Q=T49Gta{cCeQXvj8olBT|!0w_E1!84Cy5ofNvlu@=2 z$rU4H@jV7WfXVf5mSTYNkSLP=7DEN;uXe@I@keT>3^nDw4pYk1B@BN&oTHb!cjdnB zwXbGxV#{qBmPz)dRK8DdJaGE>P|DMNCAio5bK!pv-Y(uwu=#R%_4Gn-WVNeM*2ixs z$3JBN=jsYOI{Q)ayvh}bhFJV7v-zSlw$1ci4X9V34HtRAp6z`sRd=^}%a%MZ8v-bWoieS<$~O*AR0wdh4K9E3x2Q0Vz(w8O^fr#>=fQ zllO~aVEqTb_M1C8qT0NHaJq!;Ht7WKno`6V|*%{N!~J0MkXxg>l3#=p0KpLKZ}DW;h=NwX>UePHHO zO}t^2blc!VfWdAR2!=9hOTA`ZCHX{tI*-LkPY%~~{xpkf@dYIMtjre*bs4H%z(FFEaNsRVbqfGh zjcQoHZ0~i&OX#|i#iRyWU~4TAr@(4pH&o=={QG6EH4<1nE>!gKPR<;fOSWRBv~AmI zDT6v>e32W5;$h9gO2JkjXvKO;QKga>P45j42~d$z8Im$boB0R9(a{4WaKWX0iU$kA zh*helNscRyThCJgzCZ^s^9Z@}&MOlQJ}qoH;b3QF=s`^V*!Vv&FU7Tr`BNQ>A1az# zWO&iWG<6k;4<(2O;N+n$NLHZKnI`J2dQQ0=?=MgPX=}T^S6Q9RpciuWmzlb$B$6dR zuao#}V)F&7sO0VZtwmW;;6e(@m&(PCqD6+-%pEe6Hok z=$l-eWT&O=_fP<&6EO!yh#ct6O`Bfb`aRDDE;`-34VLq-WEMm>sM1E?uj%TC z$s%ps?$=q|e{rYjTG5lcxd&G>b37?B?CB5yltIxtQ1@~K?C}^t@5aM{ZQSL@03_q1 z?nOFX3yJCBnMapHM_*cebwLv2Gl2>tPQf7?YoSb~horto`~`tqL~HLo{A!{lD&%)Y z(#98g?h3J}&03)gImV=?Qa{LsYn&({mRCd#_n&c$9QT{Qj|uDuRy3fmF>tyXCC~K` z6JHH!UOW~Y?g5bNp`jY{$A(zUnSXu~{3zNv6bm@J6$2z3xG3Bxp^n1fxAw>(YMvJKM~Q=W4~yy?v=B%$Y@3 zO;%%HcBH2LuCUMdLntE0@OxfJd&AUCNL8p(OwjouJ+Y5r9;eQ2cWFOe=zq%VaLRmh z;eEgHROop0JR^Q>%`?+UW@{Up54?&rRmJO?Jg)%kY^{v_PNLuU1tXRh2&-nu=izv43Y z;<=Js^_yka@5$`c2eZ};zxKPR&%jmnpzqDi=0(@7bh)_ zOi51nZ*rlTg!^UL-n{wX5v{`}glrit@byQZBeUZr86n5^Y1}i%97n?!0~ea}-6x9O z-!E~;C@1sV7+uZ;E;Of=w=vy{bVl;B9Y$FScAR9OXKd$ zmGWq1_*F~b(_Oh&O+S3}{#5^QAbjI^p?zoe`lrCIRWo#}mP+DVE7f!wzW60PoggXJ zpmq^*9UJtY;7+`t^H$(XysEm1;rh7l7~ZqHwj!W*ec_fgfW3idVp${NdZY}iA$|b( zqo#*t)UiwgwVWq3S4&}nZ{lQQR1R(-F*gyMcq*1h2(-PXHJl(3h66Mu<0C3GE$M?( z_af=?Kgu#M*FAPxPiw5v*e|GQ{2&V=fI>2XgvPZ~DkNDv4o@NDAu(t$LCcPW*T!9I zi&|y=Ws&mBa$uOhQd(ELN>O*qNOZ`oE!8CV@r1@b!-084J>PO#d-2rVi)`dv#DpVG zPY8(#M0n4~M;J15dUQHc5gLne*aX5HcyjNGgs!VfvxVHGW!`=vyZIy$6IC)E4t}x0 z&vc0xRzS{YLXQ#WD4{6zT0j zjWui0%;)y4Q$Lp~)p7sHW-Is74FU5MM(I?Rs*YZ+cJ;WbvgD55J6+9B-WnZ0)JV8N zv>_9j*rAP-XK+5E>Je2a_M4!{k6}HJ^G4?@XeATFtlI`%XR)-nWfRRVwPuo}%A;EtUH$ z>u~EaDLRc5p+%yCY!Gl+Iy#Q*;IKdz6Qj#nmLfp}nm7&bv9#(>k7aO}>`z1-g~4$6 z)WUa=+iDPbUpw-bSEyFzz7c>X}KVCX7=824k8cuWSE^Ak5cP?ADQ+RvDFw3YkPyi>4V|H-wPkxW+Fy zqXVwbpguU?MfcmWwrK@v5>?S2(Sp24RT*Y|1*OUjiUV^!JFg_+8PeaRDNR8Mlt7 zX^fZY7%J0hubUR?<~_Qo_=6>(E$6gx@Rm_3-8U9x5drA)N&~^cJl@&h34>Jgi_6^r3luv z9VGVnUtjS|1j0C?z&c8<#)~FSGzc^JgZfuP~ynz`0fqKhf}zo z>$f;|i#U}S;?6LJ=OO?wgLfq7Rp$|Yq|&S`^KG7MU|B%kL=GQOi<~4%@me(f@*VD= zM8COn_jz!K)b->%u=DxU*Bv<8M{DQXGRBj=cs-}5NjE3b-RPu1CgSO+Zzp#NZiaIU z@jFy~c$dd_iK@{Q%?a0le&NN7BYA6#C#D2{WsMz{^9>c1cr>$AJrVUkWErNEe zkT&sa7lQo*iUWkFoQa(`k`4{)i;zi&q3s6J!%9r7_xenw8<{6)`zH<`3^N0XBm|LG zkwgonEUMahhIIh;OA#w(G@b#>iZG?$HA>`I-no~pHM7L{xuvZ=o9VB18yel3OP56A z>SS-zW`A2UIC(Yyv#l=X)zL4$v&61=UplyYLx)!;Z$A}O z_s<7E>BpMqL{V4o5AEN7GT(mqMti7$)y6QbCtL`}jGNnsmKajxFIJtt4EIQ7%lHE8 zBU#8B;(f0!+cI-ydLkx*k?4?wlBGgA(tCUJVQ3INvpC6gBIk#}xtGuPRTzS13LzAL z+{ROKt(9G~>Gj8HZk}>1T{u%u1dfj3j2{1la{0;PCGZe6`cCW^Vmub@3d0Fs5c27J z_48+L!kIJuU?n8C&G+kU-}i2Mo0Nqs7cmdlL`N!J-|FRFqwxeJf%IjiKxWA72A@gHKj$HE8 zVfK52&C9V_7RY+#I9l%Ug&iIf?dMsCO_w|)xaT$}eqW7_q-apy?H0_sL=DUlxGkx96<;gr1WJfW(1JYBnK;nM7asxzPD zb8BD{*BGAydJKf%e>AS_6XPhDdn5qjGs9FJbqWqN0xuxul6Us>L;fMErKoe?6RWAjY#D#Ii*s=G-Kd`^shn&2s~%k%g-52U+A~*{V%Q8F&!dA=%J-CK|--S zBu8}^7dMSb3{L5FS|5?!x(G2BgPDWTgq!K9Lw5^OQr+#=%ubwNVnjZTiT+T!_&I~N zB0cBNuFLr2wRv(=<17uC>iR0802xs4=m+av0>m4bAZkL;&l$Qpdp^7kIeDx}Sf%DO zk0b+KV>m9(6Vb>$y~`d?Qbc07Ak1DskwKirN#DDnI3rhcD8ywUfo0p-rrWUMXR64z zZd=vP9@#HADiIvOT;t@4>$889dxve4(hf8@+7FLBh32w%yIn-!WCcaT{3)j0)|K%kVF>a5*+cvV$(n8IdvAMn3|^d`0~?s<%A?9m$ZMo||9YO2{% zrL9m&TorK)Z*qiY=tczo*WS=+J|VDj=the4cX-oany#X z;TNne;YCCSNzz$*7Fs-;Dp4_!~u^x)HS zSc&D8be8xdvBE$TM)h{?_(N4B1_QZ%h`T;3cturfOHjt4)g@|PIscMn^hhm7X6{d2Tv0?^vf)gp&C{R#aF>0m zbMMAIk|^+kXOsRFGp=H=Sy<%Q;V$z^)=>(PPh>AFv#_aiE%dxire8KzO8Qe$d> z$0BTl&xD5v=P9AN*?h23lt8{$do{Upr>Z@bf4wf?ogRawzza=}7eU#(chb?Fi zVu5uuVp9>v`Q=n$mf(uaK7-@o_P8GXQpbJ4!xDzUi>S?4qvzPmQhr}H~ zRgA&`kf%t8fZ!O{k#O(}7~)7kAsxnO|5ra7F(?r+7Rcgv=|Y3DMO>5xWr6l z+Urb9Wb#FWMGSz!ypkK6T1xXZreVoE*A899R7G~9d(2-rM&>siy2LQNi5$a6`-&J- zfYRiWO65&y#>wPb$CBK8>NNqPcqfvw6ketPV40(pF(}pNIK(`%b>jYn1ET zRw-G<<7Y*`tbKd%I+cp}xXo7SI>xE#MVs$q_V-VM*9v8)J6BB~^xt|@c=OHeW;u}) zt>wO7Jcg|Q*b|;q}fn)%J`NrLx2TMn2oB=fHXbC_FedAe@Bn1Yl>JJk;W0vC{ z1)J)oQw1Mn3V7FMYgnZ;9Yql9Y?t_4TNRk-t6y_UBF9}-Q4fHMR;=_wcs4b>*Gj(U%6HtO)HNyHc8=zkRhp85=J&e;U1f{WjmC3yIee~o z6I8O`I-sJ5c5*VuOSp1=+ai|fD;o#%eeTde&ay-Vm)-0zaN@l!I`Jm?Ps3#JZH=Y- zx3p^d$7Lj6n$?_yH<)94o$)@44U)Dp(cf5*bjjC`C-#!KZ=gXa+F(=6qhvYmI17w@ zqZ0B^LCLE4O~Nixod&+_6@LDqkvjjginT3;5$j48t|h%xh{D+){c;uh1ZTP^G{5?k zUL#*bxkO){kppRciB9Z9uPJP}8l8>RNK}r^d||I;oXUw<|8oe#1<~O^E^{^OAAuoa zG2^O7#299`cxZTOR?^lzaS)VCz^~G6{Z^lAX3_E11L!>gL*jJNkaEc-CMiL~=h4k< zBH!t=oi)s8_b_eB{=e+Hb%-CS1RFv|A69MNCiqAS8GL2VELgoP5dYPQDxtN&b`G%X zO`8;vSj~_te3mqgg<^vTrIkJf2GZJa8Huu8(^?zx05*@_Q~bl!jvG$CeBv_9Vk5@6 zP-Z+CFff_PvLJW(()47rhejB-q60HJT=e9>Vo4j@RH9?>j7(QLW8-nkFayvNuYJ(j973DHsVxs$*%lS+6XvCENt8}c z)T!(YNJ1(X57`L_V*W1>ioc;hAM5FaRe)|y8g2fo_5 z0`Hmm1M!gvz`Kbzf>Oq~$j2V)?RZPmCGTA;b*bn%);}_8_2ww1%Bn;fbY{&o1gL-F z-8PwvpK}F(e3N!tffB~U2`9T(c}zSDeer;x#N)BjVx`vB`+Drk&g0O#a;jZ&#*Q`> zY0I~6VM<>yC;#_G#ZN-6X^GWqmUiAoKsd)9FxXHmDp>?p3<#$c#4j0la61xKAe+b|XcH zcW4%Me_rt}<0OZU6ZSO*vZ<$f1S4Ovzq2<@dqY8uYk;zGkn2zjg2>;2+({EahtXx- zWNh%@p?4}7r{&ENlR9R*g?N{bmQGYzjeJ`$9(JK|6C>}rF@dke>2+_{jH&Yc zL_1NkpIjafn|!O>=~R-SnLBxQMTaGAASXp&X= zo;x39Eztv=>VVP~)Vu#Cl?4SOnDao*b@@L0g!9Jex(ZipXtyixg^K8ZBY`Sm<$gYeO?%%Ye}*10 z_R@&u+eyo9EmK#_pLAbp45RZ<;DZig)>$QGe27(H<~qROmR8l1t!R@T-m6T`10Gu1B&zl8>wFt|45At z1h|OYDU;S=+P?hN(f-K{@)05EuOQ&eWX2WEjIpQ}rKh{5GA+n@3rDs@Moa)7I+gh3 z?dZAPHff#B<`a>>lEz<5>Oa)&=_9}w02|g!b|_IWiWIDLpttIYx2lQ_UB8zfe)Y`b z9m-CZhd+}PhFegDlSfhRoOHMnL7Z~UrrKm(+6;jtKKa)`Z~X_{Ob(WzUMu4ye^4r? zP(%ZkblbGZ3a7^cLTDML< z0C+IROkx;r@leRd@}zm5z!NHm0r#oVU-_#N<6sMyP<4=KE5pWlw zXv>6M<>)!<>JS**dH%3d6mjY%kecPrSO zO(^KTCG_gNwOp{1Bu2oCkA)~!h4F3B19(3`83)mFl%cdyOu^$r#QTK~*gC%)WdUi7k zn$k;8Hv?=KdSa1Qy`mWhM{q5|PtD-yBlD&7s^8keFFzwWFPQLO7?9EtZ`G;#`6X>z zMKu{z7eOr{f)BO`+0(0RVKONQdTv+vagz>ut9*fSO(HEx>M zU=(UdOT{-VFDvtdnhr-cRS`z|rhmR8((;WT$1LnN4i#RYA|KXZ0E!eVh!d(uMe#K5 zn%3Y+BSu#YLNzAg9(eybdM=oIckyN~{1XjF$0b#N-%TMORTiJ~vSPiNjXz;32t7`L z;O*$c*2tUKZ&X^68;3`b9UT%yX8IC99@CFYK;n84WNv=E^`zIRK+RueGgkZOas-M- z;Nx9>52uH5-x?Au>=s%CMl|a7xfF2J)XgnWOzQ&@pe8v1NH;o;qW$CNMub8j(|pzF zYsS8nUmC-#W!8tRK*IEX?Sf&onE!_if!ZYgky8P(1uS`&_68Z?p6Fo33gQh!v%a$E z;Y(|o$$As|ZGPwNy=Aj68g&P=1?aMkNpc9Kv?{o7&Y+~{ub}3y@dp^SDY{!J7Ygk9 z$+CSVWj|FpcLSPxn2k`5Ir;d6K*u+@j zs!8be1=#wMpervOt&>2rD?bSxG`8HRCz04Xyl;M&-&QYka7p|_Mz7-GqYoU`sf+xy zshGggI1E6Lqi@LVJZ==h$A8nQxnL0w*WJpB8JfDpl4!#!rI9b8g@0x@i#ghLOx!5q zic`*#L|u`%De8$3^F_$mS{=8-95WRiO`9$^CRtB|;$x>2I{%oQgl~aX*ES#GD2d!M zSaZ|QY5wL?`g~H|(z5!U{wGM64|ErAT_9%3iwmV3Pp{XJ_#Vva;4=cnsy`QwL~_vs9{^{cK;~xfQQM-EISuI@@g$+;ry0vI^-gz>Y9f zxZm`HoJf+hVA8gbSG`dB%bA;@&I&?)d2`q7`Cr)?^VoTm*j+I`adyfLDpn0NRy3EX zd+NW za<>vq*qwcurz=`4GHj4#Kd$>yntGV~@}>wshEke?rnGl!2>A%2Rp9XdN zYez;1Zu^Qf4WH7-c=`VbXlSiW!Yl73^9|n9cE|E3Psm}^D2F8sR~rogy#hQxF@$UBZzZ?@GMP(|~Yw~`~c>KHfwx@}qfoxui zSVzD{XsM}Qm>h!ts{SA;v{7-8B2zn*(Cv8vSz?KE?0{Htc>3}uY8riv4BwLaF{CWF zd5~TmM~!Z7xJMS+*5f6MXk#R3$vG67EZrbGCP{%G$MCDJ;%VAP>x= zHmMm}!cWd;Jkw|$5e{P&*fjYxv}$Juq)`=wI^n>yUL{awxcru{6l zR_coK0#@(yD~I+TuBy_@Dv4s3QcO0RPgT-IktgDYUy1n{gDT}>``@oTXf)0*7EM!{ z-@SM9i*u%BD2~`G37Ur?AJf{xhZ6=N67#_-qd^ATl3!;70w4K=r5FxrI9o_k0!^h& z$$t$=*2nj61@Q|KQmp4ea`$|d=7ev2thynT z?5&r6qwcNHqlO4s@uJ+Q;w$Cwd?B%$7^|iv72m4Y|M+oUcROPf^!1K2 zW8XUEt{U_eCCJ|!miBsluPz%crk$~kzGjzD=}LXc2zM7|1v)gYxnti9IzRN-g+NtJ z47CIVcXdcY052jCclhLf?2q82eRvrTxvxe-+D%FNY$|u@=ei_n@na=w)~RVgfG=ix z<|3b|=@6 z{twTV!@NxSX#=odt#5282U6d@Fa=t&07xu-alt=Wh*$%LCpj4e{E=zh;~#kU~MD`#yf{tTu$(LZ*K1^09$ zF(=toyXKjZ>1r=;d{pxN=|>GWx)b&yqn#^twxaDp%ncI?yPVu5BopAffrkhX^H*KD-ET1QRi*;J`Mn-NgO6!}bwFmx(xSn;j2p>sgl2q^<$k3CY zw6CH)2SrhrS7n+st~At&&9=`>hn@eJa-SmpmKJ2Mlb>t_ zbA&UJ76fq-@1_?k&1F(@bG_oN&s;k&9B$qYUB!+1lx$s$IHDaQM>TT7RgU#k03=~z=U;ovg(M^3J(0$+3!=L9q`HJ zRQiHCXf)7_xP_tmNLY?a>cJgnVh!Y#Pl4BW(-;~qVhQ|7ll z`C2E=Oicb&U~niS@S+p7P+A7g(T zv}hzPcd=qZPO2qEh)l=-1U!V0quMLYiQw*C*QoPqxy8NBXZY+JQTq@To z`dE4V@BGQ$%>91tW4K4-`PLF7ge_lI!iogx9Zn|@dY{@X9N2TS(agBse}`)h2% zJtkGU=s8e(|J55`ZR^RH@?L}e1tg?)O^$9|Wgt|QkID-GCp2bT5Qi@?sy4mukvv~3 z+VS{Xr_S5P^3!X&qmxG`*A_N?luLA$x60jH`?n%~5{d%Qp^qAl8yqo=XJ`PYD6Iw2 zMHV#wXcP4}aFiJoHw+B8&)r^qe@byhfOg}pWAs_fAZI!T=6se1;Hw$!K>ORDc%ALT zWf>Rczc~UK8I)z5#B58glkB7TTjTY!lS8(3Zf*`_2{ z9HJWo{V`;Wb>ghqJ7G;22*|o)Vfs%b!Lt3;a@Yb-=%Y^oS%0i%Z=t-p>{y$_F0c%h z&yy7+&Wj0DZ5{0%{yl%*unZp-`X?jfR`Jb`$F9FiIK*gQetsji_PHSsvh{hOH>mZU z{0j2x?Y2{Ck{WQ5&RB=MhXAT%599wgD`!E&&&DnsVwd`LZ!)TEL*c&NWIv|4`aPps z>+0b5q5WL)bXSTk@vcUzu>TnjNasQM8+SqIIj^EkEX5?4a}x)ec5K{XJ7FbNq(t%#C0B z>NB6WK4@L^OZar*;%Dd6WNTJYT7BzNLwc6~_Z^IFP7{SqZA0s%%`blV@iVzHN53^q z(AaG^fpdoh0x~@)PLEQ8Rzy_A(YDn$;4Nj5(P&0OLE_qlaq?v>MF!3e6iXDObey``{)0a*c9x}VLmfsg|XHu+m z0}22(gsxAZ75v4Dl(3}ZU2C-Je)*uWsMb{6aPF^shursX@<~l;C`4;}YRCr{e(_Xh zenhnb;3uS2VNA~AYlUT+ta{e|DZ z@Og^#)A09J{cmrp#n#vW9W@$SU_&x=f2eV57KhD_@DpC z;>91J>oJ&p%hCIsV{#UbpBsC&Dc}&N4D>v5uhX zH>3*QhCAHjG{K5W)3s#PAYD4#{BLDszqp_<$lPDk9c6oO?}Bk1gr8N5EhCLj&&1&M z>&5G9R&>~pdXlV9>6Ip~_o>I&mD7>Jz##+QMGRk&*XghO8hKp;D&z_u8`vzB=W z{z%i)*}K$nF_v^qi54SX`W!pTKS=7!0#hZ+iS!6CMbF3D@oVcQ_WD7eS<}KmVsrRU}ft z>zfsa(%U)aV0@_u-D^wcQ(yY2LO}*kjmMYOV$xap!nzHY%Lh^WS63!)-Eh;Qa0{dJ zj%dPXws-3v%Y;~eJiJZQyIOne?RR<>LC6;xpmjM-hF=c}k(Z?=3yHjBX}T_H<6Qdm z3far&KN@w`V7-Bt2`2>}#Wz!?p8?(Vbfbt(0JGLY1_5}|krGsRImevYRNjn5P~<~% z0LKTbf4Pf)B&<}B`MT>U@*IGA||(EHa9XD?WTbR>4qUcXVF#uh0z>J1?J`CmzcVl4+k zXo1?YP6d+(?i|}8x2Kujl{UJbTE|WEkwg(NA}_VRqq86c$(4m;j>M`bYrMpNxq9Y6 zmU+6~muC5I?8#`A2=m<%^h5BrNAiwss#bOgwXveu(-qN@frvuZ=%3jMWbBzl$U^cK|mTS{{ga46ha<&S4*rPDCkd#ue z#9sJJ?>jYqUpMe3L@-nR58CKd*Q9(SqII<;ye!^Nra=ANm(N){6eTIj^=OHpF=u*3`48nFR4|jY+ zCSH8duyfET{OEsr(s5$xhpA$W`)!L=y3UVFpanpIYcLy$8r6eCq(p-l6Cz$bc~^QX z>SR=XR-@*xJ9;nlJP2r9LIbuf z-h5(*viX=>DU?b|gnO@a{-q07yrkOU64c+CP{l4q(slvlBu_xfWDxU4pd+#k3M{s> zdkY_gkJ4uZR|idBMFq4bt`zp2&m5~gj{`B%EV|2@$otFu@sVpH3H+1x2A2I7om+H5 z20cg|GNtNwsP?0+^h0dbCwqCrN=^a-XY%xtmtJY@zOf2vdP{>h*O2>gN}Y21l4^dn zd{JIYj*wK|1N4na?M2LlR({QiDOI{;UH7x%hNMWvzD1iPwHeMkHxeZ-Ha3}SDDl@s zJ%9VTGV%3;xSJ*agsfCLUm~%Wk|^C1PBSXWO9*Vl{i+PLWR0?#p5~h12ZE&ZxjMw2 z0%08?Tmd?UQNldY6(H0uwtK^pmTz%I4zlgbS4!`tyCEK=9M(+s zc10PhrCep3YexZqi2MZr6Le0Lh&{(01R#1(3BQ%IuY~kxrwnxS>90m1nWObLFP#6c zlAV|BvE7(XtzKa_2X8QO*fd_Ogf1_th4Vii^bz}`)f9on1{t2L9MbIq0H}d44*0;x z1~`Dym@h0IicuhaX3}Nt-_S;9OAC>^>BcjNYEcZX(ZKE`Zk>bD#DG6BLy%D^HBh9W zR7Y+qeNLc~^azPu{d8)$W1~~cji{B&TPiJxIGIMHsVN_S+`1qR2x$Gh4NsLoMJ?dq z)_M}}YafF~4H^3V7e-4uMym>q!V_gZYf3|cUDwZ_TUEOtl-13p%fGTLaqnPUnVoOz z=YZRJG52hiTOS!q4F}BkC5H4(?)`dVZh`}{{V+4KVRzd z^HAQ|*a{LW@BGdn+kA?+Im2~(`o}|tyd4q0T2|>24!4e6)6f=;c=~hOfVB}Pafg}H z3qe_BZ#CE%06ihfJv4-=SLxH|cvEj6gFQ?;JPU9qf^kj-Il^oQt%Nx)hy(yp>cJGiCL|`PW0K-?`J0QNGTBxv@E_|Tlt>(gr=pAqU(fr zvS~z3RyOU$_UdXG6uCAN*|*jBgTR;*U}0gAJWp@Nl}|V)iC8wkVj~i>+=z!^WXIu5 zi@$`)MOFL%F3dAePWtAZMP}_rgQ+60;Eu#9&{4e5%QnjFphJN*VgS7J&?>X|d z7q+}u4W07x`euX<&ELCR`r|5Sa~H6rO`BBmvi@yA_D+IdXt4`Kfc^Z+XTdD35i*Q|m{>VcL;xB?Ok1y^$GKB#*>OLNN*8Ns)s!tPowQ zneO`P;6nZH-B+jE^?w5MlsB@^RbDEsts!*`w|rzc{$Y-%3{VXUE%qI6IVhnQMabpF zG@Q~33Dj936cIDbQF{~}jCDj28oP_9v_*-ftXKY}D3;QCL&cuTrrR&67eV`mMTly5 zAl3{+))w8QyATOf{+>m(uB5&SLhKiJ>Kl~J{;-k1pHrT{s9S3%&qJ+VFb~GZL~cQj z6yOmiJnLZI;x@9XgdVl_^5c}+gpWLFjn_}bI(JRW>6SrBBC_l*0NzPND}C5TQ$qZB z{Kt04(m3X~N$Mt_I>(x!5Uuz3OT?{Q=d_IXvQ44M7y8UEOuQrf4#K}U$1g&ah`XGn z2J2oC=2d%tSs|Ih74mZ5&ZbUNt=g|EYjfe$$TsYqd}E@3BnxdsNjr;AMR`ABZWdsJ z5Rrbc)da$s8;v!L5a$R~3Pq-)Q->IZY9EuUPtqj+5vpoXjg0k32Ix-@%2hbzeHRqF zFjpz|(WdL#8csDc^_Nzf$NXlc!Vh?+oHzKm%*-H@|8HFk?rN%&8oAOW+9RFtzIsuw z7$hJBzv6(ylK0JoEBT-(Ot}YH--}Gf#HzupF0_1*On_EPX5tJx* zl6PT(wK~!8O7ro5OG{(!OY3_J~Va=+I zD-YZUI>^ucDBD7Lut7Gq1}3M&N`0AG_|^}@f=l8mux>*ZR|NJ z@*1DSTE6(2eZrdEmh*KT=P9*kH)VG26t2CQ_1MQcfZRVJ!%cyNL$1T3u8tVG`ZeqQcDV39AxN(t)H~aXP zSOj%bfKs2`*7H6OcjKhCzKO<0aUMiSyiXPBIYUQV%(j1{?-fh6u0j;SQKTq{dL1}a z!Z#*BNf>WV8o71I^Xa0Q^2=*`dcAwUa-$!zioxTOR^yYw>zng{U z8ZCoQ^7}<=WY9Mt5tYLkB;a@h_P8Cid({D&>2B8a^r95?GTNCaIn=+c&r8jq--AZ# zrNSAah#5Cgm!P0*Nn+XMqI~bORu$qNPYE7Fqoo&ij29beyBe*ZaDOKD7BoTVEP}`6 z>~K_F#*}AVXJp}?1fyk-e+P%>eSRX-Na~5Q&5)4CLIRKZM0z?o;Uk^1icq10=Y^M? zwl_x>$};#yh9#Nvc0T);*JqZeCCYGTnS8QPyDy?%oJd<^3Vjxm#a+&3_9-8iHQ_d% z&hqs`HY+Mn!>h6g} ztk}p+NF9VQgt&7|IbB6^jpnU4BO+)iltZW=D~^PPQSR21^CL(5sdHddS9kQ9dYBpW za)VKr{fC2xVl2-lST8$l`tKaX>Cd&Vusg^f3<6{XbcvLJkakUKy;rB^%B4WV#;`*4 zlS+4Zu*)cBd0|Cqv`bZ?a}(4daOl@2jIb}#IHXW(&t2d>OsKwcZGSR-$D-tGv(e2y z@rnDlSmYHysyrp#6$;p2rJad86j1UuhDS-Tk)Egc-eGF_BQ$fox*s@y`u&x*z-?b2 z&tFPUQw6^?4rbaDoWq8n?%M^fURd1uH-72w1%{PFvA|SK&xJ?1I~Q*F-W1;XnT-m# zR)LhoKRK+BZZ*}bpj#89_b9aXuyRY0kv~ibR?%D&)t1SS;M8M0f{Yj06z^gw6^n1a zw|_kEDIf(R-1tQfzR;miM6Qpw=0)2s$cGp`w^jF(o4yTcWCj$T<+2JA%N<3G1%A`s zvdbrQG_?rj!pw73=ar6~G=5wj{2KguAgMF@@|XcU;9O@-a2Zbtd@%?63NdVrC`u+o zC}l6-r7?Fy6trv6RmvQe(x^529iAc9=MnLb0Vgjh2pNx)MPh{^6G~bzCT0@I<^67k zf&6-_^ZV|WfrCs~+g1@`G|y<{>!9vm`@Pt>yML>+w_A+D)*tX42e9r!dlJORjsXdF z?Kl&s`;;@&+`KAkiYa2@*bE5St$M%Bn)7^xREq$|uDBj`B!r^9lVHSASXvlx0?{R7 z5Wo3FSyBvyI>dkd`GY2o33qt+xoh(#k8O9DOb47ps!yAXbMLFg2c1>Mlr>0g!Lh{BgouICQ<^`xzQ?KE2=VXl!keQN9$nZFgsQw2eD^ z^jeNuc@PAGQ+ASkbw*7G;(;4FLIK5rf`BS4(!f@l9T>RHn^f+qa_%DhVL0meF zDE>CWI6#789a4AGy`N&RyZSg+&LC9qxmbgPpw#HSFugu2FOFiBoll6n>sU^%5wT!Y zEj}RdUX<)Z;LkOO0Ye4NG_kAi+IqIPXkF6g4`1^XQNQEN8kJP|q}>QU!VUjN)mer$ z_5W}DvyBBcYNW*INw+kkyAdgsl2$1ZL|}|=qyz*VodPN%f-yP-qydEf8XecuAY6{^61s5$`GCBqJRkUa|`wgHykbp~=ioh-fbRr&sJ z_D5^3f5Epq^}8#5`#W`{5A}`{ zhxQ891QLB?oB*m~_gRq-4ussPrT_%bCJvzPkF5m9R*q|IueWdRBN+veyK+wnqqcvm z9{@$dO(@<3py^lAap%&vNFvnHT*Gs&9g71o4|Z4P(*;KvbQwojEeb_P@&en*eXQZt z{}E)mPPQ}|=--}w^;Q_Q-1U~BNk*3S^u^(rU;o&DmZ9qVk97P;$5s?cfG$S0&UP7| zH=xe!Pz-=r7{3f__NTV1inn@1N7)W1N8hApC##ydopkg^r z90oz5FmmIsJ}GG_y@~c_rgi>II|nn*mv63p=vsgA^Hb1knYvRsm_SC<(yhv*se)l< znqk0LF5U)UZgqc}JFW!xL)#Wq&-WMhDOOdsHf_o=mkB^l8~}|sZY!OJ(0vQuU$6IC z+A7<7=z&FH#`Na(EQa3lZ@+iOD$JJ7v5W4@T&5rR&YL4T@;#?W=3IY*nV`>8y?l1m>hviEv6`v^_n zrQL72Sa@(!MsKFgj}1am;|Mv3^dr>b!E}gnvKB#&E~XCtQ>O3!Gxq2&vD;JOuN`{> z?%D-hl8L%(AbQ*GeAhu_jU^|nErNx^W!!nkAd|qdWlZ-aL9#XR8Tb0UPN4yJoCKEq zd~H6b(!w<54(+9;yrQJs>92r(c8ksKZ_m3QNMFg_S+)y}169v¶YTlN?=XvT)Y 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%0D@>HEs3wQJH9-6<@p=9Es6-Pq3^uj|_p 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

  1. j`N{nh3uSQ-O+-f-7u-ZKF<>?7}dk1 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 GAP)cvP`7vh literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 775d2d4..7b24ab9 100755 --- a/README.md +++ b/README.md @@ -1,9 +1,14 @@ Python Tutorials and References ================ -Useful functions, tutorials, and other Python-related things +![logo](./Images/logo.png) +A collection of useful scripts, tutorials, and other Python-related things + +
    +
    + ###Links to view the IPython Notebooks and Markdown files
    From 69cb078345ee3741cc9ae4b8c8304700658dacca Mon Sep 17 00:00:00 2001 From: rasbt Date: Thu, 22 May 2014 00:53:15 -0400 Subject: [PATCH 066/248] logo --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7b24ab9..11ea2b9 100755 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ -Python Tutorials and References -================ + ![logo](./Images/logo.png) @@ -7,7 +6,7 @@ Python Tutorials and References A collection of useful scripts, tutorials, and other Python-related things
    -
    + ###Links to view the IPython Notebooks and Markdown files From 33309eb7c6021144732614bac90477ef740beaf3 Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 23 May 2014 00:51:01 -0400 Subject: [PATCH 067/248] small readme format update --- README.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 11ea2b9..b6f8190 100755 --- a/README.md +++ b/README.md @@ -8,15 +8,13 @@ A collection of useful scripts, tutorials, and other Python-related things
    -###Links to view the IPython Notebooks and Markdown files -


    -**// Python tips and tutorials** +###// Python tips and tutorials - A collection of not so obvious Python stuff you should know! [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb?create=1) - Python's scope resolution for variable names and the LEGB rule [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb?create=1) @@ -26,23 +24,27 @@ A collection of useful scripts, tutorials, and other Python-related things - Sorting CSV files using the Python csv module [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb)] +
    +###// benchmarks -**// benchmarks** +*For more recent benchmarks, please also see my separate GitHub repository [One-Python-benchmark-per-day](https://github.com/rasbt/One-Python-benchmark-per-day)* - Python benchmarks via `timeit` [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/timeit_tests.ipynb?create=1) - Implementing the least squares fit method for linear regression and speeding it up via Cython [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb?create=1) - Benchmarks of different palindrome functions [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/palindrome_timeit.ipynb?create=1) +
    -**// other** +###// other - Creating a table of contents with internal links in IPython Notebooks and Markdown documents [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/table_of_contents_ipython.ipynb)] - Happy Mother's Day [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/funstuff/happy_mothers_day.ipynb?create=1) +
    -**// useful scripts snippets** +###// useful scripts and snippets - [Shell script](./useful_scripts/prepend_python_shebang.sh) for prepending Python-shebangs to all .py files in a current directory. From 4900267a0201e86ee85216f93b905e6670a659b9 Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 23 May 2014 00:56:23 -0400 Subject: [PATCH 068/248] small readme format update --- README.md | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index b6f8190..710e62b 100755 --- a/README.md +++ b/README.md @@ -16,22 +16,34 @@ A collection of useful scripts, tutorials, and other Python-related things ###// Python tips and tutorials -- A collection of not so obvious Python stuff you should know! [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb?create=1) -- Python's scope resolution for variable names and the LEGB rule [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb?create=1) -- A thorough guide to SQLite database operations in Python [[Markdown]](./sqlite3_howto/README.md) -- Unit testing in Python - Why we want to make it a habit [[Markdown]](./tutorials/unit_testing.md) -- Installing Scientific Packages for Python3 on MacOS 10.9 Mavericks [[Markdown]](./tutorials/installing_scientific_packages.md) +- A collection of not so obvious Python stuff you should know! [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb?create=1)] + +- Python's scope resolution for variable names and the LEGB rule [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb?create=1)] + + + +- A thorough guide to SQLite database operations in Python [[Markdown](./sqlite3_howto/README.md)] + +- Unit testing in Python - Why we want to make it a habit [[Markdown](./tutorials/unit_testing.md)] + +- Installing Scientific Packages for Python3 on MacOS 10.9 Mavericks [[Markdown](./tutorials/installing_scientific_packages.md)] + + + - Sorting CSV files using the Python csv module [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb)]
    ###// benchmarks -*For more recent benchmarks, please also see my separate GitHub repository [One-Python-benchmark-per-day](https://github.com/rasbt/One-Python-benchmark-per-day)* +*For more recent benchmarks, please also see my separate +GitHub repository [One-Python-benchmark-per-day](https://github.com/rasbt/One-Python-benchmark-per-day)* -- Python benchmarks via `timeit` [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/timeit_tests.ipynb?create=1) -- Implementing the least squares fit method for linear regression and speeding it up via Cython [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb?create=1) -- Benchmarks of different palindrome functions [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/palindrome_timeit.ipynb?create=1) +- Python benchmarks via `timeit` [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/timeit_tests.ipynb?create=1)] + +- Implementing the least squares fit method for linear regression and speeding it up via Cython [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb?create=1)] + +- Benchmarks of different palindrome functions [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/palindrome_timeit.ipynb?create=1)]
    @@ -40,7 +52,8 @@ A collection of useful scripts, tutorials, and other Python-related things ###// other - Creating a table of contents with internal links in IPython Notebooks and Markdown documents [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/table_of_contents_ipython.ipynb)] -- Happy Mother's Day [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/funstuff/happy_mothers_day.ipynb?create=1) + +- Happy Mother's Day [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/funstuff/happy_mothers_day.ipynb?create=1)]
    @@ -48,4 +61,4 @@ A collection of useful scripts, tutorials, and other Python-related things - [Shell script](./useful_scripts/prepend_python_shebang.sh) for prepending Python-shebangs to all .py files in a current directory. -- convert 'tab-delimited' to 'comma-separated' CSV files [[IPython nb]](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/useful_scripts/fix_tab_csv.ipynb?create=1) +- convert 'tab-delimited' to 'comma-separated' CSV files [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/useful_scripts/fix_tab_csv.ipynb?create=1)] From e8db4ab294edbae5401cd1a8cc0f5e3e8b4c35b9 Mon Sep 17 00:00:00 2001 From: Chris Seymour Date: Sat, 24 May 2014 00:13:20 +0100 Subject: [PATCH 069/248] Added a shebang to the shebang adding script --- useful_scripts/prepend_python_shebang.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/useful_scripts/prepend_python_shebang.sh b/useful_scripts/prepend_python_shebang.sh index 3bbc937..686225f 100644 --- a/useful_scripts/prepend_python_shebang.sh +++ b/useful_scripts/prepend_python_shebang.sh @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # Sebastian Raschka 05/21/2014 # Shell script that prepends a Python shebang # '#!/usr/bin/env python' to all From 73979bb5e59e8f95b1533c95fb808b0854ca0e36 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 24 May 2014 12:02:03 -0400 Subject: [PATCH 070/248] unorderable types update and separate python 2.x vs. 3.x section --- README.md | 2 + not_so_obvious_python_stuff.ipynb | 379 +++++++++++++++- .../key_differences_between_python_2_and_3.md | 411 ++++++++++++++++++ 3 files changed, 777 insertions(+), 15 deletions(-) create mode 100644 tutorials/key_differences_between_python_2_and_3.md diff --git a/README.md b/README.md index 710e62b..db00ca9 100755 --- a/README.md +++ b/README.md @@ -18,8 +18,10 @@ A collection of useful scripts, tutorials, and other Python-related things - A collection of not so obvious Python stuff you should know! [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb?create=1)] + - Python's scope resolution for variable names and the LEGB rule [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb?create=1)] +- Key differences between Python 2.x and Python 3.x [[Markdown](./tutorials/key_differences_python2_python3.md)] - A thorough guide to SQLite database operations in Python [[Markdown](./sqlite3_howto/README.md)] diff --git a/not_so_obvious_python_stuff.ipynb b/not_so_obvious_python_stuff.ipynb index 0a9632c..c36c0dc 100644 --- a/not_so_obvious_python_stuff.ipynb +++ b/not_so_obvious_python_stuff.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:7a22f6c91e4aab51a325c721dd7674622d1acc5b4a3a038ff512c736d83bbe4a" + "signature": "sha256:b37510e2c48c9811f7baabeff25c48a186e0e5f154b5d341f4eda6701df705e3" }, "nbformat": 3, "nbformat_minor": 0, @@ -13,7 +13,7 @@ "metadata": {}, "source": [ "[Sebastian Raschka](http://sebastianraschka.com) \n", - "last updated: 05/03/2014 ([Changelog](#changelog))\n", + "last updated: 05/24/2014 ([Changelog](#changelog))\n", "\n", "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb) \n", "- [Link to the GitHub repository](https://github.com/rasbt/python_reference) \n", @@ -24,7 +24,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### All code was executed in Python 3.4" + "#### All code was executed in Python 3.4 (unless stated otherwise)" ] }, { @@ -59,32 +59,59 @@ "source": [ "# Sections\n", "- [The C3 class resolution algorithm for multiple class inheritance](#c3_class_res)\n", + "\n", "- [Assignment operators and lists - simple-add vs. add-AND operators](#pm_in_lists)\n", + "\n", "- [`True` and `False` in the datetime module](#datetime_module)\n", + "\n", "- [Python reuses objects for small integers - always use \"==\" for equality, \"is\" for identity](#python_small_int)\n", + "\n", "- [Shallow vs. deep copies if list contains other structures and objects](#shallow_vs_deep)\n", + "\n", "- [Picking `True` values from logical `and`s and `or`s](#false_true_expressions)\n", + "\n", "- [Don't use mutable objects as default arguments for functions!](#def_mutable_func)\n", + "\n", "- [Be aware of the consuming generator](#consuming_generator)\n", + "\n", "- [`bool` is a subclass of `int`](#bool_int)\n", + "\n", "- [About lambda-in-closures and-a-loop pitfall](#lambda_closure)\n", + "\n", "- [Python's LEGB scope resolution and the keywords `global` and `nonlocal`](#python_legb)\n", + "\n", "- [When mutable contents of immutable tuples aren't so mutable](#immutable_tuple)\n", + "\n", "- [List comprehensions are fast, but generators are faster!?](#list_generator)\n", + "\n", "- [Public vs. private class methods and name mangling](#private_class)\n", + "\n", "- [The consequences of modifying a list when looping through it](#looping_pitfall)\n", + "\n", "- [Dynamic binding and typos in variable names](#dynamic_binding)\n", + "\n", "- [List slicing using indexes that are \"out of range](#out_of_range_slicing)\n", + "\n", "- [Reusing global variable names and UnboundLocalErrors](#unboundlocalerror)\n", + "\n", "- [Creating copies of mutable objects](#copy_mutable)\n", + "\n", "- [Key differences between Python 2 and 3](#python_differences)\n", + "\n", "- [Function annotations - What are those `->`'s in my Python code?](#function_annotation)\n", + "\n", "- [Abortive statements in `finally` blocks](#finally_blocks)\n", + "\n", "- [Assigning types to variables as values](#variable_types)\n", + "\n", "- [Only the first clause of generators is evaluated immediately](#generator_rhs)\n", + "\n", "- [Keyword argument unpacking syntax - `*args` and `**kwargs`](#splat_op)\n", + "\n", "- [Metaclasses - What creates a new instance of a class?](#new_instance)\n", + "\n", "- [Else-clauses: \"conditional else\" and \"completion else\"](#else_clauses)\n", + "\n", "- [Interning of compile-time constants vs. run-time expressions](#string_interning)" ] }, @@ -2282,12 +2309,69 @@ "(Note: the the code was executed in Python 3.4.0 and Python 2.7.5 and copied from interactive shell sessions.)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Overview - Key differences between Python 2 and 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "- [Unicode](#unicode)\n", + "- [The print statement](#print)\n", + "- [Integer division](#integer_div)\n", + "- [xrange()](#xrange)\n", + "- [Raising exceptions](#raising_exceptions)\n", + "- [Handling exceptions](#handling_exceptions)\n", + "- [next() function and .next() method](#next_next)\n", + "- [Loop variables and leaking into the global scope](#loop_leak)\n", + "- [Comparing unorderable types](#compare_unorder)\n", + "\n", + "
    \n", + "
    \n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Unicode..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to Python 2.x vs 3.x overview](#py23_overview)]" + ] + }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", - "### Unicode...\n", "####- Python 2: \n", "We have ASCII `str()` types, separate `unicode()`, but no `byte` type\n", "####- Python 3: \n", @@ -2341,7 +2425,29 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### The print statement\n", + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The print statement" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to Python 2.x vs 3.x overview](#py23_overview)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "Very trivial, but this change makes sense, Python 3 now only accepts `print`s with proper parentheses - just like the other function calls ..." ] }, @@ -2395,7 +2501,29 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Integer division\n", + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Integer division" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to Python 2.x vs 3.x overview](#py23_overview)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "This is a pretty dangerous thing if you are porting code, or executing Python 3 code in Python 2 since the change in integer-division behavior can often go unnoticed. \n", "So, I still tend to use a `float(3)/2` or `3/2.0` instead of a `3/2` in my Python 3 scripts to save the Python 2 guys some trouble ... (PS: and vice versa, you can `from __future__ import division` in your Python 2 scripts)." ] @@ -2432,7 +2560,30 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### `xrange()` \n", + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###`xrange()` " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to Python 2.x vs 3.x overview](#py23_overview)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " \n", "`xrange()` was pretty popular in Python 2.x if you wanted to create an iterable object. The behavior was quite similar to a generator ('lazy evaluation'), but you could iterate over it infinitely. The advantage was that it was generally faster than `range()` (e.g., in a for-loop) - not if you had to iterate over the list multiple times, since the generation happens every time from scratch! \n", "In Python 3, the `range()` was implemented like the `xrange()` function so that a dedicated `xrange()` function does not exist anymore." ] @@ -2470,7 +2621,30 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Raising exceptions\n", + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Raising exceptions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to Python 2.x vs 3.x overview](#py23_overview)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", "\n", "Where Python 2 accepts both notations, the 'old' and the 'new' way, Python 3 chokes (and raises a `SyntaxError` in turn) if we don't enclose the exception argument in parentheses:" ] @@ -2509,9 +2683,32 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Handling exceptions\n", + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Handling exceptions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to Python 2.x vs 3.x overview](#py23_overview)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", "\n", - "Also the handling of excecptions has slightly changed in Python 3. Now, we have to use the `as` keyword!" + "Also the handling of exceptions has slightly changed in Python 3. Now, we have to use the `as` keyword!" ] }, { @@ -2538,11 +2735,37 @@ "metadata": {}, "outputs": [] }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "\n", + "
    \n", + "
    " + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### The `next()` function and `.next()` method\n", + "### The `next()` function and `.next()` method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to Python 2.x vs 3.x overview](#py23_overview)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", "\n", "Where you can use both function and method in Python 2.7.5, the `next()` function is all that remain in Python 3!" ] @@ -2575,7 +2798,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### In Python 3.x for-loop variables don't leak into the global namespace anymore" + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### In Python 3.x for-loop variables don't leak into the global namespace anymore" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to Python 2.x vs 3.x overview](#py23_overview)]" ] }, { @@ -2591,6 +2830,9 @@ "cell_type": "code", "collapsed": false, "input": [ + "from platform import python_version\n", + "print('This code cell was executed in Python', python_version())\n", + "\n", "i = 1\n", "print([i for i in range(5)])\n", "print(i, '-> i in global')" @@ -2602,21 +2844,124 @@ "output_type": "stream", "stream": "stdout", "text": [ + "This code cell was executed in Python 3.3.5\n", "[0, 1, 2, 3, 4]\n", "1 -> i in global\n" ] } ], - "prompt_number": 1 + "prompt_number": 4 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from platform import python_version\n", + "print 'This code cell was executed in Python', python_version()\n", + "\n", + "i = 1\n", + "print [i for i in range(5)]\n", + "print i, '-> i in global' " + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "This code cell was executed in Python 2.7.6\n", + "[0, 1, 2, 3, 4]\n", + "4 -> i in global\n" + ] + } + ], + "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ - "In Python 2.x this would print \n", - "`4 -> i in global`" + "\n", + "
    \n", + "
    " ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3.x prevents us from comparing unorderable types" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to Python 2.x vs 3.x overview](#py23_overview)]" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from platform import python_version\n", + "print 'This code cell was executed in Python', python_version()\n", + "\n", + "print [1, 2] > 'foo'\n", + "print (1, 2) > 'foo'\n", + "print [1, 2] > (1, 2)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "This code cell was executed in Python 2.7.6\n", + "False\n", + "True\n", + "False\n" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from platform import python_version\n", + "print('This code cell was executed in Python', python_version())\n", + "\n", + "print([1, 2] > 'foo')\n", + "print((1, 2) > 'foo')\n", + "print([1, 2] > (1, 2))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "This code cell was executed in Python 3.3.5\n" + ] + }, + { + "ename": "TypeError", + "evalue": "unorderable types: list() > str()", + "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 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'This code cell was executed in Python'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpython_version\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m'foo'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m'foo'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: unorderable types: list() > str()" + ] + } + ], + "prompt_number": 3 + }, { "cell_type": "markdown", "metadata": {}, @@ -3936,6 +4281,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "#### 05/24/2014\n", + "- new section: unorderable types in Python 2\n", + "- table of contents for the Python 2 vs. Python 3 topic\n", + " \n", "#### 05/03/2014\n", "- new section: else clauses: conditional vs. completion\n", "- new section: Interning of compile-time constants vs. run-time expressions\n", diff --git a/tutorials/key_differences_between_python_2_and_3.md b/tutorials/key_differences_between_python_2_and_3.md new file mode 100644 index 0000000..d7a7d78 --- /dev/null +++ b/tutorials/key_differences_between_python_2_and_3.md @@ -0,0 +1,411 @@ +[Sebastian Raschka](http://sebastianraschka.com) +last updated: 05/24/2014 + +
    + +**This is a subsection of ["A collection of not-so-obvious Python stuff you should know!"](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb?create=1)** + + + +
    + +## Key differences between Python 2 and 3 +
    + +There are some good articles already that are summarizing the differences between Python 2 and 3, e.g., +- [https://wiki.python.org/moin/Python2orPython3](https://wiki.python.org/moin/Python2orPython3) +- [https://docs.python.org/3.0/whatsnew/3.0.html](https://docs.python.org/3.0/whatsnew/3.0.html) +- [http://python3porting.com/differences.html](http://python3porting.com/differences.html) +- [https://docs.python.org/3/howto/pyporting.html](https://docs.python.org/3/howto/pyporting.html) +etc. + +But it might be still worthwhile, especially for Python newcomers, to take a look at some of those! +(Note: the the code was executed in Python 3.4.0 and Python 2.7.5 and copied from interactive shell sessions.) + + + +
    + +### Overview - Key differences between Python 2 and 3 + + + + +- [Unicode](#unicode) +- [The print statement](#print) +- [Integer division](#integer_div) +- [xrange()](#xrange) +- [Raising exceptions](#raising_exceptions) +- [Handling exceptions](#handling_exceptions) +- [next() function and .next() method](#next_next) +- [Loop variables and leaking into the global scope](#loop_leak) +- [Comparing unorderable types](#compare_unorder) + +
    +
    + + + +
    +
    + +### Unicode... + +[[back to Python 2.x vs 3.x overview](#py23_overview)] + + +####- Python 2: +We have ASCII `str()` types, separate `unicode()`, but no `byte` type +####- Python 3: +Now, we finally have Unicode (utf-8) `str`ings, and 2 byte classes: `byte` and `bytearray`s + +
    + +
    #############
    +# Python 2
    +#############
    +
    +>>> type(unicode('is like a python3 str()'))
    +<type 'unicode'>
    +
    +>>> type(b'byte type does not exist')
    +<type 'str'>
    +
    +>>> 'they are really' + b' the same'
    +'they are really the same'
    +
    +>>> type(bytearray(b'bytearray oddly does exist though'))
    +<type 'bytearray'>
    +
    +#############
    +# Python 3
    +#############
    +
    +>>> print('strings are now utf-8 \u03BCnico\u0394é!')
    +strings are now utf-8 μnicoΔé!
    +
    +
    +>>> type(b' and we have byte types for storing data')
    +<class 'bytes'>
    +
    +>>> type(bytearray(b'but also bytearrays for those who prefer them over strings'))
    +<class 'bytearray'>
    +
    +>>> 'string' + b'bytes for data'
    +Traceback (most recent call last):s
    +  File "<stdin>", line 1, in <module>
    +TypeError: Can't convert 'bytes' object to str implicitly
    +
    + + + +
    +
    + +### The print statement + +[[back to Python 2.x vs 3.x overview](#py23_overview)] + +Very trivial, but this change makes sense, Python 3 now only accepts `print`s with proper parentheses - just like the other function calls ... + +
    +
    # Python 2
    +>>> print 'Hello, World!'
    +Hello, World!
    +>>> print('Hello, World!')
    +Hello, World!
    +
    +# Python 3
    +>>> print('Hello, World!')
    +Hello, World!
    +>>> print 'Hello, World!'
    +  File "<stdin>", line 1
    +    print 'Hello, World!'
    +                        ^
    +SyntaxError: invalid syntax
    +
    + +
    + +And if we want to print the output of 2 consecutive print functions on the same line, you would use a comma in Python 2, and a `end=""` in Python 3: + +
    + +
    # Python 2
    +>>> print "line 1", ; print 'same line'
    +line 1 same line
    +
    +# Python 3
    +>>> print("line 1", end="") ; print (" same line")
    +line 1 same line
    +
    + + + +
    +
    + +### Integer division + +[[back to Python 2.x vs 3.x overview](#py23_overview)] + + +This is a pretty dangerous thing if you are porting code, or executing Python 3 code in Python 2 since the change in integer-division behavior can often go unnoticed. +So, I still tend to use a `float(3)/2` or `3/2.0` instead of a `3/2` in my Python 3 scripts to save the Python 2 guys some trouble ... (PS: and vice versa, you can `from __future__ import division` in your Python 2 scripts). + +
    +
    # Python 2
    +>>> 3 / 2
    +1
    +>>> 3 // 2
    +1
    +>>> 3 / 2.0
    +1.5
    +>>> 3 // 2.0
    +1.0
    +
    +# Python 3
    +>>> 3 / 2
    +1.5
    +>>> 3 // 2
    +1
    +>>> 3 / 2.0
    +1.5
    +>>> 3 // 2.0
    +1.0
    +
    + + + +
    +
    + +###`xrange()` + +[[back to Python 2.x vs 3.x overview](#py23_overview)] + + +`xrange()` was pretty popular in Python 2.x if you wanted to create an iterable object. The behavior was quite similar to a generator ('lazy evaluation'), but you could iterate over it infinitely. The advantage was that it was generally faster than `range()` (e.g., in a for-loop) - not if you had to iterate over the list multiple times, since the generation happens every time from scratch! +In Python 3, the `range()` was implemented like the `xrange()` function so that a dedicated `xrange()` function does not exist anymore. + + +
    # Python 2
    +> python -m timeit 'for i in range(1000000):' ' pass'
    +10 loops, best of 3: 66 msec per loop
    +
    +    > python -m timeit 'for i in xrange(1000000):' ' pass'
    +10 loops, best of 3: 27.8 msec per loop
    +
    +# Python 3
    +> python3 -m timeit 'for i in range(1000000):' ' pass'
    +10 loops, best of 3: 51.1 msec per loop
    +
    +> python3 -m timeit 'for i in xrange(1000000):' ' pass'
    +Traceback (most recent call last):
    +  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py", line 292, in main
    +    x = t.timeit(number)
    +  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py", line 178, in timeit
    +    timing = self.inner(it, self.timer)
    +  File "<timeit-src>", line 6, in inner
    +    for i in xrange(1000000):
    +NameError: name 'xrange' is not defined
    +
    + + + +
    +
    + +### Raising exceptions + +[[back to Python 2.x vs 3.x overview](#py23_overview)] + + + +Where Python 2 accepts both notations, the 'old' and the 'new' way, Python 3 chokes (and raises a `SyntaxError` in turn) if we don't enclose the exception argument in parentheses: + +
    +
    # Python 2
    +>>> raise IOError, "file error"
    +Traceback (most recent call last):
    +  File "<stdin>", line 1, in <module>
    +IOError: file error
    +>>> raise IOError("file error")
    +Traceback (most recent call last):
    +  File "<stdin>", line 1, in <module>
    +IOError: file error
    +
    +    
    +# Python 3    
    +>>> raise IOError, "file error"
    +  File "<stdin>", line 1
    +    raise IOError, "file error"
    +                 ^
    +SyntaxError: invalid syntax
    +>>> raise IOError("file error")
    +Traceback (most recent call last):
    +  File "<stdin>", line 1, in <module>
    +OSError: file error
    +
    + + + +
    +
    + +### Handling exceptions + +[[back to Python 2.x vs 3.x overview](#py23_overview)] + + + +Also the handling of exceptions has slightly changed in Python 3. Now, we have to use the `as` keyword! + +
    # Python 2
    +>>> try:
    +...     blabla
    +... except NameError, err:
    +...     print err, '--> our error msg'
    +... 
    +name 'blabla' is not defined --> our error msg
    +
    +# Python 3
    +>>> try:
    +...     blabla
    +... except NameError as err:
    +...     print(err, '--> our error msg')
    +... 
    +name 'blabla' is not defined --> our error msg
    +
    + + + +
    +
    + +### The `next()` function and `.next()` method + +[[back to Python 2.x vs 3.x overview](#py23_overview)] + +Where you can use both function and method in Python 2.7.5, the `next()` function is all that remain in Python 3! + +
    # Python 2
    +>>> my_generator = (letter for letter in 'abcdefg')
    +>>> my_generator.next()
    +'a'
    +>>> next(my_generator)
    +'b'
    +
    +# Python 3
    +>>> my_generator = (letter for letter in 'abcdefg')
    +>>> next(my_generator)
    +'a'
    +>>> my_generator.next()
    +Traceback (most recent call last):
    +  File "<stdin>", line 1, in <module>
    +AttributeError: 'generator' object has no attribute 'next'
    +
    + + + +
    +
    + +### In Python 3.x for-loop variables don't leak into the global namespace anymore + +[[back to Python 2.x vs 3.x overview](#py23_overview)] + +This goes back to a change that was made in Python 3.x and is described in [What’s New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html) as follows: + +"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope." + +
    +`[In:]` +
    from platform import python_version
    +print('This code cell was executed in Python', python_version())
    +
    +i = 1
    +print([i for i in range(5)])
    +print(i, '-> i in global')
    +
    + +
    +`[Out:]` +
    This code cell was executed in Python 3.3.5
    +[0, 1, 2, 3, 4]
    +1 -> i in global
    +
    + + +
    +
    +
    +`[In:]` +
    from platform import python_version
    +print 'This code cell was executed in Python', python_version()
    +
    +i = 1
    +print [i for i in range(5)]
    +print i, '-> i in global' 
    +
    + +
    +`[Out:]` +
    This code cell was executed in Python 2.7.6
    +[0, 1, 2, 3, 4]
    +4 -> i in global
    +
    + + + +
    +
    + +#### Python 3.x prevents us from comparing unorderable types + +[[back to Python 2.x vs 3.x overview](#py23_overview)] + +
    +`[In:]` +
    from platform import python_version
    +print 'This code cell was executed in Python', python_version()
    +
    +print [1, 2] > 'foo'
    +print (1, 2) > 'foo'
    +print [1, 2] > (1, 2)
    +
    + +
    +`[Out:]` +
    This code cell was executed in Python 2.7.6
    +False
    +True
    +False
    +
    + +
    +
    +
    + +`[In:]` +
    from platform import python_version
    +print('This code cell was executed in Python', python_version())
    +
    +print([1, 2] > 'foo')
    +print((1, 2) > 'foo')
    +print([1, 2] > (1, 2))
    +
    + +`[Out:]` +
    This code cell was executed in Python 3.3.5
    +---------------------------------------------------------------------------
    +TypeError                                 Traceback (most recent call last)
    +<ipython-input-3-1d774c677f73> in <module>()
    +      2 print('This code cell was executed in Python', python_version())
    +      3 
    +----> 4 [1, 2] > 'foo'
    +      5 (1, 2) > 'foo'
    +      6 [1, 2] > (1, 2)
    +
    +TypeError: unorderable types: list() > str()
    +
    From f81049e1ac3881ea46ffc42b645efde9f6b511e9 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 24 May 2014 12:05:09 -0400 Subject: [PATCH 071/248] html version --- README.md | 2 +- ...ey_differences_between_python_2_and_3.html | 632 ++++++++++++++++++ 2 files changed, 633 insertions(+), 1 deletion(-) create mode 100644 tutorials/key_differences_between_python_2_and_3.html diff --git a/README.md b/README.md index db00ca9..feebdc1 100755 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ A collection of useful scripts, tutorials, and other Python-related things - Python's scope resolution for variable names and the LEGB rule [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb?create=1)] -- Key differences between Python 2.x and Python 3.x [[Markdown](./tutorials/key_differences_python2_python3.md)] +- Key differences between Python 2.x and Python 3.x [[HTML](http://htmlpreview.github.io/?https://github.com/rasbt/python_reference/blob/master/tutorials/key_differences_between_python_2_and_3.html)] - A thorough guide to SQLite database operations in Python [[Markdown](./sqlite3_howto/README.md)] diff --git a/tutorials/key_differences_between_python_2_and_3.html b/tutorials/key_differences_between_python_2_and_3.html new file mode 100644 index 0000000..431d7c9 --- /dev/null +++ b/tutorials/key_differences_between_python_2_and_3.html @@ -0,0 +1,632 @@ + + + + + + +Key differences between Python 2 and 3 + + + +

    Sebastian Raschka
    +last updated: 05/24/2014

    + +


    + +

    This is a subsection of "A collection of not-so-obvious Python stuff you should know!"

    + +

    + +


    + +

    Key differences between Python 2 and 3

    + +


    + +

    There are some good articles already that are summarizing the differences between Python 2 and 3, e.g.,
    +- https://wiki.python.org/moin/Python2orPython3 +- https://docs.python.org/3.0/whatsnew/3.0.html +- http://python3porting.com/differences.html +- https://docs.python.org/3/howto/pyporting.html
    +etc.

    + +

    But it might be still worthwhile, especially for Python newcomers, to take a look at some of those! +(Note: the the code was executed in Python 3.4.0 and Python 2.7.5 and copied from interactive shell sessions.)

    + +

    + +


    + +

    Overview - Key differences between Python 2 and 3

    + + + + +


    +

    + +

    +
    +

    + +

    Unicode...

    + +

    [back to Python 2.x vs 3.x overview]

    + +

    - Python 2:

    + +

    We have ASCII str() types, separate unicode(), but no byte type

    + +

    - Python 3:

    + +

    Now, we finally have Unicode (utf-8) strings, and 2 byte classes: byte and bytearrays

    + +


    + + + + +
    #############
    +# Python 2
    +#############
    +
    +>>> type(unicode('is like a python3 str()'))
    +<type 'unicode'>
    +
    +>>> type(b'byte type does not exist')
    +<type 'str'>
    +
    +>>> 'they are really' + b' the same'
    +'they are really the same'
    +
    +>>> type(bytearray(b'bytearray oddly does exist though'))
    +<type 'bytearray'>
    +
    +#############
    +# Python 3
    +#############
    +
    +>>> print('strings are now utf-8 \u03BCnico\u0394é!')
    +strings are now utf-8 μnicoΔé!
    +
    +
    +>>> type(b' and we have byte types for storing data')
    +<class 'bytes'>
    +
    +>>> type(bytearray(b'but also bytearrays for those who prefer them over strings'))
    +<class 'bytearray'>
    +
    +>>> 'string' + b'bytes for data'
    +Traceback (most recent call last):s
    +  File "<stdin>", line 1, in <module>
    +TypeError: Can't convert 'bytes' object to str implicitly
    +
    + + +

    +
    +

    + +

    The print statement

    + +

    [back to Python 2.x vs 3.x overview]

    + +

    Very trivial, but this change makes sense, Python 3 now only accepts prints with proper parentheses - just like the other function calls ...

    + +


    + + + + +
    # Python 2
    +>>> print 'Hello, World!'
    +Hello, World!
    +>>> print('Hello, World!')
    +Hello, World!
    +
    +# Python 3
    +>>> print('Hello, World!')
    +Hello, World!
    +>>> print 'Hello, World!'
    +  File "<stdin>", line 1
    +    print 'Hello, World!'
    +                        ^
    +SyntaxError: invalid syntax
    +
    + + +


    + +

    And if we want to print the output of 2 consecutive print functions on the same line, you would use a comma in Python 2, and a end="" in Python 3:

    + +


    + + + + +
    # Python 2
    +>>> print "line 1", ; print 'same line'
    +line 1 same line
    +
    +# Python 3
    +>>> print("line 1", end="") ; print (" same line")
    +line 1 same line
    +
    + + +

    +
    +

    + +

    Integer division

    + +

    [back to Python 2.x vs 3.x overview]

    + +

    This is a pretty dangerous thing if you are porting code, or executing Python 3 code in Python 2 since the change in integer-division behavior can often go unnoticed.
    +So, I still tend to use a float(3)/2 or 3/2.0 instead of a 3/2 in my Python 3 scripts to save the Python 2 guys some trouble ... (PS: and vice versa, you can from __future__ import division in your Python 2 scripts).

    + +


    + + + + +
    # Python 2
    +>>> 3 / 2
    +1
    +>>> 3 // 2
    +1
    +>>> 3 / 2.0
    +1.5
    +>>> 3 // 2.0
    +1.0
    +
    +# Python 3
    +>>> 3 / 2
    +1.5
    +>>> 3 // 2
    +1
    +>>> 3 / 2.0
    +1.5
    +>>> 3 // 2.0
    +1.0
    +
    + + +

    +
    +

    + +

    xrange()

    + +

    [back to Python 2.x vs 3.x overview]

    + +

    xrange() was pretty popular in Python 2.x if you wanted to create an iterable object. The behavior was quite similar to a generator ('lazy evaluation'), but you could iterate over it infinitely. The advantage was that it was generally faster than range() (e.g., in a for-loop) - not if you had to iterate over the list multiple times, since the generation happens every time from scratch!
    +In Python 3, the range() was implemented like the xrange() function so that a dedicated xrange() function does not exist anymore.

    + + + + +
    # Python 2
    +> python -m timeit 'for i in range(1000000):' ' pass'
    +10 loops, best of 3: 66 msec per loop
    +
    +    > python -m timeit 'for i in xrange(1000000):' ' pass'
    +10 loops, best of 3: 27.8 msec per loop
    +
    +# Python 3
    +> python3 -m timeit 'for i in range(1000000):' ' pass'
    +10 loops, best of 3: 51.1 msec per loop
    +
    +> python3 -m timeit 'for i in xrange(1000000):' ' pass'
    +Traceback (most recent call last):
    +  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py", line 292, in main
    +    x = t.timeit(number)
    +  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py", line 178, in timeit
    +    timing = self.inner(it, self.timer)
    +  File "<timeit-src>", line 6, in inner
    +    for i in xrange(1000000):
    +NameError: name 'xrange' is not defined
    +
    + + +

    +
    +

    + +

    Raising exceptions

    + +

    [back to Python 2.x vs 3.x overview]

    + +

    Where Python 2 accepts both notations, the 'old' and the 'new' way, Python 3 chokes (and raises a SyntaxError in turn) if we don't enclose the exception argument in parentheses:

    + +


    + + + + +
    # Python 2
    +>>> raise IOError, "file error"
    +Traceback (most recent call last):
    +  File "<stdin>", line 1, in <module>
    +IOError: file error
    +>>> raise IOError("file error")
    +Traceback (most recent call last):
    +  File "<stdin>", line 1, in <module>
    +IOError: file error
    +
    +    
    +# Python 3    
    +>>> raise IOError, "file error"
    +  File "<stdin>", line 1
    +    raise IOError, "file error"
    +                 ^
    +SyntaxError: invalid syntax
    +>>> raise IOError("file error")
    +Traceback (most recent call last):
    +  File "<stdin>", line 1, in <module>
    +OSError: file error
    +
    + + +

    +
    +

    + +

    Handling exceptions

    + +

    [back to Python 2.x vs 3.x overview]

    + +

    Also the handling of exceptions has slightly changed in Python 3. Now, we have to use the as keyword!

    + + + + +
    # Python 2
    +>>> try:
    +...     blabla
    +... except NameError, err:
    +...     print err, '--> our error msg'
    +... 
    +name 'blabla' is not defined --> our error msg
    +
    +# Python 3
    +>>> try:
    +...     blabla
    +... except NameError as err:
    +...     print(err, '--> our error msg')
    +... 
    +name 'blabla' is not defined --> our error msg
    +
    + + +

    +
    +

    + +

    The next() function and .next() method

    + +

    [back to Python 2.x vs 3.x overview]

    + +

    Where you can use both function and method in Python 2.7.5, the next() function is all that remain in Python 3!

    + + + + +
    # Python 2
    +>>> my_generator = (letter for letter in 'abcdefg')
    +>>> my_generator.next()
    +'a'
    +>>> next(my_generator)
    +'b'
    +
    +# Python 3
    +>>> my_generator = (letter for letter in 'abcdefg')
    +>>> next(my_generator)
    +'a'
    +>>> my_generator.next()
    +Traceback (most recent call last):
    +  File "<stdin>", line 1, in <module>
    +AttributeError: 'generator' object has no attribute 'next'
    +
    + + +

    +
    +

    + +

    In Python 3.x for-loop variables don't leak into the global namespace anymore

    + +

    [back to Python 2.x vs 3.x overview]

    + +

    This goes back to a change that was made in Python 3.x and is described in What’s New In Python 3.0 as follows:

    + +

    "List comprehensions no longer support the syntactic form [... for var in item1, item2, ...]. Use [... for var in (item1, item2, ...)] instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a list() constructor, and in particular the loop control variables are no longer leaked into the surrounding scope."

    + +


    +[In:]

    + + + + +
    from platform import python_version
    +print('This code cell was executed in Python', python_version())
    +
    +i = 1
    +print([i for i in range(5)])
    +print(i, '-> i in global')
    +
    + + +


    +[Out:]

    + + + + +
    This code cell was executed in Python 3.3.5
    +[0, 1, 2, 3, 4]
    +1 -> i in global
    +
    + + +


    +
    +
    +[In:]

    + + + + +
    from platform import python_version
    +print 'This code cell was executed in Python', python_version()
    +
    +i = 1
    +print [i for i in range(5)]
    +print i, '-> i in global' 
    +
    + + +


    +[Out:]

    + + + + +
    This code cell was executed in Python 2.7.6
    +[0, 1, 2, 3, 4]
    +4 -> i in global
    +
    + + +

    +
    +

    + +

    Python 3.x prevents us from comparing unorderable types

    + +

    [back to Python 2.x vs 3.x overview]

    + +


    +[In:]

    + + + + +
    from platform import python_version
    +print 'This code cell was executed in Python', python_version()
    +
    +print [1, 2] > 'foo'
    +print (1, 2) > 'foo'
    +print [1, 2] > (1, 2)
    +
    + + +


    +[Out:]

    + + + + +
    This code cell was executed in Python 2.7.6
    +False
    +True
    +False
    +
    + + +


    +
    +

    + +

    [In:]

    + + + + +
    from platform import python_version
    +print('This code cell was executed in Python', python_version())
    +
    +print([1, 2] > 'foo')
    +print((1, 2) > 'foo')
    +print([1, 2] > (1, 2))
    +
    + + +

    [Out:]

    + + + + +
    This code cell was executed in Python 3.3.5
    +---------------------------------------------------------------------------
    +TypeError                                 Traceback (most recent call last)
    +<ipython-input-3-1d774c677f73> in <module>()
    +      2 print('This code cell was executed in Python', python_version())
    +      3 
    +----> 4 [1, 2] > 'foo'
    +      5 (1, 2) > 'foo'
    +      6 [1, 2] > (1, 2)
    +
    +TypeError: unorderable types: list() > str()
    +
    + + + \ No newline at end of file From f1ee8fa1ec0d51386e3b1def9f168b76158b686d Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 24 May 2014 12:06:51 -0400 Subject: [PATCH 072/248] html version --- .../key_differences_between_python_2_and_3.html | 17 +++++++++++------ .../key_differences_between_python_2_and_3.md | 5 +++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/tutorials/key_differences_between_python_2_and_3.html b/tutorials/key_differences_between_python_2_and_3.html index 431d7c9..34cc83a 100644 --- a/tutorials/key_differences_between_python_2_and_3.html +++ b/tutorials/key_differences_between_python_2_and_3.html @@ -171,12 +171,17 @@

    Key differences between Python 2 and 3


    -

    There are some good articles already that are summarizing the differences between Python 2 and 3, e.g.,
    -- https://wiki.python.org/moin/Python2orPython3 -- https://docs.python.org/3.0/whatsnew/3.0.html -- http://python3porting.com/differences.html -- https://docs.python.org/3/howto/pyporting.html
    -etc.

    +

    There are some good articles already that are summarizing the differences between Python 2 and 3, e.g.,

    + + + + +

    etc.

    But it might be still worthwhile, especially for Python newcomers, to take a look at some of those! (Note: the the code was executed in Python 3.4.0 and Python 2.7.5 and copied from interactive shell sessions.)

    diff --git a/tutorials/key_differences_between_python_2_and_3.md b/tutorials/key_differences_between_python_2_and_3.md index d7a7d78..972e667 100644 --- a/tutorials/key_differences_between_python_2_and_3.md +++ b/tutorials/key_differences_between_python_2_and_3.md @@ -13,10 +13,15 @@ last updated: 05/24/2014
    There are some good articles already that are summarizing the differences between Python 2 and 3, e.g., + - [https://wiki.python.org/moin/Python2orPython3](https://wiki.python.org/moin/Python2orPython3) + - [https://docs.python.org/3.0/whatsnew/3.0.html](https://docs.python.org/3.0/whatsnew/3.0.html) + - [http://python3porting.com/differences.html](http://python3porting.com/differences.html) + - [https://docs.python.org/3/howto/pyporting.html](https://docs.python.org/3/howto/pyporting.html) + etc. But it might be still worthwhile, especially for Python newcomers, to take a look at some of those! From 5c4a2e1b3ebf2de9efef32bb4f4924e6ade0d703 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 24 May 2014 19:48:52 -0400 Subject: [PATCH 073/248] completely overworked key differences between python 2 and 3 --- README.md | 2 +- ...ey_differences_between_python_2_and_3.html | 3774 ++++++++++++++--- ...y_differences_between_python_2_and_3.ipynb | 1301 ++++++ 3 files changed, 4577 insertions(+), 500 deletions(-) create mode 100644 tutorials/key_differences_between_python_2_and_3.ipynb diff --git a/README.md b/README.md index feebdc1..672788f 100755 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ A collection of useful scripts, tutorials, and other Python-related things - Python's scope resolution for variable names and the LEGB rule [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb?create=1)] -- Key differences between Python 2.x and Python 3.x [[HTML](http://htmlpreview.github.io/?https://github.com/rasbt/python_reference/blob/master/tutorials/key_differences_between_python_2_and_3.html)] +- Key differences between Python 2.x and Python 3.x [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/key_differences_between_python_2_and_3.ipynb?create=1)] - A thorough guide to SQLite database operations in Python [[Markdown](./sqlite3_howto/README.md)] diff --git a/tutorials/key_differences_between_python_2_and_3.html b/tutorials/key_differences_between_python_2_and_3.html index 34cc83a..fca0c8f 100644 --- a/tutorials/key_differences_between_python_2_and_3.html +++ b/tutorials/key_differences_between_python_2_and_3.html @@ -1,637 +1,3413 @@ - + - - - + + + + -Key differences between Python 2 and 3 + + + + + + + + + + -

    Sebastian Raschka
    -last updated: 05/24/2014

    - -


    - -

    This is a subsection of "A collection of not-so-obvious Python stuff you should know!"

    - -

    - -


    - -

    Key differences between Python 2 and 3

    - -


    - -

    There are some good articles already that are summarizing the differences between Python 2 and 3, e.g.,

    - +
    +
    + +
    +
    +
    +
    +
    +

    Sebastian Raschka

    +

    last updated 05/24/2014

    - - -

    etc.

    - -

    But it might be still worthwhile, especially for Python newcomers, to take a look at some of those! -(Note: the the code was executed in Python 3.4.0 and Python 2.7.5 and copied from interactive shell sessions.)

    - -

    - -


    - -

    Overview - Key differences between Python 2 and 3

    - +
    +
    +
    +
    +
    +
    +
    +
    +
    +I would be happy to hear your comments and suggestions.
    Please feel free to drop me a note via twitter, , or google+. +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    Key differences between Python 2.7.x and Python 3.x

    +
    +
    +
    + +
    +
    +
    +
    +
    +


    Many beginning Python users are wondering with which version of Python they should start. My answer to this question is usually something along the lines "just go with the version your favorite tutorial was written in, and check out the differences later on."

    +

    But what if you are starting a new project and have the choice to pick? I would say there is currently no "right" or "wrong" as long as both Python 2.7.x and Python 3.x support the libraries that you are planning to use. However, it is worthwhile to have a look at the major differences between those two most popular versions of Python to avoid common pitfalls when writing the code for either one of them, or if you are planning to port your project.

    +
    +
    +
    +
    +
    +
    +
    +
    +



    +
    +
    +
    +
    +
    +
    +
    +
    +

    Sections

    +
    +
    +
    + + +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +
    +
    +



    +
    +
    +
    +
    +
    +
    +
    +
    +

    The __future__ module

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Python 3.x introduced some Python 2-incompatible keywords and features that can be imported via the in-built __future__ module in Python 2. It is recommended to use __future__ imports it if you are planning Python 3.x support for your code. For example, if we want Python 3.x's integer division behavior in Python 2, we can import it via

    +
    from __future__ import division
    +

    More features that can be imported from the __future__ module are listed in the table below:

    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +feature + +optional in + +mandatory in + +effect +
    +nested_scopes + +2.1.0b1 + +2.2 + +PEP 227: Statically Nested Scopes +
    +generators + +2.2.0a1 + +2.3 + +PEP 255: Simple Generators +
    +division + +2.2.0a2 + +3.0 + +<PEP 238: Changing the Division Operator +
    +absolute_import + +2.5.0a1 + +3.0 + +PEP 328: Imports: Multi-Line and Absolute/Relative +
    +with_statement + +2.5.0a1 + +2.6 + +PEP 343: The “with” Statement +
    +print_function + +2.6.0a2 + +3.0 + +PEP 3105: Make print a function +
    +unicode_literals + +2.6.0a2 + +3.0 + +PEP 3112: Bytes literals in Python 3000 +

    -

    - -

    Unicode...

    - -

    [back to Python 2.x vs 3.x overview]

    - -

    - Python 2:

    - -

    We have ASCII str() types, separate unicode(), but no byte type

    - -

    - Python 3:

    - -

    Now, we finally have Unicode (utf-8) strings, and 2 byte classes: byte and bytearrays

    - -


    - - - - -
    #############
    -# Python 2
    -#############
    -
    ->>> type(unicode('is like a python3 str()'))
    -<type 'unicode'>
    -
    ->>> type(b'byte type does not exist')
    -<type 'str'>
    +
    +(Source: https://docs.python.org/2/library/future.html) +
    +
    +
    +
    +
    +
    +
    +In [1]: +
    +
    +
    +
    from platform import python_version
    +
    ->>> 'they are really' + b' the same' -'they are really the same' +
    +
    +
    + +
    +
    +
    +
    +
    +
    +



    +
    +
    +
    +
    +
    +
    +
    +
    +

    The print function

    +
    +
    +
    + + +
    +
    +
    +
    +
    +

    Very trivial, and the change in the print-syntax is probably the most widely known change, but still it is worth mentioning: Python 2's print function doesn't require the parantheses for invoking the print function (it wouldn't choke on them).
    In contrast, Python 3 would raise a SyntaxError if we called the print function the Python 2-way without the parentheses.

    +

    I think this change in Python 3 makes sense in terms of consistency, since it is the common way in Python to invoke function calls with its parentheses.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Python 2

    +
    +
    +
    +
    +
    +
    +In [3]: +
    +
    +
    +
    print 'Python', python_version()
    +print 'Hello, World!'
    +print('Hello, World!')
    +print "text", ; print 'print more text on the same line'
    +
    ->>> type(bytearray(b'bytearray oddly does exist though')) -<type 'bytearray'> +
    +
    +
    -############# -# Python 3 -############# +
    +
    ->>> print('strings are now utf-8 \u03BCnico\u0394é!') -strings are now utf-8 μnicoΔé! +
    +
    +
    +Python 2.7.6
    +Hello, World!
    +Hello, World!
    +text print more text on the same line
     
    ->>> type(b' and we have byte types for storing data')
    -<class 'bytes'>
    +
    +
    +
    ->>> type(bytearray(b'but also bytearrays for those who prefer them over strings')) -<class 'bytearray'> +
    +
    ->>> 'string' + b'bytes for data' -Traceback (most recent call last):s - File "<stdin>", line 1, in <module> -TypeError: Can't convert 'bytes' object to str implicitly +
    +
    +
    +
    +
    +
    +


    +
    +
    +
    +
    +
    +
    +
    +
    +

    Python 3

    +
    +
    +
    +
    +
    +
    +In [2]: +
    +
    +
    +
    print('Python', python_version())
    +print('Hello, World!')
    +
    +print("some text,", end="") 
    +print(' print more text on the same line')
     
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +Python 3.4.1
    +Hello, World!
    +some text, print more text on the same line
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +In [3]: +
    +
    +
    +
    print 'Hello, World!'
    +
    -

    -
    -

    - -

    The print statement

    +
    +
    +
    + +
    +
    + + +
    +
    +
    +  File "<ipython-input-3-139a7c5835bd>", line 1
    +    print 'Hello, World!'
    +                        ^
    +SyntaxError: invalid syntax
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +



    +
    +
    +
    +
    +
    +
    +
    +
    +

    Integer division

    +
    +
    +
    + + +
    +
    +
    +
    +
    +

    This change is particularly dangerous if you are porting code, or if you are executing Python 3 code in Python 2, since the change in integer-division behavior can often go unnoticed (it doesn't raise a SyntaxError).
    So, I still tend to use a float(3)/2 or 3/2.0 instead of a 3/2 in my Python 3 scripts to save the Python 2 guys some trouble (and vice versa, I recommend a from __future__ import division in your Python 2 scripts).

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Python 2

    +
    +
    +
    +
    +
    +
    +In [4]: +
    +
    +
    +
    print 'Python', python_version()
    +print '3 / 2 =', 3 / 2
    +print '3 // 2 =', 3 // 2
    +print '3 / 2.0 =', 3 / 2.0
    +print '3 // 2.0 =', 3 // 2.0
    +
    -

    [back to Python 2.x vs 3.x overview]

    +
    +
    +
    -

    Very trivial, but this change makes sense, Python 3 now only accepts prints with proper parentheses - just like the other function calls ...

    +
    +
    -


    - +
    +
    +
    +Python 2.7.6
    +3 / 2 = 1
    +3 // 2 = 1
    +3 / 2.0 = 1.5
    +3 // 2.0 = 1.0
     
    +
    +
    +
    -
    # Python 2
    ->>> print 'Hello, World!'
    -Hello, World!
    ->>> print('Hello, World!')
    -Hello, World!
    +
    +
    -# Python 3 ->>> print('Hello, World!') -Hello, World! ->>> print 'Hello, World!' - File "<stdin>", line 1 - print 'Hello, World!' - ^ -SyntaxError: invalid syntax +
    +
    +
    +
    +
    +
    +


    +
    +
    +
    +
    +
    +
    +
    +
    +

    Python 3

    +
    +
    +
    +
    +
    +
    +In [4]: +
    +
    +
    +
    print('Python', python_version())
    +print('3 / 2 =', 3 / 2)
    +print('3 // 2 =', 3 // 2)
    +print('3 / 2.0 =', 3 / 2.0)
    +print('3 // 2.0 =', 3 // 2.0)
     
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +Python 3.4.1
    +3 / 2 = 1.5
    +3 // 2 = 1
    +3 / 2.0 = 1.5
    +3 // 2.0 = 1.0
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +



    +
    +
    +
    +
    +
    +
    +
    +
    +

    xrange

    +
    +
    +
    + + +
    +
    +
    +
    +
    +

    The usage of xrange() is very popular in Python 2.x for creating an iterable object, e.g., in a for-loop or list/set-dictionary-comprehension.
    The behavior was quite similar to a generator (i.e., "lazy evaluation"), but here the xrange-iterable is not exhaustible - meaning, you could iterate over it infinitely.

    +

    Thanks to its "lazy-evaluation", the advantage of the regular range() is that xrange() is generally faster if you have to iterate over it only once (e.g., in a for-loop). However, in contrast to 1-time iterations, it is not recommended if you repeat the iteration multiple times, since the generation happens every time from scratch!

    +

    In Python 3, the range() was implemented like the xrange() function so that a dedicated xrange() function does not exist anymore (xrange() raises a NameError in Python 3).

    +
    +
    +
    +
    +
    +
    +In [5]: +
    +
    +
    +
    import timeit
    +
    +n = 10000
    +def test_range(n):
    +    for i in range(n):
    +        pass
    +    
    +def test_xrange(n):
    +    for i in xrange(n):
    +        pass    
    +
    -


    - -

    And if we want to print the output of 2 consecutive print functions on the same line, you would use a comma in Python 2, and a end="" in Python 3:

    +
    +
    +
    +
    +
    +
    +
    +
    +


    +
    +
    +
    +
    +
    +
    +
    +
    +

    Python 2

    +
    +
    +
    +
    +
    +
    +In [6]: +
    +
    +
    +
    print 'Python', python_version()
    +
    +print '\ntiming range()'
    +%timeit test_range(n)
    +
    +print '\n\ntiming xrange()'
    +%timeit test_xrange(n)
    +
    - +
    +
    +
    +
    +
    -
    # Python 2
    ->>> print "line 1", ; print 'same line'
    -line 1 same line
     
    -# Python 3
    ->>> print("line 1", end="") ; print (" same line")
    -line 1 same line
    -
    +
    +
    +
    +Python 2.7.6
     
    +timing range()
    +1000 loops, best of 3: 433 µs per loop
     
    -

    -
    -

    -

    Integer division

    +timing xrange() +1000 loops, best of 3: 350 µs per loop -

    [back to Python 2.x vs 3.x overview]

    +
    +
    +
    -

    This is a pretty dangerous thing if you are porting code, or executing Python 3 code in Python 2 since the change in integer-division behavior can often go unnoticed.
    -So, I still tend to use a float(3)/2 or 3/2.0 instead of a 3/2 in my Python 3 scripts to save the Python 2 guys some trouble ... (PS: and vice versa, you can from __future__ import division in your Python 2 scripts).

    +
    +
    +
    +
    +
    +
    +
    +


    - - - - -
    # Python 2
    ->>> 3 / 2
    -1
    ->>> 3 // 2
    -1
    ->>> 3 / 2.0
    -1.5
    ->>> 3 // 2.0
    -1.0
    -
    -# Python 3
    ->>> 3 / 2
    -1.5
    ->>> 3 // 2
    -1
    ->>> 3 / 2.0
    -1.5
    ->>> 3 // 2.0
    -1.0
    +
    +
    +
    +
    +
    +
    +
    +
    +

    Python 3

    +
    +
    +
    +
    +
    +
    +In [7]: +
    +
    +
    +
    print('Python', python_version())
    +
    +print('\ntiming range()')
    +%timeit test_range(n)
     
    +
    +
    +
    -

    -
    -

    - -

    xrange()

    - -

    [back to Python 2.x vs 3.x overview]

    +
    +
    -

    xrange() was pretty popular in Python 2.x if you wanted to create an iterable object. The behavior was quite similar to a generator ('lazy evaluation'), but you could iterate over it infinitely. The advantage was that it was generally faster than range() (e.g., in a for-loop) - not if you had to iterate over the list multiple times, since the generation happens every time from scratch!
    -In Python 3, the range() was implemented like the xrange() function so that a dedicated xrange() function does not exist anymore.

    - +
    +
    +
    +Python 3.4.1
     
    +timing range()
    +1000 loops, best of 3: 520 µs per loop
     
    -
    # Python 2
    -> python -m timeit 'for i in range(1000000):' ' pass'
    -10 loops, best of 3: 66 msec per loop
    +
    +
    +
    - > python -m timeit 'for i in xrange(1000000):' ' pass' -10 loops, best of 3: 27.8 msec per loop +
    +
    -# Python 3 -> python3 -m timeit 'for i in range(1000000):' ' pass' -10 loops, best of 3: 51.1 msec per loop - -> python3 -m timeit 'for i in xrange(1000000):' ' pass' -Traceback (most recent call last): - File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py", line 292, in main - x = t.timeit(number) - File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py", line 178, in timeit - timing = self.inner(it, self.timer) - File "<timeit-src>", line 6, in inner - for i in xrange(1000000): -NameError: name 'xrange' is not defined +
    +
    +
    +
    +In [8]: +
    +
    +
    +
    print(xrange(10))
     
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +---------------------------------------------------------------------------
    +NameError                                 Traceback (most recent call last)
    +<ipython-input-8-5d8f9b79ea70> in <module>()
    +----> 1 print(xrange(10))
    +
    +NameError: name 'xrange' is not defined
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +



    +
    +
    +
    +
    +
    +
    +
    +
    +

    Raising exceptions

    +
    +
    +
    + + +
    +
    +
    +
    +
    +

    Where Python 2 accepts both notations, the 'old' and the 'new' syntax, Python 3 chokes (and raises a SyntaxError in turn) if we don't enclose the exception argument in parentheses:

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Python 2

    +
    +
    +
    +
    +
    +
    +In [7]: +
    +
    +
    +
    print 'Python', python_version()
    +
    -

    -
    -

    - -

    Raising exceptions

    - -

    [back to Python 2.x vs 3.x overview]

    +
    +
    +
    -

    Where Python 2 accepts both notations, the 'old' and the 'new' way, Python 3 chokes (and raises a SyntaxError in turn) if we don't enclose the exception argument in parentheses:

    +
    +
    -


    - +
    +
    +
    +Python 2.7.6
     
    +
    +
    +
    -
    # Python 2
    ->>> raise IOError, "file error"
    -Traceback (most recent call last):
    -  File "<stdin>", line 1, in <module>
    -IOError: file error
    ->>> raise IOError("file error")
    -Traceback (most recent call last):
    -  File "<stdin>", line 1, in <module>
    -IOError: file error
    +
    +
    - -# Python 3 ->>> raise IOError, "file error" - File "<stdin>", line 1 - raise IOError, "file error" - ^ -SyntaxError: invalid syntax ->>> raise IOError("file error") -Traceback (most recent call last): - File "<stdin>", line 1, in <module> -OSError: file error +
    +
    +
    +
    +In [8]: +
    +
    +
    +
    raise IOError, "file error"
     
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +---------------------------------------------------------------------------
    +IOError                                   Traceback (most recent call last)
    +<ipython-input-8-25f049caebb0> in <module>()
    +----> 1 raise IOError, "file error"
    +
    +IOError: file error
    +
    +
    + +
    +
    + +
    +
    +
    +
    +In [9]: +
    +
    +
    +
    raise IOError("file error")
    +
    -

    -
    -

    - -

    Handling exceptions

    +
    +
    +
    -

    [back to Python 2.x vs 3.x overview]

    +
    +
    -

    Also the handling of exceptions has slightly changed in Python 3. Now, we have to use the as keyword!

    - +
    +
    +
    +---------------------------------------------------------------------------
    +IOError                                   Traceback (most recent call last)
    +<ipython-input-9-6f1c43f525b2> in <module>()
    +----> 1 raise IOError("file error")
     
    +IOError: file error
    +
    +
    -
    # Python 2
    ->>> try:
    -...     blabla
    -... except NameError, err:
    -...     print err, '--> our error msg'
    -... 
    -name 'blabla' is not defined --> our error msg
    +
    +
    -# Python 3 ->>> try: -... blabla -... except NameError as err: -... print(err, '--> our error msg') -... -name 'blabla' is not defined --> our error msg +
    +
    +
    +
    +
    +
    +


    +
    +
    +
    +
    +
    +
    +
    +
    +

    Python 3

    +
    +
    +
    +
    +
    +
    +In [9]: +
    +
    +
    +
    print('Python', python_version())
     
    +
    +
    +
    -

    -
    -

    +
    +
    -

    The next() function and .next() method

    -

    [back to Python 2.x vs 3.x overview]

    +
    +
    +
    +Python 3.4.1
     
    -

    Where you can use both function and method in Python 2.7.5, the next() function is all that remain in Python 3!

    +
    +
    +
    - +
    +
    - -
    # Python 2
    ->>> my_generator = (letter for letter in 'abcdefg')
    ->>> my_generator.next()
    -'a'
    ->>> next(my_generator)
    -'b'
    -
    -# Python 3
    ->>> my_generator = (letter for letter in 'abcdefg')
    ->>> next(my_generator)
    -'a'
    ->>> my_generator.next()
    -Traceback (most recent call last):
    -  File "<stdin>", line 1, in <module>
    -AttributeError: 'generator' object has no attribute 'next'
    +
    +
    +
    +
    +In [10]: +
    +
    +
    +
    raise IOError, "file error"
     
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +  File "<ipython-input-10-25f049caebb0>", line 1
    +    raise IOError, "file error"
    +                 ^
    +SyntaxError: invalid syntax
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    The proper way to raise an exception in Python 3:

    +
    +
    +
    +
    +
    +
    +In [11]: +
    +
    +
    +
    print('Python', python_version())
    +raise IOError("file error")
    +
    -

    -
    -

    - -

    In Python 3.x for-loop variables don't leak into the global namespace anymore

    - -

    [back to Python 2.x vs 3.x overview]

    +
    +
    +
    + +
    +
    + + +
    +
    +
    +Python 3.4.1
    +
    +
    +
    +
    + +
    +
    +
    +---------------------------------------------------------------------------
    +OSError                                   Traceback (most recent call last)
    +<ipython-input-11-c350544d15da> in <module>()
    +      1 print('Python', python_version())
    +----> 2 raise IOError("file error")
    +
    +OSError: file error
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +



    +
    +
    +
    +
    +
    +
    +
    +
    +

    Handling exceptions

    +
    +
    +
    + + +
    +
    +
    +
    +
    +

    Also the handling of exceptions has slightly changed in Python 3. In Python 3 we have to use the "as" keyword now

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Python 2

    +
    +
    +
    +
    +
    +
    +In [10]: +
    +
    +
    +
    print 'Python', python_version()
    +try:
    +    let_us_cause_a_NameError
    +except NameError, err:
    +    print err, '--> our error message'
    +
    -

    This goes back to a change that was made in Python 3.x and is described in What’s New In Python 3.0 as follows:

    +
    +
    +
    -

    "List comprehensions no longer support the syntactic form [... for var in item1, item2, ...]. Use [... for var in (item1, item2, ...)] instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a list() constructor, and in particular the loop control variables are no longer leaked into the surrounding scope."

    +
    +
    -


    -[In:]

    - +
    +
    +
    +Python 2.7.6
    +name 'let_us_cause_a_NameError' is not defined --> our error message
     
    +
    +
    +
    -
    from platform import python_version
    -print('This code cell was executed in Python', python_version())
    +
    +
    -i = 1 -print([i for i in range(5)]) -print(i, '-> i in global') +
    +
    +
    +
    +
    +
    +


    +
    +
    +
    +
    +
    +
    +
    +
    +

    Python 3

    +
    +
    +
    +
    +
    +
    +In [12]: +
    +
    +
    +
    print('Python', python_version())
    +try:
    +    let_us_cause_a_NameError
    +except NameError as err:
    +    print(err, '--> our error message')
     
    - -


    -[Out:]

    - - - - -
    This code cell was executed in Python 3.3.5
    -[0, 1, 2, 3, 4]
    -1 -> i in global
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +Python 3.4.1
    +name 'let_us_cause_a_NameError' is not defined --> our error message
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +



    +
    +
    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +
    +
    +

    The next() function and .next() method

    +
    +
    +
    + + +
    +
    +
    +
    +
    +

    Since next() (.next()) is such a commonly used function (method), this is another syntax change (or rather change in implementation) that is worth mentioning: where you can use both the function and method syntax in Python 2.7.5, the next() function is all that remains in Python 3 (calling the .next() method raises an AttributeError).

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Python 2

    +
    +
    +
    +
    +
    +
    +In [11]: +
    +
    +
    +
    print 'Python', python_version()
    +
    +my_generator = (letter for letter in 'abcdefg')
    +
    +next(my_generator)
    +my_generator.next()
     
    +
    +
    +
    -


    -
    -
    -[In:]

    +
    +
    - +
    +
    +
    +Python 2.7.6
     
    -
    from platform import python_version
    -print 'This code cell was executed in Python', python_version()
    +
    +
    +
    -i = 1 -print [i for i in range(5)] -print i, '-> i in global' -
  2. =uR)0QCw+D9&uD;1J8-w0ROgK|>u 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

+
+ Out[11]:
-


-[Out:]

+
+
+'b'
+
+
- +
+ + -
This code cell was executed in Python 2.7.6
-[0, 1, 2, 3, 4]
-4 -> i in global
+
+
+
+
+
+
+


+
+
+
+
+
+
+
+
+

Python 3

+
+
+
+
+
+
+In [13]: +
+
+
+
print('Python', python_version())
+
+my_generator = (letter for letter in 'abcdefg')
+
+next(my_generator)
 
+
+
+
-

-
-

- -

Python 3.x prevents us from comparing unorderable types

- -

[back to Python 2.x vs 3.x overview]

+
+
-


-[In:]

- +
+
+
+Python 3.4.1
 
+
+
+
-
from platform import python_version
-print 'This code cell was executed in Python', python_version()
+
+ Out[13]:
-print [1, 2] > 'foo' -print (1, 2) > 'foo' -print [1, 2] > (1, 2) -
+
+
+'a'
+
+
-


-[Out:]

+
- +
+
+ +
+
+
+In [14]: +
+
+
+
my_generator.next()
+
-
This code cell was executed in Python 2.7.6
-False
-True
-False
+
+
+
+ +
+
+ + +
+
+
+---------------------------------------------------------------------------
+AttributeError                            Traceback (most recent call last)
+<ipython-input-14-125f388bb61b> in <module>()
+----> 1 my_generator.next()
+
+AttributeError: 'generator' object has no attribute 'next'
+
+
+ +
+
+ +
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+

For-loop variables and the global namespace leak

+
+
+
+ + +
+
+
+
+
+

Good news is: In Python 3.x for-loop variables don't leak into the global namespace anymore!

+

This goes back to a change that was made in Python 3.x and is described in What’s New In Python 3.0 as follows:

+

"List comprehensions no longer support the syntactic form [... for var in item1, item2, ...]. Use [... for var in (item1, item2, ...)] instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a list() constructor, and in particular the loop control variables are no longer leaked into the surrounding scope."

+
+
+
+
+
+
+
+
+

Python 2

+
+
+
+
+
+
+In [12]: +
+
+
+
print 'Python', python_version()
+
+i = 1
+print 'before: i =', i
+
+print 'comprehension: ', [i for i in range(5)]
+
+print 'after: i =', i
 
+
+
+
-


-
-

+
+
-

[In:]

- +
+
+
+Python 2.7.6
+before: i = 1
+comprehension:  [0, 1, 2, 3, 4]
+after: i = 4
 
+
+
+
-
from platform import python_version
-print('This code cell was executed in Python', python_version())
+
+
-print([1, 2] > 'foo') -print((1, 2) > 'foo') -print([1, 2] > (1, 2)) +
+
+
+
+
+
+


+
+
+
+
+
+
+
+
+

Python 3

+
+
+
+
+
+
+In [15]: +
+
+
+
print('Python', python_version())
+
+i = 1
+print('before: i =', i)
+
+print('comprehension:', [i for i in range(5)])
+
+print('after: i =', i)
 
+
+
+
+ +
+
+ + +
+
+
+Python 3.4.1
+before: i = 1
+comprehension: [0, 1, 2, 3, 4]
+after: i = 1
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+

Comparing unorderable types

+
+
+
+ + +
+
+
+
+
+

Another nice change in Python 3 is that a TypeError is raised as warning if we try to compare unorderable types.

+
+
+
+
+
+
+
+
+

Python 2

+
+
+
+
+
+
+In []: +
+
+
+
print 'Python', python_version()
+print "[1, 2] > 'foo' = ", [1, 2] > 'foo'
+print "(1, 2) > 'foo' = ", (1, 2) > 'foo'
+print "[1, 2] > (1, 2) = ", [1, 2] > (1, 2)
+
-

[Out:]

- - - - -
This code cell was executed in Python 3.3.5
----------------------------------------------------------------------------
-TypeError                                 Traceback (most recent call last)
-<ipython-input-3-1d774c677f73> in <module>()
-      2 print('This code cell was executed in Python', python_version())
-      3 
-----> 4 [1, 2] > 'foo'
-      5 (1, 2) > 'foo'
-      6 [1, 2] > (1, 2)
+
+
+
-TypeError: unorderable types: list() > str() +
+
+
+
+
+
+


+
+
+
+
+
+
+
+
+

Python 3

+
+
+
+
+
+
+In [16]: +
+
+
+
print('Python', python_version())
+print("[1, 2] > 'foo' = ", [1, 2] > 'foo')
+print("(1, 2) > 'foo' = ", (1, 2) > 'foo')
+print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2))
 
+
+
+
+ +
+
+ + +
+
+
+Python 3.4.1
+
+
+
+
+ +
+
+
+---------------------------------------------------------------------------
+TypeError                                 Traceback (most recent call last)
+<ipython-input-16-a9031729f4a0> in <module>()
+      1 print('Python', python_version())
+----> 2 print("[1, 2] > 'foo' = ", [1, 2] > 'foo')
+      3 print("(1, 2) > 'foo' = ", (1, 2) > 'foo')
+      4 print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2))
+
+TypeError: unorderable types: list() > str()
+
+
+ +
+
+ +
+
+
+
+
+
+



+
+
+
+
+
+
+
+
+ +
+
+
+ + +
+
+
+
+
+

Here is a list of some good articles concerning Python 2 and 3 that I would recommend as a follow-up:

+ +
+
+
+
+
- \ No newline at end of file + diff --git a/tutorials/key_differences_between_python_2_and_3.ipynb b/tutorials/key_differences_between_python_2_and_3.ipynb new file mode 100644 index 0000000..3486254 --- /dev/null +++ b/tutorials/key_differences_between_python_2_and_3.ipynb @@ -0,0 +1,1301 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:b9ba6aad52c6458ba2d9ee8691fcace515fc01f1029499253de1f48cc664fbc0" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Sebastian Raschka](http://sebastianraschka.com) \n", + "\n", + "last updated 05/24/2014\n", + "\n", + "- [Open in IPython nbviewer](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/key_differences_between_python_2_and_3.ipynb?create=1) \n", + "\n", + "- [Link to this IPython notebook on Github](https://github.com/rasbt/python_reference/blob/master/tutorials/key_differences_between_python_2_and_3.ipynb) \n", + "\n", + "- [Link to the GitHub repository python_reference](https://github.com/rasbt/python_reference)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "I would be happy to hear your comments and suggestions. \n", + "Please feel free to drop me a note via\n", + "[twitter](https://twitter.com/rasbt), [email](mailto:bluewoodtree@gmail.com), or [google+](https://plus.google.com/118404394130788869227).\n", + "
" + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Key differences between Python 2.7.x and Python 3.x" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "Many beginning Python users are wondering with which version of Python they should start. My answer to this question is usually something along the lines \"just go with the version your favorite tutorial was written in, and check out the differences later on.\"\n", + "\n", + "But what if you are starting a new project and have the choice to pick? I would say there is currently no \"right\" or \"wrong\" as long as both Python 2.7.x and Python 3.x support the libraries that you are planning to use. However, it is worthwhile to have a look at the major differences between those two most popular versions of Python to avoid common pitfalls when writing the code for either one of them, or if you are planning to port your project." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Sections" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "- [Using the `__future__` module](#future_module)\n", + "\n", + "- [The print function](#The-print-function)\n", + "\n", + "- [Integer division](#Integer-division)\n", + "\n", + "- [xrange](#xrange)\n", + "\n", + "- [Raising exceptions](#Raising-exceptions)\n", + "\n", + "- [Handling exceptions](#Handling-exceptions)\n", + "\n", + "- [The next() function and .next() method](#The-next-function-and-next-method)\n", + "\n", + "- [For-loop variables and the global namespace leak](#For-loop-variables-and-the-global-namespace-leak)\n", + "\n", + "- [Comparing unorderable types](#Comparing-unorderable-types)\n", + "\n", + "- [More articles about Python 2 and Python 3](#More-articles-about-Python-2-and-Python-3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The `__future__` module" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python 3.x introduced some Python 2-incompatible keywords and features that can be imported via the in-built `__future__` module in Python 2. It is recommended to use `__future__` imports it if you are planning Python 3.x support for your code. For example, if we want Python 3.x's integer division behavior in Python 2, we can import it via\n", + "\n", + " from __future__ import division\n", + " \n", + "More features that can be imported from the `__future__` module are listed in the table below:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
featureoptional inmandatory ineffect
nested_scopes2.1.0b12.2PEP 227:\n", + "Statically Nested Scopes
generators2.2.0a12.3PEP 255:\n", + "Simple Generators
division2.2.0a23.0<PEP 238:\n", + "Changing the Division Operator
absolute_import2.5.0a13.0PEP 328:\n", + "Imports: Multi-Line and Absolute/Relative
with_statement2.5.0a12.6PEP 343:\n", + "The “with” Statement
print_function2.6.0a23.0PEP 3105:\n", + "Make print a function
unicode_literals2.6.0a23.0PEP 3112:\n", + "Bytes literals in Python 3000
\n", + "
\n", + "
(Source: [https://docs.python.org/2/library/__future__.html](https://docs.python.org/2/library/__future__.html#module-__future__))
" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from platform import python_version" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "The print function" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Very trivial, and the change in the print-syntax is probably the most widely known change, but still it is worth mentioning: Python 2's print function doesn't require the parantheses for invoking the print function (it wouldn't choke on them). \n", + "In contrast, Python 3 would raise a `SyntaxError` if we called the print function the Python 2-way without the parentheses. \n", + "\n", + "I think this change in Python 3 makes sense in terms of consistency, since it is the common way in Python to invoke function calls with its parentheses." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'Python', python_version()\n", + "print 'Hello, World!'\n", + "print('Hello, World!')\n", + "print \"text\", ; print 'print more text on the same line'" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 2.7.6\n", + "Hello, World!\n", + "Hello, World!\n", + "text print more text on the same line\n" + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Python', python_version())\n", + "print('Hello, World!')\n", + "\n", + "print(\"some text,\", end=\"\") \n", + "print(' print more text on the same line')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 3.4.1\n", + "Hello, World!\n", + "some text, print more text on the same line\n" + ] + } + ], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'Hello, World!'" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (, line 1)", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m print 'Hello, World!'\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Integer division" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This change is particularly dangerous if you are porting code, or if you are executing Python 3 code in Python 2, since the change in integer-division behavior can often go unnoticed (it doesn't raise a `SyntaxError`). \n", + "So, I still tend to use a `float(3)/2` or `3/2.0` instead of a `3/2` in my Python 3 scripts to save the Python 2 guys some trouble (and vice versa, I recommend a `from __future__ import division` in your Python 2 scripts)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'Python', python_version()\n", + "print '3 / 2 =', 3 / 2\n", + "print '3 // 2 =', 3 // 2\n", + "print '3 / 2.0 =', 3 / 2.0\n", + "print '3 // 2.0 =', 3 // 2.0" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 2.7.6\n", + "3 / 2 = 1\n", + "3 // 2 = 1\n", + "3 / 2.0 = 1.5\n", + "3 // 2.0 = 1.0\n" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Python', python_version())\n", + "print('3 / 2 =', 3 / 2)\n", + "print('3 // 2 =', 3 // 2)\n", + "print('3 / 2.0 =', 3 / 2.0)\n", + "print('3 // 2.0 =', 3 // 2.0)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 3.4.1\n", + "3 / 2 = 1.5\n", + "3 // 2 = 1\n", + "3 / 2.0 = 1.5\n", + "3 // 2.0 = 1.0\n" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "xrange" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " \n", + "The usage of `xrange()` is very popular in Python 2.x for creating an iterable object, e.g., in a for-loop or list/set-dictionary-comprehension. \n", + "The behavior was quite similar to a generator (i.e., \"lazy evaluation\"), but here the xrange-iterable is not exhaustible - meaning, you could iterate over it infinitely. \n", + "\n", + "\n", + "Thanks to its \"lazy-evaluation\", the advantage of the regular `range()` is that `xrange()` is generally faster if you have to iterate over it only once (e.g., in a for-loop). However, in contrast to 1-time iterations, it is not recommended if you repeat the iteration multiple times, since the generation happens every time from scratch! \n", + "\n", + "In Python 3, the `range()` was implemented like the `xrange()` function so that a dedicated `xrange()` function does not exist anymore (`xrange()` raises a `NameError` in Python 3)." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "\n", + "n = 10000\n", + "def test_range(n):\n", + " for i in range(n):\n", + " pass\n", + " \n", + "def test_xrange(n):\n", + " for i in xrange(n):\n", + " pass " + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'Python', python_version()\n", + "\n", + "print '\\ntiming range()'\n", + "%timeit test_range(n)\n", + "\n", + "print '\\n\\ntiming xrange()'\n", + "%timeit test_xrange(n)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 2.7.6\n", + "\n", + "timing range()\n", + "1000 loops, best of 3: 433 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "\n", + "timing xrange()\n", + "1000 loops, best of 3: 350 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Python', python_version())\n", + "\n", + "print('\\ntiming range()')\n", + "%timeit test_range(n)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 3.4.1\n", + "\n", + "timing range()\n", + "1000 loops, best of 3: 520 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 7 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print(xrange(10))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'xrange' 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[0;32m----> 1\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mNameError\u001b[0m: name 'xrange' is not defined" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Raising exceptions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "Where Python 2 accepts both notations, the 'old' and the 'new' syntax, Python 3 chokes (and raises a `SyntaxError` in turn) if we don't enclose the exception argument in parentheses:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'Python', python_version()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 2.7.6\n" + ] + } + ], + "prompt_number": 7 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "raise IOError, \"file error\"" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "IOError", + "evalue": "file error", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mIOError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mIOError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"file error\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mIOError\u001b[0m: file error" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "raise IOError(\"file error\")" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "IOError", + "evalue": "file error", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mIOError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mIOError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"file error\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mIOError\u001b[0m: file error" + ] + } + ], + "prompt_number": 9 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Python', python_version())" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 3.4.1\n" + ] + } + ], + "prompt_number": 9 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "raise IOError, \"file error\"" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (, line 1)", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m raise IOError, \"file error\"\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + ] + } + ], + "prompt_number": 10 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The proper way to raise an exception in Python 3:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Python', python_version())\n", + "raise IOError(\"file error\")" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 3.4.1\n" + ] + }, + { + "ename": "OSError", + "evalue": "file error", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mOSError\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[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Python'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpython_version\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mIOError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"file error\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mOSError\u001b[0m: file error" + ] + } + ], + "prompt_number": 11 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Handling exceptions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Also the handling of exceptions has slightly changed in Python 3. In Python 3 we have to use the \"`as`\" keyword now" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'Python', python_version()\n", + "try:\n", + " let_us_cause_a_NameError\n", + "except NameError, err:\n", + " print err, '--> our error message'" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 2.7.6\n", + "name 'let_us_cause_a_NameError' is not defined --> our error message\n" + ] + } + ], + "prompt_number": 10 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Python', python_version())\n", + "try:\n", + " let_us_cause_a_NameError\n", + "except NameError as err:\n", + " print(err, '--> our error message')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 3.4.1\n", + "name 'let_us_cause_a_NameError' is not defined --> our error message\n" + ] + } + ], + "prompt_number": 12 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "The next() function and .next() method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since `next()` (`.next()`) is such a commonly used function (method), this is another syntax change (or rather change in implementation) that is worth mentioning: where you can use both the function and method syntax in Python 2.7.5, the `next()` function is all that remains in Python 3 (calling the `.next()` method raises an `AttributeError`)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'Python', python_version()\n", + "\n", + "my_generator = (letter for letter in 'abcdefg')\n", + "\n", + "next(my_generator)\n", + "my_generator.next()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 2.7.6\n" + ] + }, + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 11, + "text": [ + "'b'" + ] + } + ], + "prompt_number": 11 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Python', python_version())\n", + "\n", + "my_generator = (letter for letter in 'abcdefg')\n", + "\n", + "next(my_generator)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 3.4.1\n" + ] + }, + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 13, + "text": [ + "'a'" + ] + } + ], + "prompt_number": 13 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "my_generator.next()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'generator' object has no attribute 'next'", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmy_generator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m: 'generator' object has no attribute 'next'" + ] + } + ], + "prompt_number": 14 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "For-loop variables and the global namespace leak" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Good news is: In Python 3.x for-loop variables don't leak into the global namespace anymore!\n", + "\n", + "This goes back to a change that was made in Python 3.x and is described in [What\u2019s New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html) as follows:\n", + "\n", + "\"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'Python', python_version()\n", + "\n", + "i = 1\n", + "print 'before: i =', i\n", + "\n", + "print 'comprehension: ', [i for i in range(5)]\n", + "\n", + "print 'after: i =', i" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 2.7.6\n", + "before: i = 1\n", + "comprehension: [0, 1, 2, 3, 4]\n", + "after: i = 4\n" + ] + } + ], + "prompt_number": 12 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Python', python_version())\n", + "\n", + "i = 1\n", + "print('before: i =', i)\n", + "\n", + "print('comprehension:', [i for i in range(5)])\n", + "\n", + "print('after: i =', i)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 3.4.1\n", + "before: i = 1\n", + "comprehension: [0, 1, 2, 3, 4]\n", + "after: i = 1\n" + ] + } + ], + "prompt_number": 15 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Comparing unorderable types" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another nice change in Python 3 is that a `TypeError` is raised as warning if we try to compare unorderable types." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'Python', python_version()\n", + "print \"[1, 2] > 'foo' = \", [1, 2] > 'foo'\n", + "print \"(1, 2) > 'foo' = \", (1, 2) > 'foo'\n", + "print \"[1, 2] > (1, 2) = \", [1, 2] > (1, 2)" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Python', python_version())\n", + "print(\"[1, 2] > 'foo' = \", [1, 2] > 'foo')\n", + "print(\"(1, 2) > 'foo' = \", (1, 2) > 'foo')\n", + "print(\"[1, 2] > (1, 2) = \", [1, 2] > (1, 2))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 3.4.1\n" + ] + }, + { + "ename": "TypeError", + "evalue": "unorderable types: list() > str()", + "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[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Python'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpython_version\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"[1, 2] > 'foo' = \"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m'foo'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"(1, 2) > 'foo' = \"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m'foo'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"[1, 2] > (1, 2) = \"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: unorderable types: list() > str()" + ] + } + ], + "prompt_number": 16 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "
" + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "More articles about Python 2 and Python 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is a list of some good articles concerning Python 2 and 3 that I would recommend as a follow-up:\n", + "\n", + "- [Should I use Python 2 or Python 3 for my development activity?](https://wiki.python.org/moin/Python2orPython3)\n", + "\n", + "- [What\u2019s New In Python 3.0](https://docs.python.org/3.0/whatsnew/3.0.html)\n", + "\n", + "- [Porting to Python 3](http://python3porting.com/differences.html)\n", + "\n", + "- [Porting Python 2 Code to Python 3](https://docs.python.org/3/howto/pyporting.html) \n", + "\n", + "- [How keep Python 3 moving forward](http://nothingbutsnark.svbtle.com/my-view-on-the-current-state-of-python-3)\n" + ] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file From 24c5642d240ce9ab3db7acd138a2e5dd2131099a Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 24 May 2014 20:06:31 -0400 Subject: [PATCH 074/248] added unicode section --- ...ey_differences_between_python_2_and_3.html | 352 ++++++++++++++++++ ...y_differences_between_python_2_and_3.ipynb | 235 +++++++++++- 2 files changed, 586 insertions(+), 1 deletion(-) diff --git a/tutorials/key_differences_between_python_2_and_3.html b/tutorials/key_differences_between_python_2_and_3.html index fca0c8f..815982a 100644 --- a/tutorials/key_differences_between_python_2_and_3.html +++ b/tutorials/key_differences_between_python_2_and_3.html @@ -1754,6 +1754,7 @@

Sections

Using the __future__ module

  • The print function

  • Integer division

  • +
  • Unicode

  • xrange

  • Raising exceptions

  • Handling exceptions

  • @@ -2250,6 +2251,357 @@

    Python 3

    + +
    +
    +
    +
    +
    +



    +
    +
    +
    +
    +
    +
    +
    +
    +

    Unicode

    +
    +
    +
    + + +
    +
    +
    +
    +
    +

    Python 2 has ASCII str() types, separate unicode(), but no byte type.

    +

    Now, in Python 3, we finally have Unicode (utf-8) strings, and 2 byte classes: byte and bytearrays.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Python 2

    +
    +
    +
    +
    +
    +
    +In [2]: +
    +
    +
    +
    print 'Python', python_version()
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    +Python 2.7.6
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +In [3]: +
    +
    +
    +
    print type(unicode('this is like a python3 str type'))
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    +<type 'unicode'>
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +In [4]: +
    +
    +
    +
    print type(b'byte type does not exist')
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    +<type 'str'>
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +In [5]: +
    +
    +
    +
    print 'they are really' + b' the same'
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    +they are really the same
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +In [7]: +
    +
    +
    +
    print type(bytearray(b'bytearray oddly does exist though'))
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    +<type 'bytearray'>
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +


    +
    +
    +
    +
    +
    +
    +
    +
    +

    Python 3

    +
    +
    +
    +
    +
    +
    +In [6]: +
    +
    +
    +
    print('Python', python_version())
    +print('strings are now utf-8 \u03BCnico\u0394é!')
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    +Python 3.4.1
    +strings are now utf-8 μnicoΔé!
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +In [8]: +
    +
    +
    +
    print('Python', python_version(), end="")
    +print(' has', type(b' bytes for storing data'))
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    +Python 3.4.1 has <class 'bytes'>
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +In [11]: +
    +
    +
    +
    print('and Python', python_version(), end="")
    +print(' also has', type(bytearray(b'bytearrays')))
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    +and Python 3.4.1 also has <class 'bytearray'>
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +In [13]: +
    +
    +
    +
    'note that we cannot add a string' + b'bytes for data'
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    +---------------------------------------------------------------------------
    +TypeError                                 Traceback (most recent call last)
    +<ipython-input-13-d3e8942ccf81> in <module>()
    +----> 1 'note that we cannot add a string' + b'bytes for data'
    +
    +TypeError: Can't convert 'bytes' object to str implicitly
    +
    +
    + +
    +
    +
    diff --git a/tutorials/key_differences_between_python_2_and_3.ipynb b/tutorials/key_differences_between_python_2_and_3.ipynb index 3486254..92ee2ab 100644 --- a/tutorials/key_differences_between_python_2_and_3.ipynb +++ b/tutorials/key_differences_between_python_2_and_3.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:b9ba6aad52c6458ba2d9ee8691fcace515fc01f1029499253de1f48cc664fbc0" + "signature": "sha256:bce64714d9af46abdf20f98e6b5b0b51cd1240612c1dbd99a40d812aea22dcdf" }, "nbformat": 3, "nbformat_minor": 0, @@ -79,6 +79,8 @@ "\n", "- [Integer division](#Integer-division)\n", "\n", + "- [Unicode](#Unicode)\n", + "\n", "- [xrange](#xrange)\n", "\n", "- [Raising exceptions](#Raising-exceptions)\n", @@ -434,6 +436,237 @@ "
    " ] }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Unicode" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python 2 has ASCII `str()` types, separate `unicode()`, but no `byte` type. \n", + "\n", + "Now, in Python 3, we finally have Unicode (utf-8) `str`ings, and 2 byte classes: `byte` and `bytearray`s." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'Python', python_version()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 2.7.6\n" + ] + } + ], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print type(unicode('this is like a python3 str type'))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print type(b'byte type does not exist')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'they are really' + b' the same'" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "they are really the same\n" + ] + } + ], + "prompt_number": 5 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print type(bytearray(b'bytearray oddly does exist though'))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Python', python_version())\n", + "print('strings are now utf-8 \\u03BCnico\\u0394\u00e9!')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 3.4.1\n", + "strings are now utf-8 \u03bcnico\u0394\u00e9!\n" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Python', python_version(), end=\"\")\n", + "print(' has', type(b' bytes for storing data'))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 3.4.1 has \n" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('and Python', python_version(), end=\"\")\n", + "print(' also has', type(bytearray(b'bytearrays')))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "and Python 3.4.1 also has \n" + ] + } + ], + "prompt_number": 11 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "'note that we cannot add a string' + b'bytes for data'" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "Can't convert 'bytes' object to str implicitly", + "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[0;32m----> 1\u001b[0;31m \u001b[0;34m'note that we cannot add a string'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34mb'bytes for data'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m: Can't convert 'bytes' object to str implicitly" + ] + } + ], + "prompt_number": 13 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, { "cell_type": "heading", "level": 2, From f9d17a4f94b9e101f3789160c875ae8ffdb4e017 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 24 May 2014 20:40:01 -0400 Subject: [PATCH 075/248] added input() section --- ...ey_differences_between_python_2_and_3.html | 121 +++++++++++++++++- ...y_differences_between_python_2_and_3.ipynb | 105 ++++++++++++++- 2 files changed, 223 insertions(+), 3 deletions(-) diff --git a/tutorials/key_differences_between_python_2_and_3.html b/tutorials/key_differences_between_python_2_and_3.html index 815982a..d4311cb 100644 --- a/tutorials/key_differences_between_python_2_and_3.html +++ b/tutorials/key_differences_between_python_2_and_3.html @@ -1761,6 +1761,7 @@

    Sections

    The next() function and .next() method

  • For-loop variables and the global namespace leak

  • Comparing unorderable types

  • +
  • Parsing user inputs via input()

  • More articles about Python 2 and Python 3

  • @@ -1926,7 +1927,7 @@

    The __future__ module

    -In [1]: +In [3]:
    @@ -3714,6 +3715,124 @@

    Python 3

    +
    +
    +
    +
    +
    +
    +



    +
    +
    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Parsing user inputs via input()

    +
    +
    +
    + + +
    +
    +
    +
    +
    +

    Fortunately, the input() function was fixed in Python 3 so that it always stores the user inputs as str objects. In order to avoid the dangerous behavior in Python 2 to read in other types than strings, we have to use raw_input() instead.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Python 2

    +
    +
    +
    +
    +
    +
    +
    +
    +
    Python 2.7.6 
    +[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
    +Type "help", "copyright", "credits" or "license" for more information.
    +
    +>>> my_input = input('enter a number: ')
    +
    +enter a number: 123
    +
    +>>> type(my_input)
    +<type 'int'>
    +
    +>>> my_input = raw_input('enter a number: ')
    +
    +enter a number: 123
    +
    +>>> type(my_input)
    +<type 'str'>
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +


    +
    +
    +
    +
    +
    +
    +
    +
    +

    Python 3

    +
    +
    +
    +
    +
    +
    +
    +
    +
    Python 3.4.1 
    +[GCC 4.2.1 (Apple Inc. build 5577)] on darwin
    +Type "help", "copyright", "credits" or "license" for more information.
    +
    +>>> my_input = input('enter a number: ')
    +
    +enter a number: 123
    +
    +>>> type(my_input)
    +<class 'str'>
    +
    +
    +
    diff --git a/tutorials/key_differences_between_python_2_and_3.ipynb b/tutorials/key_differences_between_python_2_and_3.ipynb index 92ee2ab..22a8f86 100644 --- a/tutorials/key_differences_between_python_2_and_3.ipynb +++ b/tutorials/key_differences_between_python_2_and_3.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:bce64714d9af46abdf20f98e6b5b0b51cd1240612c1dbd99a40d812aea22dcdf" + "signature": "sha256:2d8d614150aba437b28f7fe22d2e6a05b76ddb1a447d645c7d5085ab0c286c44" }, "nbformat": 3, "nbformat_minor": 0, @@ -93,6 +93,8 @@ "\n", "- [Comparing unorderable types](#Comparing-unorderable-types)\n", "\n", + "- [Parsing user inputs via input()](#Parsing-user-inputs-via-input)\n", + "\n", "- [More articles about Python 2 and Python 3](#More-articles-about-Python-2-and-Python-3)" ] }, @@ -196,7 +198,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 1 + "prompt_number": 3 }, { "cell_type": "markdown", @@ -1495,6 +1497,105 @@ "
    " ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Parsing user inputs via input()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Fortunately, the `input()` function was fixed in Python 3 so that it always stores the user inputs as `str` objects. In order to avoid the dangerous behavior in Python 2 to read in other types than `strings`, we have to use `raw_input()` instead." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    Python 2.7.6 \n",
    +      "[GCC 4.0.1 (Apple Inc. build 5493)] on darwin\n",
    +      "Type "help", "copyright", "credits" or "license" for more information.\n",
    +      "\n",
    +      ">>> my_input = input('enter a number: ')\n",
    +      "\n",
    +      "enter a number: 123\n",
    +      "\n",
    +      ">>> type(my_input)\n",
    +      "<type 'int'>\n",
    +      "\n",
    +      ">>> my_input = raw_input('enter a number: ')\n",
    +      "\n",
    +      "enter a number: 123\n",
    +      "\n",
    +      ">>> type(my_input)\n",
    +      "<type 'str'>\n",
    +      "
    \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    Python 3.4.1 \n",
    +      "[GCC 4.2.1 (Apple Inc. build 5577)] on darwin\n",
    +      "Type "help", "copyright", "credits" or "license" for more information.\n",
    +      "\n",
    +      ">>> my_input = input('enter a number: ')\n",
    +      "\n",
    +      "enter a number: 123\n",
    +      "\n",
    +      ">>> type(my_input)\n",
    +      "<class 'str'>\n",
    +      "
    \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, { "cell_type": "heading", "level": 2, From 3f28b768e0faedd7ab1ef73f8172ff9412682cf1 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 25 May 2014 11:30:41 -0400 Subject: [PATCH 076/248] note about print tuple --- ...y_differences_between_python_2_and_3.ipynb | 45 ++++++++++++++++--- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/tutorials/key_differences_between_python_2_and_3.ipynb b/tutorials/key_differences_between_python_2_and_3.ipynb index 22a8f86..ac07efa 100644 --- a/tutorials/key_differences_between_python_2_and_3.ipynb +++ b/tutorials/key_differences_between_python_2_and_3.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:2d8d614150aba437b28f7fe22d2e6a05b76ddb1a447d645c7d5085ab0c286c44" + "signature": "sha256:3442b8345ce99d8d379e475a753f23abf3392c6d4a6fdf185cf061e73e09b9e1" }, "nbformat": 3, "nbformat_minor": 0, @@ -151,13 +151,13 @@ "generators\n", "2.2.0a1\n", "2.3\n", - "PEP 255:\n", + "PEP 255:\n", "Simple Generators\n", "\n", "division\n", "2.2.0a2\n", "3.0\n", - "<PEP 238:\n", + "PEP 238:\n", "Changing the Division Operator\n", "\n", "absolute_import\n", @@ -198,7 +198,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 3 + "prompt_number": 1 }, { "cell_type": "markdown", @@ -227,10 +227,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Very trivial, and the change in the print-syntax is probably the most widely known change, but still it is worth mentioning: Python 2's print function doesn't require the parantheses for invoking the print function (it wouldn't choke on them). \n", - "In contrast, Python 3 would raise a `SyntaxError` if we called the print function the Python 2-way without the parentheses. \n", + "Very trivial, and the change in the print-syntax is probably the most widely known change, but still it is worth mentioning: Python 2's print statement has been replaced by the `print()` function, meaning that we have to wrap the object that we want to print in parantheses. \n", "\n", - "I think this change in Python 3 makes sense in terms of consistency, since it is the common way in Python to invoke function calls with its parentheses." + "Python 2 doesn't have a problem with additional parantheses, but in contrast, Python 3 would raise a `SyntaxError` if we called the print function the Python 2-way without the parentheses. \n" ] }, { @@ -324,6 +323,38 @@ ], "prompt_number": 3 }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note:**\n", + "\n", + "Printing \"Hello, World\" above via Python 2 looked quite \"normal\". However, if we have multiple objects inside the parantheses, we will create a tuple, since `print` is a \"statement\" in Python 2, not a function call." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'Python', python_version()\n", + "print('a', 'b')\n", + "print 'a', 'b'" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 2.7.6\n", + "('a', 'b')\n", + "a b\n" + ] + } + ], + "prompt_number": 4 + }, { "cell_type": "markdown", "metadata": {}, From 667a7333cddaddc647fdee79843d3788a086105e Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 25 May 2014 11:31:31 -0400 Subject: [PATCH 077/248] note about print tuple --- ...ey_differences_between_python_2_and_3.html | 55 +++++++++++++++++-- 1 file changed, 50 insertions(+), 5 deletions(-) diff --git a/tutorials/key_differences_between_python_2_and_3.html b/tutorials/key_differences_between_python_2_and_3.html index d4311cb..a839b1a 100644 --- a/tutorials/key_differences_between_python_2_and_3.html +++ b/tutorials/key_differences_between_python_2_and_3.html @@ -1848,7 +1848,7 @@

    The __future__ module

    2.3 -PEP 255: Simple Generators +PEP 255: Simple Generators @@ -1861,7 +1861,7 @@

    The __future__ module

    3.0 -<PEP 238: Changing the Division Operator +PEP 238: Changing the Division Operator @@ -1927,7 +1927,7 @@

    The __future__ module

    +
    +
    +
    +
    +
    +
    +

    Note:

    +

    Printing "Hello, World" above via Python 2 looked quite "normal". However, if we have multiple objects inside the parantheses, we will create a tuple, since print is a "statement" in Python 2, not a function call.

    +
    +
    +
    +
    +
    +
    +In [4]: +
    +
    +
    +
    print 'Python', python_version()
    +print('a', 'b')
    +print 'a', 'b'
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    +Python 2.7.6
    +('a', 'b')
    +a b
    +
    +
    +
    +
    + +
    +
    +
    From fa0b5f185c742dcce5ab048e59b75874651f3aac Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 25 May 2014 11:44:17 -0400 Subject: [PATCH 078/248] compared python 2 and 3 speeds --- ...ey_differences_between_python_2_and_3.html | 94 +++++++++++++++++++ ...y_differences_between_python_2_and_3.ipynb | 81 +++++++++++++++- 2 files changed, 174 insertions(+), 1 deletion(-) diff --git a/tutorials/key_differences_between_python_2_and_3.html b/tutorials/key_differences_between_python_2_and_3.html index a839b1a..c8b8cbe 100644 --- a/tutorials/key_differences_between_python_2_and_3.html +++ b/tutorials/key_differences_between_python_2_and_3.html @@ -2862,6 +2862,100 @@

    Python 3

    +
    +
    +
    +
    +
    +
    +

    Note
    Some people pointed out the speed difference between Python 3's range() and Python2's xrange(). Since they are implemented the same way one would expect the same speed. However the difference here just comes from the fact that Python 3 generally tends to run slower than Python 2.

    +
    +
    +
    +
    +
    +
    +In [3]: +
    +
    +
    +
    def test_while():
    +    i = 0
    +    while i < 20000:
    +        i += 1
    +    return
    +
    + +
    +
    +
    + +
    +
    +
    +
    +In [4]: +
    +
    +
    +
    print('Python', python_version())
    +%timeit test_while()
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    +Python 3.4.1
    +100 loops, best of 3: 2.68 ms per loop
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +In [6]: +
    +
    +
    +
    print 'Python', python_version()
    +%timeit test_while()
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    +Python 2.7.6
    +1000 loops, best of 3: 1.72 ms per loop
    +
    +
    +
    +
    + +
    +
    +
    diff --git a/tutorials/key_differences_between_python_2_and_3.ipynb b/tutorials/key_differences_between_python_2_and_3.ipynb index ac07efa..79065ea 100644 --- a/tutorials/key_differences_between_python_2_and_3.ipynb +++ b/tutorials/key_differences_between_python_2_and_3.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:3442b8345ce99d8d379e475a753f23abf3392c6d4a6fdf185cf061e73e09b9e1" + "signature": "sha256:8b17f6649c9b74d878c198037ee831fbec78e7ac375adfc4a62f03266d9d66c3" }, "nbformat": 3, "nbformat_minor": 0, @@ -877,6 +877,85 @@ ], "prompt_number": 8 }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note** \n", + "Some people pointed out the speed difference between Python 3's `range()` and Python2's `xrange()`. Since they are implemented the same way one would expect the same speed. However the difference here just comes from the fact that Python 3 generally tends to run slower than Python 2. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def test_while():\n", + " i = 0\n", + " while i < 20000:\n", + " i += 1\n", + " return" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Python', python_version())\n", + "%timeit test_while()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 3.4.1\n", + "100 loops, best of 3: 2.68 ms per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'Python', python_version()\n", + "%timeit test_while()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 2.7.6\n", + "1000 loops, best of 3: 1.72 ms per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 6 + }, { "cell_type": "markdown", "metadata": {}, From ea23193787768ff718a7e379ddfbf3ff6168ce3f Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 25 May 2014 11:46:20 -0400 Subject: [PATCH 079/248] compared python 2 and 3 speeds --- ...ey_differences_between_python_2_and_3.html | 21 ++++++++++++++++++- ...y_differences_between_python_2_and_3.ipynb | 19 +++++++++++++++-- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/tutorials/key_differences_between_python_2_and_3.html b/tutorials/key_differences_between_python_2_and_3.html index c8b8cbe..74d5094 100644 --- a/tutorials/key_differences_between_python_2_and_3.html +++ b/tutorials/key_differences_between_python_2_and_3.html @@ -2868,7 +2868,26 @@

    Python 3

    -

    Note
    Some people pointed out the speed difference between Python 3's range() and Python2's xrange(). Since they are implemented the same way one would expect the same speed. However the difference here just comes from the fact that Python 3 generally tends to run slower than Python 2.

    +



    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +

    Some people pointed out the speed difference between Python 3's range() and Python2's xrange(). Since they are implemented the same way one would expect the same speed. However the difference here just comes from the fact that Python 3 generally tends to run slower than Python 2.

    diff --git a/tutorials/key_differences_between_python_2_and_3.ipynb b/tutorials/key_differences_between_python_2_and_3.ipynb index 79065ea..8b2577a 100644 --- a/tutorials/key_differences_between_python_2_and_3.ipynb +++ b/tutorials/key_differences_between_python_2_and_3.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:8b17f6649c9b74d878c198037ee831fbec78e7ac375adfc4a62f03266d9d66c3" + "signature": "sha256:eb93a4258ce700755924939b5dc873c027a656b1faafcd0228616b8575378418" }, "nbformat": 3, "nbformat_minor": 0, @@ -881,7 +881,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**Note** \n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 4, + "metadata": {}, + "source": [ + "Note about the speed differences in Python 2 and 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "Some people pointed out the speed difference between Python 3's `range()` and Python2's `xrange()`. Since they are implemented the same way one would expect the same speed. However the difference here just comes from the fact that Python 3 generally tends to run slower than Python 2. " ] }, From 663a0c23982ae34834e471d9b409d9324e3d6485 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 25 May 2014 18:18:05 -0400 Subject: [PATCH 080/248] section about funcs that dont return lists anymore --- ...ey_differences_between_python_2_and_3.html | 158 ++++++++++++++++++ ...y_differences_between_python_2_and_3.ipynb | 128 +++++++++++++- 2 files changed, 285 insertions(+), 1 deletion(-) diff --git a/tutorials/key_differences_between_python_2_and_3.html b/tutorials/key_differences_between_python_2_and_3.html index 74d5094..94ddb8e 100644 --- a/tutorials/key_differences_between_python_2_and_3.html +++ b/tutorials/key_differences_between_python_2_and_3.html @@ -1762,6 +1762,7 @@

    Sections

    For-loop variables and the global namespace leak

  • Comparing unorderable types

  • Parsing user inputs via input()

  • +
  • Returning iterable objects instead of lists

  • More articles about Python 2 and Python 3

  • @@ -4006,6 +4007,163 @@

    Python 3

    +

    Returning iterable objects instead of lists

    +
    +
    + + + +
    +
    +
    +
    +
    +

    As we have already seen in the xrange section, some functions and methods return iterable objects in Python 3 now - instead of lists in Python 2.

    +

    Since we usually iterate over those only once anyway, I think this change makes a lot of sense to save memory. However, it is also possible - in contrast to generators - to iterate over those multiple times if needed, it is aonly not so efficient.

    +

    And for those cases where we really need the list-objects, we can simply convert the iterable object into a list via the list() function.

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Python 2

    +
    +
    +
    +
    +
    +
    +In [2]: +
    +
    +
    +
    print 'Python', python_version() 
    +
    +print range(3) 
    +print type(range(3))
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    +Python 2.7.6
    +[0, 1, 2]
    +<type 'list'>
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Python 3

    +
    +
    +
    +
    +
    +
    +In [7]: +
    +
    +
    +
    print('Python', python_version())
    +
    +print(range(3))
    +print(type(range(3)))
    +print(list(range(3)))
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    +Python 3.4.1
    +range(0, 3)
    +<class 'range'>
    +[0, 1, 2]
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +


    +
    +
    +
    +
    +
    +
    +
    +
    +

    Some more commonly used functions and methods that don't return lists anymore in Python 3:

    +
      +
    • zip()

    • +
    • map()

    • +
    • filter()

    • +
    • dictionary's .keys() method

    • +
    • dictionary's .values() method

    • +
    • dictionary's .items() method

    • +
    +
    +
    +
    +
    +
    +
    +
    +
    +



    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/tutorials/key_differences_between_python_2_and_3.ipynb b/tutorials/key_differences_between_python_2_and_3.ipynb index 8b2577a..bfc2af3 100644 --- a/tutorials/key_differences_between_python_2_and_3.ipynb +++ b/tutorials/key_differences_between_python_2_and_3.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:eb93a4258ce700755924939b5dc873c027a656b1faafcd0228616b8575378418" + "signature": "sha256:969dffb51ccca00a6136f4187304ff4a29444b347d9c38f9fe33f77a4af5f6fe" }, "nbformat": 3, "nbformat_minor": 0, @@ -95,6 +95,8 @@ "\n", "- [Parsing user inputs via input()](#Parsing-user-inputs-via-input)\n", "\n", + "- [Returning iterable objects instead of lists](#Returning-iterable-objects-instead-of-lists)\n", + "\n", "- [More articles about Python 2 and Python 3](#More-articles-about-Python-2-and-Python-3)" ] }, @@ -1721,6 +1723,130 @@ "
    " ] }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Returning iterable objects instead of lists" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we have already seen in the [`xrange`](#xrange) section, some functions and methods return iterable objects in Python 3 now - instead of lists in Python 2. \n", + "\n", + "Since we usually iterate over those only once anyway, I think this change makes a lot of sense to save memory. However, it is also possible - in contrast to generators - to iterate over those multiple times if needed, it is aonly not so efficient.\n", + "\n", + "And for those cases where we really need the `list`-objects, we can simply convert the iterable object into a `list` via the `list()` function." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'Python', python_version() \n", + "\n", + "print range(3) \n", + "print type(range(3))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 2.7.6\n", + "[0, 1, 2]\n", + "\n" + ] + } + ], + "prompt_number": 2 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Python', python_version())\n", + "\n", + "print(range(3))\n", + "print(type(range(3)))\n", + "print(list(range(3)))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 3.4.1\n", + "range(0, 3)\n", + "\n", + "[0, 1, 2]\n" + ] + } + ], + "prompt_number": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Some more commonly used functions and methods that don't return lists anymore in Python 3:**\n", + "\n", + "- `zip()`\n", + "\n", + "- `map()`\n", + "\n", + "- `filter()`\n", + "\n", + "- dictionary's `.keys()` method\n", + "\n", + "- dictionary's `.values()` method\n", + "\n", + "- dictionary's `.items()` method\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, { "cell_type": "heading", "level": 2, From 689e3cf3776991fbe45ebc09fb0c194741edff61 Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 27 May 2014 20:30:38 -0400 Subject: [PATCH 081/248] article links; --- ...y_differences_between_python_2_and_3.ipynb | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/tutorials/key_differences_between_python_2_and_3.ipynb b/tutorials/key_differences_between_python_2_and_3.ipynb index bfc2af3..56ff09f 100644 --- a/tutorials/key_differences_between_python_2_and_3.ipynb +++ b/tutorials/key_differences_between_python_2_and_3.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:969dffb51ccca00a6136f4187304ff4a29444b347d9c38f9fe33f77a4af5f6fe" + "signature": "sha256:ad53a8e56dd6c7cd1c379333f92a5232a0403e9f4efbad8a765d42d71ebecc0f" }, "nbformat": 3, "nbformat_minor": 0, @@ -14,7 +14,7 @@ "source": [ "[Sebastian Raschka](http://sebastianraschka.com) \n", "\n", - "last updated 05/24/2014\n", + "last updated 05/27/2014\n", "\n", "- [Open in IPython nbviewer](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/key_differences_between_python_2_and_3.ipynb?create=1) \n", "\n", @@ -1866,7 +1866,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Here is a list of some good articles concerning Python 2 and 3 that I would recommend as a follow-up:\n", + "Here is a list of some good articles concerning Python 2 and 3 that I would recommend as a follow-up.\n", + "\n", + "\n", + "**// Porting to Python 3** \n", "\n", "- [Should I use Python 2 or Python 3 for my development activity?](https://wiki.python.org/moin/Python2orPython3)\n", "\n", @@ -1876,8 +1879,26 @@ "\n", "- [Porting Python 2 Code to Python 3](https://docs.python.org/3/howto/pyporting.html) \n", "\n", - "- [How keep Python 3 moving forward](http://nothingbutsnark.svbtle.com/my-view-on-the-current-state-of-python-3)\n" + "- [How keep Python 3 moving forward](http://nothingbutsnark.svbtle.com/my-view-on-the-current-state-of-python-3)\n", + "\n", + "**// Pro and anti Python 3**\n", + "\n", + "- [Everything you did not want to know about Unicode in Python 3](http://lucumr.pocoo.org/2014/5/12/everything-about-unicode/)\n", + "\n", + "- [Python 3 is killing Python](https://medium.com/@deliciousrobots/5d2ad703365d/)\n", + "\n", + "- [Python 3 can revive Python](https://medium.com/p/2a7af4788b10)\n", + "\n", + "- [Python 3 is fine](http://sealedabstract.com/rants/python-3-is-fine/)\n" ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [] } ], "metadata": {} From 233a52ae99e43dd58f2fef5d50222bd20022195a Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 28 May 2014 13:32:07 -0400 Subject: [PATCH 082/248] 5 simple steps for converting Markdown documents into HTML and adding Python syntax highlighting --- README.md | 16 +- .../markdown_syntax_highlighting/README.md | 176 ++++++++++++++++++ .../markdown_syntax_highlighting/body.html | 26 +++ .../codehilite.css | 61 ++++++ .../markdown_syntax_highlighting/final.html | 39 ++++ .../images/mk_syntax_body_html.png | Bin 0 -> 148855 bytes .../images/mk_syntax_final_html.png | Bin 0 -> 167057 bytes .../some_markdown.md | 27 +++ .../template.html | 14 ++ 9 files changed, 357 insertions(+), 2 deletions(-) create mode 100644 tutorials/markdown_syntax_highlighting/README.md create mode 100644 tutorials/markdown_syntax_highlighting/body.html create mode 100644 tutorials/markdown_syntax_highlighting/codehilite.css create mode 100644 tutorials/markdown_syntax_highlighting/final.html create mode 100644 tutorials/markdown_syntax_highlighting/images/mk_syntax_body_html.png create mode 100644 tutorials/markdown_syntax_highlighting/images/mk_syntax_final_html.png create mode 100644 tutorials/markdown_syntax_highlighting/some_markdown.md create mode 100644 tutorials/markdown_syntax_highlighting/template.html diff --git a/README.md b/README.md index 672788f..5982a82 100755 --- a/README.md +++ b/README.md @@ -35,6 +35,18 @@ A collection of useful scripts, tutorials, and other Python-related things - Sorting CSV files using the Python csv module [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb)] +
    + + +###// Python and the web + +- Creating a table of contents with internal links in IPython Notebooks and Markdown documents [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/table_of_contents_ipython.ipynb)] + +- 5 simple steps for converting Markdown documents into HTML and adding Python syntax highlighting [[Markdown](./tutorials/markdown_syntax_highlighting/README.md)] + + + +
    ###// benchmarks @@ -51,9 +63,9 @@ GitHub repository [One-Python-benchmark-per-day](https://github.com/rasbt/One-Py
    -###// other -- Creating a table of contents with internal links in IPython Notebooks and Markdown documents [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/table_of_contents_ipython.ipynb)] + +###// other - Happy Mother's Day [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/funstuff/happy_mothers_day.ipynb?create=1)] diff --git a/tutorials/markdown_syntax_highlighting/README.md b/tutorials/markdown_syntax_highlighting/README.md new file mode 100644 index 0000000..424bdd8 --- /dev/null +++ b/tutorials/markdown_syntax_highlighting/README.md @@ -0,0 +1,176 @@ +[Sebastian Raschka](http://sebastianraschka.com) + +last updated: 05/28/2014 + +
    +I would be happy to hear your comments and suggestions. +Please feel free to drop me a note via +[twitter](https://twitter.com/rasbt), [email](mailto:bluewoodtree@gmail.com), or [google+](https://plus.google.com/118404394130788869227). +
    + + +# 5 simple steps for converting Markdown documents into HTML and adding Python syntax highlighting + +
    +
    + +In this little tutorial, I want to show you in 5 simple steps how easy it is to add code syntax highlighting to your blog articles. + +There are more sophisticated approaches using static site generators, e.g., [nikola](https://github.com/getnikola/nikola), but the focus here is to give you the brief introduction of how it generally works. + + +All the files I will be using as examples in this tutorial can be download from the GitHub repository [/rasbt/python_reference/tutorials/markdown_syntax_highlighting](https://github.com/rasbt/python_reference/tutorials/markdown_syntax_highlighting) + +
    +
    + +##1 - Installing packages + +The two packages that we will use are + +- [Python-Markdown](http://pythonhosted.org/Markdown/) + +- [Pygments](http://pygments.org) + +Just as the name suggests, Python-Markdown is the Python package that we will use for the Markdown to HTML conversion. +The second library, Pygments, will be used to add the syntax highlighting to the code blocks. +Conveniently, both libraries can be installed via `pip`: + + + pip install markdown + +and + + pip install Pygments + + +(For alternative ways to install the Python-Markdown package, please see [the +documentation](http://pythonhosted.org/Markdown/install.html)) + + +
    +
    + +##2 - Writing a Markdown document + +Now, let us compose a simple Markdown document including some Python code blocks in any/our favorite Markdown editor. + + +--> [**some_markdown.md**](https://github.com/rasbt/python_reference/blob/master/tutorials/markdown_syntax_highlighting/some_markdown.md) + +
    +
    +
    +##This is a test
    +
    +Code blocks must be indented by 4 whitespaces.
    +Python-Markdown has a auto-guess function which works
    +pretty well:
    +
    +    print("Hello, World")
    +	# some comment
    +    for letter in "this is a test":
    +        print(letter)
    +
    +In cases where Python-Markdown has problems figuring out which
    +programming language we use, we can also add the language-tag
    +explicitly. One way to do this would be:
    +
    +    :::python
    +    print("Hello, World")
    +
    +or we can highlight certain lines to 
    +draw the reader's attention:
    +
    +    :::python hl_lines="1 5"
    +	print("highlight me!")
    +	# but not me!
    +    for letter in "this is a test":
    +        print(letter)   
    +    # I want to be highlighted, too!
    +         
    +
    +
    + + +
    +
    + +## 3 - Converting the Markdown document to HTML + + +After we created our Markdown document, we are going to use Python-Markdown directly from the command line to convert it into an HTML document. + +Note that we can also import Python-Markdown as a module in our Python scripts, and it comes with a rich repertory of different functions, which are [listed in the library reference](https://pythonhosted.org/Markdown/reference.html). + +The basic command line usage to convert a Markdown document into HTML would be: + + python -m markdown input.md > output.html + +However, since we want to have syntax highlighting for our Python code, we will use Python-Markdown's [CodeHilite extension](http://pythonhosted.org/Markdown/extensions/code_hilite.html) by providing an additional `-x codehilite` argument on the command line: + + + python -m markdown -x codehilite some_markdown.md > body.html + +This will create the HTML body with our Markdown code converted to HTML with the Python code blocks annotated for the syntax highlighting. + + +
    +
    + +##4 - Generating the CSS + +If we open the [**body.html**](https://github.com/rasbt/python_reference/blob/master/tutorials/markdown_syntax_highlighting/body.html) file now, which we have created in the previous section, we will notice that it doesn't have the Python code colored yet. + +![](./images/mk_syntax_body_html.png) + +What is missing is the CSS code for adding the colors to our annotated Python code block. But we can simply create such a CSS file via `Pygments` from the command line. + + pygmentize -S default -f html > codehilite.css + +Note that we usually only need to create the [**codehilite.css**](https://github.com/rasbt/python_reference/blob/master/tutorials/markdown_syntax_highlighting/codehilite.css) file once and insert a link in all our HTML files that we created via Python-Markdown to get the syntax coloring + + +
    +
    + + +## 5 - Insert into your HTML body + + +In order to include a link to the [codehilite.css](https://github.com/rasbt/python_reference/blob/master/tutorials/markdown_syntax_highlighting/codehilite.css) file for syntax coloring in our converted HTML file, we have to add the following line to the header section. + + + +`` + + +Now, we can insert the HTML body ([body.html](https://github.com/rasbt/python_reference/blob/master/tutorials/markdown_syntax_highlighting/body.html)), which was created from our Markdown document, directly into our final HTML file (e.g., our blog article template). + + +[**template.html**](https://github.com/rasbt/python_reference/blob/master/tutorials/markdown_syntax_highlighting/template.html): + + + + + + + + + + + + + + <-- converted HTML contents go here + + + + + + +If we open our [**final.html**](https://github.com/rasbt/python_reference/blob/master/tutorials/markdown_syntax_highlighting/template.html) file in our web browser now, we can the pretty Python syntax highlighting. + +![](./images/mk_syntax_final_html.png) + + diff --git a/tutorials/markdown_syntax_highlighting/body.html b/tutorials/markdown_syntax_highlighting/body.html new file mode 100644 index 0000000..e768c67 --- /dev/null +++ b/tutorials/markdown_syntax_highlighting/body.html @@ -0,0 +1,26 @@ +

    This is a test

    +

    Code blocks must be indented by 4 whitespaces. +Python-Markdown has a auto-guess function which works +pretty well:

    +
    print("Hello, World")
    +# some comment
    +for letter in "this is a test":
    +    print(letter)
    +
    + + +

    In cases where Python-Markdown has problems figuring out which +programming language we use, we can also add the language-tag +explicitly. One way to do this would be:

    +
    print("Hello, World")
    +
    + + +

    or we can highlight certain lines to +draw the reader's attention:

    +
    print("highlight me!")
    +# but not me!
    +for letter in "this is a test":
    +    print(letter)   
    +# I want to be highlighted, too!
    +
    \ No newline at end of file diff --git a/tutorials/markdown_syntax_highlighting/codehilite.css b/tutorials/markdown_syntax_highlighting/codehilite.css new file mode 100644 index 0000000..67e6ea3 --- /dev/null +++ b/tutorials/markdown_syntax_highlighting/codehilite.css @@ -0,0 +1,61 @@ +.hll { background-color: #ffffcc } +.c { color: #408080; font-style: italic } /* Comment */ +.err { border: 1px solid #FF0000 } /* Error */ +.k { color: #008000; font-weight: bold } /* Keyword */ +.o { color: #666666 } /* Operator */ +.cm { color: #408080; font-style: italic } /* Comment.Multiline */ +.cp { color: #BC7A00 } /* Comment.Preproc */ +.c1 { color: #408080; font-style: italic } /* Comment.Single */ +.cs { color: #408080; font-style: italic } /* Comment.Special */ +.gd { color: #A00000 } /* Generic.Deleted */ +.ge { font-style: italic } /* Generic.Emph */ +.gr { color: #FF0000 } /* Generic.Error */ +.gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.gi { color: #00A000 } /* Generic.Inserted */ +.go { color: #888888 } /* Generic.Output */ +.gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +.gs { font-weight: bold } /* Generic.Strong */ +.gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.gt { color: #0044DD } /* Generic.Traceback */ +.kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +.kp { color: #008000 } /* Keyword.Pseudo */ +.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +.kt { color: #B00040 } /* Keyword.Type */ +.m { color: #666666 } /* Literal.Number */ +.s { color: #BA2121 } /* Literal.String */ +.na { color: #7D9029 } /* Name.Attribute */ +.nb { color: #008000 } /* Name.Builtin */ +.nc { color: #0000FF; font-weight: bold } /* Name.Class */ +.no { color: #880000 } /* Name.Constant */ +.nd { color: #AA22FF } /* Name.Decorator */ +.ni { color: #999999; font-weight: bold } /* Name.Entity */ +.ne { color: #D2413A; font-weight: bold } /* Name.Exception */ +.nf { color: #0000FF } /* Name.Function */ +.nl { color: #A0A000 } /* Name.Label */ +.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +.nt { color: #008000; font-weight: bold } /* Name.Tag */ +.nv { color: #19177C } /* Name.Variable */ +.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +.w { color: #bbbbbb } /* Text.Whitespace */ +.mf { color: #666666 } /* Literal.Number.Float */ +.mh { color: #666666 } /* Literal.Number.Hex */ +.mi { color: #666666 } /* Literal.Number.Integer */ +.mo { color: #666666 } /* Literal.Number.Oct */ +.sb { color: #BA2121 } /* Literal.String.Backtick */ +.sc { color: #BA2121 } /* Literal.String.Char */ +.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +.s2 { color: #BA2121 } /* Literal.String.Double */ +.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ +.sh { color: #BA2121 } /* Literal.String.Heredoc */ +.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ +.sx { color: #008000 } /* Literal.String.Other */ +.sr { color: #BB6688 } /* Literal.String.Regex */ +.s1 { color: #BA2121 } /* Literal.String.Single */ +.ss { color: #19177C } /* Literal.String.Symbol */ +.bp { color: #008000 } /* Name.Builtin.Pseudo */ +.vc { color: #19177C } /* Name.Variable.Class */ +.vg { color: #19177C } /* Name.Variable.Global */ +.vi { color: #19177C } /* Name.Variable.Instance */ +.il { color: #666666 } /* Literal.Number.Integer.Long */ diff --git a/tutorials/markdown_syntax_highlighting/final.html b/tutorials/markdown_syntax_highlighting/final.html new file mode 100644 index 0000000..cff7895 --- /dev/null +++ b/tutorials/markdown_syntax_highlighting/final.html @@ -0,0 +1,39 @@ + + + + + + + + + + +

    This is a test

    +

    Code blocks must be indented by 4 whitespaces. +Python-Markdown has a auto-guess function which works +pretty well:

    +
    print("Hello, World")
    +# some comment
    +for letter in "this is a test":
    +    print(letter)
    +
    + + +

    In cases where Python-Markdown has problems figuring out which +programming language we use, we can also add the language-tag +explicitly. One way to do this would be:

    +
    print("Hello, World")
    +
    + + +

    or we can highlight certain lines to +draw the reader's attention:

    +
    print("highlight me!")
    +# but not me!
    +for letter in "this is a test":
    +    print(letter)   
    +# I want to be highlighted, too!
    +
    + + + diff --git a/tutorials/markdown_syntax_highlighting/images/mk_syntax_body_html.png b/tutorials/markdown_syntax_highlighting/images/mk_syntax_body_html.png new file mode 100644 index 0000000000000000000000000000000000000000..3b3aab6bf9f3837d25ba25241698aad996298a60 GIT binary patch literal 148855 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
    &eIQN=pO3g|X@={$nuP4O(+_)r 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�XO8JoQ?aeq2Lb80JJSH#KVcQXOz<_#K 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 |UW^`33!E7)CqT3r9c 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

    iGFz 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�S+NOhaY zPqp;}q%vkPZis%6be6%5=C9ErE>@$ld(RIyx!+8F*!Qx1yk*k;RK_mvT;y}H6e96q z1*?AMgbje6A}(3NuxFS}mKw3BI0+x0l|g7lbrq~X3QfttZ#d=eZ`jcmq+a`#{q|jo z;t9c>b)xI}3>Z?$nxfK`d%hwp5YWo=n8J1ZNcc1tvn#xPvgERC>3rndZhl)mlOd~Z z8?w4+E&VE+u%ehPa-DZAa#|iycnt4l;LIgVSZQ9Izg3HEH{>a_X`9SUzT|k^$JpuP zgsaUhv9+3wSNPg;fR_N^JjtsV?DEoj80$e>HGZ{^*#|56H8(9?um7=;no=0MS7rn4T#O3_34x1o%bczrSz8WdBY#D% zpOjBBRb=acbw-3#W5Q7KJk|y;LWy#`7kbYR1T{|5|3L3Fh@FHoWHt$cRP^`OU2bb;Q=-SUnwQEHRx zGmpsVADemBH!>g=U@A=B^$dT$TY^vy@6cA;m`o`>JcQovcuOz84-i20F1w|hPKz(E z$;@Wk#}jAw$K9XZ>NOVK3{tDqqu75u%rcr0O{G=j7EFbKvnAE&9BV&1hub^ z>eDD@?Iw&-i7`#P@EEbkvOPXD-ibdkiE_@>yc|y2_LVhPRhYwgo9k>SM&VgMSnUE? z#SGr3V8cyibbbx*L1bW?-1m;eMY>Yjmlfa7858EM{VwAuSV<4X*$Xc__=*_L?B~Dm z75M)RkS=75eUga*Y#7G(DNSzOLNauU zc=Sn>nip*q7ELmTb9QpFz0Dm5r1(?R}BI;n}SbLsag9*P*Gx9@S__) z&Hfz4`Pqo??>=>ei@m&G;v|j{#8R>i%F&e8M|)KSiB(DNGpWrL-+7OutrpXS#3vd| z8$fDVSx8Fa8+(Szw}+|WBDD7RlIuYPOKO5;3X0PF{$w^3-1=5j_zyNhz1`VufqjmN z)^G+S8#l(q*;B!?>N)Wcn+?dRll$8cg~GG8Jn?H}J>?eObfO5YvSUuu&%)8B?m1R8 uShi@7eTM9Q>p0y literal 0 HcmV?d00001 diff --git a/tutorials/markdown_syntax_highlighting/images/mk_syntax_final_html.png b/tutorials/markdown_syntax_highlighting/images/mk_syntax_final_html.png new file mode 100644 index 0000000000000000000000000000000000000000..eeba886e654b0c7d47ca22e5b3f36bc7f0077914 GIT binary patch literal 167057 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

    %g;ayyc?y&bFSOid~L8XZKvk#tjWs`yMl}^r_|+ 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�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 z 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 + + + + + + + + + +<-- converted HTML contents go here + + + \ No newline at end of file From 6a512b84d4d16ca927dd0df4ba16764f9578033c Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 28 May 2014 14:06:19 -0400 Subject: [PATCH 083/248] fixed link --- tutorials/markdown_syntax_highlighting/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/markdown_syntax_highlighting/README.md b/tutorials/markdown_syntax_highlighting/README.md index 424bdd8..75d9e29 100644 --- a/tutorials/markdown_syntax_highlighting/README.md +++ b/tutorials/markdown_syntax_highlighting/README.md @@ -19,7 +19,7 @@ In this little tutorial, I want to show you in 5 simple steps how easy it is to There are more sophisticated approaches using static site generators, e.g., [nikola](https://github.com/getnikola/nikola), but the focus here is to give you the brief introduction of how it generally works. -All the files I will be using as examples in this tutorial can be download from the GitHub repository [/rasbt/python_reference/tutorials/markdown_syntax_highlighting](https://github.com/rasbt/python_reference/tutorials/markdown_syntax_highlighting) +All the files I will be using as examples in this tutorial can be download from the GitHub repository [/rasbt/python_reference/tutorials/markdown_syntax_highlighting](https://github.com/rasbt/python_reference/tree/master/tutorials/markdown_syntax_highlighting)

    From 7e2a6f33dfafe85c27d677e5c96d5d6ca3c10ace Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 30 May 2014 01:33:49 -0400 Subject: [PATCH 084/248] fixed unorderable types section --- ...ey_differences_between_python_2_and_3.html | 48 +++++++++++++++++-- ...y_differences_between_python_2_and_3.ipynb | 16 ++++++- 2 files changed, 59 insertions(+), 5 deletions(-) diff --git a/tutorials/key_differences_between_python_2_and_3.html b/tutorials/key_differences_between_python_2_and_3.html index 94ddb8e..2a5a0c5 100644 --- a/tutorials/key_differences_between_python_2_and_3.html +++ b/tutorials/key_differences_between_python_2_and_3.html @@ -1681,7 +1681,7 @@

    Sebastian Raschka

    -

    last updated 05/24/2014

    +

    last updated 05/27/2014

    diff --git a/tutorials/key_differences_between_python_2_and_3.ipynb b/tutorials/key_differences_between_python_2_and_3.ipynb index 56ff09f..a3fb088 100644 --- a/tutorials/key_differences_between_python_2_and_3.ipynb +++ b/tutorials/key_differences_between_python_2_and_3.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:ad53a8e56dd6c7cd1c379333f92a5232a0403e9f4efbad8a765d42d71ebecc0f" + "signature": "sha256:c21b89c5879797a1dd3fbd08797ca9ad15665dfb0cec3fca1ccf94bd601354b2" }, "nbformat": 3, "nbformat_minor": 0, @@ -1568,7 +1568,19 @@ ], "language": "python", "metadata": {}, - "outputs": [] + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 2.7.6\n", + "[1, 2] > 'foo' = False\n", + "(1, 2) > 'foo' = True\n", + "[1, 2] > (1, 2) = False\n" + ] + } + ], + "prompt_number": 2 }, { "cell_type": "markdown", From 0ce1669ed547efdfa8ec9b33a0beb107d3b6b6a8 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 31 May 2014 17:41:22 -0400 Subject: [PATCH 085/248] new link --- tutorials/key_differences_between_python_2_and_3.ipynb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tutorials/key_differences_between_python_2_and_3.ipynb b/tutorials/key_differences_between_python_2_and_3.ipynb index a3fb088..19d8a8c 100644 --- a/tutorials/key_differences_between_python_2_and_3.ipynb +++ b/tutorials/key_differences_between_python_2_and_3.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:c21b89c5879797a1dd3fbd08797ca9ad15665dfb0cec3fca1ccf94bd601354b2" + "signature": "sha256:7d8ee5c733199e70a4c5c71b6dfd0953ab5e6c33c6a0c7ef50dce07b4d56ae32" }, "nbformat": 3, "nbformat_minor": 0, @@ -1895,6 +1895,8 @@ "\n", "**// Pro and anti Python 3**\n", "\n", + "- [10 awesome features of Python that you can't use because you refuse to upgrade to Python 3](http://asmeurer.github.io/python3-presentation/slides.html#1)\n", + "\n", "- [Everything you did not want to know about Unicode in Python 3](http://lucumr.pocoo.org/2014/5/12/everything-about-unicode/)\n", "\n", "- [Python 3 is killing Python](https://medium.com/@deliciousrobots/5d2ad703365d/)\n", From dc5210aea9c6daaf340e5676c9460462e7b6cbc0 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 1 Jun 2014 12:59:24 -0400 Subject: [PATCH 086/248] reorganization --- README.md | 30 +- .../sequential_selection_algorithms.ipynb | 1419 +++++++++++++++++ {funstuff => other}/happy_mothers_day.ipynb | 0 .../not_so_obvious_python_stuff.ipynb | 4 +- .../sqlite3_howto}/LICENSE | 0 .../sqlite3_howto}/README.md | 35 +- .../sqlite3_howto}/code/add_new_column.py | 0 .../sqlite3_howto}/code/create_new_db.py | 0 .../code/create_unique_index.py | 0 .../sqlite3_howto}/code/date_time_ops.py | 0 .../sqlite3_howto}/code/get_columnnames.py | 0 .../sqlite3_howto}/code/print_db_info.py | 0 .../sqlite3_howto}/code/selecting_entries.py | 0 .../code/update_or_insert_records.py | 0 .../sqlite3_howto}/code/updating_rows.py | 0 .../sqlite3_howto}/code/write_from_sqlite.py | 0 16 files changed, 1456 insertions(+), 32 deletions(-) create mode 100644 algorithms/sequential_selection_algorithms.ipynb rename {funstuff => other}/happy_mothers_day.ipynb (100%) rename not_so_obvious_python_stuff.ipynb => tutorials/not_so_obvious_python_stuff.ipynb (99%) rename {sqlite3_howto => tutorials/sqlite3_howto}/LICENSE (100%) rename {sqlite3_howto => tutorials/sqlite3_howto}/README.md (95%) rename {sqlite3_howto => tutorials/sqlite3_howto}/code/add_new_column.py (100%) rename {sqlite3_howto => tutorials/sqlite3_howto}/code/create_new_db.py (100%) rename {sqlite3_howto => tutorials/sqlite3_howto}/code/create_unique_index.py (100%) rename {sqlite3_howto => tutorials/sqlite3_howto}/code/date_time_ops.py (100%) rename {sqlite3_howto => tutorials/sqlite3_howto}/code/get_columnnames.py (100%) rename {sqlite3_howto => tutorials/sqlite3_howto}/code/print_db_info.py (100%) rename {sqlite3_howto => tutorials/sqlite3_howto}/code/selecting_entries.py (100%) rename {sqlite3_howto => tutorials/sqlite3_howto}/code/update_or_insert_records.py (100%) rename {sqlite3_howto => tutorials/sqlite3_howto}/code/updating_rows.py (100%) rename {sqlite3_howto => tutorials/sqlite3_howto}/code/write_from_sqlite.py (100%) diff --git a/README.md b/README.md index 5982a82..f4e300a 100755 --- a/README.md +++ b/README.md @@ -1,9 +1,12 @@ +
    -![logo](./Images/logo.png) +

    A collection of useful scripts, tutorials, and other Python-related things

    + +
    +
    -A collection of useful scripts, tutorials, and other Python-related things
    @@ -16,7 +19,7 @@ A collection of useful scripts, tutorials, and other Python-related things ###// Python tips and tutorials -- A collection of not so obvious Python stuff you should know! [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb?create=1)] +- A collection of not so obvious Python stuff you should know! [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/not_so_obvious_python_stuff.ipynb?create=1)] - Python's scope resolution for variable names and the LEGB rule [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb?create=1)] @@ -40,22 +43,27 @@ A collection of useful scripts, tutorials, and other Python-related things ###// Python and the web -- Creating a table of contents with internal links in IPython Notebooks and Markdown documents [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/table_of_contents_ipython.ipynb)] +- Creating internal links in IPython Notebooks and Markdown docs [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/table_of_contents_ipython.ipynb)] + +- Converting Markdown to HTML and adding Python syntax highlighting [[Markdown](./tutorials/markdown_syntax_highlighting/README.md)] -- 5 simple steps for converting Markdown documents into HTML and adding Python syntax highlighting [[Markdown](./tutorials/markdown_syntax_highlighting/README.md)] +
    +###// Algorithms + +- Sequential Selection Algorithms [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb)]
    -###// benchmarks +###// Benchmarks *For more recent benchmarks, please also see my separate GitHub repository [One-Python-benchmark-per-day](https://github.com/rasbt/One-Python-benchmark-per-day)* - Python benchmarks via `timeit` [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/timeit_tests.ipynb?create=1)] -- Implementing the least squares fit method for linear regression and speeding it up via Cython [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb?create=1)] +- Least squares fit method for linear regression sped up via Cython [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/cython_least_squares.ipynb?create=1)] - Benchmarks of different palindrome functions [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/palindrome_timeit.ipynb?create=1)] @@ -65,14 +73,14 @@ GitHub repository [One-Python-benchmark-per-day](https://github.com/rasbt/One-Py -###// other +###// Other -- Happy Mother's Day [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/funstuff/happy_mothers_day.ipynb?create=1)] +- Happy Mother's Day [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/other/happy_mothers_day.ipynb?create=1)]
    -###// useful scripts and snippets +###// Useful scripts and snippets -- [Shell script](./useful_scripts/prepend_python_shebang.sh) for prepending Python-shebangs to all .py files in a current directory. +- [Shell script](./useful_scripts/prepend_python_shebang.sh) for prepending Python-shebangs to .py files. - convert 'tab-delimited' to 'comma-separated' CSV files [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/useful_scripts/fix_tab_csv.ipynb?create=1)] diff --git a/algorithms/sequential_selection_algorithms.ipynb b/algorithms/sequential_selection_algorithms.ipynb new file mode 100644 index 0000000..9032aa2 --- /dev/null +++ b/algorithms/sequential_selection_algorithms.ipynb @@ -0,0 +1,1419 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:422c66e0088094cc07058647ff0a8c20c5fbb08fad34a18ee957f594d82b1e53" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Sebastian Raschka* \n", + "last updated: **03/29/2014** \n", + "[Link to this IPython Notebook on GitHub](https://github.com/rasbt/algorithms_in_ipython_notebooks) \n", + "\n", + "
    \n", + "Executed in Python 3.4.0\n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "
    \n", + "
    \n", + "#Sections\n", + "- 1. Introduction
    \n", + " - Defining a criterion function for testing
    \n", + " - 2. Sequential Forward Selection (SFS)
    \n", + " - SFS Code
    \n", + " - Example SFS
    \n", + "- 3. Sequential Backward Selection (SBS)
    \n", + " - SBS Code
    \n", + " - Example SBS
    \n", + "- 4. \"Plus L take away R\" (+L -R)
    \n", + " - +L -R Code
    \n", + " - Example +L -R
    \n", + " - Example 1: L > R
    \n", + " - Example 2: R > L
    \n", + "- 5. Sequential Floating Forward Selection (SFFS)
    \n", + " - SFFS Code
    \n", + " - Example SFFS
    \n", + "- 6. Sequential Floating Backward Selection (SFBS)
    \n", + " - SFBS Code
    \n", + " - Example SFBS
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#Sequential Selection Algorithms in Python\n", + "\n", + "

    \n", + "## 1. Introduction \n", + "\n", + "[[back to top]](#sections)\n", + "\n", + "One of the biggest challenges of designing a good classifier for solving a ***Statistical Pattern Classification*** problem is to estimate the underlying parameters to fit the model - given that the forms of the underlying probability distributions are known. The larger the number of parameters becomes, the more difficult it naturally is to estimate those parameters accurately (***Curse of Dimensionality***) from a limited number of training samples. \n", + "\n", + "In order to avoid the ***Curse of Dimensionality***, pattern classification is often accompanied by ***Dimensionality Reduction***, which also has the nice side-effect of increasing the computational performance.\n", + "Common techniques are projection-based, such as ***Principal Component Analysis (PCA)***, ***Linear Dimension Analysis (LDA)***, and ***Multivariate Dimension Analysis (MDA)***. \n", + "An alternative to the projection-based approach is the so-called ***Feature Selection***, and in this article, we will take a look at some of the established algorithms to tackle this combinatorial search problem. Note that those algorithms are considered as \"subpoptimal\" in contrast to an ***exhaustive search***, which is often computationally not feasible, though.\n", + "\n", + "Therefore, the goal of the presented ***sequential selection algorithms*** is to reduce the feature space *D = {x_1, x_2, x_n}* to a subset of features *D - n* in order to improve or optimize the **computational performance** of the classifier and to avoid the so-called ***Curse of Dimensionality***. \n", + "The goal is to select a \"sufficiently reduced\" subset from the feature space *D* \"without significantly reducing\" the performance of the classifier. In the process of choosing an \"optimal\" feature subset of size *k*, a so-called ***Criterion Function***, which typically, simply, and intuitively assesses the ***recognition rate*** of the classifier.\n", + "\n", + "F. Ferri, P. Pudil, M. Hatef, and J. Kittler investigated the performance of different ***Sequential Selection Algorithms*** for ***Feature Selection*** on different scales and reported their results in a nice research article: *\"[Comparative Study of Techniques for Large Scale Feature Selection](http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=02CB16CB1C28EA6CB57E212861CFB180?doi=10.1.1.24.4369&rep=rep1&type=pdf),\" Pattern Recognition in Practice IV, E. Gelsema and L. Kanal, eds., pp. 403-413. Elsevier Science B.V., 1994.* \n", + "Choosing an \"appropriate\" algorithm really depends on the problem - the size and desired recognition rate and computational performance. Thus, I want to encourage you to take (at least) a brief look at their paper and the results they obtained from experimenting with different problems feature space dimensions.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "### Defining a criterion function (for testing)\n", + "\n", + "[[back to top]](#sections)\n", + "\n", + "In order to evaluate the performance of our selected ***feature subset*** (typically the recognition rate of the classifier), we need to define a ***criterion function***.\n", + "\n", + "For the sake of simplicity, and in order to get an intuitive idea if our algorithm returns an \"appropriate\" result, let us define a very simple criterion function here. \n", + "The criterion function defined below simply returns the sum of numerical values in a list." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def simple_crit_func(feat_sub):\n", + " \"\"\" Returns sum of numerical values of an input list. \"\"\" \n", + " return sum(feat_sub)\n", + "\n", + "# Example:\n", + "simple_crit_func([1,2,4])" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 1, + "text": [ + "7" + ] + } + ], + "prompt_number": 1 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "\n", + "## 2. Sequential Forward Selection (SFS)\n", + "\n", + "[[back to top]](#sections)\n", + "\n", + "The ***Sequential Fortward Selection (SFS)*** is one of the simplest and probably fastest *Feature Selection* algorithms. \n", + "Let's summarize its mechanics in words: \n", + "***SFS*** starts with an empty feature subset and sequentially adds features from the whole input feature space to this subset until the subset reaches a desired (user-specified) size. For every iteration (= inclusion of a new feature), the whole feature subset is evaluated (expect for the features that are already included in the new subset). The evaluation is done by the so-called ***criterion function*** which assesses the feature that leads to the maximum performance improvement of the feature subset if it is included. \n", + "Note that included features are never removed, which is one of the biggest downsides of this algorithm.

    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "\n", + "**Input:** \n", + "the set of all features, \n", + "- $ Y ={y_1, y_2, ..., y_d} $\n", + "\n", + "\n", + "The ***SFS*** algorithm takes the whole feature set as input, if our feature space consists of, e.g. 10, if our feature space consists of 10 dimensions (***d = 10***).\n", + "

    \n", + "\n", + "**Output:** \n", + "a subset of features, \n", + "- $X_k = {x_j \\; | \\; j = 1, 2, ..., k; x_j \u2208 Y}$, \n", + "where $k = (0, 1, 2, ..., d $) \n", + "\n", + "The returned output of the algorithm is a subset of the feature space of a specified size. E.g., a subset of 5 features from a 10-dimensional feature space ($k = 5, \\; d = 10$).\n", + "

    \n", + "\n", + "**Initialization:** \n", + "- $ X_0 = \\emptyset, \\; k = 0 $\n", + "\n", + "We initialize the algorithm with an empty set (\"null set\") so that the $k = 0$ (where $k$ is the size of the subset)\n", + "

    \n", + "\n", + "**Step 1 (Inclusion):** \n", + "
    \n", + "- $ x^+ \\; arg \\; max \\; J(x_k + x), \\quad where \\; x \u2208 Y - X_k $ \n", + "- $ X_k+1 = X_k + x^+ $ \n", + "- $ k = k + 1 $ \n", + "- $ Go \\; to \\; Step 1 $ \n", + "\n", + "We go through the ***feature space*** and look for the feature $x^+$ which maximizes our criterion if we add it to the ***feature subset*** (where $J()$ is the criterion function). We repeat this process until we reach the ***Termination*** criterion.\n", + "

    \n", + "\n", + "**Termination:** \n", + "- stop when *k* equals the number of desired features\n", + "\n", + "We add features to the new feature subset $X_k$ until we reach the number of specified features for our final subset. E.g., if our desired number of features is 5 and we start with the \"null set\" (*Initialization*), we would add features to the subset until it contains 5 features.\n", + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "\n", + "##SFS Code\n", + "\n", + "[[back to top]](#sections)\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Sebastian Raschka\n", + "# last updated: 03/29/2014 \n", + "# Sequential Forward Selection (SBS)\n", + "\n", + "\n", + "def seq_forw_select(features, max_k, criterion_func, print_steps=False):\n", + " \"\"\"\n", + " Implementation of a Sequential Forward Selection algorithm.\n", + " \n", + " Keyword Arguments:\n", + " features (list): The feature space as a list of features.\n", + " max_k: Termination criterion; the size of the returned feature subset.\n", + " criterion_func (function): Function that is used to evaluate the\n", + " performance of the feature subset.\n", + " print_steps (bool): Prints the algorithm procedure if True.\n", + " \n", + " Returns the selected feature subset, a list of features of length max_k.\n", + "\n", + " \"\"\"\n", + " \n", + " # Initialization\n", + " feat_sub = []\n", + " k = 0\n", + " d = len(features)\n", + " if max_k > d:\n", + " max_k = d\n", + " \n", + " while True:\n", + " \n", + " # Inclusion step\n", + " if print_steps:\n", + " print('\\nInclusion from feature space', features)\n", + " crit_func_max = criterion_func(feat_sub + [features[0]])\n", + " best_feat = features[0]\n", + " for x in features[1:]:\n", + " crit_func_eval = criterion_func(feat_sub + [x])\n", + " if crit_func_eval > crit_func_max:\n", + " crit_func_max = crit_func_eval\n", + " best_feat = x\n", + " feat_sub.append(best_feat)\n", + " if print_steps:\n", + " print('include: {} -> feature subset: {}'.format(best_feat, feat_sub))\n", + " features.remove(best_feat)\n", + " \n", + " # Termination condition\n", + " k = len(feat_sub)\n", + " if k == max_k:\n", + " break\n", + " \n", + " return feat_sub" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "### Example SFS:\n", + "\n", + "[[back to top]](#sections)\n", + "\n", + "In this example, we take a look at the individual steps of the [***SFS***](#sfs) algorithmn to select a ***feature subset*** consisting of 3 features out of a ***feature space*** of size 10. \n", + "The input feature space consists of 10 integers: 6, 3, 1, 6, 8, 2, 3, 7, 9, 1, \n", + "and our criterion is to find a subset of size 3 in this ***feature space*** that maximizes the integer sum in this ***feature subset***." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def example_seq_forw_select():\n", + " ex_features = [6, 3, 1, 6, 8, 2, 3, 7, 9, 1]\n", + " res_forw = seq_forw_select(features=ex_features, max_k=3,\\\n", + " criterion_func=simple_crit_func, print_steps=True) \n", + " return res_forw\n", + " \n", + "# Run example\n", + "res_forw = example_seq_forw_select()\n", + "print('\\nRESULT: [6, 3, 1, 6, 8, 2, 3, 7, 9, 1] ->', res_forw)\n" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "Inclusion from feature space [6, 3, 1, 6, 8, 2, 3, 7, 9, 1]\n", + "include: 9 -> feature subset: [9]\n", + "\n", + "Inclusion from feature space [6, 3, 1, 6, 8, 2, 3, 7, 1]\n", + "include: 8 -> feature subset: [9, 8]\n", + "\n", + "Inclusion from feature space [6, 3, 1, 6, 2, 3, 7, 1]\n", + "include: 7 -> feature subset: [9, 8, 7]\n", + "\n", + "RESULT: [6, 3, 1, 6, 8, 2, 3, 7, 9, 1] -> [9, 8, 7]\n" + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###Result:\n", + "The returned result is definitely what we would expect: the 3 highest values (note that we defined 3 as the number of desired features for our subset) in the input feature list, since our ***criterion*** is to select the numerical values (= features) that yield the maximum mathematical sum in the feature subset." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "## 3. Sequential Backward Selection (SBS)\n", + "\n", + "[[back to top]](#sections)\n", + "\n", + "The ***Sequential Backward Selection (SBS)*** algorithm is very similar to the [***SFS***](#sfs), which we have just seen in the section above. The only difference is that we start with the complete feature set instead of the \"null set\" and remove features sequentially until we reach the number of desired features *k*. \n", + "Note that features are never added back once they were removed, which (similar to [***SFS***](#sfs)) is one of the biggest downsides of this algorithm.

    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "**Input:** \n", + "the set of all features, \n", + "- $Y = {y_1, y_2, ..., y_d}$ \n", + "\n", + "The ***SBS*** algorithm takes the whole feature set as input, if our feature space consists of, e.g. 10, if our feature space consists of 10 dimensions ($d = 10$).\n", + "

    \n", + "\n", + "**Output:** \n", + "a subset of features, \n", + "- $ X_k = {x_j \\;| \\;j = 1, 2, ..., k; x_j \u2208 Y}, \\quad where \\; k = (0, 1, 2, ..., d)$ \n", + "\n", + "The returned output of the algorithm is a subset of the feature space of a specified size. E.g., a subset of 5 features from a 10-dimensional feature space ($k = 5, d = 10$).\n", + "

    \n", + "\n", + "**Initialization:** \n", + "- $X_0 = Y, \\; k = d$\n", + "\n", + "We initialize the algorithm with the given feature set so that the $k = d$ (where $k$ has the size of the feature set $d$)\n", + "

    \n", + "\n", + "**Step 1 (Exclusion):** \n", + "
    \n", + "- $x^- = arg \\; max \\; J(x_k - x), where x \u2208 X_k$ \n", + "- $X_k-1 = X_k - x^-$ \n", + "- $k = k - 1$ \n", + "- $Go \\; to \\; Step 1$ \n", + "\n", + "We go through the ***feature subset*** and look for the feature $x^-$ which minimizes our criterion if we remove it from the ***feature subset*** (where $J()$ is the criterion function). We repeat this process until we reach the ***Termination*** criterion.\n", + "

    \n", + "\n", + "**Termination:** \n", + "- stop when $k$ equals the number of desired features\n", + "\n", + "We remove features from the feature subset $X_k$ until we reach the number of specified features for our final subset. E.g., if our desired number of features is 5 and we start with the entire feature space (*Initialization*), we would remove features from the subset until it contains 5 features.\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "\n", + "##SBS Code\n", + "\n", + "[[back to top]](#sections)\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Sebastian Raschka\n", + "# last updated: 03/29/2014 \n", + "# Sequential Backward Selection (SBS)\n", + "\n", + "from copy import deepcopy\n", + "\n", + "def seq_backw_select(features, max_k, criterion_func, print_steps=False):\n", + " \"\"\"\n", + " Implementation of a Sequential Backward Selection algorithm.\n", + " \n", + " Keyword Arguments:\n", + " features (list): The feature space as a list of features.\n", + " max_k: Termination criterion; the size of the returned feature subset.\n", + " criterion_func (function): Function that is used to evaluate the\n", + " performance of the feature subset.\n", + " print_steps (bool): Prints the algorithm procedure if True.\n", + " \n", + " Returns the selected feature subset, a list of features of length max_k.\n", + "\n", + " \"\"\"\n", + " # Initialization\n", + " feat_sub = deepcopy(features)\n", + " k = len(feat_sub)\n", + " i = 0\n", + "\n", + " while True:\n", + " \n", + " # Exclusion step\n", + " if print_steps:\n", + " print('\\nExclusion from feature subset', feat_sub)\n", + " worst_feat = len(feat_sub)-1\n", + " worst_feat_val = feat_sub[worst_feat]\n", + " crit_func_max = criterion_func(feat_sub[:-1]) \n", + "\n", + " for i in reversed(range(0,len(feat_sub)-1)):\n", + " crit_func_eval = criterion_func(feat_sub[:i] + feat_sub[i+1:])\n", + " if crit_func_eval > crit_func_max:\n", + " worst_feat, crit_func_max = i, crit_func_eval\n", + " worst_feat_val = feat_sub[worst_feat]\n", + " del feat_sub[worst_feat]\n", + " if print_steps:\n", + " print('exclude: {} -> feature subset: {}'.format(worst_feat_val, feat_sub))\n", + " \n", + " # Termination condition\n", + " k = len(feat_sub)\n", + " if k == max_k:\n", + " break\n", + " \n", + " return feat_sub" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "### Example SBS:\n", + "\n", + "\n", + "[[back to top]](#sections)\n", + "\n", + "\n", + "Like we did for the [***SFS example***](#example_sfs) above, we take a look at the individual steps of the [***SBS***](#sbs) algorithmn to select a ***feature subset*** consisting of 3 features out of a ***feature space*** of size 10. \n", + "The input feature space consists of 10 integers: 6, 3, 1, 6, 8, 2, 3, 7, 9, 1, \n", + "and our criterion is to find a subset of size 3 in this ***feature space*** that maximizes the integer sum in this ***feature subset***." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def example_seq_backw_select():\n", + " ex_features = [6,3,1,6,8,2,3,7,9,1]\n", + " res_backw = seq_backw_select(features=ex_features, max_k=3,\\\n", + " criterion_func=simple_crit_func, print_steps=True) \n", + " return (res_backw)\n", + " \n", + "# Run example\n", + "res_backw = example_seq_backw_select()\n", + "print('\\nRESULT: [6, 3, 1, 6, 8, 2, 3, 7, 9, 1] ->', res_backw)\n" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "Exclusion from feature subset [6, 3, 1, 6, 8, 2, 3, 7, 9, 1]\n", + "exclude: 1 -> feature subset: [6, 3, 1, 6, 8, 2, 3, 7, 9]\n", + "\n", + "Exclusion from feature subset [6, 3, 1, 6, 8, 2, 3, 7, 9]\n", + "exclude: 1 -> feature subset: [6, 3, 6, 8, 2, 3, 7, 9]\n", + "\n", + "Exclusion from feature subset [6, 3, 6, 8, 2, 3, 7, 9]\n", + "exclude: 2 -> feature subset: [6, 3, 6, 8, 3, 7, 9]\n", + "\n", + "Exclusion from feature subset [6, 3, 6, 8, 3, 7, 9]\n", + "exclude: 3 -> feature subset: [6, 3, 6, 8, 7, 9]\n", + "\n", + "Exclusion from feature subset [6, 3, 6, 8, 7, 9]\n", + "exclude: 3 -> feature subset: [6, 6, 8, 7, 9]\n", + "\n", + "Exclusion from feature subset [6, 6, 8, 7, 9]\n", + "exclude: 6 -> feature subset: [6, 8, 7, 9]\n", + "\n", + "Exclusion from feature subset [6, 8, 7, 9]\n", + "exclude: 6 -> feature subset: [8, 7, 9]\n", + "\n", + "RESULT: [6, 3, 1, 6, 8, 2, 3, 7, 9, 1] -> [8, 7, 9]\n" + ] + } + ], + "prompt_number": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Result:\n", + "The returned ***feature subset*** is similar to the result of the [***SFS***](#example_sfs) algorithm that we have seen above, which is what we would expect: the 3 highest values (note that we defined 3 as the number of desired features for our subset) in the input feature list, since our ***criterion*** is to select the feanumerical values (= features) that yield the maximum mathematical sum in the feature subset." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "## 4. \"Plus L take away R\" (+L -R)\n", + "\n", + "\n", + "[[back to top]](#sections)\n", + "\n", + "\n", + "The ***\"Plus L take away R\" (+L -R)*** is basically a combination of [***SFS***](#sfs) and [***SBS***](#sbs). It append features to the ***feature subset*** *L-times*, and afterwards it removes features *R-times* until we reach our desired size for the ***feature subset***.\n", + "\n", + "**Variant 1: L > R** \n", + "If *L > R*, the algorithm starts with an empty ***feature subset*** and adds *L* features to it from the ***feature space***. Then it goes over to the next step 2, where it removes *R* features from the ***feature subset***, after which it goes back to step 1 to add *L* features again. \n", + "Those steps are repeated until the ***feature subset** reaches the desired size *k*. \n", + "
    \n", + "**Variant 2: R > L** \n", + "Else, if *R > L*, the algorithms starts with the whole ***feature space*** as ***feature subset***. It remove s*R* features from it before it adds back *L* features from those features that were just removed. \n", + "Those steps are repeated until the ***feature subset** reaches the desired size *k*. \n", + "

    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "**Input:** \n", + "the set of all features, \n", + "- $Y = {y_1, y_2, ..., y_d}$ \n", + "\n", + "The ***+L -R*** algorithm takes the whole feature set as input, if our feature space consists of, e.g. 10, if our feature space consists of 10 dimensions ($d = 10$).\n", + "

    \n", + "\n", + "**Output:** \n", + "a subset of features, \n", + "- $X_k = {x_j \\; | \\; j = 1, 2, ..., k; x_j \u2208 Y}, \\quad where \\; k = (0, 1, 2, ..., d)$ \n", + "\n", + "The returned output of the algorithm is a subset of the feature space of a specified size. E.g., a subset of 5 features from a 10-dimensional feature space ($k = 5, \\; d = 10$).\n", + "

    \n", + "\n", + "**Initialization:** \n", + "- $X_0 = Y, \\; k = d$\n", + "\n", + "We initialize the algorithm with the given feature set so that the $k = d$ (where $k$ has the size of the feature set $d$)\n", + "

    \n", + "\n", + "**Step 1 (Inclusion):** \n", + "
    \n", + "- *repeat L-times:* \n", + " - $x^+ = arg \\; max \\; J(x_k + x), \\quad where \\; x \u2208 Y - X_k $ \n", + " - $X_k+1 = X_k + x^+$ \n", + " - $k = k + 1$ \n", + "- $Go \\; to\\; Step 2$ \n", + "

    \n", + "**Step 2 (Exclusion):** \n", + "
    \n", + "- *repeat R-times:* \n", + " - $x^- = arg max J(x_k - x), \\quad where \\; x \u2208 X_k$ \n", + " - $X_k-1 = X_k - x^-$ \n", + " - $k = k - 1$ \n", + "- $Go \\; to \\; Step 1$ \n", + "\n", + "In step 1, we go *L-times* through the ***feature space*** and look for the feature $x^+$ which maximizes our criterion if we add it to the ***feature subset*** (where $J()$ is the criterion function). Then we go over to step 2. \n", + "In step 2, we go *R-times* through the ***feature subset*** and look for the feature $x^-$ which minimizes our criterion if we remove it from the ***feature subset*** (where $J()$ is the criterion function). Then we go back to step 1. \n", + "Note that this order of steps only applies if $L > R$, in the opposite case ($R > L$), we have to start with the ***Exlusion*** on the whole ***feature space***, followed by inclusion of removed features.\n", + "

    \n", + "\n", + "**Termination:** \n", + "- stop when $k$ equals the number of desired features\n", + "\n", + "We add and remove features from the feature subset $X_k$ until we reach the number of specified features for our final subset. E.g., if our desired number of features is 5 and we start with the entire feature space (*Initialization*), we would remove features from the subset until it contains 5 features.\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "\n", + "##+L -R Code\n", + "\n", + "[[back to top]](#sections)\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Sebastian Raschka\n", + "# last updated: 03/29/2014 \n", + "# \"Plus L take away R\" (+L -R)\n", + "\n", + "from copy import deepcopy\n", + "\n", + "def plus_L_minus_R(features, max_k, criterion_func, L=3, R=2, print_steps=False):\n", + " \"\"\"\n", + " Implementation of a \"Plus l take away r\" algorithm.\n", + " \n", + " Keyword Arguments:\n", + " features (list): The feature space as a list of features.\n", + " max_k: Termination criterion; the size of the returned feature subset.\n", + " criterion_func (function): Function that is used to evaluate the\n", + " performance of the feature subset.\n", + " L (int): Number of features added per iteration.\n", + " R (int): Number of features removed per iteration.\n", + " print_steps (bool): Prints the algorithm procedure if True.\n", + " \n", + " Returns the selected feature subset, a list of features of length max_k.\n", + "\n", + " \"\"\"\n", + " assert(L != R), 'L must be != R to avoid an infinite loop'\n", + " \n", + " ############################\n", + " ### +L -R for case L > R ###\n", + " ############################\n", + " \n", + " if L > R:\n", + " feat_sub = []\n", + " k = 0\n", + " \n", + " # Initialization\n", + " while True:\n", + " \n", + " # +L (Inclusion)\n", + " if print_steps:\n", + " print('\\nInclusion from features', features)\n", + " for i in range(L):\n", + " if len(features) > 0:\n", + " crit_func_max = criterion_func(feat_sub + [features[0]])\n", + " best_feat = features[0]\n", + " if len(features) > 1:\n", + " for x in features[1:]:\n", + " crit_func_eval = criterion_func(feat_sub + [x])\n", + " if crit_func_eval > crit_func_max:\n", + " crit_func_max = crit_func_eval\n", + " best_feat = x\n", + " features.remove(best_feat)\n", + " feat_sub.append(best_feat)\n", + " if print_steps:\n", + " print('include: {} -> feature_subset: {}'.format(best_feat, feat_sub))\n", + " \n", + " # -R (Exclusion)\n", + " if print_steps:\n", + " print('\\nExclusion from feature_subset', feat_sub)\n", + " for i in range(R):\n", + " if len(features) + len(feat_sub) > max_k:\n", + " worst_feat = len(feat_sub)-1\n", + " worst_feat_val = feat_sub[worst_feat]\n", + " crit_func_max = criterion_func(feat_sub[:-1]) \n", + "\n", + " for j in reversed(range(0,len(feat_sub)-1)):\n", + " crit_func_eval = criterion_func(feat_sub[:j] + feat_sub[j+1:])\n", + " if crit_func_eval > crit_func_max:\n", + " worst_feat, crit_func_max = j, crit_func_eval\n", + " worst_feat_val = feat_sub[worst_feat]\n", + " del feat_sub[worst_feat]\n", + " if print_steps:\n", + " print('exclude: {} -> feature subset: {}'.format(worst_feat_val, feat_sub))\n", + " \n", + " \n", + " # Termination condition\n", + " k = len(feat_sub)\n", + " if k == max_k:\n", + " break\n", + " \n", + " return feat_sub\n", + " \n", + " ############################\n", + " ### +L -R for case L < R ###\n", + " ############################\n", + "\n", + " else:\n", + " # Initialization\n", + " feat_sub = deepcopy(features)\n", + " k = len(feat_sub)\n", + " i = 0\n", + " count = 0\n", + " while True:\n", + " count += 1\n", + " # Exclusion step\n", + " removed_feats = []\n", + " if print_steps:\n", + " print('\\nExclusion from feature subset', feat_sub)\n", + " for i in range(R):\n", + " if len(feat_sub) > max_k:\n", + " worst_feat = len(feat_sub)-1\n", + " worst_feat_val = feat_sub[worst_feat]\n", + " crit_func_max = criterion_func(feat_sub[:-1]) \n", + "\n", + " for i in reversed(range(0,len(feat_sub)-1)):\n", + " crit_func_eval = criterion_func(feat_sub[:i] + feat_sub[i+1:])\n", + " if crit_func_eval > crit_func_max:\n", + " worst_feat, crit_func_max = i, crit_func_eval\n", + " worst_feat_val = feat_sub[worst_feat]\n", + " removed_feats.append(feat_sub.pop(worst_feat))\n", + " if print_steps:\n", + " print('exclude: {} -> feature subset: {}'.format(removed_feats, feat_sub))\n", + " \n", + " # +L (Inclusion)\n", + " included_feats = []\n", + " if len(feat_sub) != max_k:\n", + " for i in range(L):\n", + " if len(removed_feats) > 0:\n", + " crit_func_max = criterion_func(feat_sub + [removed_feats[0]])\n", + " best_feat = removed_feats[0]\n", + " if len(removed_feats) > 1:\n", + " for x in removed_feats[1:]:\n", + " crit_func_eval = criterion_func(feat_sub + [x])\n", + " if crit_func_eval > crit_func_max:\n", + " crit_func_max = crit_func_eval\n", + " best_feat = x\n", + " removed_feats.remove(best_feat)\n", + " feat_sub.append(best_feat)\n", + " included_feats.append(best_feat)\n", + " if print_steps:\n", + " print('\\nInclusion from removed features', removed_feats)\n", + " print('include: {} -> feature_subset: {}'.format(included_feats, feat_sub))\n", + " \n", + " # Termination condition\n", + " k = len(feat_sub)\n", + " if k == max_k:\n", + " break\n", + " if count >= 30:\n", + " break\n", + " return feat_sub\n", + " " + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "### Example +L -R:\n", + "\n", + "[[back to top]](#sections)\n", + "\n", + "Like we did for the [***SFS***](#example_sfs) example above, let's have look at the individual steps of the ***+L -R*** algorithmn to select a ***feature subset*** consisting of 3 features out of a ***feature space*** of size 10. \n", + "Again, the input feature space consists of the 10 integers: 6, 3, 1, 6, 8, 2, 3, 7, 9, 1, \n", + "and our criterion is to find a subset of size 3 in this ***feature space*** that maximizes the integer sum in this ***feature subset***." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "#### Example 1: L > R\n", + "\n", + "[[back to top]](#sections)\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def example_plus_L_minus_R():\n", + " ex_features = [6, 3, 1, 6, 8, 2, 3, 7, 9, 1]\n", + " res_plmr = plus_L_minus_R(features=ex_features, max_k=3,\\\n", + " criterion_func=simple_crit_func, L=3, R=2, print_steps=True) \n", + " \n", + " return (res_plmr)\n", + " \n", + "# Run example\n", + "res = example_plus_L_minus_R()\n", + "print('\\nRESULT: [6, 3, 1, 6, 8, 2, 3, 7, 9, 1] ->', res)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "Inclusion from features [6, 3, 1, 6, 8, 2, 3, 7, 9, 1]\n", + "include: 9 -> feature_subset: [9]\n", + "include: 8 -> feature_subset: [9, 8]\n", + "include: 7 -> feature_subset: [9, 8, 7]\n", + "\n", + "Exclusion from feature_subset [9, 8, 7]\n", + "exclude: 7 -> feature subset: [9, 8]\n", + "exclude: 8 -> feature subset: [9]\n", + "\n", + "Inclusion from features [6, 3, 1, 6, 2, 3, 1]\n", + "include: 6 -> feature_subset: [9, 6]\n", + "include: 6 -> feature_subset: [9, 6, 6]\n", + "include: 3 -> feature_subset: [9, 6, 6, 3]\n", + "\n", + "Exclusion from feature_subset [9, 6, 6, 3]\n", + "exclude: 3 -> feature subset: [9, 6, 6]\n", + "exclude: 6 -> feature subset: [9, 6]\n", + "\n", + "Inclusion from features [1, 2, 3, 1]\n", + "include: 3 -> feature_subset: [9, 6, 3]\n", + "include: 2 -> feature_subset: [9, 6, 3, 2]\n", + "include: 1 -> feature_subset: [9, 6, 3, 2, 1]\n", + "\n", + "Exclusion from feature_subset [9, 6, 3, 2, 1]\n", + "exclude: 1 -> feature subset: [9, 6, 3, 2]\n", + "exclude: 2 -> feature subset: [9, 6, 3]\n", + "\n", + "RESULT: [6, 3, 1, 6, 8, 2, 3, 7, 9, 1] -> [9, 6, 3]\n" + ] + } + ], + "prompt_number": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "#### Example 2: R > L\n", + "\n", + "[[back to top]](#sections)\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def example_plus_L_minus_R():\n", + " ex_features = [6, 3, 1, 6, 8, 2, 3, 7, 9, 1]\n", + " res_plmr = plus_L_minus_R(features=ex_features, max_k=3,\\\n", + " criterion_func=simple_crit_func, L=2, R=3, print_steps=True) \n", + " \n", + " return (res_plmr)\n", + " \n", + "# Run example\n", + "res = example_plus_L_minus_R()\n", + "print('\\nRESULT: [6, 3, 1, 6, 8, 2, 3, 7, 9, 1] ->', res)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "Exclusion from feature subset [6, 3, 1, 6, 8, 2, 3, 7, 9, 1]\n", + "exclude: [1, 1, 2] -> feature subset: [6, 3, 6, 8, 3, 7, 9]\n", + "\n", + "Inclusion from removed features [1]\n", + "include: [2, 1] -> feature_subset: [6, 3, 6, 8, 3, 7, 9, 2, 1]\n", + "\n", + "Exclusion from feature subset [6, 3, 6, 8, 3, 7, 9, 2, 1]\n", + "exclude: [1, 2, 3] -> feature subset: [6, 3, 6, 8, 7, 9]\n", + "\n", + "Inclusion from removed features [1]\n", + "include: [3, 2] -> feature_subset: [6, 3, 6, 8, 7, 9, 3, 2]\n", + "\n", + "Exclusion from feature subset [6, 3, 6, 8, 7, 9, 3, 2]\n", + "exclude: [2, 3, 3] -> feature subset: [6, 6, 8, 7, 9]\n", + "\n", + "Inclusion from removed features [2]\n", + "include: [3, 3] -> feature_subset: [6, 6, 8, 7, 9, 3, 3]\n", + "\n", + "Exclusion from feature subset [6, 6, 8, 7, 9, 3, 3]\n", + "exclude: [3, 3, 6] -> feature subset: [6, 8, 7, 9]\n", + "\n", + "Inclusion from removed features [3]\n", + "include: [6, 3] -> feature_subset: [6, 8, 7, 9, 6, 3]\n", + "\n", + "Exclusion from feature subset [6, 8, 7, 9, 6, 3]\n", + "exclude: [3, 6, 6] -> feature subset: [8, 7, 9]\n", + "\n", + "RESULT: [6, 3, 1, 6, 8, 2, 3, 7, 9, 1] -> [8, 7, 9]\n" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Result:\n", + "The returned ***feature subset*** really is suboptimal in this particular example for L > R ([Example 1: L > R](#example_pLmR1)). This is due to the fact that we add multiple features to our ***feature subset*** and we also remove multiple features from it; we never add back any of the removed features to the investigated ***feature space***. \n", + "\n", + "**Modifying the \"Plus L take away R\" algorithm** \n", + "This algorithm can be tweaked by adding back *r - 1* features to the ***feature subset*** after each ***Exclusion*** step to be assessed by the ***criterion function*** for inclusion in the next iteration. This is a decision that has to be made by considering the particular application, since it decreases the computational performance of the algorithm, but improves the performance of the resulting ***feature subset*** as a classifier." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "## 5. Sequential Floating Forward Selection (SFFS)\n", + "\n", + "[[back to top]](#sections)\n", + "\n", + "The ***Sequential Floating Forward Selection (SFFS)*** algorithm can be considered as extension of the simpler [***SFS***](#sfs) algorithm, which we have seen in the very beginning. In constrast to ***SFS***, the ***SFFS*** algorithm **can** remove features once they were included, so that a larger number of feature subset combinations can be sampled. It is important to emphasize that the removal of included features is **conditional**, which makes it different from the [***+L -R***](#pLmR) algorithm. The ***Conditional Exclusion*** in ***SFFS*** only occurs if the resultin feature subset is assessed as \"better\" by the ***criterion function*** after removal of a particular feature." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "**Input:** \n", + "the set of all features, \n", + "- $Y = {y_1, y_2, ..., y_d}$ \n", + "\n", + "The ***SFFS*** algorithm takes the whole feature set as input, if our feature space consists of, e.g. 10, if our feature space consists of 10 dimensions ($d = 10$).\n", + "

    \n", + "\n", + "**Output:** \n", + "a subset of features, \n", + "- $X_k = {x_j \\; | \\; j = 1, 2, ..., k; x_j \u2208 Y}, \\quad where \\; k = (0, 1, 2, ..., d)$ \n", + "\n", + "The returned output of the algorithm is a subset of the feature space of a specified size. E.g., a subset of 5 features from a 10-dimensional feature space ($k = 5, \\; d = 10$).\n", + "

    \n", + "\n", + "**Initialization:** \n", + "- $X_0 = \\emptyset, \\quad k = 0$\n", + "\n", + "We initialize the algorithm with an empty set (\"null set\") so that the $k = 0$ (where $k$ is the size of the subset)\n", + "

    \n", + "\n", + "**Step 1 (Inclusion):** \n", + "
    \n", + "- $x^+ = arg\\; max \\;J(x_k + x), \\quad where \\; x \u2208 Y - X_k$ \n", + "- $X_k+1 = X_k + x^+$ \n", + "- $k = k + 1$ \n", + "- $Go \\; to \\; Step 2 $ \n", + "

    \n", + "**Step 2 (Conditional Exclusion):** \n", + "
    \n", + "- $x^- = arg \\; max \\; J(x_k - x),\\quad where \\; x \u2208 X_k$ \n", + "- $if\\; J(x_k - x) > J(x_k - x):$ \n", + " - $X_k-1 = X_k - x^-$ \n", + " - $k = k - 1$ \n", + "- $Go \\; to \\; Step 1$ \n", + "\n", + "In step 1, we include the feature from the ***feature space*** that leads to the best performance increase for our ***feature subset*** (assessed by the ***criterion function***). Then, we go over to step 2 \n", + "In step 2, we only remove a feature if the resulting subset would gain an increase in performance. We go back to step 1. \n", + "Steps 1 and 2 are reapeated until the **Termination** criterion is reached.\n", + "

    \n", + "\n", + "**Termination:** \n", + "- stop when $k$ equals the number of desired features\n", + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "\n", + "##SFFS Code\n", + "\n", + "[[back to top]](#sections)\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Sebastian Raschka\n", + "# last updated: 03/29/2014 \n", + "# Sequential Floating Forward Selection (SFFS)\n", + "\n", + "def seq_float_forw_select(features, max_k, criterion_func, print_steps=False):\n", + " \"\"\"\n", + " Implementation of Sequential Floating Forward Selection.\n", + " \n", + " Keyword Arguments:\n", + " features (list): The feature space as a list of features.\n", + " max_k: Termination criterion; the size of the returned feature subset.\n", + " criterion_func (function): Function that is used to evaluate the\n", + " performance of the feature subset.\n", + " print_steps (bool): Prints the algorithm procedure if True.\n", + " \n", + " Returns the selected feature subset, a list of features of length max_k.\n", + "\n", + " \"\"\"\n", + "\n", + " # Initialization\n", + " feat_sub = []\n", + " k = 0\n", + " \n", + " while True:\n", + " \n", + " # Step 1: Inclusion\n", + " if print_steps:\n", + " print('\\nInclusion from features', features)\n", + " if len(features) > 0:\n", + " crit_func_max = criterion_func(feat_sub + [features[0]])\n", + " best_feat = features[0]\n", + " if len(features) > 1:\n", + " for x in features[1:]:\n", + " crit_func_eval = criterion_func(feat_sub + [x])\n", + " if crit_func_eval > crit_func_max:\n", + " crit_func_max = crit_func_eval\n", + " best_feat = x\n", + " features.remove(best_feat)\n", + " feat_sub.append(best_feat)\n", + " if print_steps:\n", + " print('include: {} -> feature_subset: {}'.format(best_feat, feat_sub))\n", + " \n", + " # Step 2: Conditional Exclusion\n", + " worst_feat_val = None\n", + " if len(features) + len(feat_sub) > max_k:\n", + " crit_func_max = criterion_func(feat_sub) \n", + " for i in reversed(range(0,len(feat_sub))):\n", + " crit_func_eval = criterion_func(feat_sub[:i] + feat_sub[i+1:])\n", + " if crit_func_eval > crit_func_max:\n", + " worst_feat, crit_func_max = i, crit_func_eval\n", + " worst_feat_val = feat_sub[worst_feat]\n", + " if worst_feat_val: \n", + " del feat_sub[worst_feat]\n", + " if print_steps:\n", + " print('exclude: {} -> feature subset: {}'.format(worst_feat_val, feat_sub))\n", + " \n", + " \n", + " # Termination condition\n", + " k = len(feat_sub)\n", + " if k == max_k:\n", + " break\n", + " \n", + " return feat_sub" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 9 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "### Example SFFS:\n", + "\n", + "[[back to top]](#sections)\n", + "\n", + "Since the ***Exclusion*** step in the ***Sequential Floating Forward*** algorithm is ***conditional*** - a feature is only removed if the criterion function asses a better performance after removal - we would never exclude any feature using our [`simple_criterion_func()`](#crit_func\"), which returns the integer sum of a feature set. Thus, let us define another simple criterion function that we use for testing our ***SFFS*** algorithm.\n", + "\n", + "\n", + "Just as we did for the previous examples above, let's take a look at the individual steps of the ***SFFS*** algorithmn to select a ***feature subset*** consisting of 3 features out of a ***feature space*** of size 10. \n", + "Also here, the input feature space consists of the 10 integers: 6, 3, 1, 6, 8, 2, 3, 7, 9, 1, \n", + "and our criterion is to find a subset of size 3 in this ***feature space*** that maximizes the integer sum in this ***feature subset***." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "#### A simple criterion function with a random parameter\n", + "\n", + "[[back to top]](#sections)\n", + "\n", + "The criterion function we define below is also calculates the sum of a subset similar to the [`simple_criterion_func()`](#crit_func\") we used before. However, here we add a random integer ranging from -15 to 15 to the returned sum. Therefore, in some occasions, our criterion function can return a larger sum for a smaller subset - after we removed a feature from the subset after the ***Inclusion*** step - in order to trigger the ***Conditional Exclusion*** step." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from random import randint\n", + "\n", + "def simple_rand_crit_func(feat_sub):\n", + " \"\"\" \n", + " Returns sum of numerical values of an input list plus \n", + " a random integer ranging from -15 to 15. \n", + " \n", + " \"\"\" \n", + " return sum(feat_sub) + randint(-15,15)\n", + "\n", + "# Example:\n", + "simple_rand_crit_func([1,2,4])" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 10, + "text": [ + "19" + ] + } + ], + "prompt_number": 10 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def example_seq_float_forw_select():\n", + " ex_features = [6,3,1,6,8,2,3,7,9,1]\n", + " res_seq_flforw = seq_float_forw_select(features=ex_features, max_k=3,\\\n", + " criterion_func=simple_rand_crit_func, print_steps=True) \n", + " return res_seq_flforw\n", + " \n", + "# Run example\n", + "res_seq_flforw = example_seq_float_forw_select()\n", + "print('\\nRESULT: [6, 3, 1, 6, 8, 2, 3, 7, 9, 1] ->', res_seq_flforw)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "Inclusion from features [6, 3, 1, 6, 8, 2, 3, 7, 9, 1]\n", + "include: 7 -> feature_subset: [7]\n", + "exclude: None -> feature subset: [7]\n", + "\n", + "Inclusion from features [6, 3, 1, 6, 8, 2, 3, 9, 1]\n", + "include: 1 -> feature_subset: [7, 1]\n", + "exclude: 7 -> feature subset: [1]\n", + "\n", + "Inclusion from features [6, 3, 6, 8, 2, 3, 9, 1]\n", + "include: 3 -> feature_subset: [1, 3]\n", + "exclude: None -> feature subset: [1, 3]\n", + "\n", + "Inclusion from features [6, 6, 8, 2, 3, 9, 1]\n", + "include: 9 -> feature_subset: [1, 3, 9]\n", + "exclude: None -> feature subset: [1, 3, 9]\n", + "\n", + "RESULT: [6, 3, 1, 6, 8, 2, 3, 7, 9, 1] -> [1, 3, 9]\n" + ] + } + ], + "prompt_number": 11 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "## 6. Sequential Floating Backward Selection (SFBS)\n", + "\n", + "[[back to top]](#sections)\n", + "\n", + "Just as in the [***SFFS***](#sffs) algorithm, we have a conditional step: Here, we start with the whole feature subset and exclude features sequentially. Only if adding one of the previously excluded features back to a new ***feature subset*** improves the performance (assessed by the criterion function), we add it back in the ***Conditional Inclusion*** step." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "**Input:** \n", + "the set of all features, \n", + "- $Y = {y_1, y_2, ..., y_d}$ \n", + "\n", + "The ***SFBS*** algorithm takes the whole feature set as input, if our feature space consists of, e.g. 10, if our feature space consists of 10 dimensions ($d = 10$).\n", + "

    \n", + "\n", + "**Output:** \n", + "a subset of features, \n", + "- $X_k = {x_j \\; | \\; j = 1, 2, ..., k; x_j \u2208 Y}, \\quad where \\; k = (0, 1, 2, ..., d)$ \n", + "\n", + "The returned output of the algorithm is a subset of the feature space of a specified size. E.g., a subset of 5 features from a 10-dimensional feature space ($k = 5,\\; d = 10$).\n", + "

    \n", + "\n", + "**Initialization:** \n", + "- $X_0 = Y, \\quad k = d$\n", + "\n", + "We initialize the algorithm with the given feature set so that the $k = d$ (where $k$ has the size of the feature set $d$)\n", + "

    \n", + "\n", + "**Step 1 (Exclusion):** \n", + "
    \n", + "- $x^- = arg max J(x_k - x), \\quad where \\; x \u2208 X_k$ \n", + "- $X_k-1 = X_k - x^-$ \n", + "- $k = k - 1$ \n", + "- $Go \\;to \\;Step 2$ \n", + "\n", + "

    \n", + "**Step 2 (Conditional Inclusion):** \n", + "
    \n", + "- $x^+ = arg max J(x_k + x), \\quad where \\; x \u2208 Y - X_k$ \n", + "- $if J(x_k + x) > J(x_k + x):$ \n", + " - $X_k+1 = X_k + x^+$ \n", + " - $k = k + 1$ \n", + "- $Go\\; to\\; Step 1$ \n", + "\n", + "In step 1, we exclude the feature from the ***feature space*** that yields the best performance increase of the ***feature subset*** (assessed by the ***criterion function***). Then, we go over to step 2. \n", + "In step 2, we only include one of the removed features if the resulting subset would gain an increase in performance. We go back to step 1. \n", + "Steps 1 and 2 are reapeated until the **Termination** criterion is reached.\n", + "

    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "##SFBS Code\n", + "\n", + "[[back to top]](#sections)\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Sebastian Raschka\n", + "# last updated: 03/29/2014 \n", + "# Sequential Floating Backward Selection (SFBS)\n", + "\n", + "from copy import deepcopy\n", + "\n", + "def seq_float_backw_select(features, max_k, criterion_func, print_steps=False):\n", + " \"\"\"\n", + " Implementation of Sequential Floating Backward Selection.\n", + " \n", + " Keyword Arguments:\n", + " features (list): The feature space as a list of features.\n", + " max_k: Termination criterion; the size of the returned feature subset.\n", + " criterion_func (function): Function that is used to evaluate the\n", + " performance of the feature subset.\n", + " print_steps (bool): Prints the algorithm procedure if True.\n", + " \n", + " Returns the selected feature subset, a list of features of length max_k.\n", + "\n", + " \"\"\"\n", + "\n", + " # Initialization\n", + " feat_sub = deepcopy(features)\n", + " k = len(feat_sub)\n", + " i = 0\n", + " excluded_features = []\n", + " \n", + " while True:\n", + " \n", + " # Termination condition\n", + " k = len(feat_sub)\n", + " if k == max_k:\n", + " break\n", + " \n", + " # Step 1: Exclusion\n", + " if print_steps:\n", + " print('\\nExclusion from feature subset', feat_sub)\n", + " worst_feat = len(feat_sub)-1\n", + " worst_feat_val = feat_sub[worst_feat]\n", + " crit_func_max = criterion_func(feat_sub[:-1]) \n", + "\n", + " for i in reversed(range(0,len(feat_sub)-1)):\n", + " crit_func_eval = criterion_func(feat_sub[:i] + feat_sub[i+1:])\n", + " if crit_func_eval > crit_func_max:\n", + " worst_feat, crit_func_max = i, crit_func_eval\n", + " worst_feat_val = feat_sub[worst_feat]\n", + " excluded_features.append(feat_sub[worst_feat])\n", + " del feat_sub[worst_feat]\n", + " if print_steps:\n", + " print('exclude: {} -> feature subset: {}'.format(worst_feat_val, feat_sub))\n", + " \n", + " # Step 2: Conditional Inclusion\n", + " if len(excluded_features) > 0 and len(feat_sub) != max_k:\n", + " best_feat = None\n", + " best_feat_val = None\n", + " crit_func_max = criterion_func(feat_sub)\n", + " for i in range(len(excluded_features)):\n", + " crit_func_eval = criterion_func(feat_sub + [excluded_features[i]])\n", + " if crit_func_eval > crit_func_max:\n", + " best_feat, crit_func_max = i, crit_func_eval\n", + " best_feat_val = excluded_features[best_feat]\n", + " if best_feat:\n", + " feat_sub.append(excluded_features[best_feat])\n", + " del excluded_features[best_feat]\n", + " if print_steps:\n", + " print('include: {} -> feature subset: {}'.\\\n", + " format(best_feat_val, feat_sub))\n", + " \n", + " return feat_sub" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 16 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    \n", + "### Example SFBS:\n", + "\n", + "[[back to top]](#sections)\n", + "\n", + "Note that the ***Inclusion*** step in the ***Sequential Floating Backward Selection*** algorithm is ***conditional*** - a feature is only added back if the criterion function asses a better performance after its inclusion in the ***feature subset***. \n", + "Therefore, we have to be a little bit careful about the ***criterion function***: If we used our [`simple_criterion_func()`](#crit_func\"), which returns the integer sum of a subset, we would trigger an infinite loop and never reach the termination criterion - assuming that our feature space consists of positive integers. The reason is that the [`simple_criterion_func()`](#crit_func\") would always return a larger sum if we include a positive integer (our feature) to the ***feature subset***, thus let us use our [second simple criterion function](#random_crit_func), which contains a (pseudo) random integer between -15 and 15 to the returned sum. \n", + "In order to reduce the number of iterations, we set the number of desired features for the ***feature subset*** (via the argument `max_k`) to 7." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def example_seq_float_backw_select():\n", + " ex_features = [6,3,1,6,8,2,3,7,9,1]\n", + " res_seq_flbackw = seq_float_backw_select(features=ex_features, max_k=7,\\\n", + " criterion_func=simple_rand_crit_func, print_steps=True) \n", + " return res_seq_flbackw\n", + " \n", + "# Run example\n", + "res_seq_flbackw = example_seq_float_backw_select()\n", + "print('\\nRESULT: [6, 3, 1, 6, 8, 2, 3, 7, 9, 1] ->', res_seq_flbackw)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "Exclusion from feature subset [6, 3, 1, 6, 8, 2, 3, 7, 9, 1]\n", + "exclude: 2 -> feature subset: [6, 3, 1, 6, 8, 3, 7, 9, 1]\n", + "include: None -> feature subset: [6, 3, 1, 6, 8, 3, 7, 9, 1]\n", + "\n", + "Exclusion from feature subset [6, 3, 1, 6, 8, 3, 7, 9, 1]\n", + "exclude: 3 -> feature subset: [6, 3, 1, 6, 8, 7, 9, 1]\n", + "include: 3 -> feature subset: [6, 3, 1, 6, 8, 7, 9, 1, 3]\n", + "\n", + "Exclusion from feature subset [6, 3, 1, 6, 8, 7, 9, 1, 3]\n", + "exclude: 3 -> feature subset: [6, 3, 1, 6, 8, 7, 9, 1]\n", + "include: None -> feature subset: [6, 3, 1, 6, 8, 7, 9, 1]\n", + "\n", + "Exclusion from feature subset [6, 3, 1, 6, 8, 7, 9, 1]\n", + "exclude: 6 -> feature subset: [3, 1, 6, 8, 7, 9, 1]\n", + "\n", + "RESULT: [6, 3, 1, 6, 8, 2, 3, 7, 9, 1] -> [3, 1, 6, 8, 7, 9, 1]\n" + ] + } + ], + "prompt_number": 18 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 7. Genetic Algorithm (GA)\n", + "\n", + "*to be continued ...*" + ] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/funstuff/happy_mothers_day.ipynb b/other/happy_mothers_day.ipynb similarity index 100% rename from funstuff/happy_mothers_day.ipynb rename to other/happy_mothers_day.ipynb diff --git a/not_so_obvious_python_stuff.ipynb b/tutorials/not_so_obvious_python_stuff.ipynb similarity index 99% rename from not_so_obvious_python_stuff.ipynb rename to tutorials/not_so_obvious_python_stuff.ipynb index c36c0dc..c2e2948 100644 --- a/not_so_obvious_python_stuff.ipynb +++ b/tutorials/not_so_obvious_python_stuff.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:b37510e2c48c9811f7baabeff25c48a186e0e5f154b5d341f4eda6701df705e3" + "signature": "sha256:d87105a74c8f25016f90bdec495a890a988277a3f51e0589febbbac87720b033" }, "nbformat": 3, "nbformat_minor": 0, @@ -15,7 +15,7 @@ "[Sebastian Raschka](http://sebastianraschka.com) \n", "last updated: 05/24/2014 ([Changelog](#changelog))\n", "\n", - "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb) \n", + "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/tutorials/not_so_obvious_python_stuff.ipynb) \n", "- [Link to the GitHub repository](https://github.com/rasbt/python_reference) \n", "\n" ] diff --git a/sqlite3_howto/LICENSE b/tutorials/sqlite3_howto/LICENSE similarity index 100% rename from sqlite3_howto/LICENSE rename to tutorials/sqlite3_howto/LICENSE diff --git a/sqlite3_howto/README.md b/tutorials/sqlite3_howto/README.md similarity index 95% rename from sqlite3_howto/README.md rename to tutorials/sqlite3_howto/README.md index 9549f63..7ef88e9 100644 --- a/sqlite3_howto/README.md +++ b/tutorials/sqlite3_howto/README.md @@ -6,7 +6,7 @@ _\-- written by Sebastian Raschka_ on March 7, 2014 -![sqlite_python_logo.png](../Images/sqlite_python_logo.png) + @@ -29,7 +29,7 @@ _\-- written by Sebastian Raschka_ on March 7, 2014 • Conclusion The complete Python code that I am using in this tutorial can be downloaded -from my GitHub repository: +from my GitHub repository: [https://github.com/rasbt/python_reference/tutorials/sqlite3_howto](https://github.com/rasbt/python_reference/tutorials/sqlite3_howto) * * * @@ -123,8 +123,7 @@ there is more information about PRIMARY KEYs further down in this section). conn.close() -Download the script: [create_new_db.py](https://raw.github.com/rasbt/python_sq -lite_code/master/code/create_new_db.py) +Download the script: [create_new_db.py](https://raw.github.com/rasbt/python_reference/master/tutorials/code/create_new_db.py) * * * @@ -135,7 +134,7 @@ lite_code/master/code/create_new_db.py) -![1_sqlite3_init_db.png](../Images/1_sqlite3_init_db.png) +![1_sqlite3_init_db.png](../../Images/1_sqlite3_init_db.png) Using the code above, we created a new `.sqlite` database file with 2 tables. Each table consists of currently one column only, which is of type INTEGER. @@ -208,12 +207,11 @@ Let's have a look at some code: conn.close() -Download the script: [add_new_column.py](https://raw.github.com/rasbt/python_s -qlite_code/master/code/add_new_column.py) +Download the script: [add_new_column.py](https://raw.github.com/rasbt/python_reference/master/tutorials/code/add_new_column.py) -![2_sqlite3_add_col.png](../Images/2_sqlite3_add_col.png) +![2_sqlite3_add_col.png](../../Images/2_sqlite3_add_col.png) We just added 2 more columns (`my_2nd_column` and `my_3rd_column`) to @@ -275,7 +273,7 @@ But let us first have a look at the example code: Download the script: [update_or_insert_records.py](https://raw.github.com/rasb t/python_sqlite_code/master/code/update_or_insert_records.py) -![3_sqlite3_insert_update.png](../Images/3_sqlite3_insert_update.png) +![3_sqlite3_insert_update.png](../../Images/3_sqlite3_insert_update.png) Both A) `INSERT` and B) `INSERT OR IGNORE` have in common that they append new rows to the database if a given PRIMARY KEY does not exist in the database @@ -340,7 +338,7 @@ drop the index, which is also shown in the code below. Download the script: [create_unique_index.py](https://raw.github.com/rasbt/pyt hon_sqlite_code/master/code/create_unique_index.py) -![4_sqlite3_unique_index.png](../Images/4_sqlite3_unique_index.png) +![4_sqlite3_unique_index.png](../../Images/4_sqlite3_unique_index.png) @@ -407,15 +405,14 @@ Download the script: [selecting_entries.py](https://raw.github.com/rasbt/pytho n_sqlite_code/master/code/selecting_entries.py) -![4_sqlite3_unique_index.png](../Images/4_sqlite3_unique_index.png) +![4_sqlite3_unique_index.png](../../Images/4_sqlite3_unique_index.png) if we use the `.fetchall()` method, we return a list of tuples from the database query, where each tuple represents one row entry. The print output for the 5 different cases shown in the code above would look like this (note that we only have a table with 1 row here): -![6_sqlite3_print_selecting_rows.png](../Images/6_sqlite3_print_selecting_rows -.png) +![6_sqlite3_print_selecting_rows.png](../../Images/6_sqlite3_print_selecting_rows.png) @@ -550,7 +547,7 @@ lite_code/master/code/date_time_ops.py) -![5_sqlite3_date_time.png](../Images/5_sqlite3_date_time.png) +![5_sqlite3_date_time.png](../../Images/5_sqlite3_date_time.png) Some of the really convenient functions that return the current time and date @@ -585,7 +582,7 @@ and entries that are older than 1 day via Note that we don't have to provide the complete time stamps here, the same syntax applies to simple dates or simple times only, too. -![5_sqlite3_date_time_2.png](../Images/5_sqlite3_date_time_2.png) +![5_sqlite3_date_time_2.png](../../Images/5_sqlite3_date_time_2.png) @@ -651,7 +648,7 @@ column names): Download the script: [get_columnnames.py](https://raw.github.com/rasbt/python_ sqlite_code/master/code/get_columnnames.py) -![7_sqlite3_get_colnames_1.png](../Images/7_sqlite3_get_colnames_1.png) +![7_sqlite3_get_colnames_1.png](../../Images/7_sqlite3_get_colnames_1.png) Since we haven't created a PRIMARY KEY column for `my_table_3`, SQLite automatically provides an indexed `rowid` column with unique ascending integer @@ -669,7 +666,7 @@ grab the 2nd value in each tuple of the returned list, which can be done by after the `PRAGMA TABLE_INFO()` call. If we would print the contents of the variable `names` now, the output would look like this: -![7_sqlite3_get_colnames_2.png](../Images/7_sqlite3_get_colnames_2.png) +![7_sqlite3_get_colnames_2.png](../../Images/7_sqlite3_get_colnames_2.png) @@ -757,9 +754,9 @@ convenient script to print a nice overview of SQLite database tables: Download the script: [print_db_info.py](https://raw.github.com/rasbt/python_sq lite_code/master/code/print_db_info.py) -![8_sqlite3_print_db_info_1.png](../Images/8_sqlite3_print_db_info_1.png) +![8_sqlite3_print_db_info_1.png](../../Images/8_sqlite3_print_db_info_1.png) -![8_sqlite3_print_db_info_2.png](../Images/8_sqlite3_print_db_info_2.png) +![8_sqlite3_print_db_info_2.png](../../Images/8_sqlite3_print_db_info_2.png) diff --git a/sqlite3_howto/code/add_new_column.py b/tutorials/sqlite3_howto/code/add_new_column.py similarity index 100% rename from sqlite3_howto/code/add_new_column.py rename to tutorials/sqlite3_howto/code/add_new_column.py diff --git a/sqlite3_howto/code/create_new_db.py b/tutorials/sqlite3_howto/code/create_new_db.py similarity index 100% rename from sqlite3_howto/code/create_new_db.py rename to tutorials/sqlite3_howto/code/create_new_db.py diff --git a/sqlite3_howto/code/create_unique_index.py b/tutorials/sqlite3_howto/code/create_unique_index.py similarity index 100% rename from sqlite3_howto/code/create_unique_index.py rename to tutorials/sqlite3_howto/code/create_unique_index.py diff --git a/sqlite3_howto/code/date_time_ops.py b/tutorials/sqlite3_howto/code/date_time_ops.py similarity index 100% rename from sqlite3_howto/code/date_time_ops.py rename to tutorials/sqlite3_howto/code/date_time_ops.py diff --git a/sqlite3_howto/code/get_columnnames.py b/tutorials/sqlite3_howto/code/get_columnnames.py similarity index 100% rename from sqlite3_howto/code/get_columnnames.py rename to tutorials/sqlite3_howto/code/get_columnnames.py diff --git a/sqlite3_howto/code/print_db_info.py b/tutorials/sqlite3_howto/code/print_db_info.py similarity index 100% rename from sqlite3_howto/code/print_db_info.py rename to tutorials/sqlite3_howto/code/print_db_info.py diff --git a/sqlite3_howto/code/selecting_entries.py b/tutorials/sqlite3_howto/code/selecting_entries.py similarity index 100% rename from sqlite3_howto/code/selecting_entries.py rename to tutorials/sqlite3_howto/code/selecting_entries.py diff --git a/sqlite3_howto/code/update_or_insert_records.py b/tutorials/sqlite3_howto/code/update_or_insert_records.py similarity index 100% rename from sqlite3_howto/code/update_or_insert_records.py rename to tutorials/sqlite3_howto/code/update_or_insert_records.py diff --git a/sqlite3_howto/code/updating_rows.py b/tutorials/sqlite3_howto/code/updating_rows.py similarity index 100% rename from sqlite3_howto/code/updating_rows.py rename to tutorials/sqlite3_howto/code/updating_rows.py diff --git a/sqlite3_howto/code/write_from_sqlite.py b/tutorials/sqlite3_howto/code/write_from_sqlite.py similarity index 100% rename from sqlite3_howto/code/write_from_sqlite.py rename to tutorials/sqlite3_howto/code/write_from_sqlite.py From 0a8a955016641d49107c777082d0eb05ebc6fb63 Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 3 Jun 2014 18:49:29 -0400 Subject: [PATCH 087/248] added useful links --- .../markdown_syntax_highlighting/README.md | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tutorials/markdown_syntax_highlighting/README.md b/tutorials/markdown_syntax_highlighting/README.md index 75d9e29..69024e9 100644 --- a/tutorials/markdown_syntax_highlighting/README.md +++ b/tutorials/markdown_syntax_highlighting/README.md @@ -92,7 +92,26 @@ draw the reader's attention:
    +
    +
    + +Note that the syntax highlighting does not only work for Python, but other programming languages. + +So in the case of C++, for example: + + :::c++ + #include + int main() + { + std::cout << "Hello, world!" << std::endl; + return 0; + } + + +Since the CodeHilite extension in Python-Markdown uses Pygments, every programming language that is []listed here](http://pygments.org/languages/) currently has support for syntax highlighting. + +

    @@ -173,4 +192,18 @@ If we open our [**final.html**](https://github.com/rasbt/python_reference/blob/m ![](./images/mk_syntax_final_html.png) +
    +
    + +## Useful links: + + +- [Python Markdown package documentation](http://pythonhosted.org//Markdown/) + +- [The CodeHilite documentation](https://pythonhosted.org/Markdown/extensions/code_hilite.html) + +- [pygments.org](http://pygments.org) + +- [languages supported](http://pygments.org/languages/) by Pygments + From fbe3659fbf3f0be8e6af4491541a60006c64686d Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 3 Jun 2014 18:51:27 -0400 Subject: [PATCH 088/248] added useful links --- tutorials/markdown_syntax_highlighting/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/markdown_syntax_highlighting/README.md b/tutorials/markdown_syntax_highlighting/README.md index 69024e9..0148ea1 100644 --- a/tutorials/markdown_syntax_highlighting/README.md +++ b/tutorials/markdown_syntax_highlighting/README.md @@ -109,7 +109,7 @@ So in the case of C++, for example: } -Since the CodeHilite extension in Python-Markdown uses Pygments, every programming language that is []listed here](http://pygments.org/languages/) currently has support for syntax highlighting. +Since the CodeHilite extension in Python-Markdown uses Pygments, every programming language that is [listed here](http://pygments.org/languages/) currently has support for syntax highlighting.
    From d2c0bbbef3434d44a6774b1219dc3090d484fe42 Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 3 Jun 2014 22:33:59 -0400 Subject: [PATCH 089/248] multiple list sorting --- .../sorting_multiple_lists_by_col.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 howtos_as_py_files/sorting_multiple_lists_by_col.py diff --git a/howtos_as_py_files/sorting_multiple_lists_by_col.py b/howtos_as_py_files/sorting_multiple_lists_by_col.py new file mode 100644 index 0000000..7c534cb --- /dev/null +++ b/howtos_as_py_files/sorting_multiple_lists_by_col.py @@ -0,0 +1,39 @@ +# Sebastian Raschka 2014 + +""" +You have 3 lists that you want to sort "relative" to each other, +for example, picturing each list as a row in a 3x3 matrix: sort it by columns + +######################## +If the input lists are +######################## + + list1 = ['c','b','a'] + list2 = [6,5,4] + list3 = ['some-val-associated-with-c','another_val-b','z_another_third_val-a'] + +######################## +the desired outcome is: +######################## + + ['a', 'b', 'c'] + [4, 5, 6] + ['z_another_third_val-a', 'another_val-b', 'some-val-associated-with-c'] + +######################## +and NOT: +######################## + + ['a', 'b', 'c'] + [4, 5, 6] + ['another_val-b', 'some-val-associated-with-c', 'z_another_third_val-a'] + + +""" + +list1 = ['c','b','a'] +list2 = [6,5,4] +list3 = ['some-val-associated-with-c','another_val-b','z_another_third_val-a'] + + +list1, list2, list3 = zip(*sorted(zip(list1, list2, list3))) From 120c5e1d967f3a04b12d0853dada64c92e85af40 Mon Sep 17 00:00:00 2001 From: rasbt Date: Thu, 5 Jun 2014 01:27:18 -0400 Subject: [PATCH 090/248] imgs for matcheat --- Images/matcheat_julia_benchmark.png | Bin 0 -> 48090 bytes Images/mathcheat_R_logo.png | Bin 0 -> 44284 bytes Images/mathcheat_julia_logo.png | Bin 0 -> 28422 bytes Images/mathcheat_matlab_logo.png | Bin 0 -> 40206 bytes Images/mathcheat_numpy_logo.png | Bin 0 -> 8565 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Images/matcheat_julia_benchmark.png create mode 100644 Images/mathcheat_R_logo.png create mode 100644 Images/mathcheat_julia_logo.png create mode 100644 Images/mathcheat_matlab_logo.png create mode 100644 Images/mathcheat_numpy_logo.png diff --git a/Images/matcheat_julia_benchmark.png b/Images/matcheat_julia_benchmark.png new file mode 100644 index 0000000000000000000000000000000000000000..2af6e460fc2f2b9efe51da017ee8e82d1af1483d GIT binary patch literal 48090 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

    HGO%l1 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%0A$YdQLxE_xpip@wB9UG1SojcE#)* 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 ReSZ0SNsG&iRf+uc|39y^PU-*v literal 0 HcmV?d00001 diff --git a/Images/mathcheat_R_logo.png b/Images/mathcheat_R_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d4ae2b453accda8e26e2bccd64271d48bd9fe56c GIT binary patch literal 44284 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瑬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 Xkw@wr2y1~~X9JNElNYTMHVpbdj|64Q literal 0 HcmV?d00001 diff --git a/Images/mathcheat_matlab_logo.png b/Images/mathcheat_matlab_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1f87fd034325670a38ec62d897bc15c630aa7209 GIT binary patch literal 40206 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](*vB8rMW*Ym%yU^FTtVx^5}ny(V| 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 Date: Thu, 5 Jun 2014 19:02:21 -0400 Subject: [PATCH 091/248] some progress on matrix cheat sheet --- CSS/hover.css | 26 ++ Images/matcheat_R_logo.png | Bin 0 -> 32182 bytes Images/matcheat_julia_logo.png | Bin 0 -> 13752 bytes Images/matcheat_matlab_logo.png | Bin 0 -> 24758 bytes Images/matcheat_matrix.png | Bin 0 -> 188597 bytes Images/matcheat_numpy_logo.png | Bin 0 -> 8758 bytes Images/matcheat_octave_logo.png | Bin 0 -> 9558 bytes Images/mathcheat_R_logo.png | Bin 44284 -> 0 bytes Images/mathcheat_julia_logo.png | Bin 28422 -> 0 bytes Images/mathcheat_matlab_logo.png | Bin 40206 -> 0 bytes Images/mathcheat_numpy_logo.png | Bin 8565 -> 0 bytes tutorials/matrix_cheatsheet.md | 506 +++++++++++++++++++++++++++++++ 12 files changed, 532 insertions(+) create mode 100644 CSS/hover.css create mode 100644 Images/matcheat_R_logo.png create mode 100644 Images/matcheat_julia_logo.png create mode 100644 Images/matcheat_matlab_logo.png create mode 100644 Images/matcheat_matrix.png create mode 100644 Images/matcheat_numpy_logo.png create mode 100644 Images/matcheat_octave_logo.png delete mode 100644 Images/mathcheat_R_logo.png delete mode 100644 Images/mathcheat_julia_logo.png delete mode 100644 Images/mathcheat_matlab_logo.png delete mode 100644 Images/mathcheat_numpy_logo.png create mode 100644 tutorials/matrix_cheatsheet.md diff --git a/CSS/hover.css b/CSS/hover.css new file mode 100644 index 0000000..e04a4aa --- /dev/null +++ b/CSS/hover.css @@ -0,0 +1,26 @@ +.hover_light_dark{ + opacity: 0.5; + filter: alpha(opacity=50); + no-repeat; + } + +.hover_light_dark:hover { + opacity: 1; + filter: alpha(opacity=100); + } + + + +.hover_dark_light{ + opacity: 1; + filter: alpha(opacity=100); + no-repeat; + } + + +.hover_dark_light:hover { + opacity: 0.5; + filter: alpha(opacity=500); + } + + diff --git a/Images/matcheat_R_logo.png b/Images/matcheat_R_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ce6c19201f885681c88824a61f3d8c21578b73f0 GIT binary patch literal 32182 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 Y2X#vgD6}bW0ssI207*qoM6N<$g33smxBvhE literal 0 HcmV?d00001 diff --git a/Images/matcheat_matrix.png b/Images/matcheat_matrix.png new file mode 100644 index 0000000000000000000000000000000000000000..e9860787bbe989f947ba7a094595ed2680d9b1a7 GIT binary patch literal 188597 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
    002t}1^@s6I8J)%000U>X+uL$Nkc;* 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 AM*si- literal 0 HcmV?d00001 diff --git a/Images/mathcheat_R_logo.png b/Images/mathcheat_R_logo.png deleted file mode 100644 index d4ae2b453accda8e26e2bccd64271d48bd9fe56c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44284 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瑬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 Xkw@wr2y1~~X9JNElNYTMHVpbdj|64Q diff --git a/Images/mathcheat_matlab_logo.png b/Images/mathcheat_matlab_logo.png deleted file mode 100644 index 1f87fd034325670a38ec62d897bc15c630aa7209..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40206 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](*vB8rMW*Ym%yU^FTtVx^5}ny(V| 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 + + + + +# Numeric matrix manipulation - The cheat sheet for MATLAB, Python NumPy, R, and Julia + +At its core, this article is about a simple cheat sheet for basic operations on numeric matrices, which can be very useful if you working and experimenting with some of the most popular languages that are used for scientific computing, statistics, and data analysis. + + + +## Sections + +- [Introduction](#introduction) + +- [Language overview](#overview) + + - [MATLAB/Octave](#matlab) + + - [Python NumPy](#numpy) + + - [R](#r) + + - [Julia](#julia) + +- [Matrix cheat sheet](#cheatsheet) + +- [Alternative data structures: NumPy matrices vs. NumPy arrays](#numpy_arrays) + + + +
    + + + + +## Introduction + +[[back to section overview](#sections)] +
    + +Matrices (or multidimensional arrays) are not only presenting the fundamental elements of many algebraic equations that are used in many popular fields, such as pattern classification, machine learning, data mining, and math and engineering in general. But in context of scientific computing, they also come in very handy for managing and storing data in an more organized tabular form. +Such multidimensional data structures are also very powerful performance-wise thanks to the concept of automatic vectorization: instead of the individual and sequential processing of operations on scalars in loop-structures, the whole computation can be parallelized in order to make optimal use of modern computer architectures. + + +
    + +![R matrix](../Images/matcheat_matrix.png) + +
    +
    + + +
    +**Note:** +This article originated from an older article with containing a cheat sheet that was just about MATLAB matrices and NumPy arrays. Since then, I added a couple of more rows and doubled the width of the cheat sheet by adding those two other languages R and Julia. Instead of making further modifications, I wanted to keep this old article as is - for future reference and for people who may only be interested in this slimmer version: +[Moving from MATLAB matrices to NumPy arrays - A Matrix Cheatsheet](http://sebastianraschka.com/Articles/2014_matlab_vs_numpy.html). +
    +
    + +
    +
    + + + +### Language overview + +[[back to section overview](#sections)] +
    + +Before we **[jump to the actual cheat sheet](#cheatsheet)**, I wanted to give you at least a brief overview of the different languages that we are dealing with. + + +All four languages, MATLAB/Octave, Python, R, and Julia are dynamically typed, have a command line interface for the interpreter, and come with great number of additional and useful libraries to support scientific and technical computing. Conveniently, these languages also offer great solutions for easy plotting and visualizations. + +Combined with interactive notebook interfaces or dynamic report generation engines ([MuPAD](http://www.mathworks.com/discovery/mupad.html) for MATLAB, [IPython Notebook](http://ipython.org/notebook.html) for Python, [knitr](http://yihui.name/knitr/) for R, and [IJulia](https://github.com/JuliaLang/IJulia.jl) for Julia based on IPython Notebook) data analysis and documentation has never been easier. + +
    +
    + + + +# MATLAB/Octave + +[[back to section overview](#sections)] +
    + +
    + +![matlab logo](../Images/matcheat_matlab_logo.png) + + +
    + +[MATLAB](http://www.mathworks.com/products/matlab/) (stands for MATrix LABoratory) is the name of an application and language that was developed by [MathWorks](http://www.mathworks.com/index.html?s_tid=gn_logo) back in 1984. One of its strengths is the variety of different and highly optimized "toolboxes" (including very powerful functions for image and other signal processing task), which makes suitable for tackling basically every possible science and engineering task. +Like the other languages, which will be covered in this article, it has cross-platform support and is using dynamic types, which allows for a convenient interface, but can also be quite "memory hungry" for computations on large data sets. + +Even today, MATLAB is probably (still) the most popular language for numeric computation used for engineering tasks in academia as well as in industry. + +#### GNU Octave + +
    + +![matlab logo](../Images/matcheat_octave_logo.png) + + +
    + +It is also worth mentioning that MATLAB is the only language in this cheat sheet which is not free and open-sourced. But since it is so immensely popular, I want to mention it nonetheless. And as an alternative there is also the free [GNU Octave re-implementation](http://www.gnu.org/software/octave/) that follows the same syntactic rules so that the code is compatible to MATLAB (except for very specialized libraries). + +
    + +* This [image](http://commons.wikimedia.org/wiki/File:Matlab_Logo.png) is a freely usable media under public domain and represents the first eigenfunction of the L-shaped membrane, resembling (but not identical to) MATLAB's logo trademarked by MathWorks Inc. + +
    +
    + + + + + + +# Python NumPy + +[[back to section overview](#sections)] +
    + +
    + +![python logo](../Images/matcheat_numpy_logo.png) + + +
    + +Initially, the [NumPy](http://www.numpy.org) project started out under the name "Numeric" in 1995 (renamed to NumPy in 2006) as a Python library for numeric computations based on multi-dimensional data structures, such as arrays and matrices. Since it makes use of pre-compiled C code for operations on its "`ndarray`" objects, it is considerably faster than using equivalent approaches in (C)Python. + + +Python NumPy is my personal favorite since I am a big fan of the Python programming language. Although similar tools exist for other languages, I found myself to be most productive doing my research and data analyses in [IPython notebooks](http://ipython.org/notebook.html). +It allows me to easily combine Python code (sometimes optimized by compiling it via the [Cython](http://cython.org) C-Extension or the just-in-time (JIT) [Numba](http://numba.pydata.org) compiler if speed is a concern) with different libraries from the [Scipy stack](http://www.scipy.org/) including [matplotlib](http://matplotlib.org) for inline data visualization (you can find some of my example benchmarks in this [GitHub repository](http://github.com/rasbt/One-Python-benchmark-per-day)). + +
    +
    + + + +# R + +[[back to section overview](#sections)] +
    + +
    + +![R logo](../Images/matcheat_R_logo.png) + +
    + +The [R](http://www.r-project.org) programming language was developed in 1993 and is a modern GNU implementation of an older statistical programming language called [S](http://stat.bell-labs.com/S/), which was developed in the [Bell Laboratories](http://stat.bell-labs.com) in 1976. Since its release, it has a fast-growing user base and is particularly popular among statisticians. + +R was also the first language which kindled my fascination for statistics and computing. I have used it quite extensively a couple of years ago before I discovered Python as my new favorite language for data analysis. +Although R has great in-built functions for performing all sorts statistics, as well as a plethora of freely available libraries developed by the large R community, I often hear people complaining about its rather unintuitive syntax. + +
    +
    + + + +# Julia + +[[back to section overview](#sections)] +
    + +
    + +![python logo](../Images/matcheat_julia_logo.png) + + +
    + + +With its first release in 2012, [Julia](http://julialang.org) is by far the youngest of the programming languages mentioned in this article. a +While Julia can also be used as an interpreted language with dynamic types from the command line, it aims for high-performance in scientific computing that is superior to the other dynamic programming languages for technical computing thanks to its LLVM-based just-in-time (JIT) compiler. + +Personally, I haven't used Julia that extensively, yet, but there are some exciting benchmarks that look very promising: + + +![Julia benchmark](../Images/matcheat_julia_benchmark.png) + + + +C compiled by gcc 4.8.1, taking best timing from all optimization levels (-O0 through -O3). C, Fortran and Julia use OpenBLAS v0.2.8. The Python implementations of rand_mat_stat and rand_mat_mul use NumPy (v1.6.1) functions; the rest are pure Python implementations.
    + +Bezanson, J., Karpinski, S., Shah, V.B. and Edelman, A. (2012), “Julia: A fast dynamic language for technical computing”. +(Source: [http://julialang.org/benchmarks/](http://julialang.org/benchmarks/), with permission from the copyright holder) +
    + +
    +
    +
    + +
    + + + +# Cheat sheet + + +
    + +
    [back to cheat sheet overview] + + + +### Cheat sheet overview + + +- [Creating matrices](#creating) + +- Accessing matrix elements + +- Manipulating shape + +- Basic matrix operations + +- Advanced matrix operations + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TaskMATLAB/OctavePython NumPyRJuliaTask
    CREATING MATRICES
    [back to cheat sheet overview]
    Creating Matrices 
    (here: 3x3 matrix)
    M> A = [1 2 3; 4 5 6; 7 8 9]
    A =
       1   2   3
       4   5   6
       7   8   9
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> A
    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])
    R> A = matrix(c(1,2,3,4,5,6,7,8,9),nrow=3,byrow=T)
    
# equivalent to

    # A = matrix(1:9,nrow=3,byrow=T)



    R> A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    [3,] 7 8 9
    J> A=[1 2 3; 4 5 6; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 8 9
    Creating Matrices 
    (here: 3x3 matrix)
    Creating an 1D column vectorM> a = [1; 2; 3]
    a =
       1
       2
       3
    P> a = np.array([[1],[2],[3]])
    P> a
    array([[1],
           [2],
           [3]])
    R> a = matrix(c(1,2,3), nrow=3, byrow=T)
    R> a
    [,1]
    [1,] 1
    [2,] 2
    [3,] 3
    R>
    J> a=[1; 2; 3]
    3-element Array{Int64,1}:
    1
    2
    3
    Creating an 1D column vector
    Creating an
    1D row vector
    M> b = [1 2 3]
    b =
       1   2   3
    P> b = np.array([1,2,3])

    P> b
    array([1, 2, 3])
    R> b = matrix(c(1,2,3), ncol=3)

    R> b
    [,1] [,2] [,3]
    [1,] 1 2 3
    J> b=[1 2 3]
    1x3 Array{Int64,2}:
    1 2 3

    # note that this is a 2D array. # vectors in Julia are columns
    Creating an
    1D row vector
    Creating a
    random m x n matrix
    M> rand(3,2)
    ans =
       0.21977   0.10220
       0.38959   0.69911
       0.15624   0.65637
    P> np.random.rand(3,2)
    array([[ 0.29347865,  0.17920462],
           [ 0.51615758,  0.64593471],
           [ 0.01067605,  0.09692771]])
    R> matrix(runif(3*2), ncol=2)
    [,1] [,2]
    [1,] 0.5675127 0.7751204
    [2,] 0.3439412 0.5261893
    [3,] 0.2273177 0.223438
    J> rand(3,2)
    3x2 Array{Float64,2}:
    0.36882 0.267725
    0.571856 0.601524
    0.848084 0.858935
    Creating a
    random m x n matrix
    Creating a
    zero m x n matrix 
    M> zeros(3,2)
    ans =
       0   0
       0   0
       0   0
    P> np.zeros((3,2))
    array([[ 0.,  0.],
           [ 0.,  0.],
           [ 0.,  0.]])
    R> mat.or.vec(3, 2)
    [,1] [,2]
    [1,] 0 0
    [2,] 0 0
    [3,] 0 0
    J> zeros(3,2)
    3x2 Array{Float64,2}:
    0.0 0.0
    0.0 0.0
    0.0 0.0
    Creating a
    zero m x n matrix 
    Creating an
    m x n matrix of ones
    M> ones(3,2)
    ans =
       1   1
       1   1
       1   1
    P> np.ones([3,2])
    array([[ 1.,  1.],
           [ 1.,  1.],
           [ 1.,  1.]])
    R> mat.or.vec(3, 2) + 1
    [,1] [,2]
    [1,] 1 1
    [2,] 1 1
    [3,] 1 1
    J> ones(3,2)
    3x2 Array{Float64,2}:
    1.0 1.0
    1.0 1.0
    1.0 1.0
    Creating an
    m x n matrix of ones
    Creating an
    identity matrix
    M> eye(3)
    ans =
    Diagonal Matrix
       1   0   0
       0   1   0
       0   0   1
    P> np.eye(3)
    array([[ 1.,  0.,  0.],
           [ 0.,  1.,  0.],
           [ 0.,  0.,  1.]])
    R> diag(3)
    [,1] [,2] [,3]
    [1,] 1 0 0
    [2,] 0 1 0
    [3,] 0 0 1
    J> eye(3)
    3x3 Array{Float64,2}:
    1.0 0.0 0.0
    0.0 1.0 0.0
    0.0 0.0 1.0
    Creating an
    identity matrix
    Creating a
    diagonal matrix
    M> a = [1 2 3]

    M> diag(a)
    ans =
    Diagonal Matrix
       1   0   0
       0   2   0
       0   0   3
    P> a = np.array([1,2,3])

    P> np.diag(a)
    array([[1, 0, 0],
           [0, 2, 0],
           [0, 0, 3]])
    R> diag(1:3)
    [,1] [,2] [,3]
    [1,] 1 0 0
    [2,] 0 2 0
    [3,] 0 0 3
    J> a=[1, 2, 3]

    # added commas because julia
    # vectors are columnar

    J> diagm(a)
    3x3 Array{Int64,2}:
    1 0 0
    0 2 0
    0 0 3
    Creating a
    diagonal matrix
    ACESSING MATRIX ELEMENTS
    Getting the dimension
    of a matrix
    (here: 2D, rows x cols)
    M> A = [1 2 3; 4 5 6]
    A =
       1   2   3
       4   5   6

    M> size(A)
    ans =
       2   3
    P> A = np.array([ [1,2,3], [4,5,6] ])

    P> A
    array([[1, 2, 3],
           [4, 5, 6]])

    P> A.shape
    (2, 3)
    R> A = matrix(1:6,nrow=2,byrow=T)

    R> A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
R> dim(A)
    [1] 2 3
    J> A=[1 2 3; 4 5 6]
    2x3 Array{Int64,2}:
    1 2 3
    4 5 6

    J> size(A)
    (2,3)
    Getting the dimension
    of a matrix
    (here: 2D, rows x cols)
    Selecting rows M> A = [1 2 3; 4 5 6; 7 8 9]

    % 1st row
    M> A(1,:)
    ans =
       1   2   3

    % 1st 2 rows
    M> A(1:2,:)
    ans =
       1   2   3
       4   5   6
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    # 1st row
    P> A[0,:]
    array([1, 2, 3])

    # 1st 2 rows
    P> A[0:2,:]
    array([[1, 2, 3], [4, 5, 6]])
    R> A = matrix(1:9,nrow=3,byrow=T)



    # 1st row
    

R> A[1,]
    [1] 1 2 3

    

# 1st 2 rows


    R> A[1:2,]
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    J> A=[1 2 3; 4 5 6; 7 8 9];
    #semicolon suppresses output

    #1st row
    J> A[1,:]
    1x3 Array{Int64,2}:
    1 2 3

    #1st 2 rows
    J> A[1:2,:]
    2x3 Array{Int64,2}:
    1 2 3
    4 5 6
    Selecting rows 
    Selecting columnsM> A = [1 2 3; 4 5 6; 7 8 9]

    % 1st column
    M> A(:,1)
    ans =
       1
       4
       7

    % 1st 2 columns
    M> A(:,1:2)
    ans =
       1   2
       4   5
       7   8
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    # 1st column (as row vector)
    P> A[:,0]
    array([1, 4, 7])

    # 1st column (as column vector)
    P> A[:,[0]]
    array([[1],
           [4],
           [7]])

    # 1st 2 columns
    P> A[:,0:2]
    array([[1, 2], 
           [4, 5], 
           [7, 8]])
    R> A = matrix(1:9,nrow=3,byrow=T)




    # 1st column as row vector

    R> t(A[,1])
    [,1] [,2] [,3]
    [1,] 1 4 7



    # 1st column as column vector

    R> A[,1]
    [1] 1 4 7



    # 1st 2 columns

    R> A[,1:2]
    [,1] [,2]
    [1,] 1 2
    [2,] 4 5
    [3,] 7 8
    J> A=[1 2 3; 4 5 6; 7 8 9];

    #1st column
    J> A[:,1]
    3-element Array{Int64,1}:
    1
    4
    7

    #1st 2 columns
    J> A[:,1:2]
    3x2 Array{Int64,2}:
    1 2
    4 5
    7 8
    Selecting columns
    Extracting rows and columns by criteria

    (here: get rows that have value 9 in column 3)
    M> A = [1 2 3; 4 5 9; 7 8 9]
    A =
       1   2   3
       4   5   9
       7   8   9

    M> A(A(:,3) == 9,:)
    ans =
       4   5   9
       7   8   9
    P> A = np.array([ [1,2,3], [4,5,9], [7,8,9]])

    P> A
    array([[1, 2, 3],
           [4, 5, 9],
           [7, 8, 9]])

    P> A[A[:,2] == 9]
    array([[4, 5, 9],
           [7, 8, 9]])
    R> A = matrix(1:9,nrow=3,byrow=T)



    R> A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 9
    [3,] 7 8 9



    R> matrix(A[A[,3]==9], ncol=3)
    [,1] [,2] [,3]
    [1,] 4 5 9
    [2,] 7 8 9
    J> A=[1 2 3; 4 5 9; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 9
    7 8 9

    # use '.==' for
    # element-wise check
    J> A[ A[:,3] .==9, :]
    2x3 Array{Int64,2}:
    4 5 9
    7 8 9
    Extracting rows and columns by criteria

    (here: get rows that have value 9 in column 3)
    Accessing elements
    (here: 1st element)
    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A(1,1)
    ans =  1
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> A[0,0]
    1
    R> A = matrix(c(1,2,3,4,5,9,7,8,9),nrow=3,byrow=T)


    
R> A[1,1]
    [1] 1
    J> A=[1 2 3; 4 5 6; 7 8 9];

    J> A[1,1]
    1
    Accessing elements
    (here: 1st element)
    MANIPULATING SHAPE AND DIMENSIONS
    Converting 
    row to column vectors
    M> b = [1 2 3]


    M> b = b'
    b =
       1
       2
       3
    P> b = np.array([1, 2, 3])

    P> b = b[np.newaxis].T
    # alternatively
    # b = b[:,np.newaxis]

    P> b
    array([[1],
           [2],
           [3]])
    R> b = matrix(c(1,2,3), ncol=3)

    R> t(b)
    [,1]
    [1,] 1
    [2,] 2
    [3,] 3
    J> b=vec([1 2 3])
    3-element Array{Int64,1}:
    1
    2
    3
    Converting 
    row to column vectors
    Reshaping Matrices

    (here: 3x3 matrix to row vector)
    M> A = [1 2 3; 4 5 6; 7 8 9]
    A =
       1   2   3
       4   5   6
       7   8   9

    M> total_elements = numel(A)

    M> B = reshape(A,1,total_elements) 
    % or reshape(A,1,9)
    B =
       1   4   7   2   5   8   3   6   9
    P> A = np.array([[1,2,3],[4,5,6],[7,8,9]])

    P> A
    array([[1, 2, 3],
           [4, 5, 9],
           [7, 8, 9]])

    P> total_elements = A.shape[0] * A.shape[1]

    P> B = A.reshape(1, total_elements) 

    # or A.reshape(1,9)
    # Alternative: A.shape = (1,9) 
    # to change the array in place

    P> B
    array([[1, 2, 3, 4, 5, 6, 7, 8, 9]])
    R> A = matrix(1:9,nrow=3,byrow=T)



    R> A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    [3,] 7 8 9
R> total_elements = dim(A)[1] * dim(A)[2]

    R> B = matrix(A, ncol=total_elements)

    R> B
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
    [1,] 1 4 7 2 5 8 3 6 9
    J> A=[1 2 3; 4 5 6; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 8 9

    J> total_elements=length(A)
    9

    J>B=reshape(A,1,total_elements)
    1x9 Array{Int64,2}:
    1 4 7 2 5 8 3 6 9
    Reshaping Matrices

    (here: 3x3 matrix to row vector)
    Concatenating matricesM> A = [1 2 3; 4 5 6]

    M> B = [7 8 9; 10 11 12]

    M> C = [A; B]
        1    2    3
        4    5    6
        7    8    9
       10   11   12
    P> A = np.array([[1, 2, 3], [4, 5, 6]])

    P> B = np.array([[7, 8, 9],[10,11,12]])

    P> C = np.concatenate((A, B), axis=0)

    P> C
    array([[ 1, 2, 3], 
           [ 4, 5, 6], 
           [ 7, 8, 9], 
           [10, 11, 12]])
    R> A = matrix(1:6,nrow=2,byrow=T)

    R> B = matrix(7:12,nrow=2,byrow=T)

    R> C = rbind(A,B)

    R> C
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    [3,] 7 8 9
    [4,] 10 11 12
    J> A=[1 2 3; 4 5 6];

    J> B=[7 8 9; 10 11 12];

    J> C=[A; B]
    4x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 8 9
    10 11 12
    Concatenating matrices
    Stacking 
    vectors and matrices
    M> a = [1 2 3]

    M> b = [4 5 6]

    M> c = [a' b']
    c =
       1   4
       2   5
       3   6

    M> c = [a; b]
    c =
       1   2   3
       4   5   6
    P> a = np.array([1,2,3])
    P> b = np.array([4,5,6])

    P> np.c_[a,b]
    array([[1, 4],
           [2, 5],
           [3, 6]])

    P> np.r_[a,b]
    array([[1, 2, 3],
           [4, 5, 6]])
    R> a = matrix(1:3, ncol=3)

    R> b = matrix(4:6, ncol=3)

    R> matrix(rbind(A, B), ncol=2)
    [,1] [,2]
    [1,] 1 5
    [2,] 4 3


    
R> rbind(A,B)
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    J> a=[1 2 3];

    J> b=[4 5 6];

    J> c=[a' b']
    3x2 Array{Int64,2}:
    1 4
    2 5
    3 6

    J> c=[a; b]
    2x3 Array{Int64,2}:
    1 2 3
    4 5 6
    Stacking 
    vectors and matrices
    BASIC MATRIX OPERATIONS
    Matrix-scalar
    operations
    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A * 2
    ans =
        2    4    6
        8   10   12
       14   16   18

    M> A + 2

    M> A - 2

    M> A / 2
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> A * 2
    array([[ 2,  4,  6],
           [ 8, 10, 12],
           [14, 16, 18]])

    P> A + 2

    P> A - 2

    P> A / 2
    R> A = matrix(1:9, nrow=3, byrow=T)

    R> A * 2
    [,1] [,2] [,3]
    [1,] 2 4 6
    [2,] 8 10 12
    [3,] 14 16 18
R> A + 2

    R> A - 2

    R> A / 2
    J> A=[1 2 3; 4 5 6; 7 8 9];

    # elementwise operator

    J> A .* 2
    3x3 Array{Int64,2}:
    2 4 6
    8 10 12
    14 16 18

    J> A .+ 2;

    J> A .- 2;

    J> A ./ 2;
    Matrix-scalar
    operations
    Matrix-matrix
    multiplication
    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A * A
    ans =
        30    36    42
        66    81    96
       102   126   150
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> np.dot(A,A) # or A.dot(A)
    array([[ 30,  36,  42],
           [ 66,  81,  96],
           [102, 126, 150]])
    R> A = matrix(1:9, nrow=3, byrow=T)

    R> A %*% A
    [,1] [,2] [,3]
    [1,] 30 36 42
    [2,] 66 81 96
    [3,] 102 126 150
    J> A=[1 2 3; 4 5 6; 7 8 9];

    J> A * A
    3x3 Array{Int64,2}:
    30 36 42
    66 81 96
    102 126 150
    Matrix-matrix
    multiplication
    Matrix-vector
    multiplication
    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> b = [ 1; 2; 3 ]

    M> A * b
    ans =
       14
       32
       50
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> b = np.array([ [1], [2], [3] ])

    P> np.dot(A,b) # or A.dot(b)

    array([[14], [32], [50]])
    R> A = matrix(1:9, ncol=3)

    R> b = matrix(1:3, nrow=3)

R> t(b %*% A)
    [,1]
    [1,] 14
    [2,] 32
    [3,] 50
    J> A=[1 2 3; 4 5 6; 7 8 9];

    J> b=[1; 2; 3];

    J> A*b
    3-element Array{Int64,1}:
    14
    32
    50
    Matrix-vector
    multiplication
    Element-wise 
    matrix-matrix operations
    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A .* A
    ans =
        1    4    9
       16   25   36
       49   64   81

    M> A .+ A

    M> A .- A

    M> A ./ A
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> A * A
    array([[ 1,  4,  9],
           [16, 25, 36],
           [49, 64, 81]])

    P> A + A

    P> A - A

    P> A / A
    R> A = matrix(1:9, nrow=3, byrow=T)
R> A * A
    [,1] [,2] [,3]
    [1,] 1 4 9
    [2,] 16 25 36
    [3,] 49 64 81



    R> A + A

    R> A - A

    R> A / A
    J> A=[1 2 3; 4 5 6; 7 8 9];

    J> A .* A
    3x3 Array{Int64,2}:
    1 4 9
    16 25 36
    49 64 81

    J> A .+ A;

    J> A .- A;

    J> A ./ A;
    Element-wise 
    matrix-matrix operations
    Matrix elements to power n

    (here: individual elements squared)
    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A.^2
    ans =
        1    4    9
       16   25   36
       49   64   81
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> np.power(A,2)
    array([[ 1,  4,  9],
           [16, 25, 36],
           [49, 64, 81]])
    R> A = matrix(1:9, nrow=3, byrow=T)

    R> A ^ 2
    [,1] [,2] [,3]
    [1,] 1 4 9
    [2,] 16 25 36
    [3,] 49 64 81
    J> A=[1 2 3; 4 5 6; 7 8 9];

    J> A .^ 2
    3x3 Array{Int64,2}:
    1 4 9
    16 25 36
    49 64 81
    Matrix elements to power n

    (here: individual elements squared)
    Matrix to power n

    (here: matrix-matrix multiplication with itself)
    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A ^ 2
    ans =
        30    36    42
        66    81    96
       102   126   150
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> np.linalg.matrix_power(A,2)
    array([[ 30,  36,  42],
           [ 66,  81,  96],
           [102, 126, 150]])
    R> A = matrix(1:9, ncol=3)

    
# requires the ‘expm’ package


    R> install.packages('expm')


    R> library(expm)


    
R> A %^% 2
    [,1] [,2] [,3]
    [1,] 30 66 102
    [2,] 36 81 126
    [3,] 42 96 150
    J> A=[1 2 3; 4 5 6; 7 8 9];

    J> A ^ 2
    3x3 Array{Int64,2}:
    30 36 42
    66 81 96
    102 126 150
    Matrix to power n

    (here: matrix-matrix multiplication with itself)
    Matrix transposeM> A = [1 2 3; 4 5 6; 7 8 9]

    M> A'
    ans =
       1   4   7
       2   5   8
       3   6   9
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> A.T
    array([[1, 4, 7],
           [2, 5, 8],
           [3, 6, 9]])
    R> A = matrix(1:9, nrow=3, byrow=T)


    R> t(A)
    [,1] [,2] [,3]
    [1,] 1 4 7
    [2,] 2 5 8
    [3,] 3 6 9
    J> A=[1 2 3; 4 5 6; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 8 9

    J> A'
    3x3 Array{Int64,2}:
    1 4 7
    2 5 8
    3 6 9
    Matrix transpose
    Determinant of a matrix:
     A -> |A|
    M> A = [6 1 1; 4 -2 5; 2 8 7]
    A =
       6   1   1
       4  -2   5
       2   8   7

    M> det(A)
    ans = -306
    P> A = np.array([[6,1,1],[4,-2,5],[2,8,7]])

    P> A
    array([[ 6,  1,  1],
           [ 4, -2,  5],
           [ 2,  8,  7]])

    P> np.linalg.det(A)
    -306.0
    R> A = matrix(c(6,1,1,4,-2,5,2,8,7), nrow=3, byrow=T)

    R> A
    [,1] [,2] [,3]
    [1,] 6 1 1
    [2,] 4 -2 5
    [3,] 2 8 7

    R> det(A)
    [1] -306
    J> A=[6 1 1; 4 -2 5; 2 8 7]
    3x3 Array{Int64,2}:
    6 1 1
    4 -2 5
    2 8 7

    J> det(A)
    -306.0
    Determinant of a matrix:
     A -> |A|
    Inverse of a matrixM> A = [4 7; 2 6]
    A =
       4   7
       2   6

    M> A_inv = inv(A)
    A_inv =
       0.60000  -0.70000
      -0.20000   0.40000
    P> A = np.array([[4, 7], [2, 6]])

    P> A
    array([[4, 7], 
           [2, 6]])

    P> A_inverse = np.linalg.inv(A)

    P> A_inverse
    array([[ 0.6, -0.7], 
           [-0.2, 0.4]])
    R> A = matrix(c(4,7,2,6), nrow=2, byrow=T)

    R> A
    [,1] [,2]
    [1,] 4 7
    [2,] 2 6

    R> solve(A)
    [,1] [,2]
    [1,] 0.6 -0.7
    [2,] -0.2 0.4
    J> A=[4 7; 2 6]
    2x2 Array{Int64,2}:
    4 7
    2 6

    J> A_inv=inv(A)
    2x2 Array{Float64,2}:
    0.6 -0.7
    -0.2 0.4
    Inverse of a matrix
    ADVANCED MATRIX OPERATIONS
    Calculating the covariance matrix 
    of 3 random variables

    (here: covariances of the means 
    of x1, x2, and x3)
    M> x1 = [4.0000 4.2000 3.9000 4.3000 4.1000]’

    M> x2 = [2.0000 2.1000 2.0000 2.1000 2.2000]'

    M> x3 = [0.60000 0.59000 0.58000 0.62000 0.63000]’

    M> cov( [x1,x2,x3] )
    ans =
       2.5000e-02   7.5000e-03   1.7500e-03
       7.5000e-03   7.0000e-03   1.3500e-03
       1.7500e-03   1.3500e-03   4.3000e-04
    P> x1 = np.array([ 4, 4.2, 3.9, 4.3, 4.1])

    P> x2 = np.array([ 2, 2.1, 2, 2.1, 2.2])

    P> x3 = np.array([ 0.6, 0.59, 0.58, 0.62, 0.63])

    P> np.cov([x1, x2, x3])
    Array([[ 0.025  ,  0.0075 ,  0.00175],
           [ 0.0075 ,  0.007  ,  0.00135],
           [ 0.00175,  0.00135,  0.00043]])
    R> x1 = matrix(c(4, 4.2, 3.9, 4.3, 4.1), ncol=5)

    R> x2 = matrix(c(2, 2.1, 2, 2.1, 2.2), ncol=5)

    R> x3 = matrix(c(0.6, 0.59, 0.58, 0.62, 0.63), ncol=5)



    R> cov(matrix(c(x1, x2, x3), ncol=3))
    [,1] [,2] [,3]
    [1,] 0.02500 0.00750 0.00175
    [2,] 0.00750 0.00700 0.00135
    [3,] 0.00175 0.00135 0.00043
    J> x1=[4.0 4.2 3.9 4.3 4.1]';

    J> x2=[2. 2.1 2. 2.1 2.2]';

    J> x3=[0.6 .59 .58 .62 .63]';

    J> cov([x1 x2 x3])
    3x3 Array{Float64,2}:
    0.025 0.0075 0.00175
    0.0075 0.007 0.00135
    0.00175 0.00135 0.00043
    Calculating the covariance matrix 
    of 3 random variables

    (here: covariances of the means 
    of x1, x2, and x3)
    Calculating 
    eigenvectors and eigenvalues
    M> A = [3 1; 1 3]
    A =
       3   1
       1   3

    M> [eig_vec,eig_val] = eig(A)
    eig_vec =
      -0.70711   0.70711
       0.70711   0.70711
    eig_val =
    Diagonal Matrix
       2   0
       0   4
    P> A = np.array([[3, 1], [1, 3]])

    P> A
    array([[3, 1],
           [1, 3]])

    P> eig_val, eig_vec = np.linalg.eig(A)
    P> eig_val
    array([ 4.,  2.])

    P> eig_vec
    Array([[ 0.70710678, -0.70710678],
           [ 0.70710678,  0.70710678]])
    R> A = matrix(c(3,1,1,3), ncol=2)

    R> A
    [,1] [,2]
    [1,] 3 1
    [2,] 1 3
    R> eigen(A)
    $values
    [1] 4 2

    $vectors
    [,1] [,2]
    [1,] 0.7071068 -0.7071068
    [2,] 0.7071068 0.7071068
    J> A=[3 1; 1 3]
    2x2 Array{Int64,2}:
    3 1
    1 3

    J> (eig_vec,eig_val)=eig(a)
    ([2.0,4.0],
    2x2 Array{Float64,2}:
    -0.707107 0.707107
    0.707107 0.707107)
    Calculating 
    eigenvectors and eigenvalues
    Generating a Gaussian dataset:

    creating random vectors from the multivariate normal
    distribution given mean and covariance matrix

    (here: 5 random vectors with
    mean 0, covariance = 0, variance = 2)
    % requires statistics toolbox package
    % how to install and load it in Octave:

    % download the package from: 
    % http://octave.sourceforge.net/packages.php
    % pkg install 
    %     ~/Desktop/io-2.0.2.tar.gz  
    % pkg install 
    %     ~/Desktop/statistics-1.2.3.tar.gz

    M> pkg load statistics

    M> mean = [0 0]

    M> cov = [2 0; 0 2]
    cov =
       2   0
       0   2

    M> mvnrnd(mean,cov,5)
       2.480150  -0.559906
      -2.933047   0.560212
       0.098206   3.055316
      -0.985215  -0.990936
       1.122528   0.686977
        
    P> mean = np.array([0,0])

    P> cov = np.array([[2,0],[0,2]])

    P> np.random.multivariate_normal(mean, cov, 5)

    Array([[ 1.55432624, -1.17972629], 
           [-2.01185294, 1.96081908], 
           [-2.11810813, 1.45784216], 
           [-2.93207591, -0.07369322], 
           [-1.37031244, -1.18408792]])
    # requires the ‘mass’ package

    
R> install.packages('MASS')

    
R> library(MASS)


    R> mvrnorm(n=10, mean, cov)
    [,1] [,2]
    [1,] -0.8407830 -0.1882706
    [2,] 0.8496822 -0.7889329
    [3,] -0.1564171 0.8422177
    [4,] -0.6288779 1.0618688
    [5,] -0.5103879 0.1303697
    [6,] 0.8413189 -0.1623758
    [7,] -1.0495466 -0.4161082
    [8,] -1.3236339 0.7755572
    [9,] 0.2771013 1.4900494
    [10,] -1.3536268 0.2338913
    # requires the Distributions package from https://github.com/JuliaStats/Distributions.jl

    J> using Distributions

    J> mean=[0., 0.]
    2-element Array{Float64,1}:
    0.0
    0.0

    J> cov=[2. 0.; 0. 2.]
    2x2 Array{Float64,2}:
    2.0 0.0
    0.0 2.0

    J> rand( MvNormal(mean, cov), 5)
    2x5 Array{Float64,2}:
    -0.527634 0.370725 -0.761928 -3.91747 1.47516
    -0.448821 2.21904 2.24561 0.692063 0.390495
    Generating a Gaussian dataset:

    creating random vectors from the multivariate normal
    distribution given mean and covariance matrix

    (here: 5 random vectors with
    mean 0, covariance = 0, variance = 2)
    + + + + + + + + +### Alternative data structures: NumPy matrices vs. NumPy arrays + +Python's NumPy library also has a dedicated "matrix" type with a syntax that is a little bit closer to the MATLAB matrix: For example, the " * " operator would perform a matrix-matrix multiplication of NumPy matrices - same operator performs element-wise multiplication on NumPy arrays. +Vice versa, the "`.dot()`" method is used for element-wise multiplication of NumPy matrices, wheras the equivalent operation would for NumPy arrays would be achieved via the " * "-operator. +**Most people recommend the usage of the NumPy array type over NumPy matrices, since arrays are what most of the NumPy functions return.** \ No newline at end of file From 4ebe90dceb51dcb8d82b0e25c4df237e08dcb328 Mon Sep 17 00:00:00 2001 From: rasbt Date: Thu, 5 Jun 2014 23:40:21 -0400 Subject: [PATCH 092/248] matrix cheatsheet finished --- README.md | 3 + tutorials/matrix_cheatsheet.md | 1382 ++++++++++++++++++++----- tutorials/matrix_cheatsheet_only.html | 1180 +++++++++++++++++++++ 3 files changed, 2331 insertions(+), 234 deletions(-) create mode 100644 tutorials/matrix_cheatsheet_only.html diff --git a/README.md b/README.md index f4e300a..d894b75 100755 --- a/README.md +++ b/README.md @@ -77,6 +77,9 @@ GitHub repository [One-Python-benchmark-per-day](https://github.com/rasbt/One-Py - Happy Mother's Day [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/other/happy_mothers_day.ipynb?create=1)] +- Numeric matrix manipulation - The cheat sheet for MATLAB, Python NumPy, R, and Julia [[Markdown](./tutorials/matrix_cheatsheet.md)] + +
    ###// Useful scripts and snippets diff --git a/tutorials/matrix_cheatsheet.md b/tutorials/matrix_cheatsheet.md index cc12686..24bfd84 100644 --- a/tutorials/matrix_cheatsheet.md +++ b/tutorials/matrix_cheatsheet.md @@ -203,10 +203,11 @@ Bezanson, J., Karpinski, S., Shah, V.B. and Edelman, A. (2012), “Julia: A fast # Cheat sheet +[[back to section overview](#sections)] +
    -
    [back to cheat sheet overview] @@ -215,292 +216,1205 @@ Bezanson, J., Karpinski, S., Shah, V.B. and Edelman, A. (2012), “Julia: A fast - [Creating matrices](#creating) -- Accessing matrix elements +- [Accessing matrix elements](#accessing) -- Manipulating shape +- [Manipulating shape](#manipulating) -- Basic matrix operations +- [Basic matrix operations](#basic_ops) -- Advanced matrix operations +- [Advanced matrix operations](#advanced_ops)



    - - - - - - - - - - - - - - - - - - + +**If you are interested in downloading this cheat sheet table for your references, you can find it [here on GitHub](https://github.com/rasbt/python_reference/blob/master/tutorials/matrix_cheatsheet_only.html)** + +
    +
    + +
    TaskMATLAB/OctavePython NumPyRJuliaTask
    CREATING MATRICES
    [back to cheat sheet overview]
    + + + + + + - - - - - - + + + + + + - - - - - - + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - + - - - - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - + + + + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + +
    Creating Matrices 
    (here: 3x3 matrix)
    M> A = [1 2 3; 4 5 6; 7 8 9]
    A =
       1   2   3
       4   5   6
       7   8   9
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> A
    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])
    R> A = matrix(c(1,2,3,4,5,6,7,8,9),nrow=3,byrow=T)
    
# equivalent to

    # A = matrix(1:9,nrow=3,byrow=T)



    R> A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    [3,] 7 8 9
    J> A=[1 2 3; 4 5 6; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 8 9
    Creating Matrices 
    (here: 3x3 matrix)
    +

    Task

    +
    +

    MATLAB/Octave

    +
    +

    Python + NumPy

    +
    +

    R

    +
    +

    Julia

    +
    +

    Task

    +
    Creating an 1D column vectorM> a = [1; 2; 3]
    a =
       1
       2
       3
    P> a = np.array([[1],[2],[3]])
    P> a
    array([[1],
           [2],
           [3]])
    R> a = matrix(c(1,2,3), nrow=3, byrow=T)
    R> a
    [,1]
    [1,] 1
    [2,] 2
    [3,] 3
    R>
    J> a=[1; 2; 3]
    3-element Array{Int64,1}:
    1
    2
    3
    Creating an 1D column vector +

    CREATING + MATRICES
    [back to cheat sheet overview]

    +
    Creating an
    1D row vector
    M> b = [1 2 3]
    b =
       1   2   3
    P> b = np.array([1,2,3])

    P> b
    array([1, 2, 3])
    R> b = matrix(c(1,2,3), ncol=3)

    R> b
    [,1] [,2] [,3]
    [1,] 1 2 3
    J> b=[1 2 3]
    1x3 Array{Int64,2}:
    1 2 3

    # note that this is a 2D array. # vectors in Julia are columns
    Creating an
    1D row vector
    +

    Creating + Matrices 
    (here: 3x3 matrix)

    +
    +

    M> + A = [1 2 3; 4 5 6; 7 8 9]
    A =
       1   2   + 3
       4   5   6
       7   8   + 9

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> + A
    array([[1, 2, 3],
           [4, 5, 6],
       +     [7, 8, 9]])

    +
    +

    R> + A = matrix(c(1,2,3,4,5,6,7,8,9),nrow=3,byrow=T)

    
# + equivalent to

    # A = matrix(1:9,nrow=3,byrow=T)



    R> + A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    [3,] 7 8 9

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 + 8 9

    +
    +

    Creating + Matrices 
    (here: 3x3 matrix)

    +
    Creating a
    random m x n matrix
    M> rand(3,2)
    ans =
       0.21977   0.10220
       0.38959   0.69911
       0.15624   0.65637
    P> np.random.rand(3,2)
    array([[ 0.29347865,  0.17920462],
           [ 0.51615758,  0.64593471],
           [ 0.01067605,  0.09692771]])
    R> matrix(runif(3*2), ncol=2)
    [,1] [,2]
    [1,] 0.5675127 0.7751204
    [2,] 0.3439412 0.5261893
    [3,] 0.2273177 0.223438
    J> rand(3,2)
    3x2 Array{Float64,2}:
    0.36882 0.267725
    0.571856 0.601524
    0.848084 0.858935
    Creating a
    random m x n matrix
    +

    Creating + an 1D column vector

    +
    +

    M> + a = [1; 2; 3]
    a =
       1
       2
       + 3

    +
    +

    P> + a = np.array([[1],[2],[3]])

    P> + a
    array([[1],
           [2],
       +     [3]])

    +
    +

    R> + a = matrix(c(1,2,3), nrow=3, byrow=T)

    R> + a
    [,1]
    [1,] 1
    [2,] 2
    [3,] 3

    +
    +

    J> + a=[1; 2; 3]
    3-element Array{Int64,1}:
    1
    2
    3

    +
    +

    Creating + an 1D column vector

    +
    Creating a
    zero m x n matrix 
    M> zeros(3,2)
    ans =
       0   0
       0   0
       0   0
    P> np.zeros((3,2))
    array([[ 0.,  0.],
           [ 0.,  0.],
           [ 0.,  0.]])
    R> mat.or.vec(3, 2)
    [,1] [,2]
    [1,] 0 0
    [2,] 0 0
    [3,] 0 0
    J> zeros(3,2)
    3x2 Array{Float64,2}:
    0.0 0.0
    0.0 0.0
    0.0 0.0
    Creating a
    zero m x n matrix 
    +

    Creating + an
    1D row vector

    +
    +

    M> + b = [1 2 3]
    b =
       1   2   3

    +
    +

    P> + b = np.array([1,2,3])

    P> + b
    array([1, 2, 3])

    +
    +

    R> + b = matrix(c(1,2,3), ncol=3)

    R> + b
    [,1] [,2] [,3]
    [1,] 1 2 3

    +
    +

    J> + b=[1 2 3]
    1x3 Array{Int64,2}:
    1 2 3

    # note that this + is a 2D array.
    # vectors in Julia are columns

    +
    +

    Creating + an
    1D row vector

    +
    Creating an
    m x n matrix of ones
    M> ones(3,2)
    ans =
       1   1
       1   1
       1   1
    P> np.ones([3,2])
    array([[ 1.,  1.],
           [ 1.,  1.],
           [ 1.,  1.]])
    R> mat.or.vec(3, 2) + 1
    [,1] [,2]
    [1,] 1 1
    [2,] 1 1
    [3,] 1 1
    J> ones(3,2)
    3x2 Array{Float64,2}:
    1.0 1.0
    1.0 1.0
    1.0 1.0
    Creating an
    m x n matrix of ones
    +

    Creating + a
    random m x n matrix

    +
    +

    M> + rand(3,2)
    ans =
       0.21977   0.10220
       + 0.38959   0.69911
       0.15624   0.65637

    +
    +

    P> + np.random.rand(3,2)
    array([[ 0.29347865,  0.17920462],
       +     [ 0.51615758,  0.64593471],
         +   [ 0.01067605,  0.09692771]])

    +
    +

    R> + matrix(runif(3*2), ncol=2)
    [,1] [,2]
    [1,] 0.5675127 + 0.7751204
    [2,] 0.3439412 0.5261893
    [3,] 0.2273177 0.223438

    +
    +

    J> + rand(3,2)
    3x2 Array{Float64,2}:
    0.36882 0.267725
    0.571856 + 0.601524
    0.848084 0.858935

    +
    +

    Creating + a
    random m x n matrix

    +
    Creating an
    identity matrix
    M> eye(3)
    ans =
    Diagonal Matrix
       1   0   0
       0   1   0
       0   0   1
    P> np.eye(3)
    array([[ 1.,  0.,  0.],
           [ 0.,  1.,  0.],
           [ 0.,  0.,  1.]])
    R> diag(3)
    [,1] [,2] [,3]
    [1,] 1 0 0
    [2,] 0 1 0
    [3,] 0 0 1
    J> eye(3)
    3x3 Array{Float64,2}:
    1.0 0.0 0.0
    0.0 1.0 0.0
    0.0 0.0 1.0
    Creating an
    identity matrix
    +

    Creating + a
    zero m x n matrix 

    +
    +

    M> + zeros(3,2)
    ans =
       0   0
       0   + 0
       0   0

    +
    +

    P> + np.zeros((3,2))
    array([[ 0.,  0.],
         +   [ 0.,  0.],
           [ 0.,  + 0.]])

    +
    +

    R> + mat.or.vec(3, 2)
    [,1] [,2]
    [1,] 0 0
    [2,] 0 0
    [3,] 0 0

    +
    +

    J> + zeros(3,2)
    3x2 Array{Float64,2}:
    0.0 0.0
    0.0 0.0
    0.0 + 0.0

    +
    +

    Creating + a
    zero m x n matrix 

    +
    Creating a
    diagonal matrix
    M> a = [1 2 3]

    M> diag(a)
    ans =
    Diagonal Matrix
       1   0   0
       0   2   0
       0   0   3
    P> a = np.array([1,2,3])

    P> np.diag(a)
    array([[1, 0, 0],
           [0, 2, 0],
           [0, 0, 3]])
    R> diag(1:3)
    [,1] [,2] [,3]
    [1,] 1 0 0
    [2,] 0 2 0
    [3,] 0 0 3
    J> a=[1, 2, 3]

    # added commas because julia
    # vectors are columnar

    J> diagm(a)
    3x3 Array{Int64,2}:
    1 0 0
    0 2 0
    0 0 3
    Creating a
    diagonal matrix
    +

    Creating + an
    m x n matrix of ones

    +
    +

    M> + ones(3,2)
    ans =
       1   1
       1   + 1
       1   1

    +
    +

    P> + np.ones([3,2])
    array([[ 1.,  1.],
           + [ 1.,  1.],
           [ 1.,  1.]])

    +
    +

    R> + mat.or.vec(3, 2) + 1
    [,1] [,2]
    [1,] 1 1
    [2,] 1 1
    [3,] + 1 1

    +
    +

    J> + ones(3,2)
    3x2 Array{Float64,2}:
    1.0 1.0
    1.0 1.0
    1.0 + 1.0

    +
    +

    Creating + an
    m x n matrix of ones

    +
    ACESSING MATRIX ELEMENTS
    Getting the dimension
    of a matrix
    (here: 2D, rows x cols)
    M> A = [1 2 3; 4 5 6]
    A =
       1   2   3
       4   5   6

    M> size(A)
    ans =
       2   3
    P> A = np.array([ [1,2,3], [4,5,6] ])

    P> A
    array([[1, 2, 3],
           [4, 5, 6]])

    P> A.shape
    (2, 3)
    R> A = matrix(1:6,nrow=2,byrow=T)

    R> A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
R> dim(A)
    [1] 2 3
    J> A=[1 2 3; 4 5 6]
    2x3 Array{Int64,2}:
    1 2 3
    4 5 6

    J> size(A)
    (2,3)
    Getting the dimension
    of a matrix
    (here: 2D, rows x cols)
    +

    Creating + an
    identity matrix

    +
    +

    M> + eye(3)
    ans =
    Diagonal Matrix
       1   0   + 0
       0   1   0
       0   0   + 1

    +
    +

    P> + np.eye(3)
    array([[ 1.,  0.,  0.],
         +   [ 0.,  1.,  0.],
           [ + 0.,  0.,  1.]])

    +
    +

    R> + diag(3)
    [,1] [,2] [,3]
    [1,] 1 0 0
    [2,] 0 1 0
    [3,] 0 0 + 1

    +
    +

    J> + eye(3)
    3x3 Array{Float64,2}:
    1.0 0.0 0.0
    0.0 1.0 0.0
    0.0 + 0.0 1.0

    +
    +

    Creating + an
    identity matrix

    +
    Selecting rows M> A = [1 2 3; 4 5 6; 7 8 9]

    % 1st row
    M> A(1,:)
    ans =
       1   2   3

    % 1st 2 rows
    M> A(1:2,:)
    ans =
       1   2   3
       4   5   6
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    # 1st row
    P> A[0,:]
    array([1, 2, 3])

    # 1st 2 rows
    P> A[0:2,:]
    array([[1, 2, 3], [4, 5, 6]])
    R> A = matrix(1:9,nrow=3,byrow=T)



    # 1st row
    

R> A[1,]
    [1] 1 2 3

    

# 1st 2 rows


    R> A[1:2,]
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    J> A=[1 2 3; 4 5 6; 7 8 9];
    #semicolon suppresses output

    #1st row
    J> A[1,:]
    1x3 Array{Int64,2}:
    1 2 3

    #1st 2 rows
    J> A[1:2,:]
    2x3 Array{Int64,2}:
    1 2 3
    4 5 6
    Selecting rows 
    +

    Creating + a
    diagonal matrix

    +
    +

    M> + a = [1 2 3]

    M> + diag(a)
    ans =
    Diagonal Matrix
       1   0   + 0
       0   2   0
       0   0   + 3

    +
    +

    P> + a = np.array([1,2,3])

    P> + np.diag(a)
    array([[1, 0, 0],
           [0, + 2, 0],
           [0, 0, 3]])

    +
    +

    R> + diag(1:3)
    [,1] [,2] [,3]
    [1,] 1 0 0
    [2,] 0 2 0
    [3,] 0 + 0 3

    +
    +

    J> + a=[1, 2, 3]

    # added commas because julia
    # vectors are + columnar

    J> + diagm(a)
    3x3 Array{Int64,2}:
    1 0 0
    0 2 0
    0 0 3

    +
    +

    Creating + a
    diagonal matrix

    +
    Selecting columnsM> A = [1 2 3; 4 5 6; 7 8 9]

    % 1st column
    M> A(:,1)
    ans =
       1
       4
       7

    % 1st 2 columns
    M> A(:,1:2)
    ans =
       1   2
       4   5
       7   8
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    # 1st column (as row vector)
    P> A[:,0]
    array([1, 4, 7])

    # 1st column (as column vector)
    P> A[:,[0]]
    array([[1],
           [4],
           [7]])

    # 1st 2 columns
    P> A[:,0:2]
    array([[1, 2], 
           [4, 5], 
           [7, 8]])
    R> A = matrix(1:9,nrow=3,byrow=T)




    # 1st column as row vector

    R> t(A[,1])
    [,1] [,2] [,3]
    [1,] 1 4 7



    # 1st column as column vector

    R> A[,1]
    [1] 1 4 7



    # 1st 2 columns

    R> A[,1:2]
    [,1] [,2]
    [1,] 1 2
    [2,] 4 5
    [3,] 7 8
    J> A=[1 2 3; 4 5 6; 7 8 9];

    #1st column
    J> A[:,1]
    3-element Array{Int64,1}:
    1
    4
    7

    #1st 2 columns
    J> A[:,1:2]
    3x2 Array{Int64,2}:
    1 2
    4 5
    7 8
    Selecting columns +

    ACCESSING + MATRIX ELEMENTS
    [back to cheat sheet overview]

    +
    Extracting rows and columns by criteria

    (here: get rows that have value 9 in column 3)
    M> A = [1 2 3; 4 5 9; 7 8 9]
    A =
       1   2   3
       4   5   9
       7   8   9

    M> A(A(:,3) == 9,:)
    ans =
       4   5   9
       7   8   9
    P> A = np.array([ [1,2,3], [4,5,9], [7,8,9]])

    P> A
    array([[1, 2, 3],
           [4, 5, 9],
           [7, 8, 9]])

    P> A[A[:,2] == 9]
    array([[4, 5, 9],
           [7, 8, 9]])
    R> A = matrix(1:9,nrow=3,byrow=T)



    R> A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 9
    [3,] 7 8 9



    R> matrix(A[A[,3]==9], ncol=3)
    [,1] [,2] [,3]
    [1,] 4 5 9
    [2,] 7 8 9
    J> A=[1 2 3; 4 5 9; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 9
    7 8 9

    # use '.==' for
    # element-wise check
    J> A[ A[:,3] .==9, :]
    2x3 Array{Int64,2}:
    4 5 9
    7 8 9
    Extracting rows and columns by criteria

    (here: get rows that have value 9 in column 3)
    +

    Getting + the dimension
    of a matrix
    (here: 2D, rows x cols)

    +
    +

    M> + A = [1 2 3; 4 5 6]
    A =
       1   2   3
      +  4   5   6

    M> + size(A)
    ans =
       2   3

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6] ])

    P> + A
    array([[1, 2, 3],
           [4, 5, + 6]])

    P> + A.shape
    (2, 3)

    +
    +

    R> + A = matrix(1:6,nrow=2,byrow=T)

    R> + A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6


    +

    R> + dim(A)
    [1] 2 3

    +
    +

    J> + A=[1 2 3; 4 5 6]
    2x3 Array{Int64,2}:
    1 2 3
    4 5 6

    J> + size(A)
    (2,3)

    +
    +

    Getting + the dimension
    of a matrix
    (here: 2D, rows x cols)

    +
    Accessing elements
    (here: 1st element)
    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A(1,1)
    ans =  1
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> A[0,0]
    1
    R> A = matrix(c(1,2,3,4,5,9,7,8,9),nrow=3,byrow=T)


    
R> A[1,1]
    [1] 1
    J> A=[1 2 3; 4 5 6; 7 8 9];

    J> A[1,1]
    1
    Accessing elements
    (here: 1st element)
    +

    Selecting + rows 

    +
    +

    M> + A = [1 2 3; 4 5 6; 7 8 9]

    % 1st row
    M> + A(1,:)
    ans =
       1   2   3

    % 1st 2 + rows
    M> + A(1:2,:)
    ans =
       1   2   3
       + 4   5   6

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    # 1st row
    P> + A[0,:]
    array([1, 2, 3])

    # 1st 2 rows
    P> + A[0:2,:]
    array([[1, 2, 3], [4, 5, 6]])

    +
    +

    R> + A = matrix(1:9,nrow=3,byrow=T)



    # 1st row
    

R> + A[1,]
    [1] 1 2 3

    

# 1st 2 rows


    R> + A[1:2,]
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9];
    #semicolon suppresses output

    #1st + row
    J> + A[1,:]
    1x3 Array{Int64,2}:
    1 2 3

    #1st 2 rows
    J> + A[1:2,:]
    2x3 Array{Int64,2}:
    1 2 3
    4 5 6

    +
    +

    Selecting + rows 

    +
    MANIPULATING SHAPE AND DIMENSIONS
    Converting 
    row to column vectors
    M> b = [1 2 3]


    M> b = b'
    b =
       1
       2
       3
    P> b = np.array([1, 2, 3])

    P> b = b[np.newaxis].T
    # alternatively
    # b = b[:,np.newaxis]

    P> b
    array([[1],
           [2],
           [3]])
    R> b = matrix(c(1,2,3), ncol=3)

    R> t(b)
    [,1]
    [1,] 1
    [2,] 2
    [3,] 3
    J> b=vec([1 2 3])
    3-element Array{Int64,1}:
    1
    2
    3
    Converting 
    row to column vectors
    +

    Selecting + columns

    +
    +

    M> + A = [1 2 3; 4 5 6; 7 8 9]

    % 1st column
    M> + A(:,1)
    ans =
       1
       4
       + 7

    % 1st 2 columns
    M> + A(:,1:2)
    ans =
       1   2
       4   + 5
       7   8

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    # 1st column + (as row vector)
    P> + A[:,0]
    array([1, 4, 7])

    # 1st column (as column + vector)
    P> + A[:,[0]]
    array([[1],
           [4],
       +     [7]])

    # 1st 2 columns
    P> + A[:,0:2]
    array([[1, 2], 
           [4, + 5], 
           [7, 8]])

    +
    +

    R> + A = matrix(1:9,nrow=3,byrow=T)




    # 1st column as row + vector

    R> + t(A[,1])
    [,1] [,2] [,3]
    [1,] 1 4 7



    # 1st column + as column vector

    R> + A[,1]
    [1] 1 4 7



    # 1st 2 columns

    R> + A[,1:2]
    [,1] [,2]
    [1,] 1 2
    [2,] 4 5
    [3,] 7 8

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9];

    #1st column
    J> + A[:,1]
    3-element Array{Int64,1}:
    1
    4
    7

    #1st 2 + columns
    J> + A[:,1:2]
    3x2 Array{Int64,2}:
    1 2
    4 5
    7 8

    +
    +

    Selecting + columns

    +
    Reshaping Matrices

    (here: 3x3 matrix to row vector)
    M> A = [1 2 3; 4 5 6; 7 8 9]
    A =
       1   2   3
       4   5   6
       7   8   9

    M> total_elements = numel(A)

    M> B = reshape(A,1,total_elements) 
    % or reshape(A,1,9)
    B =
       1   4   7   2   5   8   3   6   9
    P> A = np.array([[1,2,3],[4,5,6],[7,8,9]])

    P> A
    array([[1, 2, 3],
           [4, 5, 9],
           [7, 8, 9]])

    P> total_elements = A.shape[0] * A.shape[1]

    P> B = A.reshape(1, total_elements) 

    # or A.reshape(1,9)
    # Alternative: A.shape = (1,9) 
    # to change the array in place

    P> B
    array([[1, 2, 3, 4, 5, 6, 7, 8, 9]])
    R> A = matrix(1:9,nrow=3,byrow=T)



    R> A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    [3,] 7 8 9
R> total_elements = dim(A)[1] * dim(A)[2]

    R> B = matrix(A, ncol=total_elements)

    R> B
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
    [1,] 1 4 7 2 5 8 3 6 9
    J> A=[1 2 3; 4 5 6; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 8 9

    J> total_elements=length(A)
    9

    J>B=reshape(A,1,total_elements)
    1x9 Array{Int64,2}:
    1 4 7 2 5 8 3 6 9
    Reshaping Matrices

    (here: 3x3 matrix to row vector)
    +

    Extracting + rows and columns by criteria

    (here: get rows that have + value 9 in column 3)

    +
    +

    M> + A = [1 2 3; 4 5 9; 7 8 9]
    A =
       1   2   + 3
       4   5   9
       7   8   + 9

    M> + A(A(:,3) == 9,:)
    ans =
       4   5   9
       + 7   8   9

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,9], [7,8,9]])

    P> + A
    array([[1, 2, 3],
           [4, 5, 9],
       +     [7, 8, 9]])

    P> + A[A[:,2] == 9]
    array([[4, 5, 9],
           + [7, 8, 9]])

    +
    +

    R> + A = matrix(1:9,nrow=3,byrow=T)



    R> + A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 9
    [3,] 7 8 + 9



    R> + matrix(A[A[,3]==9], ncol=3)
    [,1] [,2] [,3]
    [1,] 4 5 9
    [2,] + 7 8 9

    +
    +

    J> + A=[1 2 3; 4 5 9; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 9
    7 + 8 9

    # use '.==' for
    # element-wise check
    J> + A[ A[:,3] .==9, :]
    2x3 Array{Int64,2}:
    4 5 9
    7 8 9

    +
    +

    Extracting + rows and columns by criteria

    (here: get rows that have + value 9 in column 3)

    +
    Concatenating matricesM> A = [1 2 3; 4 5 6]

    M> B = [7 8 9; 10 11 12]

    M> C = [A; B]
        1    2    3
        4    5    6
        7    8    9
       10   11   12
    P> A = np.array([[1, 2, 3], [4, 5, 6]])

    P> B = np.array([[7, 8, 9],[10,11,12]])

    P> C = np.concatenate((A, B), axis=0)

    P> C
    array([[ 1, 2, 3], 
           [ 4, 5, 6], 
           [ 7, 8, 9], 
           [10, 11, 12]])
    R> A = matrix(1:6,nrow=2,byrow=T)

    R> B = matrix(7:12,nrow=2,byrow=T)

    R> C = rbind(A,B)

    R> C
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    [3,] 7 8 9
    [4,] 10 11 12
    J> A=[1 2 3; 4 5 6];

    J> B=[7 8 9; 10 11 12];

    J> C=[A; B]
    4x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 8 9
    10 11 12
    Concatenating matrices
    +

    Accessing + elements
    (here: 1st element)

    +
    +

    M> + A = [1 2 3; 4 5 6; 7 8 9]

    M> + A(1,1)
    ans =  1

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> + A[0,0]
    1

    +
    +

    R> + A = matrix(c(1,2,3,4,5,9,7,8,9),nrow=3,byrow=T)


    R> + A[1,1]
    [1] 1

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9];

    J> + A[1,1]
    1

    +
    +

    Accessing + elements
    (here: 1st element)

    +
    Stacking 
    vectors and matrices
    M> a = [1 2 3]

    M> b = [4 5 6]

    M> c = [a' b']
    c =
       1   4
       2   5
       3   6

    M> c = [a; b]
    c =
       1   2   3
       4   5   6
    P> a = np.array([1,2,3])
    P> b = np.array([4,5,6])

    P> np.c_[a,b]
    array([[1, 4],
           [2, 5],
           [3, 6]])

    P> np.r_[a,b]
    array([[1, 2, 3],
           [4, 5, 6]])
    R> a = matrix(1:3, ncol=3)

    R> b = matrix(4:6, ncol=3)

    R> matrix(rbind(A, B), ncol=2)
    [,1] [,2]
    [1,] 1 5
    [2,] 4 3


    
R> rbind(A,B)
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    J> a=[1 2 3];

    J> b=[4 5 6];

    J> c=[a' b']
    3x2 Array{Int64,2}:
    1 4
    2 5
    3 6

    J> c=[a; b]
    2x3 Array{Int64,2}:
    1 2 3
    4 5 6
    Stacking 
    vectors and matrices
    +

    MANIPULATING + SHAPE AND DIMENSIONS
    [back to cheat sheet overview]

    +
    BASIC MATRIX OPERATIONS
    Matrix-scalar
    operations
    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A * 2
    ans =
        2    4    6
        8   10   12
       14   16   18

    M> A + 2

    M> A - 2

    M> A / 2
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> A * 2
    array([[ 2,  4,  6],
           [ 8, 10, 12],
           [14, 16, 18]])

    P> A + 2

    P> A - 2

    P> A / 2
    R> A = matrix(1:9, nrow=3, byrow=T)

    R> A * 2
    [,1] [,2] [,3]
    [1,] 2 4 6
    [2,] 8 10 12
    [3,] 14 16 18
R> A + 2

    R> A - 2

    R> A / 2
    J> A=[1 2 3; 4 5 6; 7 8 9];

    # elementwise operator

    J> A .* 2
    3x3 Array{Int64,2}:
    2 4 6
    8 10 12
    14 16 18

    J> A .+ 2;

    J> A .- 2;

    J> A ./ 2;
    Matrix-scalar
    operations
    +

    Converting 
    row + to column vectors

    +
    +

    M> + b = [1 2 3]


    M> + b = b'
    b =
       1
       2
       + 3

    +
    +

    P> + b = np.array([1, 2, 3])

    P> + b = b[np.newaxis].T
    # alternatively
    # b = + b[:,np.newaxis]

    P> + b
    array([[1],
           [2],
       +     [3]])

    +
    +

    R> + b = matrix(c(1,2,3), ncol=3)

    R> + t(b)
    [,1]
    [1,] 1
    [2,] 2
    [3,] 3

    +
    +

    J> + b=vec([1 2 3])
    3-element Array{Int64,1}:
    1
    2
    3

    +
    +

    Converting 
    row + to column vectors

    +
    Matrix-matrix
    multiplication
    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A * A
    ans =
        30    36    42
        66    81    96
       102   126   150
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> np.dot(A,A) # or A.dot(A)
    array([[ 30,  36,  42],
           [ 66,  81,  96],
           [102, 126, 150]])
    R> A = matrix(1:9, nrow=3, byrow=T)

    R> A %*% A
    [,1] [,2] [,3]
    [1,] 30 36 42
    [2,] 66 81 96
    [3,] 102 126 150
    J> A=[1 2 3; 4 5 6; 7 8 9];

    J> A * A
    3x3 Array{Int64,2}:
    30 36 42
    66 81 96
    102 126 150
    Matrix-matrix
    multiplication
    +

    Reshaping + Matrices

    (here: 3x3 matrix to row vector)

    +
    +

    M> + A = [1 2 3; 4 5 6; 7 8 9]
    A =
       1   2   + 3
       4   5   6
       7   8   + 9

    M> + total_elements = numel(A)

    M> + B = reshape(A,1,total_elements) 
    % or reshape(A,1,9)
    B + =
       1   4   7   2   5   8   + 3   6   9

    +
    +

    P> + A = np.array([[1,2,3],[4,5,6],[7,8,9]])

    P> + A
    array([[1, 2, 3],
           [4, 5, 9],
       +     [7, 8, 9]])

    P> + total_elements = A.shape[0] * A.shape[1]

    P> + B = A.reshape(1, total_elements) 

    # or + A.reshape(1,9)
    # Alternative: A.shape = (1,9) 
    # + to change the array in place

    P> + B
    array([[1, 2, 3, 4, 5, 6, 7, 8, 9]])

    +
    +

    R> + A = matrix(1:9,nrow=3,byrow=T)



    R> + A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    [3,] 7 8 9


    R> + total_elements = dim(A)[1] * dim(A)[2]

    R> + B = matrix(A, ncol=total_elements)

    R> + B
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
    [1,] 1 4 7 2 + 5 8 3 6 9

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 + 8 9

    J> + total_elements=length(A)
    9

    J>B=reshape(A,1,total_elements)
    1x9 + Array{Int64,2}:
    1 4 7 2 5 8 3 6 9

    +
    +

    Reshaping + Matrices

    (here: 3x3 matrix to row vector)

    +
    Matrix-vector
    multiplication
    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> b = [ 1; 2; 3 ]

    M> A * b
    ans =
       14
       32
       50
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> b = np.array([ [1], [2], [3] ])

    P> np.dot(A,b) # or A.dot(b)

    array([[14], [32], [50]])
    R> A = matrix(1:9, ncol=3)

    R> b = matrix(1:3, nrow=3)

R> t(b %*% A)
    [,1]
    [1,] 14
    [2,] 32
    [3,] 50
    J> A=[1 2 3; 4 5 6; 7 8 9];

    J> b=[1; 2; 3];

    J> A*b
    3-element Array{Int64,1}:
    14
    32
    50
    Matrix-vector
    multiplication
    +

    Concatenating + matrices

    +
    +

    M> + A = [1 2 3; 4 5 6]

    M> + B = [7 8 9; 10 11 12]

    M> + C = [A; B]
        1    2    3
      +   4    5    6
        7    + 8    9
       10   11   12

    +
    +

    P> + A = np.array([[1, 2, 3], [4, 5, 6]])

    P> + B = np.array([[7, 8, 9],[10,11,12]])

    P> + C = np.concatenate((A, B), axis=0)

    P> + C
    array([[ 1, 2, 3], 
           [ 4, + 5, 6], 
           [ 7, 8, 9], 
      +      [10, 11, 12]])

    +
    +

    R> + A = matrix(1:6,nrow=2,byrow=T)

    R> + B = matrix(7:12,nrow=2,byrow=T)

    R> + C = rbind(A,B)

    R> + C
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    [3,] 7 8 9
    [4,] + 10 11 12

    +
    +

    J> + A=[1 2 3; 4 5 6];

    J> + B=[7 8 9; 10 11 12];

    J> + C=[A; B]
    4x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 8 9
    10 + 11 12

    +
    +

    Concatenating + matrices

    +
    Element-wise 
    matrix-matrix operations
    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A .* A
    ans =
        1    4    9
       16   25   36
       49   64   81

    M> A .+ A

    M> A .- A

    M> A ./ A
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> A * A
    array([[ 1,  4,  9],
           [16, 25, 36],
           [49, 64, 81]])

    P> A + A

    P> A - A

    P> A / A
    R> A = matrix(1:9, nrow=3, byrow=T)
R> A * A
    [,1] [,2] [,3]
    [1,] 1 4 9
    [2,] 16 25 36
    [3,] 49 64 81



    R> A + A

    R> A - A

    R> A / A
    J> A=[1 2 3; 4 5 6; 7 8 9];

    J> A .* A
    3x3 Array{Int64,2}:
    1 4 9
    16 25 36
    49 64 81

    J> A .+ A;

    J> A .- A;

    J> A ./ A;
    Element-wise 
    matrix-matrix operations
    +

    Stacking 
    vectors + and matrices

    +
    +

    M> + a = [1 2 3]

    M> + b = [4 5 6]

    M> + c = [a' b']
    c =
       1   4
       2   + 5
       3   6

    M> + c = [a; b]
    c =
       1   2   3
       + 4   5   6

    +
    +

    P> + a = np.array([1,2,3])
    P> + b = np.array([4,5,6])

    P> + np.c_[a,b]
    array([[1, 4],
           [2, + 5],
           [3, 6]])

    P> + np.r_[a,b]
    array([[1, 2, 3],
           [4, + 5, 6]])

    +
    +

    R> + a = matrix(1:3, ncol=3)

    R> + b = matrix(4:6, ncol=3)

    R> + matrix(rbind(A, B), ncol=2)
    [,1] [,2]
    [1,] 1 5
    [2,] 4 + 3


    R> + rbind(A,B)
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6

    +
    +

    J> + a=[1 2 3];

    J> + b=[4 5 6];

    J> + c=[a' b']
    3x2 Array{Int64,2}:
    1 4
    2 5
    3 6

    J> + c=[a; b]
    2x3 Array{Int64,2}:
    1 2 3
    4 5 6

    +
    +

    Stacking 
    vectors + and matrices

    +
    Matrix elements to power n

    (here: individual elements squared)
    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A.^2
    ans =
        1    4    9
       16   25   36
       49   64   81
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> np.power(A,2)
    array([[ 1,  4,  9],
           [16, 25, 36],
           [49, 64, 81]])
    R> A = matrix(1:9, nrow=3, byrow=T)

    R> A ^ 2
    [,1] [,2] [,3]
    [1,] 1 4 9
    [2,] 16 25 36
    [3,] 49 64 81
    J> A=[1 2 3; 4 5 6; 7 8 9];

    J> A .^ 2
    3x3 Array{Int64,2}:
    1 4 9
    16 25 36
    49 64 81
    Matrix elements to power n

    (here: individual elements squared)
    +

    BASIC + MATRIX OPERATIONS
    [back to cheat sheet overview]

    +
    Matrix to power n

    (here: matrix-matrix multiplication with itself)
    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A ^ 2
    ans =
        30    36    42
        66    81    96
       102   126   150
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> np.linalg.matrix_power(A,2)
    array([[ 30,  36,  42],
           [ 66,  81,  96],
           [102, 126, 150]])
    R> A = matrix(1:9, ncol=3)

    
# requires the ‘expm’ package


    R> install.packages('expm')


    R> library(expm)


    
R> A %^% 2
    [,1] [,2] [,3]
    [1,] 30 66 102
    [2,] 36 81 126
    [3,] 42 96 150
    J> A=[1 2 3; 4 5 6; 7 8 9];

    J> A ^ 2
    3x3 Array{Int64,2}:
    30 36 42
    66 81 96
    102 126 150
    Matrix to power n

    (here: matrix-matrix multiplication with itself)
    +

    Matrix-scalar
    operations

    +
    +

    M> A + = [1 2 3; 4 5 6; 7 8 9]

    M> + A * 2
    ans =
        2    4    6
      +   8   10   12
       14   16   + 18

    M> + A + 2

    M> + A - 2

    M> + A / 2

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> + A * 2
    array([[ 2,  4,  6],
           + [ 8, 10, 12],
           [14, 16, 18]])

    P> + A + 2

    P> + A - 2

    P> + A / 2

    +
    +

    R> + A = matrix(1:9, nrow=3, byrow=T)

    R> + A * 2
    [,1] [,2] [,3]
    [1,] 2 4 6
    [2,] 8 10 12
    [3,] 14 + 16 18


    +

    R> + A + 2

    R> + A - 2

    R> + A / 2

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9];

    # elementwise operator

    J> + A .* 2
    3x3 Array{Int64,2}:
    2 4 6
    8 10 12
    14 16 18 +

    J> + A .+ 2;

    J> + A .- 2;

    J> + A ./ 2;

    +
    +

    Matrix-scalar
    operations

    +
    Matrix transposeM> A = [1 2 3; 4 5 6; 7 8 9]

    M> A'
    ans =
       1   4   7
       2   5   8
       3   6   9
    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> A.T
    array([[1, 4, 7],
           [2, 5, 8],
           [3, 6, 9]])
    R> A = matrix(1:9, nrow=3, byrow=T)


    R> t(A)
    [,1] [,2] [,3]
    [1,] 1 4 7
    [2,] 2 5 8
    [3,] 3 6 9
    J> A=[1 2 3; 4 5 6; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 8 9

    J> A'
    3x3 Array{Int64,2}:
    1 4 7
    2 5 8
    3 6 9
    Matrix transpose
    +

    Matrix-matrix
    multiplication

    +
    +

    M> A + = [1 2 3; 4 5 6; 7 8 9]

    M> + A * A
    ans =
        30    36    + 42
        66    81    96
       + 102   126   150

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> + np.dot(A,A) # or A.dot(A)
    array([[ 30,  36,  42],
       +     [ 66,  81,  96],
           + [102, 126, 150]])

    +
    +

    R> + A = matrix(1:9, nrow=3, byrow=T)

    R> + A %*% A
    [,1] [,2] [,3]
    [1,] 30 36 42
    [2,] 66 81 96
    [3,] + 102 126 150

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9];

    J> + A * A
    3x3 Array{Int64,2}:
    30 36 42
    66 81 96
    102 126 + 150

    +
    +

    Matrix-matrix
    multiplication

    +
    Determinant of a matrix:
     A -> |A|
    M> A = [6 1 1; 4 -2 5; 2 8 7]
    A =
       6   1   1
       4  -2   5
       2   8   7

    M> det(A)
    ans = -306
    P> A = np.array([[6,1,1],[4,-2,5],[2,8,7]])

    P> A
    array([[ 6,  1,  1],
           [ 4, -2,  5],
           [ 2,  8,  7]])

    P> np.linalg.det(A)
    -306.0
    R> A = matrix(c(6,1,1,4,-2,5,2,8,7), nrow=3, byrow=T)

    R> A
    [,1] [,2] [,3]
    [1,] 6 1 1
    [2,] 4 -2 5
    [3,] 2 8 7

    R> det(A)
    [1] -306
    J> A=[6 1 1; 4 -2 5; 2 8 7]
    3x3 Array{Int64,2}:
    6 1 1
    4 -2 5
    2 8 7

    J> det(A)
    -306.0
    Determinant of a matrix:
     A -> |A|
    +

    Matrix-vector
    multiplication

    +
    +

    M> + A = [1 2 3; 4 5 6; 7 8 9]

    M> + b = [ 1; 2; 3 ]

    M> + A * b
    ans =
       14
       32
       + 50

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> + b = np.array([ [1], [2], [3] ])

    P> + np.dot(A,b) # or A.dot(b)

    array([[14], [32], [50]])

    +
    +

    R> + A = matrix(1:9, ncol=3)

    R> + b = matrix(1:3, nrow=3)

    

R> + t(b %*% A)
    [,1]
    [1,] 14
    [2,] 32
    [3,] 50

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9];

    J> + b=[1; 2; 3];

    J> + A*b
    3-element Array{Int64,1}:
    14
    32
    50

    +
    +

    Matrix-vector
    multiplication

    +
    Inverse of a matrixM> A = [4 7; 2 6]
    A =
       4   7
       2   6

    M> A_inv = inv(A)
    A_inv =
       0.60000  -0.70000
      -0.20000   0.40000
    P> A = np.array([[4, 7], [2, 6]])

    P> A
    array([[4, 7], 
           [2, 6]])

    P> A_inverse = np.linalg.inv(A)

    P> A_inverse
    array([[ 0.6, -0.7], 
           [-0.2, 0.4]])
    R> A = matrix(c(4,7,2,6), nrow=2, byrow=T)

    R> A
    [,1] [,2]
    [1,] 4 7
    [2,] 2 6

    R> solve(A)
    [,1] [,2]
    [1,] 0.6 -0.7
    [2,] -0.2 0.4
    J> A=[4 7; 2 6]
    2x2 Array{Int64,2}:
    4 7
    2 6

    J> A_inv=inv(A)
    2x2 Array{Float64,2}:
    0.6 -0.7
    -0.2 0.4
    Inverse of a matrix
    +

    Element-wise 
    matrix-matrix operations

    +
    +

    M> A + = [1 2 3; 4 5 6; 7 8 9]

    M> + A .* A
    ans =
        1    4    + 9
       16   25   36
       49   + 64   81

    M> + A .+ A

    M> + A .- A

    M> + A ./ A

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> + A * A
    array([[ 1,  4,  9],
           + [16, 25, 36],
           [49, 64, 81]])

    P> + A + A

    P> + A - A

    P> + A / A

    +
    +

    R> + A = matrix(1:9, nrow=3, byrow=T)


    R> + A * A
    [,1] [,2] [,3]
    [1,] 1 4 9
    [2,] 16 25 36
    [3,] 49 + 64 81



    R> + A + A

    R> + A - A

    R> + A / A

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9];

    J> + A .* A
    3x3 Array{Int64,2}:
    1 4 9
    16 25 36
    49 64 81 +

    J> + A .+ A;

    J> + A .- A;

    J> + A ./ A;

    +
    +

    Element-wise 
    matrix-matrix operations

    +
    ADVANCED MATRIX OPERATIONS
    Calculating the covariance matrix 
    of 3 random variables

    (here: covariances of the means 
    of x1, x2, and x3)
    M> x1 = [4.0000 4.2000 3.9000 4.3000 4.1000]’

    M> x2 = [2.0000 2.1000 2.0000 2.1000 2.2000]'

    M> x3 = [0.60000 0.59000 0.58000 0.62000 0.63000]’

    M> cov( [x1,x2,x3] )
    ans =
       2.5000e-02   7.5000e-03   1.7500e-03
       7.5000e-03   7.0000e-03   1.3500e-03
       1.7500e-03   1.3500e-03   4.3000e-04
    P> x1 = np.array([ 4, 4.2, 3.9, 4.3, 4.1])

    P> x2 = np.array([ 2, 2.1, 2, 2.1, 2.2])

    P> x3 = np.array([ 0.6, 0.59, 0.58, 0.62, 0.63])

    P> np.cov([x1, x2, x3])
    Array([[ 0.025  ,  0.0075 ,  0.00175],
           [ 0.0075 ,  0.007  ,  0.00135],
           [ 0.00175,  0.00135,  0.00043]])
    R> x1 = matrix(c(4, 4.2, 3.9, 4.3, 4.1), ncol=5)

    R> x2 = matrix(c(2, 2.1, 2, 2.1, 2.2), ncol=5)

    R> x3 = matrix(c(0.6, 0.59, 0.58, 0.62, 0.63), ncol=5)



    R> cov(matrix(c(x1, x2, x3), ncol=3))
    [,1] [,2] [,3]
    [1,] 0.02500 0.00750 0.00175
    [2,] 0.00750 0.00700 0.00135
    [3,] 0.00175 0.00135 0.00043
    J> x1=[4.0 4.2 3.9 4.3 4.1]';

    J> x2=[2. 2.1 2. 2.1 2.2]';

    J> x3=[0.6 .59 .58 .62 .63]';

    J> cov([x1 x2 x3])
    3x3 Array{Float64,2}:
    0.025 0.0075 0.00175
    0.0075 0.007 0.00135
    0.00175 0.00135 0.00043
    Calculating the covariance matrix 
    of 3 random variables

    (here: covariances of the means 
    of x1, x2, and x3)
    +

    Matrix + elements to power n

    (here: individual elements + squared)

    +
    +

    M> A + = [1 2 3; 4 5 6; 7 8 9]

    M> + A.^2
    ans =
        1    4    9
       + 16   25   36
       49   64   81

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> + np.power(A,2)
    array([[ 1,  4,  9],
         +   [16, 25, 36],
           [49, 64, 81]])

    +
    +

    R> + A = matrix(1:9, nrow=3, byrow=T)

    R> + A ^ 2
    [,1] [,2] [,3]
    [1,] 1 4 9
    [2,] 16 25 36
    [3,] 49 + 64 81

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9];

    J> + A .^ 2
    3x3 Array{Int64,2}:
    1 4 9
    16 25 36
    49 64 81

    +
    +

    Matrix + elements to power n

    (here: individual elements + squared)

    +
    Calculating 
    eigenvectors and eigenvalues
    M> A = [3 1; 1 3]
    A =
       3   1
       1   3

    M> [eig_vec,eig_val] = eig(A)
    eig_vec =
      -0.70711   0.70711
       0.70711   0.70711
    eig_val =
    Diagonal Matrix
       2   0
       0   4
    P> A = np.array([[3, 1], [1, 3]])

    P> A
    array([[3, 1],
           [1, 3]])

    P> eig_val, eig_vec = np.linalg.eig(A)
    P> eig_val
    array([ 4.,  2.])

    P> eig_vec
    Array([[ 0.70710678, -0.70710678],
           [ 0.70710678,  0.70710678]])
    R> A = matrix(c(3,1,1,3), ncol=2)

    R> A
    [,1] [,2]
    [1,] 3 1
    [2,] 1 3
    R> eigen(A)
    $values
    [1] 4 2

    $vectors
    [,1] [,2]
    [1,] 0.7071068 -0.7071068
    [2,] 0.7071068 0.7071068
    J> A=[3 1; 1 3]
    2x2 Array{Int64,2}:
    3 1
    1 3

    J> (eig_vec,eig_val)=eig(a)
    ([2.0,4.0],
    2x2 Array{Float64,2}:
    -0.707107 0.707107
    0.707107 0.707107)
    Calculating 
    eigenvectors and eigenvalues
    +

    Matrix + to power n

    (here: matrix-matrix multiplication with + itself)

    +
    +

    M> A + = [1 2 3; 4 5 6; 7 8 9]

    M> + A ^ 2
    ans =
        30    36    + 42
        66    81    96
       + 102   126   150

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> + np.linalg.matrix_power(A,2)
    array([[ 30,  36,  + 42],
           [ 66,  81,  96],
       +     [102, 126, 150]])

    +
    +

    R> + A = matrix(1:9, ncol=3)

    
# requires the ‘expm’ + package


    R> + install.packages('expm')


    R> + library(expm)


    R> + A %^% 2
    [,1] [,2] [,3]
    [1,] 30 66 102
    [2,] 36 81 126
    [3,] + 42 96 150

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9];

    J> + A ^ 2
    3x3 Array{Int64,2}:
    30 36 42
    66 81 96
    102 126 + 150

    +
    +

    Matrix + to power n

    (here: matrix-matrix multiplication with + itself)

    +
    +

    Matrix + transpose

    +
    +

    M> A + = [1 2 3; 4 5 6; 7 8 9]

    M> + A'
    ans =
       1   4   7
       2 +   5   8
       3   6   9

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> + A.T
    array([[1, 4, 7],
           [2, 5, + 8],
           [3, 6, 9]])

    +
    +

    R> + A = matrix(1:9, nrow=3, byrow=T)


    R> + t(A)
    [,1] [,2] [,3]
    [1,] 1 4 7
    [2,] 2 5 8
    [3,] 3 6 9

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 + 8 9

    J> + A'
    3x3 Array{Int64,2}:
    1 4 7
    2 5 8
    3 6 9

    +
    +

    Matrix + transpose

    +
    +

    Determinant + of a matrix:
     A -> |A|

    +
    +

    M> + A = [6 1 1; 4 -2 5; 2 8 7]
    A =
       6   1   + 1
       4  -2   5
       2   8   + 7

    M> + det(A)
    ans = -306

    +
    +

    P> A + = np.array([[6,1,1],[4,-2,5],[2,8,7]])

    P> + A
    array([[ 6,  1,  1],
           + [ 4, -2,  5],
           [ 2,  8,  + 7]])

    P> + np.linalg.det(A)
    -306.0

    +
    +

    R> + A = matrix(c(6,1,1,4,-2,5,2,8,7), nrow=3, byrow=T)

    R> + A
    [,1] [,2] [,3]
    [1,] 6 1 1
    [2,] 4 -2 5
    [3,] 2 8 7

    R> + det(A)
    [1] -306

    +
    +

    J> + A=[6 1 1; 4 -2 5; 2 8 7]
    3x3 Array{Int64,2}:
    6 1 1
    4 -2 + 5
    2 8 7

    J> + det(A)
    -306.0

    +
    +

    Determinant + of a matrix:
     A -> |A|

    +
    +

    Inverse + of a matrix

    +
    +

    M> + A = [4 7; 2 6]
    A =
       4   7
       2 +   6

    M> + A_inv = inv(A)
    A_inv =
       0.60000  -0.70000
      + -0.20000   0.40000

    +
    +

    P> + A = np.array([[4, 7], [2, 6]])

    P> + A
    array([[4, 7], 
           [2, + 6]])

    P> + A_inverse = np.linalg.inv(A)

    P> + A_inverse
    array([[ 0.6, -0.7], 
          +  [-0.2, 0.4]])

    +
    +

    R> + A = matrix(c(4,7,2,6), nrow=2, byrow=T)

    R> + A
    [,1] [,2]
    [1,] 4 7
    [2,] 2 6

    R> + solve(A)
    [,1] [,2]
    [1,] 0.6 -0.7
    [2,] -0.2 0.4

    +
    +

    J> + A=[4 7; 2 6]
    2x2 Array{Int64,2}:
    4 7
    2 6

    J> + A_inv=inv(A)
    2x2 Array{Float64,2}:
    0.6 -0.7
    -0.2 0.4

    +
    +

    Inverse + of a matrix

    +
    Generating a Gaussian dataset:

    creating random vectors from the multivariate normal
    distribution given mean and covariance matrix

    (here: 5 random vectors with
    mean 0, covariance = 0, variance = 2)
    % requires statistics toolbox package
    % how to install and load it in Octave:

    % download the package from: 
    % http://octave.sourceforge.net/packages.php
    % pkg install 
    %     ~/Desktop/io-2.0.2.tar.gz  
    % pkg install 
    %     ~/Desktop/statistics-1.2.3.tar.gz

    M> pkg load statistics

    M> mean = [0 0]

    M> cov = [2 0; 0 2]
    cov =
       2   0
       0   2

    M> mvnrnd(mean,cov,5)
       2.480150  -0.559906
      -2.933047   0.560212
       0.098206   3.055316
      -0.985215  -0.990936
       1.122528   0.686977
        
    P> mean = np.array([0,0])

    P> cov = np.array([[2,0],[0,2]])

    P> np.random.multivariate_normal(mean, cov, 5)

    Array([[ 1.55432624, -1.17972629], 
           [-2.01185294, 1.96081908], 
           [-2.11810813, 1.45784216], 
           [-2.93207591, -0.07369322], 
           [-1.37031244, -1.18408792]])
    # requires the ‘mass’ package

    
R> install.packages('MASS')

    
R> library(MASS)


    R> mvrnorm(n=10, mean, cov)
    [,1] [,2]
    [1,] -0.8407830 -0.1882706
    [2,] 0.8496822 -0.7889329
    [3,] -0.1564171 0.8422177
    [4,] -0.6288779 1.0618688
    [5,] -0.5103879 0.1303697
    [6,] 0.8413189 -0.1623758
    [7,] -1.0495466 -0.4161082
    [8,] -1.3236339 0.7755572
    [9,] 0.2771013 1.4900494
    [10,] -1.3536268 0.2338913
    # requires the Distributions package from https://github.com/JuliaStats/Distributions.jl

    J> using Distributions

    J> mean=[0., 0.]
    2-element Array{Float64,1}:
    0.0
    0.0

    J> cov=[2. 0.; 0. 2.]
    2x2 Array{Float64,2}:
    2.0 0.0
    0.0 2.0

    J> rand( MvNormal(mean, cov), 5)
    2x5 Array{Float64,2}:
    -0.527634 0.370725 -0.761928 -3.91747 1.47516
    -0.448821 2.21904 2.24561 0.692063 0.390495
    Generating a Gaussian dataset:

    creating random vectors from the multivariate normal
    distribution given mean and covariance matrix

    (here: 5 random vectors with
    mean 0, covariance = 0, variance = 2)
    +

    ADVANCED + MATRIX OPERATIONS
    [back to cheat sheet overview]

    +
    +

    Calculating + the covariance matrix 
    of 3 random variables

    (here: + covariances of the means 
    of x1, x2, and x3)

    +
    +

    M> + x1 = [4.0000 4.2000 3.9000 4.3000 4.1000]’

    M> + x2 = [2.0000 2.1000 2.0000 2.1000 2.2000]'

    M> + x3 = [0.60000 0.59000 0.58000 0.62000 0.63000]’

    M> + cov( [x1,x2,x3] )
    ans =
       2.5000e-02   + 7.5000e-03   1.7500e-03
       7.5000e-03   + 7.0000e-03   1.3500e-03
       1.7500e-03   + 1.3500e-03   4.3000e-04

    +
    +

    P> + x1 = np.array([ 4, 4.2, 3.9, 4.3, 4.1])

    P> + x2 = np.array([ 2, 2.1, 2, 2.1, 2.2])

    P> + x3 = np.array([ 0.6, 0.59, 0.58, 0.62, 0.63])

    P> + np.cov([x1, x2, x3])
    Array([[ 0.025  ,  0.0075 , +  0.00175],
           [ 0.0075 ,  0.007 +  ,  0.00135],
           [ 0.00175, +  0.00135,  0.00043]])

    +
    +

    R> + x1 = matrix(c(4, 4.2, 3.9, 4.3, 4.1), ncol=5)

    R> + x2 = matrix(c(2, 2.1, 2, 2.1, 2.2), ncol=5)

    R> + x3 = matrix(c(0.6, 0.59, 0.58, 0.62, 0.63), ncol=5)



    R> + cov(matrix(c(x1, x2, x3), ncol=3))
    [,1] [,2] [,3]
    [1,] + 0.02500 0.00750 0.00175
    [2,] 0.00750 0.00700 0.00135
    [3,] + 0.00175 0.00135 0.00043

    +
    +

    J> + x1=[4.0 4.2 3.9 4.3 4.1]';

    J> + x2=[2. 2.1 2. 2.1 2.2]';

    J> + x3=[0.6 .59 .58 .62 .63]';

    J> + cov([x1 x2 x3])
    3x3 Array{Float64,2}:
    0.025 0.0075 + 0.00175
    0.0075 0.007 0.00135
    0.00175 0.00135 0.00043

    +
    +

    Calculating + the covariance matrix 
    of 3 random variables

    (here: + covariances of the means 
    of x1, x2, and x3)

    +
    +

    Calculating 
    eigenvectors + and eigenvalues

    +
    +

    M> + A = [3 1; 1 3]
    A =
       3   1
       1 +   3

    M> + [eig_vec,eig_val] = eig(A)
    eig_vec =
      -0.70711   + 0.70711
       0.70711   0.70711
    eig_val + =
    Diagonal Matrix
       2   0
       0 +   4

    +
    +

    P> + A = np.array([[3, 1], [1, 3]])

    P> + A
    array([[3, 1],
           [1, 3]])

    P> + eig_val, eig_vec = np.linalg.eig(A)

    P> + eig_val
    array([ 4.,  2.])

    P> + eig_vec
    Array([[ 0.70710678, -0.70710678],
         +   [ 0.70710678,  0.70710678]])

    +
    +

    R> + A = matrix(c(3,1,1,3), ncol=2)

    R> + A
    [,1] [,2]
    [1,] 3 1
    [2,] 1 3

    R> + eigen(A)
    $values
    [1] 4 2

    $vectors
    [,1] [,2]
    [1,] + 0.7071068 -0.7071068
    [2,] 0.7071068 0.7071068

    +
    +

    J> + A=[3 1; 1 3]
    2x2 Array{Int64,2}:
    3 1
    1 3

    J> + (eig_vec,eig_val)=eig(a)
    ([2.0,4.0],
    2x2 + Array{Float64,2}:
    -0.707107 0.707107
    0.707107 0.707107)

    +
    +

    Calculating 
    eigenvectors + and eigenvalues

    +
    +

    Generating + a Gaussian dataset:

    creating random vectors from the + multivariate normal
    distribution given mean and covariance + matrix

    (here: 5 random vectors with
    mean 0, covariance + = 0, variance = 2)

    +
    +

    % + requires statistics toolbox package
    % how to install and load + it in Octave:

    % download the package from: 
    % + http://octave.sourceforge.net/packages.php
    % pkg install 
    % +     ~/Desktop/io-2.0.2.tar.gz  
    % pkg install 
    % +     ~/Desktop/statistics-1.2.3.tar.gz

    M> + pkg load statistics

    M> + mean = [0 0]

    M> + cov = [2 0; 0 2]
    cov =
       2   0
       0 +   2

    M> + mvnrnd(mean,cov,5)
       2.480150  -0.559906
      + -2.933047   0.560212
       0.098206   + 3.055316
      -0.985215  -0.990936
       1.122528 +   0.686977
        

    +
    +

    P> + mean = np.array([0,0])

    P> + cov = np.array([[2,0],[0,2]])

    P> + np.random.multivariate_normal(mean, cov, 5)

    Array([[ + 1.55432624, -1.17972629], 
          +  [-2.01185294, 1.96081908], 
          +  [-2.11810813, 1.45784216], 
          +  [-2.93207591, -0.07369322], 
          +  [-1.37031244, -1.18408792]])

    +
    +

    # + requires the ‘mass’ package

    R> + install.packages('MASS')

    R> + library(MASS)


    R> + mvrnorm(n=10, mean, cov)
    [,1] [,2]
    [1,] -0.8407830 + -0.1882706
    [2,] 0.8496822 -0.7889329
    [3,] -0.1564171 + 0.8422177
    [4,] -0.6288779 1.0618688
    [5,] -0.5103879 + 0.1303697
    [6,] 0.8413189 -0.1623758
    [7,] -1.0495466 + -0.4161082
    [8,] -1.3236339 0.7755572
    [9,] 0.2771013 + 1.4900494
    [10,] -1.3536268 0.2338913

    +
    +

    # + requires the Distributions package from + https://github.com/JuliaStats/Distributions.jl

    J> + using Distributions

    J> + mean=[0., 0.]
    2-element Array{Float64,1}:
    0.0
    0.0

    J> + cov=[2. 0.; 0. 2.]
    2x2 Array{Float64,2}:
    2.0 0.0
    0.0 + 2.0

    J> + rand( MvNormal(mean, cov), 5)
    2x5 Array{Float64,2}:
    -0.527634 + 0.370725 -0.761928 -3.91747 1.47516
    -0.448821 2.21904 2.24561 + 0.692063 0.390495

    +
    +

    Generating + a Gaussian dataset:

    creating random vectors from the + multivariate normal
    distribution given mean and covariance + matrix

    (here: 5 random vectors with
    mean 0, covariance + = 0, variance = 2)

    +
    +
    +

    +(Thanks to Keith C. Campbell for providing me with the syntax for the Julia language.) + - - +
    +
    +
    +
    +
    + ### Alternative data structures: NumPy matrices vs. NumPy arrays +[[back to section overview](#sections)] + Python's NumPy library also has a dedicated "matrix" type with a syntax that is a little bit closer to the MATLAB matrix: For example, the " * " operator would perform a matrix-matrix multiplication of NumPy matrices - same operator performs element-wise multiplication on NumPy arrays. Vice versa, the "`.dot()`" method is used for element-wise multiplication of NumPy matrices, wheras the equivalent operation would for NumPy arrays would be achieved via the " * "-operator. **Most people recommend the usage of the NumPy array type over NumPy matrices, since arrays are what most of the NumPy functions return.** \ No newline at end of file diff --git a/tutorials/matrix_cheatsheet_only.html b/tutorials/matrix_cheatsheet_only.html new file mode 100644 index 0000000..a03d73f --- /dev/null +++ b/tutorials/matrix_cheatsheet_only.html @@ -0,0 +1,1180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    Task

    +
    +

    MATLAB/Octave

    +
    +

    Python + NumPy

    +
    +

    R

    +
    +

    Julia

    +
    +

    Task

    +
    +

    CREATING + MATRICES

    +
    +

    Creating + Matrices 
    (here: 3x3 matrix)

    +
    +

    M> + A = [1 2 3; 4 5 6; 7 8 9]
    A =
       1   2   + 3
       4   5   6
       7   8   + 9

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> + A
    array([[1, 2, 3],
           [4, 5, 6],
       +     [7, 8, 9]])

    +
    +

    R> + A = matrix(c(1,2,3,4,5,6,7,8,9),nrow=3,byrow=T)

    
# + equivalent to

    # A = matrix(1:9,nrow=3,byrow=T)



    R> + A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    [3,] 7 8 9

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 + 8 9

    +
    +

    Creating + Matrices 
    (here: 3x3 matrix)

    +
    +

    Creating + an 1D column vector

    +
    +

    M> + a = [1; 2; 3]
    a =
       1
       2
       + 3

    +
    +

    P> + a = np.array([[1],[2],[3]])

    P> + a
    array([[1],
           [2],
       +     [3]])

    +
    +

    R> + a = matrix(c(1,2,3), nrow=3, byrow=T)

    R> + a
    [,1]
    [1,] 1
    [2,] 2
    [3,] 3

    +
    +

    J> + a=[1; 2; 3]
    3-element Array{Int64,1}:
    1
    2
    3

    +
    +

    Creating + an 1D column vector

    +
    +

    Creating + an
    1D row vector

    +
    +

    M> + b = [1 2 3]
    b =
       1   2   3

    +
    +

    P> + b = np.array([1,2,3])

    P> + b
    array([1, 2, 3])

    +
    +

    R> + b = matrix(c(1,2,3), ncol=3)

    R> + b
    [,1] [,2] [,3]
    [1,] 1 2 3

    +
    +

    J> + b=[1 2 3]
    1x3 Array{Int64,2}:
    1 2 3

    # note that this + is a 2D array.
    # vectors in Julia are columns

    +
    +

    Creating + an
    1D row vector

    +
    +

    Creating + a
    random m x n matrix

    +
    +

    M> + rand(3,2)
    ans =
       0.21977   0.10220
       + 0.38959   0.69911
       0.15624   0.65637

    +
    +

    P> + np.random.rand(3,2)
    array([[ 0.29347865,  0.17920462],
       +     [ 0.51615758,  0.64593471],
         +   [ 0.01067605,  0.09692771]])

    +
    +

    R> + matrix(runif(3*2), ncol=2)
    [,1] [,2]
    [1,] 0.5675127 + 0.7751204
    [2,] 0.3439412 0.5261893
    [3,] 0.2273177 0.223438

    +
    +

    J> + rand(3,2)
    3x2 Array{Float64,2}:
    0.36882 0.267725
    0.571856 + 0.601524
    0.848084 0.858935

    +
    +

    Creating + a
    random m x n matrix

    +
    +

    Creating + a
    zero m x n matrix 

    +
    +

    M> + zeros(3,2)
    ans =
       0   0
       0   + 0
       0   0

    +
    +

    P> + np.zeros((3,2))
    array([[ 0.,  0.],
         +   [ 0.,  0.],
           [ 0.,  + 0.]])

    +
    +

    R> + mat.or.vec(3, 2)
    [,1] [,2]
    [1,] 0 0
    [2,] 0 0
    [3,] 0 0

    +
    +

    J> + zeros(3,2)
    3x2 Array{Float64,2}:
    0.0 0.0
    0.0 0.0
    0.0 + 0.0

    +
    +

    Creating + a
    zero m x n matrix 

    +
    +

    Creating + an
    m x n matrix of ones

    +
    +

    M> + ones(3,2)
    ans =
       1   1
       1   + 1
       1   1

    +
    +

    P> + np.ones([3,2])
    array([[ 1.,  1.],
           + [ 1.,  1.],
           [ 1.,  1.]])

    +
    +

    R> + mat.or.vec(3, 2) + 1
    [,1] [,2]
    [1,] 1 1
    [2,] 1 1
    [3,] + 1 1

    +
    +

    J> + ones(3,2)
    3x2 Array{Float64,2}:
    1.0 1.0
    1.0 1.0
    1.0 + 1.0

    +
    +

    Creating + an
    m x n matrix of ones

    +
    +

    Creating + an
    identity matrix

    +
    +

    M> + eye(3)
    ans =
    Diagonal Matrix
       1   0   + 0
       0   1   0
       0   0   + 1

    +
    +

    P> + np.eye(3)
    array([[ 1.,  0.,  0.],
         +   [ 0.,  1.,  0.],
           [ + 0.,  0.,  1.]])

    +
    +

    R> + diag(3)
    [,1] [,2] [,3]
    [1,] 1 0 0
    [2,] 0 1 0
    [3,] 0 0 + 1

    +
    +

    J> + eye(3)
    3x3 Array{Float64,2}:
    1.0 0.0 0.0
    0.0 1.0 0.0
    0.0 + 0.0 1.0

    +
    +

    Creating + an
    identity matrix

    +
    +

    Creating + a
    diagonal matrix

    +
    +

    M> + a = [1 2 3]

    M> + diag(a)
    ans =
    Diagonal Matrix
       1   0   + 0
       0   2   0
       0   0   + 3

    +
    +

    P> + a = np.array([1,2,3])

    P> + np.diag(a)
    array([[1, 0, 0],
           [0, + 2, 0],
           [0, 0, 3]])

    +
    +

    R> + diag(1:3)
    [,1] [,2] [,3]
    [1,] 1 0 0
    [2,] 0 2 0
    [3,] 0 + 0 3

    +
    +

    J> + a=[1, 2, 3]

    # added commas because julia
    # vectors are + columnar

    J> + diagm(a)
    3x3 Array{Int64,2}:
    1 0 0
    0 2 0
    0 0 3

    +
    +

    Creating + a
    diagonal matrix

    +
    +

    ACCESSING + MATRIX ELEMENTS

    +
    +

    Getting + the dimension
    of a matrix
    (here: 2D, rows x cols)

    +
    +

    M> + A = [1 2 3; 4 5 6]
    A =
       1   2   3
      +  4   5   6

    M> + size(A)
    ans =
       2   3

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6] ])

    P> + A
    array([[1, 2, 3],
           [4, 5, + 6]])

    P> + A.shape
    (2, 3)

    +
    +

    R> + A = matrix(1:6,nrow=2,byrow=T)

    R> + A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6


    +

    R> + dim(A)
    [1] 2 3

    +
    +

    J> + A=[1 2 3; 4 5 6]
    2x3 Array{Int64,2}:
    1 2 3
    4 5 6

    J> + size(A)
    (2,3)

    +
    +

    Getting + the dimension
    of a matrix
    (here: 2D, rows x cols)

    +
    +

    Selecting + rows 

    +
    +

    M> + A = [1 2 3; 4 5 6; 7 8 9]

    % 1st row
    M> + A(1,:)
    ans =
       1   2   3

    % 1st 2 + rows
    M> + A(1:2,:)
    ans =
       1   2   3
       + 4   5   6

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    # 1st row
    P> + A[0,:]
    array([1, 2, 3])

    # 1st 2 rows
    P> + A[0:2,:]
    array([[1, 2, 3], [4, 5, 6]])

    +
    +

    R> + A = matrix(1:9,nrow=3,byrow=T)



    # 1st row
    

R> + A[1,]
    [1] 1 2 3

    

# 1st 2 rows


    R> + A[1:2,]
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9];
    #semicolon suppresses output

    #1st + row
    J> + A[1,:]
    1x3 Array{Int64,2}:
    1 2 3

    #1st 2 rows
    J> + A[1:2,:]
    2x3 Array{Int64,2}:
    1 2 3
    4 5 6

    +
    +

    Selecting + rows 

    +
    +

    Selecting + columns

    +
    +

    M> + A = [1 2 3; 4 5 6; 7 8 9]

    % 1st column
    M> + A(:,1)
    ans =
       1
       4
       + 7

    % 1st 2 columns
    M> + A(:,1:2)
    ans =
       1   2
       4   + 5
       7   8

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    # 1st column + (as row vector)
    P> + A[:,0]
    array([1, 4, 7])

    # 1st column (as column + vector)
    P> + A[:,[0]]
    array([[1],
           [4],
       +     [7]])

    # 1st 2 columns
    P> + A[:,0:2]
    array([[1, 2], 
           [4, + 5], 
           [7, 8]])

    +
    +

    R> + A = matrix(1:9,nrow=3,byrow=T)




    # 1st column as row + vector

    R> + t(A[,1])
    [,1] [,2] [,3]
    [1,] 1 4 7



    # 1st column + as column vector

    R> + A[,1]
    [1] 1 4 7



    # 1st 2 columns

    R> + A[,1:2]
    [,1] [,2]
    [1,] 1 2
    [2,] 4 5
    [3,] 7 8

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9];

    #1st column
    J> + A[:,1]
    3-element Array{Int64,1}:
    1
    4
    7

    #1st 2 + columns
    J> + A[:,1:2]
    3x2 Array{Int64,2}:
    1 2
    4 5
    7 8

    +
    +

    Selecting + columns

    +
    +

    Extracting + rows and columns by criteria

    (here: get rows that have + value 9 in column 3)

    +
    +

    M> + A = [1 2 3; 4 5 9; 7 8 9]
    A =
       1   2   + 3
       4   5   9
       7   8   + 9

    M> + A(A(:,3) == 9,:)
    ans =
       4   5   9
       + 7   8   9

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,9], [7,8,9]])

    P> + A
    array([[1, 2, 3],
           [4, 5, 9],
       +     [7, 8, 9]])

    P> + A[A[:,2] == 9]
    array([[4, 5, 9],
           + [7, 8, 9]])

    +
    +

    R> + A = matrix(1:9,nrow=3,byrow=T)



    R> + A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 9
    [3,] 7 8 + 9



    R> + matrix(A[A[,3]==9], ncol=3)
    [,1] [,2] [,3]
    [1,] 4 5 9
    [2,] + 7 8 9

    +
    +

    J> + A=[1 2 3; 4 5 9; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 9
    7 + 8 9

    # use '.==' for
    # element-wise check
    J> + A[ A[:,3] .==9, :]
    2x3 Array{Int64,2}:
    4 5 9
    7 8 9

    +
    +

    Extracting + rows and columns by criteria

    (here: get rows that have + value 9 in column 3)

    +
    +

    Accessing + elements
    (here: 1st element)

    +
    +

    M> + A = [1 2 3; 4 5 6; 7 8 9]

    M> + A(1,1)
    ans =  1

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> + A[0,0]
    1

    +
    +

    R> + A = matrix(c(1,2,3,4,5,9,7,8,9),nrow=3,byrow=T)


    R> + A[1,1]
    [1] 1

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9];

    J> + A[1,1]
    1

    +
    +

    Accessing + elements
    (here: 1st element)

    +
    +

    MANIPULATING + SHAPE AND DIMENSIONS

    +
    +

    Converting 
    row + to column vectors

    +
    +

    M> + b = [1 2 3]


    M> + b = b'
    b =
       1
       2
       + 3

    +
    +

    P> + b = np.array([1, 2, 3])

    P> + b = b[np.newaxis].T
    # alternatively
    # b = + b[:,np.newaxis]

    P> + b
    array([[1],
           [2],
       +     [3]])

    +
    +

    R> + b = matrix(c(1,2,3), ncol=3)

    R> + t(b)
    [,1]
    [1,] 1
    [2,] 2
    [3,] 3

    +
    +

    J> + b=vec([1 2 3])
    3-element Array{Int64,1}:
    1
    2
    3

    +
    +

    Converting 
    row + to column vectors

    +
    +

    Reshaping + Matrices

    (here: 3x3 matrix to row vector)

    +
    +

    M> + A = [1 2 3; 4 5 6; 7 8 9]
    A =
       1   2   + 3
       4   5   6
       7   8   + 9

    M> + total_elements = numel(A)

    M> + B = reshape(A,1,total_elements) 
    % or reshape(A,1,9)
    B + =
       1   4   7   2   5   8   + 3   6   9

    +
    +

    P> + A = np.array([[1,2,3],[4,5,6],[7,8,9]])

    P> + A
    array([[1, 2, 3],
           [4, 5, 9],
       +     [7, 8, 9]])

    P> + total_elements = A.shape[0] * A.shape[1]

    P> + B = A.reshape(1, total_elements) 

    # or + A.reshape(1,9)
    # Alternative: A.shape = (1,9) 
    # + to change the array in place

    P> + B
    array([[1, 2, 3, 4, 5, 6, 7, 8, 9]])

    +
    +

    R> + A = matrix(1:9,nrow=3,byrow=T)



    R> + A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    [3,] 7 8 9


    R> + total_elements = dim(A)[1] * dim(A)[2]

    R> + B = matrix(A, ncol=total_elements)

    R> + B
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
    [1,] 1 4 7 2 + 5 8 3 6 9

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 + 8 9

    J> + total_elements=length(A)
    9

    J>B=reshape(A,1,total_elements)
    1x9 + Array{Int64,2}:
    1 4 7 2 5 8 3 6 9

    +
    +

    Reshaping + Matrices

    (here: 3x3 matrix to row vector)

    +
    +

    Concatenating + matrices

    +
    +

    M> + A = [1 2 3; 4 5 6]

    M> + B = [7 8 9; 10 11 12]

    M> + C = [A; B]
        1    2    3
      +   4    5    6
        7    + 8    9
       10   11   12

    +
    +

    P> + A = np.array([[1, 2, 3], [4, 5, 6]])

    P> + B = np.array([[7, 8, 9],[10,11,12]])

    P> + C = np.concatenate((A, B), axis=0)

    P> + C
    array([[ 1, 2, 3], 
           [ 4, + 5, 6], 
           [ 7, 8, 9], 
      +      [10, 11, 12]])

    +
    +

    R> + A = matrix(1:6,nrow=2,byrow=T)

    R> + B = matrix(7:12,nrow=2,byrow=T)

    R> + C = rbind(A,B)

    R> + C
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    [3,] 7 8 9
    [4,] + 10 11 12

    +
    +

    J> + A=[1 2 3; 4 5 6];

    J> + B=[7 8 9; 10 11 12];

    J> + C=[A; B]
    4x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 8 9
    10 + 11 12

    +
    +

    Concatenating + matrices

    +
    +

    Stacking 
    vectors + and matrices

    +
    +

    M> + a = [1 2 3]

    M> + b = [4 5 6]

    M> + c = [a' b']
    c =
       1   4
       2   + 5
       3   6

    M> + c = [a; b]
    c =
       1   2   3
       + 4   5   6

    +
    +

    P> + a = np.array([1,2,3])
    P> + b = np.array([4,5,6])

    P> + np.c_[a,b]
    array([[1, 4],
           [2, + 5],
           [3, 6]])

    P> + np.r_[a,b]
    array([[1, 2, 3],
           [4, + 5, 6]])

    +
    +

    R> + a = matrix(1:3, ncol=3)

    R> + b = matrix(4:6, ncol=3)

    R> + matrix(rbind(A, B), ncol=2)
    [,1] [,2]
    [1,] 1 5
    [2,] 4 + 3


    R> + rbind(A,B)
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6

    +
    +

    J> + a=[1 2 3];

    J> + b=[4 5 6];

    J> + c=[a' b']
    3x2 Array{Int64,2}:
    1 4
    2 5
    3 6

    J> + c=[a; b]
    2x3 Array{Int64,2}:
    1 2 3
    4 5 6

    +
    +

    Stacking 
    vectors + and matrices

    +
    +

    BASIC + MATRIX OPERATIONS

    +
    +

    Matrix-scalar
    operations

    +
    +

    M> A + = [1 2 3; 4 5 6; 7 8 9]

    M> + A * 2
    ans =
        2    4    6
      +   8   10   12
       14   16   + 18

    M> + A + 2

    M> + A - 2

    M> + A / 2

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> + A * 2
    array([[ 2,  4,  6],
           + [ 8, 10, 12],
           [14, 16, 18]])

    P> + A + 2

    P> + A - 2

    P> + A / 2

    +
    +

    R> + A = matrix(1:9, nrow=3, byrow=T)

    R> + A * 2
    [,1] [,2] [,3]
    [1,] 2 4 6
    [2,] 8 10 12
    [3,] 14 + 16 18


    +

    R> + A + 2

    R> + A - 2

    R> + A / 2

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9];

    # elementwise operator

    J> + A .* 2
    3x3 Array{Int64,2}:
    2 4 6
    8 10 12
    14 16 18 +

    J> + A .+ 2;

    J> + A .- 2;

    J> + A ./ 2;

    +
    +

    Matrix-scalar
    operations

    +
    +

    Matrix-matrix
    multiplication

    +
    +

    M> A + = [1 2 3; 4 5 6; 7 8 9]

    M> + A * A
    ans =
        30    36    + 42
        66    81    96
       + 102   126   150

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> + np.dot(A,A) # or A.dot(A)
    array([[ 30,  36,  42],
       +     [ 66,  81,  96],
           + [102, 126, 150]])

    +
    +

    R> + A = matrix(1:9, nrow=3, byrow=T)

    R> + A %*% A
    [,1] [,2] [,3]
    [1,] 30 36 42
    [2,] 66 81 96
    [3,] + 102 126 150

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9];

    J> + A * A
    3x3 Array{Int64,2}:
    30 36 42
    66 81 96
    102 126 + 150

    +
    +

    Matrix-matrix
    multiplication

    +
    +

    Matrix-vector
    multiplication

    +
    +

    M> + A = [1 2 3; 4 5 6; 7 8 9]

    M> + b = [ 1; 2; 3 ]

    M> + A * b
    ans =
       14
       32
       + 50

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> + b = np.array([ [1], [2], [3] ])

    P> + np.dot(A,b) # or A.dot(b)

    array([[14], [32], [50]])

    +
    +

    R> + A = matrix(1:9, ncol=3)

    R> + b = matrix(1:3, nrow=3)

    

R> + t(b %*% A)
    [,1]
    [1,] 14
    [2,] 32
    [3,] 50

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9];

    J> + b=[1; 2; 3];

    J> + A*b
    3-element Array{Int64,1}:
    14
    32
    50

    +
    +

    Matrix-vector
    multiplication

    +
    +

    Element-wise 
    matrix-matrix operations

    +
    +

    M> A + = [1 2 3; 4 5 6; 7 8 9]

    M> + A .* A
    ans =
        1    4    + 9
       16   25   36
       49   + 64   81

    M> + A .+ A

    M> + A .- A

    M> + A ./ A

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> + A * A
    array([[ 1,  4,  9],
           + [16, 25, 36],
           [49, 64, 81]])

    P> + A + A

    P> + A - A

    P> + A / A

    +
    +

    R> + A = matrix(1:9, nrow=3, byrow=T)


    R> + A * A
    [,1] [,2] [,3]
    [1,] 1 4 9
    [2,] 16 25 36
    [3,] 49 + 64 81



    R> + A + A

    R> + A - A

    R> + A / A

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9];

    J> + A .* A
    3x3 Array{Int64,2}:
    1 4 9
    16 25 36
    49 64 81 +

    J> + A .+ A;

    J> + A .- A;

    J> + A ./ A;

    +
    +

    Element-wise 
    matrix-matrix operations

    +
    +

    Matrix + elements to power n

    (here: individual elements + squared)

    +
    +

    M> A + = [1 2 3; 4 5 6; 7 8 9]

    M> + A.^2
    ans =
        1    4    9
       + 16   25   36
       49   64   81

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> + np.power(A,2)
    array([[ 1,  4,  9],
         +   [16, 25, 36],
           [49, 64, 81]])

    +
    +

    R> + A = matrix(1:9, nrow=3, byrow=T)

    R> + A ^ 2
    [,1] [,2] [,3]
    [1,] 1 4 9
    [2,] 16 25 36
    [3,] 49 + 64 81

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9];

    J> + A .^ 2
    3x3 Array{Int64,2}:
    1 4 9
    16 25 36
    49 64 81

    +
    +

    Matrix + elements to power n

    (here: individual elements + squared)

    +
    +

    Matrix + to power n

    (here: matrix-matrix multiplication with + itself)

    +
    +

    M> A + = [1 2 3; 4 5 6; 7 8 9]

    M> + A ^ 2
    ans =
        30    36    + 42
        66    81    96
       + 102   126   150

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> + np.linalg.matrix_power(A,2)
    array([[ 30,  36,  + 42],
           [ 66,  81,  96],
       +     [102, 126, 150]])

    +
    +

    R> + A = matrix(1:9, ncol=3)

    
# requires the ‘expm’ + package


    R> + install.packages('expm')


    R> + library(expm)


    R> + A %^% 2
    [,1] [,2] [,3]
    [1,] 30 66 102
    [2,] 36 81 126
    [3,] + 42 96 150

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9];

    J> + A ^ 2
    3x3 Array{Int64,2}:
    30 36 42
    66 81 96
    102 126 + 150

    +
    +

    Matrix + to power n

    (here: matrix-matrix multiplication with + itself)

    +
    +

    Matrix + transpose

    +
    +

    M> A + = [1 2 3; 4 5 6; 7 8 9]

    M> + A'
    ans =
       1   4   7
       2 +   5   8
       3   6   9

    +
    +

    P> + A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> + A.T
    array([[1, 4, 7],
           [2, 5, + 8],
           [3, 6, 9]])

    +
    +

    R> + A = matrix(1:9, nrow=3, byrow=T)


    R> + t(A)
    [,1] [,2] [,3]
    [1,] 1 4 7
    [2,] 2 5 8
    [3,] 3 6 9

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 + 8 9

    J> + A'
    3x3 Array{Int64,2}:
    1 4 7
    2 5 8
    3 6 9

    +
    +

    Matrix + transpose

    +
    +

    Determinant + of a matrix:
     A -> |A|

    +
    +

    M> + A = [6 1 1; 4 -2 5; 2 8 7]
    A =
       6   1   + 1
       4  -2   5
       2   8   + 7

    M> + det(A)
    ans = -306

    +
    +

    P> A + = np.array([[6,1,1],[4,-2,5],[2,8,7]])

    P> + A
    array([[ 6,  1,  1],
           + [ 4, -2,  5],
           [ 2,  8,  + 7]])

    P> + np.linalg.det(A)
    -306.0

    +
    +

    R> + A = matrix(c(6,1,1,4,-2,5,2,8,7), nrow=3, byrow=T)

    R> + A
    [,1] [,2] [,3]
    [1,] 6 1 1
    [2,] 4 -2 5
    [3,] 2 8 7

    R> + det(A)
    [1] -306

    +
    +

    J> + A=[6 1 1; 4 -2 5; 2 8 7]
    3x3 Array{Int64,2}:
    6 1 1
    4 -2 + 5
    2 8 7

    J> + det(A)
    -306.0

    +
    +

    Determinant + of a matrix:
     A -> |A|

    +
    +

    Inverse + of a matrix

    +
    +

    M> + A = [4 7; 2 6]
    A =
       4   7
       2 +   6

    M> + A_inv = inv(A)
    A_inv =
       0.60000  -0.70000
      + -0.20000   0.40000

    +
    +

    P> + A = np.array([[4, 7], [2, 6]])

    P> + A
    array([[4, 7], 
           [2, + 6]])

    P> + A_inverse = np.linalg.inv(A)

    P> + A_inverse
    array([[ 0.6, -0.7], 
          +  [-0.2, 0.4]])

    +
    +

    R> + A = matrix(c(4,7,2,6), nrow=2, byrow=T)

    R> + A
    [,1] [,2]
    [1,] 4 7
    [2,] 2 6

    R> + solve(A)
    [,1] [,2]
    [1,] 0.6 -0.7
    [2,] -0.2 0.4

    +
    +

    J> + A=[4 7; 2 6]
    2x2 Array{Int64,2}:
    4 7
    2 6

    J> + A_inv=inv(A)
    2x2 Array{Float64,2}:
    0.6 -0.7
    -0.2 0.4

    +
    +

    Inverse + of a matrix

    +
    +

    ADVANCED + MATRIX OPERATIONS

    +
    +

    Calculating + the covariance matrix 
    of 3 random variables

    (here: + covariances of the means 
    of x1, x2, and x3)

    +
    +

    M> + x1 = [4.0000 4.2000 3.9000 4.3000 4.1000]’

    M> + x2 = [2.0000 2.1000 2.0000 2.1000 2.2000]'

    M> + x3 = [0.60000 0.59000 0.58000 0.62000 0.63000]’

    M> + cov( [x1,x2,x3] )
    ans =
       2.5000e-02   + 7.5000e-03   1.7500e-03
       7.5000e-03   + 7.0000e-03   1.3500e-03
       1.7500e-03   + 1.3500e-03   4.3000e-04

    +
    +

    P> + x1 = np.array([ 4, 4.2, 3.9, 4.3, 4.1])

    P> + x2 = np.array([ 2, 2.1, 2, 2.1, 2.2])

    P> + x3 = np.array([ 0.6, 0.59, 0.58, 0.62, 0.63])

    P> + np.cov([x1, x2, x3])
    Array([[ 0.025  ,  0.0075 , +  0.00175],
           [ 0.0075 ,  0.007 +  ,  0.00135],
           [ 0.00175, +  0.00135,  0.00043]])

    +
    +

    R> + x1 = matrix(c(4, 4.2, 3.9, 4.3, 4.1), ncol=5)

    R> + x2 = matrix(c(2, 2.1, 2, 2.1, 2.2), ncol=5)

    R> + x3 = matrix(c(0.6, 0.59, 0.58, 0.62, 0.63), ncol=5)



    R> + cov(matrix(c(x1, x2, x3), ncol=3))
    [,1] [,2] [,3]
    [1,] + 0.02500 0.00750 0.00175
    [2,] 0.00750 0.00700 0.00135
    [3,] + 0.00175 0.00135 0.00043

    +
    +

    J> + x1=[4.0 4.2 3.9 4.3 4.1]';

    J> + x2=[2. 2.1 2. 2.1 2.2]';

    J> + x3=[0.6 .59 .58 .62 .63]';

    J> + cov([x1 x2 x3])
    3x3 Array{Float64,2}:
    0.025 0.0075 + 0.00175
    0.0075 0.007 0.00135
    0.00175 0.00135 0.00043

    +
    +

    Calculating + the covariance matrix 
    of 3 random variables

    (here: + covariances of the means 
    of x1, x2, and x3)

    +
    +

    Calculating 
    eigenvectors + and eigenvalues

    +
    +

    M> + A = [3 1; 1 3]
    A =
       3   1
       1 +   3

    M> + [eig_vec,eig_val] = eig(A)
    eig_vec =
      -0.70711   + 0.70711
       0.70711   0.70711
    eig_val + =
    Diagonal Matrix
       2   0
       0 +   4

    +
    +

    P> + A = np.array([[3, 1], [1, 3]])

    P> + A
    array([[3, 1],
           [1, 3]])

    P> + eig_val, eig_vec = np.linalg.eig(A)

    P> + eig_val
    array([ 4.,  2.])

    P> + eig_vec
    Array([[ 0.70710678, -0.70710678],
         +   [ 0.70710678,  0.70710678]])

    +
    +

    R> + A = matrix(c(3,1,1,3), ncol=2)

    R> + A
    [,1] [,2]
    [1,] 3 1
    [2,] 1 3

    R> + eigen(A)
    $values
    [1] 4 2

    $vectors
    [,1] [,2]
    [1,] + 0.7071068 -0.7071068
    [2,] 0.7071068 0.7071068

    +
    +

    J> + A=[3 1; 1 3]
    2x2 Array{Int64,2}:
    3 1
    1 3

    J> + (eig_vec,eig_val)=eig(a)
    ([2.0,4.0],
    2x2 + Array{Float64,2}:
    -0.707107 0.707107
    0.707107 0.707107)

    +
    +

    Calculating 
    eigenvectors + and eigenvalues

    +
    +

    Generating + a Gaussian dataset:

    creating random vectors from the + multivariate normal
    distribution given mean and covariance + matrix

    (here: 5 random vectors with
    mean 0, covariance + = 0, variance = 2)

    +
    +

    % + requires statistics toolbox package
    % how to install and load + it in Octave:

    % download the package from: 
    % + http://octave.sourceforge.net/packages.php
    % pkg install 
    % +     ~/Desktop/io-2.0.2.tar.gz  
    % pkg install 
    % +     ~/Desktop/statistics-1.2.3.tar.gz

    M> + pkg load statistics

    M> + mean = [0 0]

    M> + cov = [2 0; 0 2]
    cov =
       2   0
       0 +   2

    M> + mvnrnd(mean,cov,5)
       2.480150  -0.559906
      + -2.933047   0.560212
       0.098206   + 3.055316
      -0.985215  -0.990936
       1.122528 +   0.686977
        

    +
    +

    P> + mean = np.array([0,0])

    P> + cov = np.array([[2,0],[0,2]])

    P> + np.random.multivariate_normal(mean, cov, 5)

    Array([[ + 1.55432624, -1.17972629], 
          +  [-2.01185294, 1.96081908], 
          +  [-2.11810813, 1.45784216], 
          +  [-2.93207591, -0.07369322], 
          +  [-1.37031244, -1.18408792]])

    +
    +

    # + requires the ‘mass’ package

    R> + install.packages('MASS')

    R> + library(MASS)


    R> + mvrnorm(n=10, mean, cov)
    [,1] [,2]
    [1,] -0.8407830 + -0.1882706
    [2,] 0.8496822 -0.7889329
    [3,] -0.1564171 + 0.8422177
    [4,] -0.6288779 1.0618688
    [5,] -0.5103879 + 0.1303697
    [6,] 0.8413189 -0.1623758
    [7,] -1.0495466 + -0.4161082
    [8,] -1.3236339 0.7755572
    [9,] 0.2771013 + 1.4900494
    [10,] -1.3536268 0.2338913

    +
    +

    # + requires the Distributions package from + https://github.com/JuliaStats/Distributions.jl

    J> + using Distributions

    J> + mean=[0., 0.]
    2-element Array{Float64,1}:
    0.0
    0.0

    J> + cov=[2. 0.; 0. 2.]
    2x2 Array{Float64,2}:
    2.0 0.0
    0.0 + 2.0

    J> + rand( MvNormal(mean, cov), 5)
    2x5 Array{Float64,2}:
    -0.527634 + 0.370725 -0.761928 -3.91747 1.47516
    -0.448821 2.21904 2.24561 + 0.692063 0.390495

    +
    +

    Generating + a Gaussian dataset:

    creating random vectors from the + multivariate normal
    distribution given mean and covariance + matrix

    (here: 5 random vectors with
    mean 0, covariance + = 0, variance = 2)

    +
    +



    +

    + + \ No newline at end of file From 844a1560a3e8922a23db4ead10135a88db14b5ee Mon Sep 17 00:00:00 2001 From: rasbt Date: Thu, 12 Jun 2014 09:52:01 -0400 Subject: [PATCH 093/248] running cython --- README.md | 6 +- tutorials/running_cython.ipynb | 623 +++++++++++++++++++++++++++++++++ 2 files changed, 626 insertions(+), 3 deletions(-) create mode 100644 tutorials/running_cython.ipynb diff --git a/README.md b/README.md index d894b75..cc44f9b 100755 --- a/README.md +++ b/README.md @@ -21,12 +21,10 @@ - A collection of not so obvious Python stuff you should know! [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/not_so_obvious_python_stuff.ipynb?create=1)] - - Python's scope resolution for variable names and the LEGB rule [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb?create=1)] - Key differences between Python 2.x and Python 3.x [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/key_differences_between_python_2_and_3.ipynb?create=1)] - - A thorough guide to SQLite database operations in Python [[Markdown](./sqlite3_howto/README.md)] - Unit testing in Python - Why we want to make it a habit [[Markdown](./tutorials/unit_testing.md)] @@ -34,9 +32,11 @@ - Installing Scientific Packages for Python3 on MacOS 10.9 Mavericks [[Markdown](./tutorials/installing_scientific_packages.md)] - - Sorting CSV files using the Python csv module [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb)] +- Using Cython with and without IPython magic [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/running_cython.ipynb)] + +
    diff --git a/tutorials/running_cython.ipynb b/tutorials/running_cython.ipynb new file mode 100644 index 0000000..16285bf --- /dev/null +++ b/tutorials/running_cython.ipynb @@ -0,0 +1,623 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:0e619f8592165b10fa0b3558de3c622629bfb7aab1e9544b5bad64478cf35848" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Sebastian Raschka](http://sebastianraschka.com) \n", + "last updated: 06/12/2014" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "I would be happy to hear your comments and suggestions. \n", + "Please feel free to drop me a note via\n", + "[twitter](https://twitter.com/rasbt), [email](mailto:bluewoodtree@gmail.com), or [google+](https://plus.google.com/118404394130788869227).\n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    \n" + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Using Cython with and without IPython magic" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Bubblesort in regular (C)Python" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, we will write a simple implementation of the bubble sort algorithm in regular (C)Python" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def python_bubblesort(a_list):\n", + " \"\"\" Bubblesort in Python for list objects. \"\"\"\n", + " length = len(a_list)\n", + " swapped = 1\n", + " for i in range(0, length):\n", + " if swapped: \n", + " swapped = 0\n", + " for ele in range(0, length-i-1):\n", + " if a_list[ele] > a_list[ele + 1]:\n", + " temp = a_list[ele + 1]\n", + " a_list[ele + 1] = a_list[ele]\n", + " a_list[ele] = temp\n", + " swapped = 1\n", + " return a_list" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "python_bubblesort([6,3,1,5,6])" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 2, + "text": [ + "[1, 3, 5, 6, 6]" + ] + } + ], + "prompt_number": 2 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Implemented in Cython" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Maybe we can speed things up a little bit via [Cython's C-extensions for Python](http://cython.org). Cython is basically a hybrid between C and Python and can be pictured as compiled Python code with type declarations. \n", + "Since we are working in an IPython notebook here, we can make use of the very convenient *IPython magic*: It will take care of the conversion to C code, the compilation, and eventually the loading of the function. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%load_ext cythonmagic" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, we will take the initial Python code as is and use Cython for the compilation. Cython is capable of autoguessing types, however, we can make our code way more efficient by adding static types." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "def cython_bubblesort_untyped(a_list):\n", + " \"\"\" Bubblesort in Python for list objects. \"\"\"\n", + " length = len(a_list)\n", + " swapped = 1\n", + " for i in range(0, length):\n", + " if swapped: \n", + " swapped = 0\n", + " for ele in range(0, length-i-1):\n", + " if a_list[ele] > a_list[ele + 1]:\n", + " temp = a_list[ele + 1]\n", + " a_list[ele + 1] = a_list[ele]\n", + " a_list[ele] = temp\n", + " swapped = 1\n", + " return a_list" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 4 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%cython\n", + "import numpy as np\n", + "cimport numpy as np\n", + "cimport cython\n", + "@cython.boundscheck(False) \n", + "@cython.wraparound(False)\n", + "cpdef cython_bubblesort_typed(inp_ary):\n", + " \"\"\" The Cython implementation of Bubblesort with NumPy memoryview.\"\"\"\n", + " cdef unsigned long length, i, swapped, ele, temp\n", + " cdef long[:] np_ary = inp_ary\n", + " length = np_ary.shape[0]\n", + " swapped = 1\n", + " for i in xrange(0, length):\n", + " if swapped: \n", + " swapped = 0\n", + " for ele in xrange(0, length-i-1):\n", + " if np_ary[ele] > np_ary[ele + 1]:\n", + " temp = np_ary[ele + 1]\n", + " np_ary[ele + 1] = np_ary[ele]\n", + " np_ary[ele] = temp\n", + " swapped = 1\n", + " return inp_ary" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 5 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Speed comparison" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Below, we will do a quick speed comparison of our 3 implementations of the bubble sort algorithm by sorting a list (or numpy array) of 1000 random digits. Here, we have to make copies of the lists/numpy arrays, since our bubble sort implementation is sorting in place." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import random\n", + "import numpy as np\n", + "import copy\n", + "\n", + "list_a = [random.randint(0,1000) for num in range(1000)]\n", + "list_b = copy.deepcopy(a_list)\n", + "\n", + "ary_a = np.asarray(list_a)\n", + "ary_b = copy.deepcopy(ary_a)\n", + "ary_c = copy.deepcopy(ary_a)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 11 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('\\n(C)Python on list:')\n", + "%timeit python_bubblesort(list_a)\n", + "\n", + "print('\\n(C)Python on numpy array:')\n", + "%timeit python_bubblesort(ary_a)\n", + "\n", + "print('\\nuntyped Cython on list:')\n", + "%timeit cython_bubblesort_untyped(list_b)\n", + "\n", + "print('\\nuntyped Cython on numpy array:')\n", + "%timeit cython_bubblesort_untyped(ary_b)\n", + "\n", + "print('\\ntyped Cython with memoryview on numpy array:')\n", + "%timeit cython_bubblesort_typed(ary_c)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "(C)Python on list:\n", + "1 loops, best of 3: 332 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "(C)Python on numpy array:\n", + "1 loops, best of 3: 839 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "untyped Cython on list:\n", + "10000 loops, best of 3: 183 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "untyped Cython on numpy array:\n", + "1 loops, best of 3: 666 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "\n", + "typed Cython with memoryview on numpy array:\n", + "100000 loops, best of 3: 4.05 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 12 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "As we can see from the results above, we are already able to make our Python code run almost as twice as fast if we compile it via Cython (Python on list: 332 \u00b5s, untyped Cython on list: 183 \u00b5s). \n", + "However, although it is more \"work\" to adjust the Python code, the \"typed Cython with memoryview on numpy array\" is significantly as expected." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "How to use Cython without the IPython magic" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "IPython's notebook is really great for explanatory analysis and documentation, but what if we want to compile our Python code via Cython without letting IPython's magic doing all the work? \n", + "These are the steps you would need." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 1. Creating a .pyx file containing the the desired code or function." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%file cython_bubblesort_nomagic.pyx\n", + "\n", + "cpdef cython_bubblesort_nomagic(inp_ary):\n", + " \"\"\" The Cython implementation of Bubblesort with NumPy memoryview.\"\"\"\n", + " cdef unsigned long length, i, swapped, ele, temp\n", + " cdef long[:] np_ary = inp_ary\n", + " length = np_ary.shape[0]\n", + " swapped = 1\n", + " for i in xrange(0, length):\n", + " if swapped: \n", + " swapped = 0\n", + " for ele in xrange(0, length-i-1):\n", + " if np_ary[ele] > np_ary[ele + 1]:\n", + " temp = np_ary[ele + 1]\n", + " np_ary[ele + 1] = np_ary[ele]\n", + " np_ary[ele] = temp\n", + " swapped = 1\n", + " return inp_ary" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Overwriting cython_bubblesort_nomagic.pyx\n" + ] + } + ], + "prompt_number": 16 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2. Creating a simple setup file" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%file setup.py\n", + "\n", + "from distutils.core import setup\n", + "from distutils.extension import Extension\n", + "from Cython.Distutils import build_ext\n", + "\n", + "setup(\n", + " cmdclass = {'build_ext': build_ext},\n", + " ext_modules = [Extension(\"cython_bubblesort_nomagic\", [\"cython_bubblesort_nomagic.pyx\"])]\n", + ")" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Overwriting setup.py\n" + ] + } + ], + "prompt_number": 17 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "####3. Building and Compiling" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "!python3 setup.py build_ext --inplace" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "running build_ext\r\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "cythoning cython_bubblesort_nomagic.pyx to cython_bubblesort_nomagic.c\r\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "building 'cython_bubblesort_nomagic' extension\r\n", + "/usr/bin/clang -fno-strict-aliasing -Werror=declaration-after-statement -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/sebastian/miniconda3/envs/py34/include -arch x86_64 -I/Users/sebastian/miniconda3/envs/py34/include/python3.4m -c cython_bubblesort_nomagic.c -o build/temp.macosx-10.5-x86_64-3.4/cython_bubblesort_nomagic.o\r\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\u001b[1mcython_bubblesort_nomagic.c:16276:32: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function\r\n", + " '__Pyx_PyUnicode_FromString' [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mcython_bubblesort_nomagic.c:16427:33: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function\r\n", + " '__Pyx_PyInt_FromSize_t' [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mcython_bubblesort_nomagic.c:14058:26: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function\r\n", + " '__Pyx_GetBufferAndValidate' [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE int __Pyx_GetBufferAndValidate(\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mcython_bubblesort_nomagic.c:14092:27: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function\r\n", + " '__Pyx_SafeReleaseBuffer' [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mcython_bubblesort_nomagic.c:14165:1: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function\r\n", + " '__pyx_add_acquisition_count_locked' [-Wunused-function]\u001b[0m\r\n", + "__pyx_add_acquisition_count_locked(__pyx_atomic_int *acquisition_count,\r\n", + "\u001b[0;1;32m^\r\n", + "\u001b[0m\u001b[1mcython_bubblesort_nomagic.c:14175:1: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function\r\n", + " '__pyx_sub_acquisition_count_locked' [-Wunused-function]\u001b[0m\r\n", + "__pyx_sub_acquisition_count_locked(__pyx_atomic_int *acquisition_count,\r\n", + "\u001b[0;1;32m^\r\n", + "\u001b[0m\u001b[1mcython_bubblesort_nomagic.c:14643:26: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function\r\n", + " '__Pyx_PyBytes_Equals' [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2...\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mcython_bubblesort_nomagic.c:14920:32: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function\r\n", + " '__Pyx_GetItemInt_List_Fast' [-Wunused-function]\u001b[0m\r\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, P...\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mcython_bubblesort_nomagic.c:14934:32: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function\r\n", + " '__Pyx_GetItemInt_Tuple_Fast' [-Wunused-function]\u001b[0m\r\n", + "static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, ...\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mcython_bubblesort_nomagic.c:15111:38: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1munused function\r\n", + " '__Pyx_PyInt_From_unsigned_long' [-Wunused-function]\u001b[0m\r\n", + " static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsi...\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mcython_bubblesort_nomagic.c:15158:36: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1mfunction\r\n", + " '__Pyx_PyInt_As_unsigned_long' is not needed and will not be emitted\r\n", + " [-Wunneeded-internal-declaration]\u001b[0m\r\n", + "static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *x) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mcython_bubblesort_nomagic.c:15627:27: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1mfunction '__Pyx_PyInt_As_char' is\r\n", + " not needed and will not be emitted [-Wunneeded-internal-declaration]\u001b[0m\r\n", + "static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *x) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m\u001b[1mcython_bubblesort_nomagic.c:15727:27: \u001b[0m\u001b[0;1;35mwarning: \u001b[0m\u001b[1mfunction '__Pyx_PyInt_As_long' is\r\n", + " not needed and will not be emitted [-Wunneeded-internal-declaration]\u001b[0m\r\n", + "static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {\r\n", + "\u001b[0;1;32m ^\r\n", + "\u001b[0m" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "13 warnings generated.\r\n", + "/usr/bin/clang -bundle -undefined dynamic_lookup -L/Users/sebastian/miniconda3/envs/py34/lib -arch x86_64 build/temp.macosx-10.5-x86_64-3.4/cython_bubblesort_nomagic.o -L/Users/sebastian/miniconda3/envs/py34/lib -o /Users/sebastian/Desktop/cython_bubblesort_nomagic.so\r\n" + ] + } + ], + "prompt_number": 18 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4. Importing and running the code" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import cython_bubblesort_nomagic\n", + "\n", + "cython_bubblesort_nomagic.cython_bubblesort_nomagic(np.array([4,6,2,1,6]))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 20, + "text": [ + "array([1, 2, 4, 6, 6])" + ] + } + ], + "prompt_number": 20 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file From 163058f1f17a89a43bf832db7329dbfe69b02362 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 15 Jun 2014 23:23:19 -0400 Subject: [PATCH 094/248] contain method --- ...y_differences_between_python_2_and_3.ipynb | 263 +++++++++++++++++- 1 file changed, 261 insertions(+), 2 deletions(-) diff --git a/tutorials/key_differences_between_python_2_and_3.ipynb b/tutorials/key_differences_between_python_2_and_3.ipynb index 19d8a8c..a1afba9 100644 --- a/tutorials/key_differences_between_python_2_and_3.ipynb +++ b/tutorials/key_differences_between_python_2_and_3.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:7d8ee5c733199e70a4c5c71b6dfd0953ab5e6c33c6a0c7ef50dce07b4d56ae32" + "signature": "sha256:a91d66ae5e233f325b262961102505a8bdaee3ad1a251f061dee9cd68c0aaeac" }, "nbformat": 3, "nbformat_minor": 0, @@ -872,11 +872,270 @@ "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[0;32m----> 1\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mNameError\u001b[0m: name 'xrange' is not defined" ] } ], + "prompt_number": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    \n" + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "The `__contain__` method for `range` objects in Python 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another thing worth mentioning is that `range` got a \"new\" `__contains__` method in Python 3.x (thanks to [yegle](), who pointed this out). The `__contains__` method can speedup \"look-ups\" in Python 3.x `range` significantly for integer and bolean types.\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "x = 10000000" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 4 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def val_in_range(x, val):\n", + " if val in range(x):\n", + " return True\n", + " else:\n", + " return False" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 10 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def val_in_xrange(x, val):\n", + " if val in range(x):\n", + " return True\n", + " else:\n", + " return False" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 5 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Python', python_version())\n", + "assert(val_in_range(x, x/2) == True)\n", + "assert(val_in_range(x, x//2) == True)\n", + "%timeit val_in_range(x, x/2)\n", + "%timeit val_in_range(x, x//2)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 3.3.5\n", + "1 loops, best of 3: 751 ms per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "1000000 loops, best of 3: 1.21 \u00b5s per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 11 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Based on the `timeit` results above, you see that the execution for the \"look up\" was about 60,000 faster when it was of an integer type rather than a float. However, since Python 2.x's `range` or `xrange` doesn't have a `__contains__` method, the \"look-up speed\" wouldn't be that much different for integers or floats:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'Python', python_version()\n", + "assert(val_in_xrange(x, x/2.0) == True)\n", + "assert(val_in_xrange(x, x/2) == True)\n", + "%timeit val_in_xrange(x, x/2.0)\n", + "%timeit val_in_xrange(x, x/2)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 2.7.7\n", + "1 loops, best of 3: 661 ms per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "1 loops, best of 3: 564 ms per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Below the \"proofs\" that the `__contain__` method wasn't added to Python 2.x yet:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('Python', python_version())\n", + "range.__contains__" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 3.4.1\n" + ] + }, + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 2, + "text": [ + "" + ] + } + ], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'Python', python_version()\n", + "range.__contains__" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 2.7.7\n" + ] + }, + { + "ename": "AttributeError", + "evalue": "'builtin_function_or_method' object has no attribute '__contains__'", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mAttributeError\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[0;32mprint\u001b[0m \u001b[0;34m'Python'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpython_version\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mrange\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__contains__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m: 'builtin_function_or_method' object has no attribute '__contains__'" + ] + } + ], + "prompt_number": 7 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print 'Python', python_version()\n", + "xrange.__contains__" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Python 2.7.7\n" + ] + }, + { + "ename": "AttributeError", + "evalue": "type object 'xrange' has no attribute '__contains__'", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mAttributeError\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[0;32mprint\u001b[0m \u001b[0;34m'Python'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpython_version\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mxrange\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__contains__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m: type object 'xrange' has no attribute '__contains__'" + ] + } + ], "prompt_number": 8 }, { From 8b6a137ed9dec5c494ee53676c02d8c6a2a5146d Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 15 Jun 2014 23:26:19 -0400 Subject: [PATCH 095/248] contain method --- tutorials/key_differences_between_python_2_and_3.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorials/key_differences_between_python_2_and_3.ipynb b/tutorials/key_differences_between_python_2_and_3.ipynb index a1afba9..c830a92 100644 --- a/tutorials/key_differences_between_python_2_and_3.ipynb +++ b/tutorials/key_differences_between_python_2_and_3.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:a91d66ae5e233f325b262961102505a8bdaee3ad1a251f061dee9cd68c0aaeac" + "signature": "sha256:6381ed57a43484d7eb056ed84635101d586f95e11bbc8904b58f8d2c3c5693c3" }, "nbformat": 3, "nbformat_minor": 0, @@ -900,7 +900,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Another thing worth mentioning is that `range` got a \"new\" `__contains__` method in Python 3.x (thanks to [yegle](), who pointed this out). The `__contains__` method can speedup \"look-ups\" in Python 3.x `range` significantly for integer and bolean types.\n" + "Another thing worth mentioning is that `range` got a \"new\" `__contains__` method in Python 3.x (thanks to [Yuchen Ying](https://github.com/yegle), who pointed this out). The `__contains__` method can speedup \"look-ups\" in Python 3.x `range` significantly for integer and bolean types.\n" ] }, { From b262a4e06e8d5dc0d568d7508a53241b64aa7df5 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 15 Jun 2014 23:33:33 -0400 Subject: [PATCH 096/248] contain method --- tutorials/key_differences_between_python_2_and_3.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorials/key_differences_between_python_2_and_3.ipynb b/tutorials/key_differences_between_python_2_and_3.ipynb index c830a92..23a0fa4 100644 --- a/tutorials/key_differences_between_python_2_and_3.ipynb +++ b/tutorials/key_differences_between_python_2_and_3.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:6381ed57a43484d7eb056ed84635101d586f95e11bbc8904b58f8d2c3c5693c3" + "signature": "sha256:2d1167e2155bc6be8905a13729dbbbcc240cb7281e18fac55b1c407b2d6271db" }, "nbformat": 3, "nbformat_minor": 0, @@ -893,7 +893,7 @@ "level": 3, "metadata": {}, "source": [ - "The `__contain__` method for `range` objects in Python 3" + "The `__contains__` method for `range` objects in Python 3" ] }, { From 3fdc0fc62c1efdcb3bfc202362fb261098f65f7f Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 15 Jun 2014 23:40:29 -0400 Subject: [PATCH 097/248] fixed typo --- tutorials/key_differences_between_python_2_and_3.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorials/key_differences_between_python_2_and_3.ipynb b/tutorials/key_differences_between_python_2_and_3.ipynb index 23a0fa4..c940318 100644 --- a/tutorials/key_differences_between_python_2_and_3.ipynb +++ b/tutorials/key_differences_between_python_2_and_3.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:2d1167e2155bc6be8905a13729dbbbcc240cb7281e18fac55b1c407b2d6271db" + "signature": "sha256:53ee36d6fcce5f6dbce838e41d83e62fbb143538fe3ca1b0f3cd9b5505e5d786" }, "nbformat": 3, "nbformat_minor": 0, @@ -900,7 +900,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Another thing worth mentioning is that `range` got a \"new\" `__contains__` method in Python 3.x (thanks to [Yuchen Ying](https://github.com/yegle), who pointed this out). The `__contains__` method can speedup \"look-ups\" in Python 3.x `range` significantly for integer and bolean types.\n" + "Another thing worth mentioning is that `range` got a \"new\" `__contains__` method in Python 3.x (thanks to [Yuchen Ying](https://github.com/yegle), who pointed this out). The `__contains__` method can speedup \"look-ups\" in Python 3.x `range` significantly for integer and Boolean types.\n" ] }, { From fc1ccf3cde1ec58956091e6a8d1b553923d93cf2 Mon Sep 17 00:00:00 2001 From: rasbt Date: Mon, 16 Jun 2014 07:47:24 -0400 Subject: [PATCH 098/248] fix xrange py2 --- ...y_differences_between_python_2_and_3.ipynb | 60 ++++++++++++------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/tutorials/key_differences_between_python_2_and_3.ipynb b/tutorials/key_differences_between_python_2_and_3.ipynb index c940318..f3e2067 100644 --- a/tutorials/key_differences_between_python_2_and_3.ipynb +++ b/tutorials/key_differences_between_python_2_and_3.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:53ee36d6fcce5f6dbce838e41d83e62fbb143538fe3ca1b0f3cd9b5505e5d786" + "signature": "sha256:1a71ccc70829239143d02cebcb97bec031b45e676ebad340fc04c9bd4a5760bf" }, "nbformat": 3, "nbformat_minor": 0, @@ -349,13 +349,13 @@ "output_type": "stream", "stream": "stdout", "text": [ - "Python 2.7.6\n", + "Python 2.7.7\n", "('a', 'b')\n", "a b\n" ] } ], - "prompt_number": 4 + "prompt_number": 2 }, { "cell_type": "markdown", @@ -739,7 +739,7 @@ "\n", "n = 10000\n", "def test_range(n):\n", - " for i in range(n):\n", + " return for i in range(n):\n", " pass\n", " \n", "def test_xrange(n):\n", @@ -912,32 +912,26 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 4 + "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "def val_in_range(x, val):\n", - " if val in range(x):\n", - " return True\n", - " else:\n", - " return False" + " return val in range(x)" ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 10 + "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "def val_in_xrange(x, val):\n", - " if val in range(x):\n", - " return True\n", - " else:\n", - " return False" + " return val in xrange(x)" ], "language": "python", "metadata": {}, @@ -961,8 +955,8 @@ "output_type": "stream", "stream": "stdout", "text": [ - "Python 3.3.5\n", - "1 loops, best of 3: 751 ms per loop" + "Python 3.4.1\n", + "1 loops, best of 3: 742 ms per loop" ] }, { @@ -970,7 +964,7 @@ "stream": "stdout", "text": [ "\n", - "1000000 loops, best of 3: 1.21 \u00b5s per loop" + "1000000 loops, best of 3: 1.19 \u00b5s per loop" ] }, { @@ -981,7 +975,7 @@ ] } ], - "prompt_number": 11 + "prompt_number": 7 }, { "cell_type": "markdown", @@ -1004,8 +998,12 @@ "print 'Python', python_version()\n", "assert(val_in_xrange(x, x/2.0) == True)\n", "assert(val_in_xrange(x, x/2) == True)\n", + "assert(val_in_range(x, x/2) == True)\n", + "assert(val_in_range(x, x//2) == True)\n", "%timeit val_in_xrange(x, x/2.0)\n", - "%timeit val_in_xrange(x, x/2)" + "%timeit val_in_xrange(x, x/2)\n", + "%timeit val_in_range(x, x/2.0)\n", + "%timeit val_in_range(x, x/2)" ], "language": "python", "metadata": {}, @@ -1015,7 +1013,7 @@ "stream": "stdout", "text": [ "Python 2.7.7\n", - "1 loops, best of 3: 661 ms per loop" + "1 loops, best of 3: 285 ms per loop" ] }, { @@ -1023,7 +1021,23 @@ "stream": "stdout", "text": [ "\n", - "1 loops, best of 3: 564 ms per loop" + "1 loops, best of 3: 179 ms per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "1 loops, best of 3: 658 ms per loop" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "1 loops, best of 3: 556 ms per loop" ] }, { @@ -1070,13 +1084,13 @@ { "metadata": {}, "output_type": "pyout", - "prompt_number": 2, + "prompt_number": 8, "text": [ "" ] } ], - "prompt_number": 2 + "prompt_number": 8 }, { "cell_type": "code", From 96ebee32dc536d489089db9f1a3f21a56f3c4da5 Mon Sep 17 00:00:00 2001 From: rasbt Date: Mon, 16 Jun 2014 11:31:43 -0400 Subject: [PATCH 099/248] links to python resources --- README.md | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/README.md b/README.md index cc44f9b..86bb21a 100755 --- a/README.md +++ b/README.md @@ -87,3 +87,48 @@ GitHub repository [One-Python-benchmark-per-day](https://github.com/rasbt/One-Py - [Shell script](./useful_scripts/prepend_python_shebang.sh) for prepending Python-shebangs to .py files. - convert 'tab-delimited' to 'comma-separated' CSV files [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/useful_scripts/fix_tab_csv.ipynb?create=1)] + + +
    + + + +###// Links + + + +- [PyPI - the Python Package Index](https://pypi.python.org/pypi) - the official repository for all open source Python modules and packages + +- [PEP 8](http://legacy.python.org/dev/peps/pep-0008/) - The official style guide for Python code + + + +**// News** + +- [Python subreddit](http://www.reddit.com/r/Python/) - my favorite resource to catch up with Python news and great Python-related articles + +- [Python community on Google+](https://plus.google.com/communities/103393744324769547228) - a nice and friendly community to share and discuss everything about Python + +- [Python Weekly](http://www.pythonweekly.com) - A free weekly newsletter featuring curated news, articles, new releases, jobs etc. related to Python + + + +**// Resources for learning Python** + +- [Learn Python The Hard Way](http://learnpythonthehardway.org/book/) - one of the most popular and recommended resources for learning Python + +- [Dive Into Python](http://www.diveintopython.net) / [Dive Into Python 3](http://getpython3.com/diveintopython3/) - a free Python book for experienced programmers + +- [The Hitchhiker’s Guide to Python](http://docs.python-guide.org/en/latest/) - a free best-practice handbook for both novices and experts + +- [Think Python - How to Think Like a Computer Scientist](http://www.greenteapress.com/thinkpython/) - an introduction for beginners starting with basic concepts of programming + +**// My favorite Python projects and packages** + +- [The IPython Notebook](http://ipython.org/notebook.html) - an interactive computational environment for combining code execution, documentation (with Markdown and LateX support), inline plots, and rich media all in one document. + +- [SciPy Stack](http://www.scipy.org/index.html) - Python packages (NumPy, pandas, SciPy, IPython, Matplotlib) for scientific computing + +- [Cython](http://cython.org) - C-extensions for Python, an optimizing static compiler to combine Python and C code + +- [Numba](http://numba.pydata.org) - an just-in-time specializing compiler which compiles annotated Python and NumPy code to LLVM (through decorators) \ No newline at end of file From 777fd12862b2c93ab3a345d09098f550995119a5 Mon Sep 17 00:00:00 2001 From: rasbt Date: Mon, 16 Jun 2014 13:07:51 -0400 Subject: [PATCH 100/248] upd. algorithm cat. --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 86bb21a..45f7886 100755 --- a/README.md +++ b/README.md @@ -51,6 +51,16 @@
    ###// Algorithms +*The algorithms category was moved to a separate GitHub repository [rasbt/algorithms_in_ipython_notebooks](https://github.com/rasbt/algorithms_in_ipython_notebooks)* + + + +- Sorting Algorithms [[IPython nb](http://nbviewer.ipython.org/github/rasbt/algorithms_in_ipython_notebooks/blob/master/ipython_nbs/sorting/sorting_algorithms.ipynb?create=1)] + +- Linear regression via the least squares fit method [[IPython nb](http://nbviewer.ipython.org/github/rasbt/algorithms_in_ipython_notebooks/blob/master/ipython_nbs/statistics/linregr_least_squares_fit.ipynb?create=1)] + +- Dixon's Q test to identify outliers for small sample sizes [[IPython nb](hhttp://nbviewer.ipython.org/github/rasbt/algorithms_in_ipython_notebooks/blob/master/ipython_nbs/statistics/dixon_q_test.ipynb?create=1)] + - Sequential Selection Algorithms [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb)] @@ -72,7 +82,6 @@ GitHub repository [One-Python-benchmark-per-day](https://github.com/rasbt/One-Py - ###// Other - Happy Mother's Day [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/other/happy_mothers_day.ipynb?create=1)] From a76fa9a01bd7974dcb5d6758de3591d8d334e7c1 Mon Sep 17 00:00:00 2001 From: rasbt Date: Mon, 16 Jun 2014 16:53:05 -0400 Subject: [PATCH 101/248] fixed link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 45f7886..4fe23d0 100755 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ - Linear regression via the least squares fit method [[IPython nb](http://nbviewer.ipython.org/github/rasbt/algorithms_in_ipython_notebooks/blob/master/ipython_nbs/statistics/linregr_least_squares_fit.ipynb?create=1)] -- Dixon's Q test to identify outliers for small sample sizes [[IPython nb](hhttp://nbviewer.ipython.org/github/rasbt/algorithms_in_ipython_notebooks/blob/master/ipython_nbs/statistics/dixon_q_test.ipynb?create=1)] +- Dixon's Q test to identify outliers for small sample sizes [[IPython nb](http://nbviewer.ipython.org/github/rasbt/algorithms_in_ipython_notebooks/blob/master/ipython_nbs/statistics/dixon_q_test.ipynb?create=1)] - Sequential Selection Algorithms [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb)] From 6cb30cfb38aba7b550f12ebab25ae3c17b346b85 Mon Sep 17 00:00:00 2001 From: rasbt Date: Mon, 16 Jun 2014 23:00:23 -0400 Subject: [PATCH 102/248] refined numpy syntax --- tutorials/.~lock.matrix_cheatsheet_only.html# | 1 + tutorials/matrix_cheatsheet_only.html | 37 +++++++++++++------ 2 files changed, 26 insertions(+), 12 deletions(-) create mode 100644 tutorials/.~lock.matrix_cheatsheet_only.html# diff --git a/tutorials/.~lock.matrix_cheatsheet_only.html# b/tutorials/.~lock.matrix_cheatsheet_only.html# new file mode 100644 index 0000000..fda9341 --- /dev/null +++ b/tutorials/.~lock.matrix_cheatsheet_only.html# @@ -0,0 +1 @@ +,sebastian,Macintosh.local,16.06.2014 22:50,file:///Users/sebastian/Library/Application%20Support/LibreOffice/4; \ No newline at end of file diff --git a/tutorials/matrix_cheatsheet_only.html b/tutorials/matrix_cheatsheet_only.html index a03d73f..3f81405 100644 --- a/tutorials/matrix_cheatsheet_only.html +++ b/tutorials/matrix_cheatsheet_only.html @@ -5,7 +5,7 @@ - + - - - - - - - +
    + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n", " \n", " \n", - " \n", " \n", " \n", " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", " \n", - " \n", " \n", " \n", "
    +

    Task

    -

    MATLAB/Octave

    +
    +

    MATLAB/Octave

    -

    Python +

    +

    Python NumPy

    -

    R

    +
    +

    R

    -

    Julia

    +
    +

    Julia

    +

    Task

    +

    CREATING MATRICES

    +

    Creating Matrices 
    (here: 3x3 matrix)

    -

    M> +

    +

    M> A = [1 2 3; 4 5 6; 7 8 9]
    A =
       1   2   3
       4   5   6
       7   8   9

    -

    P> +

    +

    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> A
    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])

    -

    R> +

    +

    R> A = matrix(c(1,2,3,4,5,6,7,8,9),nrow=3,byrow=T)

    
# equivalent to

    # A = matrix(1:9,nrow=3,byrow=T)



    R> A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    [3,] 7 8 9

    -

    J> +

    +

    J> A=[1 2 3; 4 5 6; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 8 9

    +

    Creating Matrices 
    (here: 3x3 matrix)

    +

    Creating an 1D column vector

    -

    M> +

    +

    M> a = [1; 2; 3]
    a =
       1
       2
       3

    -

    P> - a - = +

    +

    P> + a + = np.array([1,2,3]).reshape(1,3)

    -


    P> - b.shape
    (1, +


    P> + b.shape
    (1, 3)


    -

    R> +

    +

    R> a = matrix(c(1,2,3), nrow=3, byrow=T)

    R> a
    [,1]
    [1,] 1
    [2,] 2
    [3,] 3

    -

    J> +

    +

    J> a=[1; 2; 3]
    3-element Array{Int64,1}:
    1
    2
    3

    +

    Creating an 1D column vector

    +

    Creating an
    1D row vector

    -

    M> +

    +

    M> b = [1 2 3]
    b =
       1   2   3

    -

    P> +

    +

    P> b = np.array([1,2,3])

    P> b
    array([1, 2, 3])

    -

    # +

    # note that numpy doesn't have
    # explicit “row-vectors”, but 1-D
    # arrays

    -

    P> - b.shape

    -

    (3,)

    +

    P> + b.shape

    +

    (3,)


    -

    R> +

    +

    R> b = matrix(c(1,2,3), ncol=3)

    R> b
    [,1] [,2] [,3]
    [1,] 1 2 3

    -

    J> +

    +

    J> b=[1 2 3]
    1x3 Array{Int64,2}:
    1 2 3

    # note that this is a 2D array.
    # vectors in Julia are columns

    +

    Creating an
    1D row vector

    +

    Creating a
    random m x n matrix

    -

    M> +

    +

    M> rand(3,2)
    ans =
       0.21977   0.10220
       0.38959   0.69911
       0.15624   0.65637

    -

    P> +

    +

    P> np.random.rand(3,2)
    array([[ 0.29347865,  0.17920462],
           [ 0.51615758,  0.64593471],
           [ 0.01067605,  0.09692771]])

    -

    R> +

    +

    R> matrix(runif(3*2), ncol=2)
    [,1] [,2]
    [1,] 0.5675127 0.7751204
    [2,] 0.3439412 0.5261893
    [3,] 0.2273177 0.223438

    -

    J> +

    +

    J> rand(3,2)
    3x2 Array{Float64,2}:
    0.36882 0.267725
    0.571856 0.601524
    0.848084 0.858935

    +

    Creating a
    random m x n matrix

    +

    Creating a
    zero m x n matrix 

    -

    M> +

    +

    M> zeros(3,2)
    ans =
       0   0
       0   0
       0   0

    -

    P> +

    +

    P> np.zeros((3,2))
    array([[ 0.,  0.],
           [ 0.,  0.],
           [ 0.,  0.]])

    -

    R> +

    +

    R> mat.or.vec(3, 2)
    [,1] [,2]
    [1,] 0 0
    [2,] 0 0
    [3,] 0 0

    -

    J> +

    +

    J> zeros(3,2)
    3x2 Array{Float64,2}:
    0.0 0.0
    0.0 0.0
    0.0 0.0

    +

    Creating a
    zero m x n matrix 

    +

    Creating an
    m x n matrix of ones

    -

    M> +

    +

    M> ones(3,2)
    ans =
       1   1
       1   1
       1   1

    -

    P> +

    +

    P> np.ones((3,2))
    array([[ 1.,  1.],
           [ 1.,  1.],
           [ 1.,  1.]])

    -

    R> - mat.or.vec(3, 2) + 1
    [,1] [,2]
    [1,] 1 1
    [2,] 1 1
    [3,] - 1 1

    +
    +

    R> + matrix(1L, + 3, 2)

    [,1] + [,2]
    [1,] 1 1
    [2,] 1 1
    [3,] 1 1

    -

    J> +

    +

    J> ones(3,2)
    3x2 Array{Float64,2}:
    1.0 1.0
    1.0 1.0
    1.0 1.0

    +

    Creating an
    m x n matrix of ones

    +

    Creating an
    identity matrix

    -

    M> +

    +

    M> eye(3)
    ans =
    Diagonal Matrix
       1   0   0
       0   1   0
       0   0   1

    -

    P> +

    +

    P> np.eye(3)
    array([[ 1.,  0.,  0.],
           [ 0.,  1.,  0.],
           [ 0.,  0.,  1.]])

    -

    R> +

    +

    R> diag(3)
    [,1] [,2] [,3]
    [1,] 1 0 0
    [2,] 0 1 0
    [3,] 0 0 1

    -

    J> +

    +

    J> eye(3)
    3x3 Array{Float64,2}:
    1.0 0.0 0.0
    0.0 1.0 0.0
    0.0 0.0 1.0

    +

    Creating an
    identity matrix

    +

    Creating a
    diagonal matrix

    -

    M> +

    +

    M> a = [1 2 3]

    M> diag(a)
    ans =
    Diagonal Matrix
       1   0   0
       0   2   0
       0   0   3

    -

    P> +

    +

    P> a = np.array([1,2,3])

    P> np.diag(a)
    array([[1, 0, 0],
           [0, 2, 0],
           [0, 0, 3]])

    -

    R> +

    +

    R> diag(1:3)
    [,1] [,2] [,3]
    [1,] 1 0 0
    [2,] 0 2 0
    [3,] 0 0 3

    -

    J> +

    +

    J> a=[1, 2, 3]

    # added commas because julia
    # vectors are columnar

    J> diagm(a)
    3x3 Array{Int64,2}:
    1 0 0
    0 2 0
    0 0 3

    +

    Creating a
    diagonal matrix

    +

    ACCESSING MATRIX ELEMENTS

    +

    Getting the dimension
    of a matrix
    (here: 2D, rows x cols)

    -

    M> +

    +

    M> A = [1 2 3; 4 5 6]
    A =
       1   2   3
       4   5   6

    M> size(A)
    ans =
       2   3

    -

    P> +

    +

    P> A = np.array([ [1,2,3], [4,5,6] ])

    P> A
    array([[1, 2, 3],
           [4, 5, 6]])

    P> A.shape
    (2, 3)

    -

    R> +

    +

    R> A = matrix(1:6,nrow=2,byrow=T)

    R> A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6


    -

    R> +

    R> dim(A)
    [1] 2 3

    -

    J> +

    +

    J> A=[1 2 3; 4 5 6]
    2x3 Array{Int64,2}:
    1 2 3
    4 5 6

    J> size(A)
    (2,3)

    +

    Getting the dimension
    of a matrix
    (here: 2D, rows x cols)

    +

    Selecting rows 

    -

    M> +

    +

    M> A = [1 2 3; 4 5 6; 7 8 9]

    % 1st row
    M> A(1,:)
    ans =
       1   2   3

    % 1st 2 rows
    M> A(1:2,:)
    ans =
       1   2   3
       4   5   6

    -

    P> +

    +

    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    # 1st row
    P> A[0,:]
    array([1, 2, 3])

    # 1st 2 rows
    P> A[0:2,:]
    array([[1, 2, 3], [4, 5, 6]])

    -

    R> +

    +

    R> A = matrix(1:9,nrow=3,byrow=T)



    # 1st row
    

R> A[1,]
    [1] 1 2 3

    

# 1st 2 rows


    R> A[1:2,]
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6

    -

    J> +

    +

    J> A=[1 2 3; 4 5 6; 7 8 9];
    #semicolon suppresses output

    #1st row
    J> A[1,:]
    1x3 Array{Int64,2}:
    1 2 3

    #1st 2 rows
    J> A[1:2,:]
    2x3 Array{Int64,2}:
    1 2 3
    4 5 6

    +

    Selecting rows 

    +

    Selecting columns

    -

    M> +

    +

    M> A = [1 2 3; 4 5 6; 7 8 9]

    % 1st column
    M> A(:,1)
    ans =
       1
       4
       7

    % 1st 2 columns
    M> A(:,1:2)
    ans =
       1   2
       4   5
       7   8

    -

    P> +

    +

    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    # 1st column (as row vector)
    P> A[:,0]
    array([1, 4, 7])

    # 1st column (as column @@ -412,8 +413,8 @@ A[:,0:2]
    array([[1, 2], 
           [4, 5], 
           [7, 8]])

    -

    R> +

    +

    R> A = matrix(1:9,nrow=3,byrow=T)




    # 1st column as row vector

    R> t(A[,1])
    [,1] [,2] [,3]
    [1,] 1 4 7



    # 1st column @@ -421,136 +422,193 @@ A[,1]
    [1] 1 4 7



    # 1st 2 columns

    R> A[,1:2]
    [,1] [,2]
    [1,] 1 2
    [2,] 4 5
    [3,] 7 8

    -

    J> +

    +

    J> A=[1 2 3; 4 5 6; 7 8 9];

    #1st column
    J> A[:,1]
    3-element Array{Int64,1}:
    1
    4
    7

    #1st 2 columns
    J> A[:,1:2]
    3x2 Array{Int64,2}:
    1 2
    4 5
    7 8

    +

    Selecting columns

    +

    Extracting rows and columns by criteria

    (here: get rows that have value 9 in column 3)

    -

    M> +

    +

    M> A = [1 2 3; 4 5 9; 7 8 9]
    A =
       1   2   3
       4   5   9
       7   8   9

    M> A(A(:,3) == 9,:)
    ans =
       4   5   9
       7   8   9

    -

    P> +

    +

    P> A = np.array([ [1,2,3], [4,5,9], [7,8,9]])

    P> A
    array([[1, 2, 3],
           [4, 5, 9],
           [7, 8, 9]])

    P> A[A[:,2] == 9]
    array([[4, 5, 9],
           [7, 8, 9]])

    -

    R> - A = matrix(1:9,nrow=3,byrow=T)



    R> +

    +

    R> + A = matrix(1:9,nrow=3,byrow=T)



    R> A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 9
    [3,] 7 8 - 9



    R> - matrix(A[A[,3]==9], ncol=3)
    [,1] [,2] [,3]
    [1,] 4 5 9
    [2,] + 9



    R> + A[A[,3]==9,]

    +

    [1] 7 8 9

    +


    +

    -

    J> +

    +

    J> A=[1 2 3; 4 5 9; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 9
    7 8 9

    # use '.==' for
    # element-wise check
    J> A[ A[:,3] .==9, :]
    2x3 Array{Int64,2}:
    4 5 9
    7 8 9

    +

    Extracting rows and columns by criteria

    (here: get rows that have value 9 in column 3)

    +

    Accessing elements
    (here: 1st element)

    -

    M> +

    +

    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A(1,1)
    ans =  1

    -

    P> +

    +

    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> A[0,0]
    1

    -

    R> +

    +

    R> A = matrix(c(1,2,3,4,5,9,7,8,9),nrow=3,byrow=T)


    R> A[1,1]
    [1] 1

    -

    J> +

    +

    J> A=[1 2 3; 4 5 6; 7 8 9];

    J> A[1,1]
    1

    +

    Accessing elements
    (here: 1st element)

    +

    MANIPULATING SHAPE AND DIMENSIONS

    + +

    Converting 
    a + matrix into a row vector (by column)

    +
    +

    M> + A = [1 2 3; 4 5 6; 7 8 9]

    +

    M> + A(:)

    +

    ans + = +

    +

    1 +
    4
    7
    2
    5
    8
    3
    6
    9

    +
    +

    P> + A = np.array([[1,2,3],[4,5,6],[7,8,9]])

    +

    P> + A.flatten(1)

    +

    array([1, + 4, 7, 2, 5, 8, 3, 6, 9])

    +


    +

    +
    +

    R> + A = matrix(1:9,nrow=3,byrow=T)

    +


    +

    +

    R> + as.vector(A)

    +


    +

    +

    [1] + 1 4 7 2 5 8 3 6 9

    +


    +

    +
    +

    J> + A=[1 2 3; 4 5 6; 7 8 9]

    +

    J> + vec(A)

    +

    9-element + Array{Int64,1}:

    +

    1
    4
    7
    2
    5
    8
    3
    6
    9

    +
    +

    Converting 
    a + matrix into a row vector (by column)

    +

    Converting 
    row to column vectors

    -

    M> +

    +

    M> b = [1 2 3]


    M> b = b'
    b =
       1
       2
       3

    -

    P> +

    +

    P> b = np.array([1, 2, 3])

    P> b = b[np.newaxis].T
    # alternatively
    # b = b[:,np.newaxis]

    P> b
    array([[1],
           [2],
           [3]])

    -

    R> +

    +

    R> b = matrix(c(1,2,3), ncol=3)

    R> t(b)
    [,1]
    [1,] 1
    [2,] 2
    [3,] 3

    -

    J> +

    +

    J> b=vec([1 2 3])
    3-element Array{Int64,1}:
    1
    2
    3

    +

    Converting 
    row to column vectors

    +

    Reshaping Matrices

    (here: 3x3 matrix to row vector)

    -

    M> +

    +

    M> A = [1 2 3; 4 5 6; 7 8 9]
    A =
       1   2   3
       4   5   6
       7   8   9

    M> @@ -559,19 +617,19 @@ =
       1   4   7   2   5   8   3   6   9

    -

    P> +

    +

    P> A = np.array([[1,2,3],[4,5,6],[7,8,9]])

    P> A
    array([[1, 2, 3],
           [4, 5, 9],
           [7, 8, 9]])

    P> total_elements = np.prod(A.shape)

    -

    P> +

    P> B = A.reshape(1, total_elements) 

    # alternative shortcut:
    # A.reshape(1,-1)

    P> B
    array([[1, 2, 3, 4, 5, 6, 7, 8, 9]])

    -

    R> +

    +

    R> A = matrix(1:9,nrow=3,byrow=T)



    R> A
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    [3,] 7 8 9


    R> total_elements = dim(A)[1] * dim(A)[2]

    R> @@ -579,33 +637,33 @@ B
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
    [1,] 1 4 7 2 5 8 3 6 9

    -

    J> +

    +

    J> A=[1 2 3; 4 5 6; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 8 9

    J> total_elements=length(A)
    9

    J>B=reshape(A,1,total_elements)
    1x9 Array{Int64,2}:
    1 4 7 2 5 8 3 6 9

    +

    Reshaping Matrices

    (here: 3x3 matrix to row vector)

    +

    Concatenating matrices

    -

    M> +

    +

    M> A = [1 2 3; 4 5 6]

    M> B = [7 8 9; 10 11 12]

    M> C = [A; B]
        1    2    3
        4    5    6
        7    8    9
       10   11   12

    -

    P> +

    +

    P> A = np.array([[1, 2, 3], [4, 5, 6]])

    P> B = np.array([[7, 8, 9],[10,11,12]])

    P> C = np.concatenate((A, B), axis=0)

    P> @@ -613,33 +671,33 @@ 5, 6], 
           [ 7, 8, 9], 
           [10, 11, 12]])

    -

    R> +

    +

    R> A = matrix(1:6,nrow=2,byrow=T)

    R> B = matrix(7:12,nrow=2,byrow=T)

    R> C = rbind(A,B)

    R> C
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6
    [3,] 7 8 9
    [4,] 10 11 12

    -

    J> +

    +

    J> A=[1 2 3; 4 5 6];

    J> B=[7 8 9; 10 11 12];

    J> C=[A; B]
    4x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 8 9
    10 11 12

    +

    Concatenating matrices

    +

    Stacking 
    vectors and matrices

    -

    M> +

    +

    M> a = [1 2 3]

    M> b = [4 5 6]

    M> c = [a' b']
    c =
       1   4
       2   @@ -647,8 +705,8 @@ c = [a; b]
    c =
       1   2   3
       4   5   6

    -

    P> +

    +

    P> a = np.array([1,2,3])
    P> b = np.array([4,5,6])

    P> np.c_[a,b]
    array([[1, 4],
           [2, @@ -656,38 +714,38 @@ np.r_[a,b]
    array([[1, 2, 3],
           [4, 5, 6]])

    -

    R> +

    +

    R> a = matrix(1:3, ncol=3)

    R> b = matrix(4:6, ncol=3)

    R> matrix(rbind(A, B), ncol=2)
    [,1] [,2]
    [1,] 1 5
    [2,] 4 3


    R> rbind(A,B)
    [,1] [,2] [,3]
    [1,] 1 2 3
    [2,] 4 5 6

    -

    J> +

    +

    J> a=[1 2 3];

    J> b=[4 5 6];

    J> c=[a' b']
    3x2 Array{Int64,2}:
    1 4
    2 5
    3 6

    J> c=[a; b]
    2x3 Array{Int64,2}:
    1 2 3
    4 5 6

    +

    Stacking 
    vectors and matrices

    +

    BASIC MATRIX OPERATIONS

    +

    Matrix-scalar
    operations

    -

    M> A +

    +

    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A * 2
    ans =
        2    4    6
        8   10   12
       14   16   @@ -696,30 +754,30 @@ A - 2

    M> A / 2

    -

    P> +

    +

    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> A * 2
    array([[ 2,  4,  6],
           [ 8, 10, 12],
           [14, 16, 18]])

    P> A + 2

    P> A - 2

    P> A / 2

    -

    # +

    # Note that NumPy was optimized for
    # in-place assignments
    # e.g., A += A instead of
    # A = A + A

    -

    R> +

    +

    R> A = matrix(1:9, nrow=3, byrow=T)

    R> A * 2
    [,1] [,2] [,3]
    [1,] 2 4 6
    [2,] 8 10 12
    [3,] 14 16 18


    -

    R> +

    R> A + 2

    R> A - 2

    R> A / 2

    -

    J> +

    +

    J> A=[1 2 3; 4 5 6; 7 8 9];

    # elementwise operator

    J> A .* 2
    3x3 Array{Int64,2}:
    2 4 6
    8 10 12
    14 16 18

    J> @@ -727,83 +785,83 @@ A .- 2;

    J> A ./ 2;

    +

    Matrix-scalar
    operations

    +

    Matrix-matrix
    multiplication

    -

    M> A +

    +

    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A * A
    ans =
        30    36    42
        66    81    96
       102   126   150

    -

    P> +

    +

    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> np.dot(A,A) # or A.dot(A)
    array([[ 30,  36,  42],
           [ 66,  81,  96],
           [102, 126, 150]])

    -

    R> +

    +

    R> A = matrix(1:9, nrow=3, byrow=T)

    R> A %*% A
    [,1] [,2] [,3]
    [1,] 30 36 42
    [2,] 66 81 96
    [3,] 102 126 150

    -

    J> +

    +

    J> A=[1 2 3; 4 5 6; 7 8 9];

    J> A * A
    3x3 Array{Int64,2}:
    30 36 42
    66 81 96
    102 126 150

    +

    Matrix-matrix
    multiplication

    +

    Matrix-vector
    multiplication

    -

    M> +

    +

    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> b = [ 1; 2; 3 ]

    M> A * b
    ans =
       14
       32
       50

    -

    P> +

    +

    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> b = np.array([ [1], [2], [3] ])

    P> np.dot(A,b) # or A.dot(b)

    array([[14], [32], [50]])

    -

    R> +

    +

    R> A = matrix(1:9, ncol=3)

    R> b = matrix(1:3, nrow=3)

    

R> t(b %*% A)
    [,1]
    [1,] 14
    [2,] 32
    [3,] 50

    -

    J> +

    +

    J> A=[1 2 3; 4 5 6; 7 8 9];

    J> b=[1; 2; 3];

    J> A*b
    3-element Array{Int64,1}:
    14
    32
    50

    +

    Matrix-vector
    multiplication

    +

    Element-wise 
    matrix-matrix operations

    -

    M> A +

    +

    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A .* A
    ans =
        1    4    9
       16   25   36
       49   @@ -812,20 +870,20 @@ A .- A

    M> A ./ A

    -

    P> +

    +

    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> A * A
    array([[ 1,  4,  9],
           [16, 25, 36],
           [49, 64, 81]])

    P> A + A

    P> A - A

    P> A / A

    -

    # +

    # Note that NumPy was optimized for
    # in-place assignments
    # e.g., A += A instead of
    # A = A + A

    -

    R> +

    +

    R> A = matrix(1:9, nrow=3, byrow=T)


    R> A * A
    [,1] [,2] [,3]
    [1,] 1 4 9
    [2,] 16 25 36
    [3,] 49 64 81



    R> @@ -833,8 +891,8 @@ A - A

    R> A / A

    -

    J> +

    +

    J> A=[1 2 3; 4 5 6; 7 8 9];

    J> A .* A
    3x3 Array{Int64,2}:
    1 4 9
    16 25 36
    49 64 81

    J> @@ -842,67 +900,67 @@ A .- A;

    J> A ./ A;

    +

    Element-wise 
    matrix-matrix operations

    +

    Matrix elements to power n

    (here: individual elements squared)

    -

    M> A +

    +

    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A.^2
    ans =
        1    4    9
       16   25   36
       49   64   81

    -

    P> +

    +

    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> np.power(A,2)
    array([[ 1,  4,  9],
           [16, 25, 36],
           [49, 64, 81]])

    -

    R> +

    +

    R> A = matrix(1:9, nrow=3, byrow=T)

    R> A ^ 2
    [,1] [,2] [,3]
    [1,] 1 4 9
    [2,] 16 25 36
    [3,] 49 64 81

    -

    J> +

    +

    J> A=[1 2 3; 4 5 6; 7 8 9];

    J> A .^ 2
    3x3 Array{Int64,2}:
    1 4 9
    16 25 36
    49 64 81

    +

    Matrix elements to power n

    (here: individual elements squared)

    +

    Matrix to power n

    (here: matrix-matrix multiplication with itself)

    -

    M> A +

    +

    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A ^ 2
    ans =
        30    36    42
        66    81    96
       102   126   150

    -

    P> +

    +

    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> np.linalg.matrix_power(A,2)
    array([[ 30,  36,  42],
           [ 66,  81,  96],
           [102, 126, 150]])

    -

    R> +

    +

    R> A = matrix(1:9, ncol=3)

    
# requires the ‘expm’ package


    R> install.packages('expm')


    R> @@ -910,102 +968,102 @@ A %^% 2
    [,1] [,2] [,3]
    [1,] 30 66 102
    [2,] 36 81 126
    [3,] 42 96 150

    -

    J> +

    +

    J> A=[1 2 3; 4 5 6; 7 8 9];

    J> A ^ 2
    3x3 Array{Int64,2}:
    30 36 42
    66 81 96
    102 126 150

    +

    Matrix to power n

    (here: matrix-matrix multiplication with itself)

    +

    Matrix transpose

    -

    M> A +

    +

    M> A = [1 2 3; 4 5 6; 7 8 9]

    M> A'
    ans =
       1   4   7
       2   5   8
       3   6   9

    -

    P> +

    +

    P> A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])

    P> A.T
    array([[1, 4, 7],
           [2, 5, 8],
           [3, 6, 9]])

    -

    R> +

    +

    R> A = matrix(1:9, nrow=3, byrow=T)


    R> t(A)
    [,1] [,2] [,3]
    [1,] 1 4 7
    [2,] 2 5 8
    [3,] 3 6 9

    -

    J> +

    +

    J> A=[1 2 3; 4 5 6; 7 8 9]
    3x3 Array{Int64,2}:
    1 2 3
    4 5 6
    7 8 9

    J> A'
    3x3 Array{Int64,2}:
    1 4 7
    2 5 8
    3 6 9

    +

    Matrix transpose

    +

    Determinant of a matrix:
     A -> |A|

    -

    M> +

    +

    M> A = [6 1 1; 4 -2 5; 2 8 7]
    A =
       6   1   1
       4  -2   5
       2   8   7

    M> det(A)
    ans = -306

    -

    P> A +

    +

    P> A = np.array([[6,1,1],[4,-2,5],[2,8,7]])

    P> A
    array([[ 6,  1,  1],
           [ 4, -2,  5],
           [ 2,  8,  7]])

    P> np.linalg.det(A)
    -306.0

    -

    R> +

    +

    R> A = matrix(c(6,1,1,4,-2,5,2,8,7), nrow=3, byrow=T)

    R> A
    [,1] [,2] [,3]
    [1,] 6 1 1
    [2,] 4 -2 5
    [3,] 2 8 7

    R> det(A)
    [1] -306

    -

    J> +

    +

    J> A=[6 1 1; 4 -2 5; 2 8 7]
    3x3 Array{Int64,2}:
    6 1 1
    4 -2 5
    2 8 7

    J> det(A)
    -306.0

    +

    Determinant of a matrix:
     A -> |A|

    +

    Inverse of a matrix

    -

    M> +

    +

    M> A = [4 7; 2 6]
    A =
       4   7
       2   6

    M> A_inv = inv(A)
    A_inv =
       0.60000  -0.70000
      -0.20000   0.40000

    -

    P> +

    +

    P> A = np.array([[4, 7], [2, 6]])

    P> A
    array([[4, 7], 
           [2, 6]])

    P> @@ -1013,36 +1071,36 @@ A_inverse
    array([[ 0.6, -0.7], 
           [-0.2, 0.4]])

    -

    R> +

    +

    R> A = matrix(c(4,7,2,6), nrow=2, byrow=T)

    R> A
    [,1] [,2]
    [1,] 4 7
    [2,] 2 6

    R> solve(A)
    [,1] [,2]
    [1,] 0.6 -0.7
    [2,] -0.2 0.4

    -

    J> +

    +

    J> A=[4 7; 2 6]
    2x2 Array{Int64,2}:
    4 7
    2 6

    J> A_inv=inv(A)
    2x2 Array{Float64,2}:
    0.6 -0.7
    -0.2 0.4

    +

    Inverse of a matrix

    +

    ADVANCED MATRIX OPERATIONS

    +

    Calculating the covariance matrix 
    of 3 random variables

    (here: covariances of the means 
    of x1, x2, and x3)

    -

    M> +

    +

    M> x1 = [4.0000 4.2000 3.9000 4.3000 4.1000]’

    M> x2 = [2.0000 2.1000 2.0000 2.1000 2.2000]'

    M> x3 = [0.60000 0.59000 0.58000 0.62000 0.63000]’

    M> @@ -1051,8 +1109,8 @@ 7.0000e-03   1.3500e-03
       1.7500e-03   1.3500e-03   4.3000e-04

    -

    P> +

    +

    P> x1 = np.array([ 4, 4.2, 3.9, 4.3, 4.1])

    P> x2 = np.array([ 2, 2.1, 2, 2.1, 2.2])

    P> x3 = np.array([ 0.6, 0.59, 0.58, 0.62, 0.63])

    P> @@ -1061,8 +1119,8 @@  ,  0.00135],
           [ 0.00175,  0.00135,  0.00043]])

    -

    R> +

    +

    R> x1 = matrix(c(4, 4.2, 3.9, 4.3, 4.1), ncol=5)

    R> x2 = matrix(c(2, 2.1, 2, 2.1, 2.2), ncol=5)

    R> x3 = matrix(c(0.6, 0.59, 0.58, 0.62, 0.63), ncol=5)



    R> @@ -1070,27 +1128,27 @@ 0.02500 0.00750 0.00175
    [2,] 0.00750 0.00700 0.00135
    [3,] 0.00175 0.00135 0.00043

    -

    J> +

    +

    J> x1=[4.0 4.2 3.9 4.3 4.1]';

    J> x2=[2. 2.1 2. 2.1 2.2]';

    J> x3=[0.6 .59 .58 .62 .63]';

    J> cov([x1 x2 x3])
    3x3 Array{Float64,2}:
    0.025 0.0075 0.00175
    0.0075 0.007 0.00135
    0.00175 0.00135 0.00043

    +

    Calculating the covariance matrix 
    of 3 random variables

    (here: covariances of the means 
    of x1, x2, and x3)

    +

    Calculating 
    eigenvectors and eigenvalues

    -

    M> +

    +

    M> A = [3 1; 1 3]
    A =
       3   1
       1   3

    M> [eig_vec,eig_val] = eig(A)
    eig_vec =
      -0.70711   @@ -1098,8 +1156,8 @@ =
    Diagonal Matrix
       2   0
       0   4

    -

    P> +

    +

    P> A = np.array([[3, 1], [1, 3]])

    P> A
    array([[3, 1],
           [1, 3]])

    P> eig_val, eig_vec = np.linalg.eig(A)

    P> @@ -1107,34 +1165,34 @@ eig_vec
    Array([[ 0.70710678, -0.70710678],
           [ 0.70710678,  0.70710678]])

    -

    R> +

    +

    R> A = matrix(c(3,1,1,3), ncol=2)

    R> A
    [,1] [,2]
    [1,] 3 1
    [2,] 1 3

    R> eigen(A)
    $values
    [1] 4 2

    $vectors
    [,1] [,2]
    [1,] 0.7071068 -0.7071068
    [2,] 0.7071068 0.7071068

    -

    J> +

    +

    J> A=[3 1; 1 3]
    2x2 Array{Int64,2}:
    3 1
    1 3

    J> (eig_vec,eig_val)=eig(a)
    ([2.0,4.0],
    2x2 Array{Float64,2}:
    -0.707107 0.707107
    0.707107 0.707107)

    +

    Calculating 
    eigenvectors and eigenvalues

    +

    Generating a Gaussian dataset:

    creating random vectors from the multivariate normal
    distribution given mean and covariance matrix

    (here: 5 random vectors with
    mean 0, covariance = 0, variance = 2)

    -

    % +

    +

    % requires statistics toolbox package
    % how to install and load it in Octave:

    % download the package from: 
    % http://octave.sourceforge.net/packages.php
    % pkg install 
    % @@ -1149,8 +1207,8 @@ 3.055316
      -0.985215  -0.990936
       1.122528   0.686977
        

    -

    P> +

    +

    P> mean = np.array([0,0])

    P> cov = np.array([[2,0],[0,2]])

    P> np.random.multivariate_normal(mean, cov, 5)

    Array([[ @@ -1160,8 +1218,8 @@  [-2.93207591, -0.07369322], 
           [-1.37031244, -1.18408792]])

    -

    # +

    +

    # requires the ‘mass’ package

    R> install.packages('MASS')

    R> library(MASS)


    R> @@ -1172,8 +1230,8 @@ -0.4161082
    [8,] -1.3236339 0.7755572
    [9,] 0.2771013 1.4900494
    [10,] -1.3536268 0.2338913

    -

    # +

    +

    # requires the Distributions package from https://github.com/JuliaStats/Distributions.jl

    J> using Distributions

    J> @@ -1184,7 +1242,7 @@ 0.370725 -0.761928 -3.91747 1.47516
    -0.448821 2.21904 2.24561 0.692063 0.390495

    +

    Generating a Gaussian dataset:

    creating random vectors from the multivariate normal
    distribution given mean and covariance From 261c359168412055bc67f57fe302c32f8b03939b Mon Sep 17 00:00:00 2001 From: Jon Goodnow Date: Sat, 19 Jul 2014 16:05:12 -0400 Subject: [PATCH 170/248] fixed a typo and a broken link --- tutorials/sqlite3_howto/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorials/sqlite3_howto/README.md b/tutorials/sqlite3_howto/README.md index 7ef88e9..e5cccec 100644 --- a/tutorials/sqlite3_howto/README.md +++ b/tutorials/sqlite3_howto/README.md @@ -29,7 +29,7 @@ _\-- written by Sebastian Raschka_ on March 7, 2014 • Conclusion The complete Python code that I am using in this tutorial can be downloaded -from my GitHub repository: [https://github.com/rasbt/python_reference/tutorials/sqlite3_howto](https://github.com/rasbt/python_reference/tutorials/sqlite3_howto) +from my GitHub repository: [https://github.com/rasbt/python_reference/tree/master/tutorials/sqlite3_howto](https://github.com/rasbt/python_reference/tree/master/tutorials/sqlite3_howto) * * * @@ -97,7 +97,7 @@ there is more information about PRIMARY KEYs further down in this section). - mport sqlite3 + import sqlite3 sqlite_file = 'my_first_db.sqlite' # name of the sqlite database file table_name1 = 'my_table_1' # name of the table to be created From 4beb09cac11d4423ad67f01fc958af257d61369f Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 29 Jul 2014 17:34:53 -0400 Subject: [PATCH 171/248] new workaround for internal links --- Images/ipython_links_remedy2.png | Bin 0 -> 10520 bytes tutorials/table_of_contents_ipython.ipynb | 18 ++++++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 Images/ipython_links_remedy2.png diff --git a/Images/ipython_links_remedy2.png b/Images/ipython_links_remedy2.png new file mode 100644 index 0000000000000000000000000000000000000000..ae3abeaa0288d32051ff622506f5866db3653196 GIT binary patch literal 10520 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 P02\n", "
    \n", + "\n", + "### Solution 2: line break between the id-anchor and text:\n", + "\n", + "![img of format problem](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/ipython_links_remedy2.png)\n", + "\n", + "(this alternative workaround was kindly submitted by [Ryan Morshead](https://github.com/rmorshea))\n", + "\n", + "
    \n", + "
    \n", "
    \n", "


    " ] @@ -223,7 +229,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Solution 2: using header cells" + "### Solution 3: using header cells" ] }, { From 4b34d71b463eca2143e31c3482690c8c78a8bead Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 29 Jul 2014 19:51:21 -0400 Subject: [PATCH 172/248] cheatsheet upd --- tutorials/matrix_cheatsheet_only.html | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tutorials/matrix_cheatsheet_only.html b/tutorials/matrix_cheatsheet_only.html index 7624ea4..8d9762c 100644 --- a/tutorials/matrix_cheatsheet_only.html +++ b/tutorials/matrix_cheatsheet_only.html @@ -14,6 +14,13 @@ + + From b8ad2a5aa31eeb6a1c90c431ba429b420b3393cd Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 30 Jul 2014 00:22:19 -0400 Subject: [PATCH 173/248] watermark notice --- README.md | 2 +- ipython_magic/README.md | 8 ++++++++ ipython_magic/images/watermark_ex1.png | Bin 0 -> 22863 bytes ipython_magic/watermark.ipynb | 9 ++++++++- 4 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 ipython_magic/README.md create mode 100644 ipython_magic/images/watermark_ex1.png diff --git a/README.md b/README.md index cfa5708..b28d8b4 100644 --- a/README.md +++ b/README.md @@ -125,7 +125,7 @@ ###// Useful scripts and snippets [[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] -- [IPython magic function %watermark](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/ipython_magic/watermark.ipynb) - for printing date- and time-stamps and various system info +- [watermark](https://github.com/rasbt/watermark) - An IPython magic extension for printing date and time stamps, version numbers, and hardware information. - [Shell script](./useful_scripts/prepend_python_shebang.sh) for prepending Python-shebangs to .py files. diff --git a/ipython_magic/README.md b/ipython_magic/README.md new file mode 100644 index 0000000..fb167a8 --- /dev/null +++ b/ipython_magic/README.md @@ -0,0 +1,8 @@ +watermark +========= + +An IPython magic extension for printing date and time stamps, version numbers, and hardware information + +![](./images/watermark_ex1.png) + +**watermark is now located and maintained in a separate GitHub repository:** [https://github.com/rasbt/watermark](https://github.com/rasbt/watermark) \ No newline at end of file diff --git a/ipython_magic/images/watermark_ex1.png b/ipython_magic/images/watermark_ex1.png new file mode 100644 index 0000000000000000000000000000000000000000..6e95b0338f57920b9338b4f4b7a28ab53bac4cd3 GIT binary patch literal 22863 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 literal 0 HcmV?d00001 diff --git a/ipython_magic/watermark.ipynb b/ipython_magic/watermark.ipynb index 3c2433e..d88d6b8 100644 --- a/ipython_magic/watermark.ipynb +++ b/ipython_magic/watermark.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:ae521d31a2ed8eb2f249825915f64611628365cb0ced53ef18be691238c0018e" + "signature": "sha256:968e6f47972d4ab9e2ef4eef6906343257267ccf094fcae08da24fec3647743d" }, "nbformat": 3, "nbformat_minor": 0, @@ -23,6 +23,13 @@ "
    " ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**watermark is now located and maintained in a separate GitHub repository:** [https://github.com/rasbt/watermark](https://github.com/rasbt/watermark)" + ] + }, { "cell_type": "heading", "level": 1, From 87dbf3e1dbc2e0bef42d66bf16e61fd9114518f1 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 30 Jul 2014 15:32:25 -0400 Subject: [PATCH 174/248] numpy nan quickguide --- README.md | 2 + tutorials/numpy_nan_quickguide.ipynb | 770 +++++++++++++++++++++++++++ 2 files changed, 772 insertions(+) create mode 100644 tutorials/numpy_nan_quickguide.ipynb diff --git a/README.md b/README.md index cfa5708..8b4e165 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,8 @@ - A collection of useful regular expressions [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/useful_regex.ipynb)] +- Quick guide for dealing with missing numbers in NumPy [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/numpy_nan_quickguide.ipynb)] +
    diff --git a/tutorials/numpy_nan_quickguide.ipynb b/tutorials/numpy_nan_quickguide.ipynb new file mode 100644 index 0000000..dfc9572 --- /dev/null +++ b/tutorials/numpy_nan_quickguide.ipynb @@ -0,0 +1,770 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:7553ded8e8dc9e6faf09cd22747b33a3ae9039743491e88025fb61ea45203063" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to python_reference](https://github.com/rasbt/python_reference)]" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%load_ext watermark" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%watermark -v -p numpy -d -u" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Last updated: 30/07/2014 \n", + "\n", + "CPython 3.4.1\n", + "IPython 2.0.0\n", + "\n", + "numpy 1.8.1\n" + ] + } + ], + "prompt_number": 2 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[More information](https://github.com/rasbt/watermark) about the `watermark` magic command extension." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Quick guide for dealing with missing numbers in NumPy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is just a quick overview of how to deal with missing values (i.e., \"NaN\"s for \"Not-a-Number\") in NumPy and I am happy to expand it over time. Yes, and there will also be a separate one for pandas some time!\n", + "\n", + "I would be happy to hear your comments and suggestions. \n", + "Please feel free to drop me a note via\n", + "[twitter](https://twitter.com/rasbt), [email](mailto:bluewoodtree@gmail.com), or [google+](https://plus.google.com/+SebastianRaschka).\n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Sections" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- [Sample data from a CSV file](#Sample-data-from-a-CSV-file)\n", + "- [Determining if a value is missing](#Determining-if-a-value-is-missing)\n", + "- [Counting the number of missing values](#Counting-the-number-of-missing-values)\n", + "- [Calculating the sum of an array that contains NaNs](#Calculating the sum of an array that contains NaNs)\n", + "- [Removing all rows that contain missing values](#Removing-all-rows-that-contain-missing-values)\n", + "- [Convert missing values to 0](#Convert-missing-values-to-0)\n", + "- [Converting certain numbers to NaN](#Converting-certain-numbers-to-NaN)\n", + "- [Remove all missing elements from an array](#Remove-all-missing-elements-from-an-array)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Sample data from a CSV file" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's assume that we have a CSV file with missing elements like the one shown below." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%file example.csv\n", + "1,2,3,4\n", + "5,6,,8\n", + "10,11,12," + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Overwriting example.csv\n" + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `np.genfromtxt` function has a `missing_values` parameters which translates missing values into `np.nan` objects by default. This allows us to construct a new NumPy `ndarray` object, even if elements are missing." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import numpy as np\n", + "ary = np.genfromtxt('./example.csv', delimiter=',')\n", + "\n", + "print('%s x %s array:\\n' %(ary.shape[0], ary.shape[1]))\n", + "print(ary)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "3 x 4 array:\n", + "\n", + "[[ 1. 2. 3. 4.]\n", + " [ 5. 6. nan 8.]\n", + " [ 10. 11. 12. nan]]\n" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Determining if a value is missing" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A handy function to test whether a value is a `NaN` or not is to use the `np.isnan` function." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "np.isnan(np.nan)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 37, + "text": [ + "True" + ] + } + ], + "prompt_number": 37 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is especially useful to create boolean masks for the so-called \"fancy indexing\" of NumPy arrays, which we will come back to later." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "np.isnan(ary)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 5, + "text": [ + "array([[False, False, False, False],\n", + " [False, False, True, False],\n", + " [False, False, False, True]], dtype=bool)" + ] + } + ], + "prompt_number": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Counting the number of missing values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to find out how many elements are missing in our array, we can use the `np.isnan` function that we have seen in the previous section. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "np.count_nonzero(np.isnan(ary))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 8, + "text": [ + "2" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we want to determine the number of non-missing elements, we can simply revert the returned `Boolean` mask via the handy \"tilde\" sign." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "np.count_nonzero(~np.isnan(ary))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 9, + "text": [ + "10" + ] + } + ], + "prompt_number": 9 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Calculating the sum of an array that contains `NaN`s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we will find out via the following code snippet, we can't use NumPy's regular `sum` function to calculate the sum of an array." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "np.sum(ary)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 10, + "text": [ + "nan" + ] + } + ], + "prompt_number": 10 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since the `np.sum` function does not work, use `np.nansum` instead:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('total sum:', np.nansum(ary))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "total sum: 62.0\n" + ] + } + ], + "prompt_number": 11 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('row sums:', np.nansum(ary, axis=0))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "row sums: [ 16. 19. 15. 12.]\n" + ] + } + ], + "prompt_number": 12 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print('column sums:', np.nansum(ary, axis=1))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "column sums: [ 10. 19. 33.]\n" + ] + } + ], + "prompt_number": 13 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Removing all rows that contain missing values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, we will use the `Boolean mask` again to return only those rows that DON'T contain missing values. And if we want to get only the rows that contain `NaN`s, we could simply drop the `~`." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "ary[~np.isnan(ary).any(1)]" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 14, + "text": [ + "array([[ 1., 2., 3., 4.]])" + ] + } + ], + "prompt_number": 14 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Convert missing values to 0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Certain operations, algorithms, and other analyses might not work with `NaN` objects in our data array. But that's not a problem: We can use the convenient `np.nan_to_num` function will convert it to the value 0." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "ary0 = np.nan_to_num(ary)\n", + "ary0" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 15, + "text": [ + "array([[ 1., 2., 3., 4.],\n", + " [ 5., 6., 0., 8.],\n", + " [ 10., 11., 12., 0.]])" + ] + } + ], + "prompt_number": 15 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Converting certain numbers to NaN" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Vice versa, we can also convert any number to a `np.NaN` object. Here, we use the array that we created in the previous section and convert the `0`s back to `np.nan` objects." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "ary0[ary0==0] = np.nan\n", + "ary0" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 16, + "text": [ + "array([[ 1., 2., 3., 4.],\n", + " [ 5., 6., nan, 8.],\n", + " [ 10., 11., 12., nan]])" + ] + } + ], + "prompt_number": 16 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Remove all missing elements from an array" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is one is a little bit more tricky. We can remove missing values via a combination of the `Boolean` mask and fancy indexing, however, this will have the disadvantage that it will flatten our array (we can't just punch holes into a NumPy array)." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "ary[~np.isnan(ary)]" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 17, + "text": [ + "array([ 1., 2., 3., 4., 5., 6., 8., 10., 11., 12.])" + ] + } + ], + "prompt_number": 17 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Thus, this is a method that would better work on individual rows:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "x = np.array([1,2,np.nan])\n", + "\n", + "x[~np.isnan(np.array(x))]" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 21, + "text": [ + "array([ 1., 2.])" + ] + } + ], + "prompt_number": 21 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file From 447f588960ecbf91c82a35a550d75a3e10781062 Mon Sep 17 00:00:00 2001 From: rasbt Date: Thu, 31 Jul 2014 00:20:22 -0400 Subject: [PATCH 175/248] typo fix --- tutorials/example.csv | 3 ++ tutorials/numpy_nan_quickguide.ipynb | 42 ++++++++++++++-------------- 2 files changed, 24 insertions(+), 21 deletions(-) create mode 100644 tutorials/example.csv diff --git a/tutorials/example.csv b/tutorials/example.csv new file mode 100644 index 0000000..65329b8 --- /dev/null +++ b/tutorials/example.csv @@ -0,0 +1,3 @@ +1,2,3,4 +5,6,,8 +10,11,12, \ No newline at end of file diff --git a/tutorials/numpy_nan_quickguide.ipynb b/tutorials/numpy_nan_quickguide.ipynb index dfc9572..acbbeed 100644 --- a/tutorials/numpy_nan_quickguide.ipynb +++ b/tutorials/numpy_nan_quickguide.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:7553ded8e8dc9e6faf09cd22747b33a3ae9039743491e88025fb61ea45203063" + "signature": "sha256:b2597ea4263c11dd6774b227e7a3a5626197c4863e6895002657fd55d02b55d9" }, "nbformat": 3, "nbformat_minor": 0, @@ -39,10 +39,10 @@ "output_type": "stream", "stream": "stdout", "text": [ - "Last updated: 30/07/2014 \n", + "Last updated: 31/07/2014 \n", "\n", "CPython 3.4.1\n", - "IPython 2.0.0\n", + "IPython 2.1.0\n", "\n", "numpy 1.8.1\n" ] @@ -161,7 +161,7 @@ "output_type": "stream", "stream": "stdout", "text": [ - "Overwriting example.csv\n" + "Writing example.csv\n" ] } ], @@ -258,13 +258,13 @@ { "metadata": {}, "output_type": "pyout", - "prompt_number": 37, + "prompt_number": 5, "text": [ "True" ] } ], - "prompt_number": 37 + "prompt_number": 5 }, { "cell_type": "markdown", @@ -292,7 +292,7 @@ { "metadata": {}, "output_type": "pyout", - "prompt_number": 5, + "prompt_number": 6, "text": [ "array([[False, False, False, False],\n", " [False, False, True, False],\n", @@ -300,7 +300,7 @@ ] } ], - "prompt_number": 5 + "prompt_number": 6 }, { "cell_type": "markdown", @@ -351,13 +351,13 @@ { "metadata": {}, "output_type": "pyout", - "prompt_number": 8, + "prompt_number": 7, "text": [ "2" ] } ], - "prompt_number": 8 + "prompt_number": 7 }, { "cell_type": "markdown", @@ -385,13 +385,13 @@ { "metadata": {}, "output_type": "pyout", - "prompt_number": 9, + "prompt_number": 8, "text": [ "10" ] } ], - "prompt_number": 9 + "prompt_number": 8 }, { "cell_type": "markdown", @@ -435,13 +435,13 @@ { "metadata": {}, "output_type": "pyout", - "prompt_number": 10, + "prompt_number": 9, "text": [ "nan" ] } ], - "prompt_number": 10 + "prompt_number": 9 }, { "cell_type": "markdown", @@ -474,13 +474,13 @@ ] } ], - "prompt_number": 11 + "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ - "print('row sums:', np.nansum(ary, axis=0))" + "print('column sums:', np.nansum(ary, axis=0))" ], "language": "python", "metadata": {}, @@ -489,17 +489,17 @@ "output_type": "stream", "stream": "stdout", "text": [ - "row sums: [ 16. 19. 15. 12.]\n" + "column sums: [ 16. 19. 15. 12.]\n" ] } ], - "prompt_number": 12 + "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ - "print('column sums:', np.nansum(ary, axis=1))" + "print('row sums:', np.nansum(ary, axis=1))" ], "language": "python", "metadata": {}, @@ -508,11 +508,11 @@ "output_type": "stream", "stream": "stdout", "text": [ - "column sums: [ 10. 19. 33.]\n" + "row sums: [ 10. 19. 33.]\n" ] } ], - "prompt_number": 13 + "prompt_number": 12 }, { "cell_type": "markdown", From 841401ab65a23d77c86b8126dc28d5deb6c141b1 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 2 Aug 2014 22:36:17 -0400 Subject: [PATCH 176/248] Sorting a list of tuples by the last last elements of the tuple --- howtos_as_py_files/sort_list_of_tuples_by_ele.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 howtos_as_py_files/sort_list_of_tuples_by_ele.py diff --git a/howtos_as_py_files/sort_list_of_tuples_by_ele.py b/howtos_as_py_files/sort_list_of_tuples_by_ele.py new file mode 100644 index 0000000..972d35d --- /dev/null +++ b/howtos_as_py_files/sort_list_of_tuples_by_ele.py @@ -0,0 +1,10 @@ +# Sebastian Raschka 09/02/2014 +# Sorting a list of tuples by the last last elements of the tuple + +a_list = [(1,3,'c'), (2,3,'a'), (1,2,'b')] + +sorted_list = sorted(a_list, key=lambda e: e[::-1]) + +print(sorted_list) + +# prints [(2, 3, 'a'), (1, 2, 'b'), (1, 3, 'c')] \ No newline at end of file From b6f54765e7b9f7e0f7da90adcf3c89b5b417c582 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 2 Aug 2014 23:21:53 -0400 Subject: [PATCH 177/248] Sorting a list of tuples by the last last elements of the tuple --- howtos_as_py_files/sort_list_of_tuples_by_ele.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/howtos_as_py_files/sort_list_of_tuples_by_ele.py b/howtos_as_py_files/sort_list_of_tuples_by_ele.py index 972d35d..ed8470a 100644 --- a/howtos_as_py_files/sort_list_of_tuples_by_ele.py +++ b/howtos_as_py_files/sort_list_of_tuples_by_ele.py @@ -1,6 +1,15 @@ # Sebastian Raschka 09/02/2014 # Sorting a list of tuples by the last last elements of the tuple + +# Here, we make use of the "key" parameter of the in-built "sorted()" function +# (also available for the ".sort()" method), which let's us define a function +# that is called on every element that is to be sorted. In this case, our +# "key"-function is a simple lambda function that returns the last item +# from every tuple. + + + a_list = [(1,3,'c'), (2,3,'a'), (1,2,'b')] sorted_list = sorted(a_list, key=lambda e: e[::-1]) From b87aec3ee9bcf27ed81ab5dc8a5cb772f0e182ed Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 2 Aug 2014 23:24:12 -0400 Subject: [PATCH 178/248] Sorting a list of tuples by the last last elements of the tuple --- howtos_as_py_files/sort_list_of_tuples_by_ele.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/howtos_as_py_files/sort_list_of_tuples_by_ele.py b/howtos_as_py_files/sort_list_of_tuples_by_ele.py index ed8470a..845774d 100644 --- a/howtos_as_py_files/sort_list_of_tuples_by_ele.py +++ b/howtos_as_py_files/sort_list_of_tuples_by_ele.py @@ -1,5 +1,5 @@ # Sebastian Raschka 09/02/2014 -# Sorting a list of tuples by the last last elements of the tuple +# Sorting a list of tuples by the last elements of the tuple # Here, we make use of the "key" parameter of the in-built "sorted()" function From 6e74774e869eb1e2ce6a159af9aa9bda40ec6172 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 3 Aug 2014 11:32:03 -0400 Subject: [PATCH 179/248] comment about reverse --- .../sort_list_of_tuples_by_ele.py | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/howtos_as_py_files/sort_list_of_tuples_by_ele.py b/howtos_as_py_files/sort_list_of_tuples_by_ele.py index 845774d..4a94d4b 100644 --- a/howtos_as_py_files/sort_list_of_tuples_by_ele.py +++ b/howtos_as_py_files/sort_list_of_tuples_by_ele.py @@ -1,6 +1,5 @@ # Sebastian Raschka 09/02/2014 -# Sorting a list of tuples by the last elements of the tuple - +# Sorting a list of tuples by starting with the last element of the tuple (=reversed tuple) # Here, we make use of the "key" parameter of the in-built "sorted()" function # (also available for the ".sort()" method), which let's us define a function @@ -9,11 +8,27 @@ # from every tuple. - -a_list = [(1,3,'c'), (2,3,'a'), (1,2,'b')] +a_list = [(1,3,'c'), (2,3,'a'), (3,2,'b'), (2,2,'b')] sorted_list = sorted(a_list, key=lambda e: e[::-1]) print(sorted_list) -# prints [(2, 3, 'a'), (1, 2, 'b'), (1, 3, 'c')] \ No newline at end of file +# prints [(2, 3, 'a'), (2, 2, 'b'), (3, 2, 'b'), (1, 3, 'c')] + + + +# If we are only interesting in sorting the list by the last element +# of the tuple and don't care about a "tie" situation, we can also use +# the index of the tuple item directly instead of reversing the tuple +# for efficiency. + + + +a_list = [(1,3,'c'), (2,3,'a'), (3,2,'b'), (2,2,'b')] + +sorted_list = sorted(a_list, key=lambda e: e[-1]) + +print(sorted_list) + +# prints [(2, 3, 'a'), (3, 2, 'b'), (2, 2, 'b'), (1, 3, 'c')] \ No newline at end of file From d3c58e595bf3b583f9147232c911f0d4dffbadfa Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 5 Aug 2014 01:12:12 -0400 Subject: [PATCH 180/248] readme re-categorization --- README.md | 76 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 0453457..d4480cf 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ ###// Algorithms [[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] -*The algorithms category was moved to a separate GitHub repository [rasbt/algorithms_in_ipython_notebooks](https://github.com/rasbt/algorithms_in_ipython_notebooks)* +*The algorithms category has been moved to a separate GitHub repository [rasbt/algorithms_in_ipython_notebooks](https://github.com/rasbt/algorithms_in_ipython_notebooks)* @@ -83,44 +83,60 @@ ###// Plotting and Visualization [[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] -- a matplotlib gallery in IPython notebooks [[GitHub repo](https://github.com/rasbt/matplotlib-gallery)] +*The matplotlib-gallery in IPython notebooks has been moved to a separate GitHub repository [matplotlib-gallery](https://github.com/rasbt/matplotlib-gallery)* + +**Featured articles**: + +- Preparing Plots for Publication [[IPython nb](http://nbviewer.ipython.org/github/rasbt/matplotlib-gallery/blob/master/ipynb/publication.ipynb)]
    ###// Benchmarks [[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] -*The benchmark category was moved to a separate GitHub repository [One-Python-benchmark-per-day](https://github.com/rasbt/One-Python-benchmark-per-day)* - -- **1** - Reversing strings [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day1_string_reverse.ipynb)] -- **2** - Calculating sample means [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day2_mean_values.ipynb)] -- **3** - 6 different ways to count elements using a dict [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day3_dictionary_counting.ipynb)] -- **4** - Python vs. Cython vs. Numba [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day4_python_cython_numba.ipynb)] -- **4.2** - (C)Python compilers - Cython vs. Numba vs. Parakeet [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day4_2_cython_numba_parakeet.ipynb)] -- **5** - Comparing 9 ways for flattening lists of sublists [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day5_flattening_lists.ipynb)] -- **6** - Determining if a string is a number [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day6_string_is_number.ipynb)] -- **7** - Speeding up NumPy array expressions with Numexpr [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day7_numpy_numexpr.ipynb)] -- **7.2** - Just-in-time compilers for NumPy array expressions [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day7_2_jit_numpy.ipynb)] -- **8** - Calculating square roots and exponents [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day8_sqrt_and_exp.ipynb)] -- **9** - The most Pythonic way to check if a string ends with a particular substring [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day9_string_endswith.ipynb)] -- **10** - Cython - Bridging the gap between Python and Fortran [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day10_fortran_lstsqr.ipynb)] -- **11** - The `deque` container data type [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day11_deque_container.ipynb)] -- **12** - Lightning fast insertion into sorted lists via the `bisect` module [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day12_insert_into_sorted_list.ipynb)] -- **13** - Parallel processing via the multiprocessing module [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/multiprocessing_intro.ipynb)] -- **14** - Python's and NumPy's in-place operator functions [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day14_inplace_operators.ipynb)] -- **15** - Array indexing in NumPy: Extracting rows and columns [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day15_array_indexing_numpy.ipynb)] -- **16** - Vectorizing a classic for-loop in NumPy [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day16_numpy_vectorization.ipynb)] -- **17** - Stacking NumPy arrays [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day17_numpy_stacking.ipynb)] - - -###// Other +*The benchmark category has been moved to a separate GitHub repository [One-Python-benchmark-per-day](https://github.com/rasbt/One-Python-benchmark-per-day)* + +**Featured articles**: + +- (C)Python compilers - Cython vs. Numba vs. Parakeet [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day4_2_cython_numba_parakeet.ipynb)] +- Just-in-time compilers for NumPy array expressions [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day7_2_jit_numpy.ipynb)] +- Cython - Bridging the gap between Python and Fortran [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day10_fortran_lstsqr.ipynb)] +- Parallel processing via the multiprocessing module [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/multiprocessing_intro.ipynb)] +- Vectorizing a classic for-loop in NumPy [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day16_numpy_vectorization.ipynb)] + +
    + + +
    +###// Benchmarks [[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] -- Happy Mother's [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/other/happy_mothers_day.ipynb?create=1)] +*The benchmark category has been moved to a separate GitHub repository [One-Python-benchmark-per-day](https://github.com/rasbt/One-Python-benchmark-per-day)* + +**Featured articles**: + +- (C)Python compilers - Cython vs. Numba vs. Parakeet [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day4_2_cython_numba_parakeet.ipynb)] +- Just-in-time compilers for NumPy array expressions [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day7_2_jit_numpy.ipynb)] +- Cython - Bridging the gap between Python and Fortran [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day10_fortran_lstsqr.ipynb)] +- Parallel processing via the multiprocessing module [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/multiprocessing_intro.ipynb)] +- Vectorizing a classic for-loop in NumPy [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day16_numpy_vectorization.ipynb)] + +
    + + +###// Python and "Data Science" +[[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] + +*The "data science"-related posts have been moved to a separate GitHub repository [pattern_classification](https://github.com/rasbt/pattern_classification)* + +**Featured articles**: -- Numeric matrix manipulation - The cheat sheet for MATLAB, Python NumPy, R, and Julia [[Markdown](./tutorials/matrix_cheatsheet.md)] +- Entry Point: Data - Using Python's sci-packages to prepare data for Machine Learning tasks and other data analyses [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/python_data_entry_point.ipynb)] +- About Feature Scaling: Standardization and Min-Max-Scaling (Normalization) [[IPython nb](http://nbviewer.ipython.org/github/rasbt/pattern_classification/blob/master/preprocessing/about_standardization_normalization.ipynb)] +- Principal Component Analysis (PCA) [[IPython nb](http://nbviewer.ipython.org/github/rasbt/pattern_classification/blob/master/dimensionality_reduction/projection/principal_component_analysis.ipynb)] +- Linear Discriminant Analysis (LDA) [[IPython nb](http://nbviewer.ipython.org/github/rasbt/pattern_classification/blob/master/dimensionality_reduction/projection/linear_discriminant_analysis.ipynb)] +- Kernel density estimation via the Parzen-window technique [[IPython nb](http://nbviewer.ipython.org/github/rasbt/pattern_classification/blob/master/parameter_estimation_techniques/parzen_window_technique.ipynb)] -- Python Book Reviews [[Markdown](./other/python_book_reviews.md)]
    @@ -131,7 +147,7 @@ - [Shell script](./useful_scripts/prepend_python_shebang.sh) for prepending Python-shebangs to .py files. -- convert 'tab-delimited' to 'comma-separated' CSV files [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/useful_scripts/fix_tab_csv.ipynb?create=1)] +- convert 'tab-delimited' to 'comma-separated' CSV files [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/useful_scripts/fix_tab_csv.ipynb)] - A random string generator [function](./useful_scripts/random_string_generator.py) From 031c17005f7862ddabf44f9401de754fc773eff1 Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 5 Aug 2014 01:13:58 -0400 Subject: [PATCH 181/248] readme re-categorization --- README.md | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/README.md b/README.md index d4480cf..7973fbe 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ - [// Algorithms](#-algorithms) - [// Plotting and Visualization](#-plotting-and-visualization) - [// Benchmarks](#-benchmarks) +- [// Python and "Data Science"](#-python-and-data-science) - [// Other](#-other) - [// Useful scripts and snippets](#-useful-scripts-and-snippets) - [// Links](#-links) @@ -90,21 +91,7 @@ - Preparing Plots for Publication [[IPython nb](http://nbviewer.ipython.org/github/rasbt/matplotlib-gallery/blob/master/ipynb/publication.ipynb)] -
    -###// Benchmarks -[[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] - -*The benchmark category has been moved to a separate GitHub repository [One-Python-benchmark-per-day](https://github.com/rasbt/One-Python-benchmark-per-day)* - -**Featured articles**: -- (C)Python compilers - Cython vs. Numba vs. Parakeet [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day4_2_cython_numba_parakeet.ipynb)] -- Just-in-time compilers for NumPy array expressions [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day7_2_jit_numpy.ipynb)] -- Cython - Bridging the gap between Python and Fortran [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day10_fortran_lstsqr.ipynb)] -- Parallel processing via the multiprocessing module [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/multiprocessing_intro.ipynb)] -- Vectorizing a classic for-loop in NumPy [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day16_numpy_vectorization.ipynb)] - -

    From d07be79be853dd881e9bdcb1b424900d15cd0dc4 Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 5 Aug 2014 01:15:18 -0400 Subject: [PATCH 182/248] readme re-categorization --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 7973fbe..47ba722 100644 --- a/README.md +++ b/README.md @@ -103,9 +103,13 @@ **Featured articles**: - (C)Python compilers - Cython vs. Numba vs. Parakeet [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day4_2_cython_numba_parakeet.ipynb)] + - Just-in-time compilers for NumPy array expressions [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day7_2_jit_numpy.ipynb)] + - Cython - Bridging the gap between Python and Fortran [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day10_fortran_lstsqr.ipynb)] + - Parallel processing via the multiprocessing module [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/multiprocessing_intro.ipynb)] + - Vectorizing a classic for-loop in NumPy [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day16_numpy_vectorization.ipynb)]
    @@ -119,9 +123,13 @@ **Featured articles**: - Entry Point: Data - Using Python's sci-packages to prepare data for Machine Learning tasks and other data analyses [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/python_data_entry_point.ipynb)] + - About Feature Scaling: Standardization and Min-Max-Scaling (Normalization) [[IPython nb](http://nbviewer.ipython.org/github/rasbt/pattern_classification/blob/master/preprocessing/about_standardization_normalization.ipynb)] + - Principal Component Analysis (PCA) [[IPython nb](http://nbviewer.ipython.org/github/rasbt/pattern_classification/blob/master/dimensionality_reduction/projection/principal_component_analysis.ipynb)] + - Linear Discriminant Analysis (LDA) [[IPython nb](http://nbviewer.ipython.org/github/rasbt/pattern_classification/blob/master/dimensionality_reduction/projection/linear_discriminant_analysis.ipynb)] + - Kernel density estimation via the Parzen-window technique [[IPython nb](http://nbviewer.ipython.org/github/rasbt/pattern_classification/blob/master/parameter_estimation_techniques/parzen_window_technique.ipynb)] From bdd74ca15c98b57f197590918570504e24bc6575 Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 19 Aug 2014 09:57:13 -0400 Subject: [PATCH 183/248] short lambda example --- howtos_as_py_files/lambda_function.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 howtos_as_py_files/lambda_function.py diff --git a/howtos_as_py_files/lambda_function.py b/howtos_as_py_files/lambda_function.py new file mode 100644 index 0000000..9da0c9c --- /dev/null +++ b/howtos_as_py_files/lambda_function.py @@ -0,0 +1,11 @@ +# Sebastian Raschka 08/2014 + +# Lambda functions are just a short-hand way or writing +# short function definitions + +def square_root1(x): + return x**0.5 + +square_root2 = lambda x: x**0.5 + +assert(square_root1(9) == square_root2(9)) \ No newline at end of file From f0b01ab5db7e9121e7570e77a0b4ac5aa3232106 Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 19 Aug 2014 23:14:00 -0400 Subject: [PATCH 184/248] python patterns --- README.md | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 47ba722..845c16d 100644 --- a/README.md +++ b/README.md @@ -140,9 +140,9 @@ - [watermark](https://github.com/rasbt/watermark) - An IPython magic extension for printing date and time stamps, version numbers, and hardware information. -- [Shell script](./useful_scripts/prepend_python_shebang.sh) for prepending Python-shebangs to .py files. +- [Shell script](./useful_scripts/prepend_python_shebang.sh) For prepending Python-shebangs to .py files. -- convert 'tab-delimited' to 'comma-separated' CSV files [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/useful_scripts/fix_tab_csv.ipynb)] +- Convert 'tab-delimited' to 'comma-separated' CSV files [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/useful_scripts/fix_tab_csv.ipynb)] - A random string generator [function](./useful_scripts/random_string_generator.py) @@ -156,50 +156,56 @@ -- [PyPI - the Python Package Index](https://pypi.python.org/pypi) - the official repository for all open source Python modules and packages +- [PyPI - the Python Package Index](https://pypi.python.org/pypi) - The official repository for all open source Python modules and packages. -- [PEP 8](http://legacy.python.org/dev/peps/pep-0008/) - The official style guide for Python code +- [PEP 8](http://legacy.python.org/dev/peps/pep-0008/) - The official style guide for Python code. +
    **// News** -- [Python subreddit](http://www.reddit.com/r/Python/) - my favorite resource to catch up with Python news and great Python-related articles +- [Python subreddit](http://www.reddit.com/r/Python/) - My favorite resource to catch up with Python news and great Python-related articles. -- [Python community on Google+](https://plus.google.com/communities/103393744324769547228) - a nice and friendly community to share and discuss everything about Python +- [Python community on Google+](https://plus.google.com/communities/103393744324769547228) - A nice and friendly community to share and discuss everything about Python. -- [Python Weekly](http://www.pythonweekly.com) - A free weekly newsletter featuring curated news, articles, new releases, jobs etc. related to Python +- [Python Weekly](http://www.pythonweekly.com) - A free weekly newsletter featuring curated news, articles, new releases, jobs etc. related to Python. +
    **// Resources for learning Python** -- [Learn Python The Hard Way](http://learnpythonthehardway.org/book/) - one of the most popular and recommended resources for learning Python +- [Learn Python The Hard Way](http://learnpythonthehardway.org/book/) - The popular and probably most recommended resource for learning Python. + +- [Dive Into Python](http://www.diveintopython.net) / [Dive Into Python 3](http://getpython3.com/diveintopython3/) - A free Python book for experienced programmers. -- [Dive Into Python](http://www.diveintopython.net) / [Dive Into Python 3](http://getpython3.com/diveintopython3/) - a free Python book for experienced programmers +- [The Hitchhiker’s Guide to Python](http://docs.python-guide.org/en/latest/) - A free best-practice handbook for both novices and experts. -- [The Hitchhiker’s Guide to Python](http://docs.python-guide.org/en/latest/) - a free best-practice handbook for both novices and experts +- [Think Python - How to Think Like a Computer Scientist](http://www.greenteapress.com/thinkpython/) - An introduction for beginners starting with basic concepts of programming. -- [Think Python - How to Think Like a Computer Scientist](http://www.greenteapress.com/thinkpython/) - an introduction for beginners starting with basic concepts of programming +- [Python Patterns](http://matthiaseisen.com/pp/topics/t003/) - A directory of proven, reusable solutions to common programming problems. + +
    **// My favorite Python projects and packages** -- [The IPython Notebook](http://ipython.org/notebook.html) - an interactive computational environment for combining code execution, documentation (with Markdown and LateX support), inline plots, and rich media all in one document. +- [The IPython Notebook](http://ipython.org/notebook.html) - An interactive computational environment for combining code execution, documentation (with Markdown and LateX support), inline plots, and rich media all in one document. -- [matplotlib](http://matplotlib.org) - Python's favorite plotting library +- [matplotlib](http://matplotlib.org) - Python's favorite plotting library. -- [NumPy](http://www.numpy.org) - a library for multi-dimensional arrays and matrices, along with a large library of high-level mathematical functions to operate on these arrays +- [NumPy](http://www.numpy.org) - A library for multi-dimensional arrays and matrices, along with a large library of high-level mathematical functions to operate on these arrays. -- [SciPy](http://www.scipy.org) - a library that provides various useful functions for numerical computing, such as modules for optimization, linear algebra, integration, interpolation, ... +- [SciPy](http://www.scipy.org) - A library that provides various useful functions for numerical computing, such as modules for optimization, linear algebra, integration, interpolation, ... -- [pandas](http://pandas.pydata.org) - high-performance, easy-to-use data structures and data analysis tools build on top of Numpy +- [pandas](http://pandas.pydata.org) - High-performance, easy-to-use data structures and data analysis tools build on top of NumPy. -- [Cython](http://cython.org) - C-extensions for Python, an optimizing static compiler to combine Python and C code +- [Cython](http://cython.org) - C-extensions for Python, an optimizing static compiler to combine Python and C code. -- [Numba](http://numba.pydata.org) - an just-in-time specializing compiler which compiles annotated Python and NumPy code to LLVM (through decorators) +- [Numba](http://numba.pydata.org) - A just-in-time specializing compiler which compiles annotated Python and NumPy code to LLVM (through decorators) -- [scikit-learn](http://scikit-learn.org/stable/) - a powerful machine learning library for Python and tools for efficient data mining and analysis +- [scikit-learn](http://scikit-learn.org/stable/) - A powerful machine learning library for Python and tools for efficient data mining and analysis. From 03444284a1c0febb113fe7fae7d257b15efe81bc Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 19 Aug 2014 23:45:06 -0400 Subject: [PATCH 185/248] link upd --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 845c16d..a1872c6 100644 --- a/README.md +++ b/README.md @@ -184,7 +184,7 @@ - [Think Python - How to Think Like a Computer Scientist](http://www.greenteapress.com/thinkpython/) - An introduction for beginners starting with basic concepts of programming. -- [Python Patterns](http://matthiaseisen.com/pp/topics/t003/) - A directory of proven, reusable solutions to common programming problems. +- [Python Patterns](http://matthiaseisen.com/pp/) - A directory of proven, reusable solutions to common programming problems.
    From fd65f8598fa664932bca8a89ad4e1bf900785add Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 14 Sep 2014 13:18:56 -0400 Subject: [PATCH 186/248] sparsify_matrix.py --- useful_scripts/sparsify_matrix.py | 36 +++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 useful_scripts/sparsify_matrix.py diff --git a/useful_scripts/sparsify_matrix.py b/useful_scripts/sparsify_matrix.py new file mode 100644 index 0000000..27c864c --- /dev/null +++ b/useful_scripts/sparsify_matrix.py @@ -0,0 +1,36 @@ +# Sebastian Raschka 2014 +# +# Sparsifying a matrix by Zeroing out all elements but the top k elements in a row. +# The matrix could be a distance or similarity matrix (e.g., kernel matrix in kernel PCA), +# where we are interested to keep the top k neighbors. + +print('Sparsify a matrix by zeroing all elements but the top 2 values in a row.\n') + +A = np.array([[1,2,3,4,5],[9,8,6,4,5],[3,1,7,8,9]]) + +print('Before:\n%s\n' %A) + + +k = 2 # keep top k neighbors +for row in A: + sort_idx = np.argsort(row)[::-1] # get indexes of sort order (high to low) + for i in sort_idx[k:]: + row[i]=0 + +print('After:\n%s\n' %A) + + +""" +Sparsify a matrix by zeroing all elements but the top 2 values in a row. + +Before: +[[1 2 3 4 5] + [9 8 6 4 5] + [3 1 7 8 9]] + +After: +[[0 0 0 4 5] + [9 8 0 0 0] + [0 0 0 8 9]] + +""" \ No newline at end of file From 01fbbeb69c196c6f77663867fc511316da7f7eae Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 23 Sep 2014 13:31:37 -0400 Subject: [PATCH 187/248] make bitstring func --- howtos_as_py_files/make_bitstring.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 howtos_as_py_files/make_bitstring.py diff --git a/howtos_as_py_files/make_bitstring.py b/howtos_as_py_files/make_bitstring.py new file mode 100644 index 0000000..fc2baa4 --- /dev/null +++ b/howtos_as_py_files/make_bitstring.py @@ -0,0 +1,14 @@ +# Generating a bitstring from a Python list or numpy array +# where all postive values -> 1 +# all negative values -> 0 + +def make_bitstring(ary) + return np.where(ary > 0, 1, 0) + + +### Example: + +ary1 = np.array([1, 2, 0.3, -1, -2]) +make_bitstring(ary1) + +# returns array([1, 1, 1, 0, 0]) \ No newline at end of file From 21e4d5e813963cd2b05561425e0d68e0fd04a47b Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 23 Sep 2014 13:34:17 -0400 Subject: [PATCH 188/248] bitstring --- howtos_as_py_files/make_bitstring.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/howtos_as_py_files/make_bitstring.py b/howtos_as_py_files/make_bitstring.py index fc2baa4..fb27089 100644 --- a/howtos_as_py_files/make_bitstring.py +++ b/howtos_as_py_files/make_bitstring.py @@ -6,9 +6,12 @@ def make_bitstring(ary) return np.where(ary > 0, 1, 0) +def faster_bitstring(ary) + return np.where(ary > 0).astype('i1') + ### Example: ary1 = np.array([1, 2, 0.3, -1, -2]) make_bitstring(ary1) -# returns array([1, 1, 1, 0, 0]) \ No newline at end of file +# returns array([1, 1, 1, 0, 0]) From 89bf31755685ce547f25e777d0229987a97df93e Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 26 Sep 2014 14:17:54 -0400 Subject: [PATCH 189/248] python patterns 1 --- howtos_as_py_files/README.md | 10 + howtos_as_py_files/closures.py | 17 - howtos_as_py_files/cmd_line_args_1_sysarg.py | 24 - howtos_as_py_files/cpu_time.py | 18 - howtos_as_py_files/date_time.py | 13 - howtos_as_py_files/diff_files.py | 21 - howtos_as_py_files/doctest_example.py | 47 - howtos_as_py_files/file_browsing.py | 80 - howtos_as_py_files/get_filename.py | 63 - howtos_as_py_files/get_minmax_indeces.py | 12 - howtos_as_py_files/id_file1.txt | 3 + howtos_as_py_files/id_file2.txt | 3 + howtos_as_py_files/lambda_function.py | 11 - howtos_as_py_files/make_bitstring.py | 17 - howtos_as_py_files/my_file.pkl | Bin 0 -> 58 bytes howtos_as_py_files/namedtuple_example.py | 5 - howtos_as_py_files/normalize_data.py | 15 - howtos_as_py_files/numpy_matrix.py | 36 - howtos_as_py_files/os_shutil_fileops.py | 22 - howtos_as_py_files/patterns.ipynb | 1486 +++++++++++++++++ howtos_as_py_files/pickle_module.py | 23 - howtos_as_py_files/pil_image_processing.py | 0 .../python2_vs_3_version_info.py | 24 - howtos_as_py_files/read_file.py | 44 - howtos_as_py_files/reg_expr_1_basics.py | 101 -- howtos_as_py_files/reg_expr_2_operators.py | 127 -- .../sort_list_of_tuples_by_ele.py | 34 - .../sorting_multiple_lists_by_col.py | 39 - howtos_as_py_files/timeit_test.py | 24 - howtos_as_py_files/zen_of_python.py | 24 - 30 files changed, 1502 insertions(+), 841 deletions(-) create mode 100644 howtos_as_py_files/README.md delete mode 100755 howtos_as_py_files/closures.py delete mode 100644 howtos_as_py_files/cmd_line_args_1_sysarg.py delete mode 100755 howtos_as_py_files/cpu_time.py delete mode 100644 howtos_as_py_files/date_time.py delete mode 100644 howtos_as_py_files/diff_files.py delete mode 100644 howtos_as_py_files/doctest_example.py delete mode 100644 howtos_as_py_files/file_browsing.py delete mode 100755 howtos_as_py_files/get_filename.py delete mode 100644 howtos_as_py_files/get_minmax_indeces.py create mode 100644 howtos_as_py_files/id_file1.txt create mode 100644 howtos_as_py_files/id_file2.txt delete mode 100644 howtos_as_py_files/lambda_function.py delete mode 100644 howtos_as_py_files/make_bitstring.py create mode 100644 howtos_as_py_files/my_file.pkl delete mode 100644 howtos_as_py_files/namedtuple_example.py delete mode 100644 howtos_as_py_files/normalize_data.py delete mode 100644 howtos_as_py_files/numpy_matrix.py delete mode 100644 howtos_as_py_files/os_shutil_fileops.py create mode 100644 howtos_as_py_files/patterns.ipynb delete mode 100755 howtos_as_py_files/pickle_module.py delete mode 100644 howtos_as_py_files/pil_image_processing.py delete mode 100644 howtos_as_py_files/python2_vs_3_version_info.py delete mode 100755 howtos_as_py_files/read_file.py delete mode 100644 howtos_as_py_files/reg_expr_1_basics.py delete mode 100644 howtos_as_py_files/reg_expr_2_operators.py delete mode 100644 howtos_as_py_files/sort_list_of_tuples_by_ele.py delete mode 100644 howtos_as_py_files/sorting_multiple_lists_by_col.py delete mode 100644 howtos_as_py_files/timeit_test.py delete mode 100644 howtos_as_py_files/zen_of_python.py diff --git a/howtos_as_py_files/README.md b/howtos_as_py_files/README.md new file mode 100644 index 0000000..840e737 --- /dev/null +++ b/howtos_as_py_files/README.md @@ -0,0 +1,10 @@ +Sebastian Raschka +last updated: 09/26/2014 + +# A collection of useful Python patterns + + +new_msg("Hello, World") +# prints: "My message: Hello, World" + +# print(dir(create_message.__closure__)) \ No newline at end of file diff --git a/howtos_as_py_files/closures.py b/howtos_as_py_files/closures.py deleted file mode 100755 index dc8dfea..0000000 --- a/howtos_as_py_files/closures.py +++ /dev/null @@ -1,17 +0,0 @@ -# Python 3.x -# sr 11/04/2013 -# closures -# - -def create_message(msg_txt): - def _priv_msg(message): # private, no access from outside - print("{}: {}".format(msg_txt, message)) - return _priv_msg # returns a function - -new_msg = create_message("My message") -# note, new_msg is a function - -new_msg("Hello, World") -# prints: "My message: Hello, World" - -# print(dir(create_message.__closure__)) diff --git a/howtos_as_py_files/cmd_line_args_1_sysarg.py b/howtos_as_py_files/cmd_line_args_1_sysarg.py deleted file mode 100644 index b8f8cbf..0000000 --- a/howtos_as_py_files/cmd_line_args_1_sysarg.py +++ /dev/null @@ -1,24 +0,0 @@ -# Getting command line arguments via sys.arg -# sr 11/30/2013 - -import sys - -def error(msg): - """Prints error message, sends it to stderr, and quites the program.""" - sys.exit(msg) - - -args = sys.argv[1:] # sys.argv[0] is the name of the python script itself - -try: - arg1 = int(args[0]) - arg2 = args[1] - arg3 = args[2] - print("Everything okay!") - -except ValueError: - error("First argument must be integer type!") - -except IndexError: - error("Requires 3 arguments!") - diff --git a/howtos_as_py_files/cpu_time.py b/howtos_as_py_files/cpu_time.py deleted file mode 100755 index 472cae7..0000000 --- a/howtos_as_py_files/cpu_time.py +++ /dev/null @@ -1,18 +0,0 @@ -# sr 10/29/13 -# Calculates elapsed CPU time in seconds as float. - -import time - -start_time = time.clock() - -i = 0 -while i < 10000000: - i += 1 - -elapsed_time = time.clock() - start_time -print "Time elapsed: {} seconds".format(elapsed_time) - -# prints "Time elapsed: 1.06 seconds" -# on 4 x 2.80 Ghz Intel Xeon, 6 Gb RAM - - diff --git a/howtos_as_py_files/date_time.py b/howtos_as_py_files/date_time.py deleted file mode 100644 index 28e7bcc..0000000 --- a/howtos_as_py_files/date_time.py +++ /dev/null @@ -1,13 +0,0 @@ -# Sebastian Raschka, 03/2014 -# Date and Time in Python - -import time - -# print time HOURS:MINUTES:SECONDS -# e.g., '10:50:58' -print(time.strftime("%H:%M:%S")) - - -# print current date DAY:MONTH:YEAR -# e.g., '06/03/2014' -print(time.strftime("%d/%m/%Y")) diff --git a/howtos_as_py_files/diff_files.py b/howtos_as_py_files/diff_files.py deleted file mode 100644 index 9399695..0000000 --- a/howtos_as_py_files/diff_files.py +++ /dev/null @@ -1,21 +0,0 @@ -# Sebastian Raschka, 2014 -# -# Print lines that are different between 2 files. Insensitive -# to the order of the file contents. - -id_set1 = set() -id_set2 = set() - -with open('id_file1.txt', 'r') as id_file: - for line in id_file: - id_set1.add(line.strip()) - -with open('id_file2.txt', 'r') as id_file: - for line in id_file: - id_set2.add(line.strip()) - -diffs = id_set2.difference(id_set1) - -for d in diffs: - print(d) -print("Total differences:",len(diffs)) diff --git a/howtos_as_py_files/doctest_example.py b/howtos_as_py_files/doctest_example.py deleted file mode 100644 index 246ecf8..0000000 --- a/howtos_as_py_files/doctest_example.py +++ /dev/null @@ -1,47 +0,0 @@ -# doctest example -# Sebastian Raschka 11/19/2013 - -def subtract(a, b): - """ - Subtracts second from first number and returns result. - >>> subtract(10, 5) - 5 - >>> subtract(11, 0.7) - 10.3 - """ - return a-b - -def hello_world(): - """ - Returns 'Hello, World' - >>> hello_world() - "Hello, World" - >>> hello_world() - 'Hello, World' - """ - return "Hello, World" - - -if __name__ == "__main__": # is 'false' if imported - import doctest - doctest.testmod() - - -""" RESULTS - -sebastian ~/Desktop> python3 doctest_example.py -********************************************************************** -File "doctest_example.py", line 17, in __main__.hello_world -Failed example: - hello_world() -Expected: - "Hello, World" -Got: - 'Hello, World' -********************************************************************** -1 items had failures: - 1 of 2 in __main__.hello_world -***Test Failed*** 1 failures. -sebastian ~/Desktop> - -""" diff --git a/howtos_as_py_files/file_browsing.py b/howtos_as_py_files/file_browsing.py deleted file mode 100644 index ce1cb5f..0000000 --- a/howtos_as_py_files/file_browsing.py +++ /dev/null @@ -1,80 +0,0 @@ -# File system operations using Python -# sr 11/30/2013 - - -import os -import shutil -import glob - -# working directory -c_dir = os.getcwd() # show current working directory -os.listdir(c_dir) # shows all files in the working directory -os.chdir('~/Data') # change working directory - - -# get all files in a directory -glob.glob('/Users/sebastian/Desktop/*') - -# e.g., ['/Users/sebastian/Desktop/untitled folder', '/Users/sebastian/Desktop/Untitled.txt'] - - - -# walk -tree = os.walk(c_dir) -# moves through sub directories and creates a 'generator' object of tuples -# ('dir', [file1, file2, ...] [subdirectory1, subdirectory2, ...]), -# (...), ... - - - -#check files: returns either True or False -os.exists('../rel_path') -os.exists('/home/abs_path') -os.isfile('./file.txt') -os.isdir('./subdir') - - - -# file permission (True or False -os.access('./some_file', os.F_OK) # File exists? Python 2.7 -os.access('./some_file', os.R_OK) # Ok to read? Python 2.7 -os.access('./some_file', os.W_OK) # Ok to write? Python 2.7 -os.access('./some_file', os.X_OK) # Ok to execute? Python 2.7 -os.access('./some_file', os.X_OK | os.W_OK) # Ok to execute or write? Python 2.7 - - - -# join (creates operating system dependent paths) -os.path.join('a', 'b', 'c') -# 'a/b/c' on Unix/Linux -# 'a\\b\\c' on Windows -os.path.normpath('a/b/c') # converts file separators - - - -# os.path: direcory and file names -os.path.samefile('./some_file', '/home/some_file') # True if those are the same -os.path.dirname('./some_file') # returns '.' (everythin but last component) -os.path.basename('./some_file') # returns 'some_file' (only last component -os.path.split('./some_file') # returns (dirname, basename) or ('.', 'some_file) -os.path.splitext('./some_file.txt') # returns ('./some_file', '.txt') -os.path.splitdrive('./some_file.txt') # returns ('', './some_file.txt') -os.path.isabs('./some_file.txt') # returns False (not an absolute path) -os.path.abspath('./some_file.txt') - - - - -# create and delete files and directories -os.mkdir('./test') # create a new direcotory -os.rmdir('./test') # removes an empty direcotory -os.removedirs('./test') # removes nested empty directories -os.remove('file.txt') # removes an individual file -shutil.rmtree('./test') # removes directory (empty or not empty) - -os.rename('./dir_before', './renamed') # renames directory if destination doesn't exist -shutil.move('./dir_before', './renamed') # renames directory always - -shutil.copytree('./orig', './copy') # copies a directory recursively -shutil.copyfile('file', 'copy') # copies a file - diff --git a/howtos_as_py_files/get_filename.py b/howtos_as_py_files/get_filename.py deleted file mode 100755 index a05f92a..0000000 --- a/howtos_as_py_files/get_filename.py +++ /dev/null @@ -1,63 +0,0 @@ -# Python 2.7 -# prompt user for file of specific type(s). -# 11/01/13 sebastian raschka - -import os.path - -def get_filename(file_type): - '''repeatedly prompts user for a file of specific type. - arguments: - file_type: list with accepted file types as strings. - returns: - (string): absolute path to the specified input file. - ''' - while True: - print "\n\nplease enter a file name, \nor type --help to get"\ - " a list of the accepted file formats" - file_name = raw_input(": ") - if file_name == "--help": - print "\naccepted file format(s): ", - for f in file_type: - print f, - continue - if not os.path.isfile(file_name): - print "\n\nsorry, this file doesn't exist. please try again.\n" - continue - if not (file_name.split(".")[-1] in file_type): - print "\nplease provide a file in correct format." - continue - break - return os.path.abspath(file_name) - -#get_filename(["txt", "doc"]) - - -# =========================== -# EXAMPLE -# =========================== - -''' -[bash]~/Desktop >python get_filename.py - - -please enter a file name, -or type --help to get a list of the accepted file formats -: --help - -accepted file format(s): txt doc - -please enter a file name, -or type --help to get a list of the accepted file formats -: test.tx - - -sorry, this file doesn't exist. please try again. - - - -please enter a file name, -or type --help to get a list of the accepted file formats -: test.txt -[bash]~/Desktop > -''' - diff --git a/howtos_as_py_files/get_minmax_indeces.py b/howtos_as_py_files/get_minmax_indeces.py deleted file mode 100644 index 1fe5b2a..0000000 --- a/howtos_as_py_files/get_minmax_indeces.py +++ /dev/null @@ -1,12 +0,0 @@ -# Sebastian Raschka, 03/2014 -# Getting the positions of min and max values in a list - -import operator - -values = [1, 2, 3, 4, 5] - -min_index, min_value = min(enumerate(values), key=operator.itemgetter(1)) -max_index, max_value = max(enumerate(values), key=operator.itemgetter(1)) - -print('min_index:', min_index, 'min_value:', min_value) -print('max_index:', max_index, 'max_value:', max_value) diff --git a/howtos_as_py_files/id_file1.txt b/howtos_as_py_files/id_file1.txt new file mode 100644 index 0000000..a600893 --- /dev/null +++ b/howtos_as_py_files/id_file1.txt @@ -0,0 +1,3 @@ +1234 +2342 +2341 \ No newline at end of file diff --git a/howtos_as_py_files/id_file2.txt b/howtos_as_py_files/id_file2.txt new file mode 100644 index 0000000..d05914a --- /dev/null +++ b/howtos_as_py_files/id_file2.txt @@ -0,0 +1,3 @@ +5234 +3344 +2341 \ No newline at end of file diff --git a/howtos_as_py_files/lambda_function.py b/howtos_as_py_files/lambda_function.py deleted file mode 100644 index 9da0c9c..0000000 --- a/howtos_as_py_files/lambda_function.py +++ /dev/null @@ -1,11 +0,0 @@ -# Sebastian Raschka 08/2014 - -# Lambda functions are just a short-hand way or writing -# short function definitions - -def square_root1(x): - return x**0.5 - -square_root2 = lambda x: x**0.5 - -assert(square_root1(9) == square_root2(9)) \ No newline at end of file diff --git a/howtos_as_py_files/make_bitstring.py b/howtos_as_py_files/make_bitstring.py deleted file mode 100644 index fb27089..0000000 --- a/howtos_as_py_files/make_bitstring.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generating a bitstring from a Python list or numpy array -# where all postive values -> 1 -# all negative values -> 0 - -def make_bitstring(ary) - return np.where(ary > 0, 1, 0) - - -def faster_bitstring(ary) - return np.where(ary > 0).astype('i1') - -### Example: - -ary1 = np.array([1, 2, 0.3, -1, -2]) -make_bitstring(ary1) - -# returns array([1, 1, 1, 0, 0]) diff --git a/howtos_as_py_files/my_file.pkl b/howtos_as_py_files/my_file.pkl new file mode 100644 index 0000000000000000000000000000000000000000..f24f8982047bec1fe6c3ff9aa77a5183b85cb094 GIT binary patch literal 58 zcmZo*t}SHH@MetQWME(@&d*I%C`qj-DP;6!%3$\n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Table of Contents" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- [Bitstrings from positive and negative elements in a list](#Bitstrings-from-positive-and-negative-elements-in-a-list)\n", + "- [Command line arguments 1 - sys.argv](#Command-line-arguments-1---sys.argv)\n", + "- [Data and time basics](#Data-and-time-basics)\n", + "- [Differences between 2 files](#Differences-between-2-files)\n", + "- [Differences between successive elements in a list](#Differences-between-successive-elements-in-a-list)\n", + "- [Doctest example](#Doctest-example)\n", + "- [File browsing basics](#File-browsing-basics)\n", + "- [File reading basics](#File-reading-basics)\n", + "- [Indices of min and max elements from a list](#Indices-of-min-and-max-elements-from-a-list)\n", + "- [Lambda functions](#Lambda-functions)\n", + "- [Private functions](#Private-functions)\n", + "- [Namedtuples](#Namedtuples)\n", + "- [Normalizing data](#Normalizing-data)\n", + "- [NumPy essentials](#NumPy-essentials)\n", + "- [Pickling Python objects to bitstreams](#Pickling-Python-objects-to-bitstreams)\n", + "- [Python version check](#Python-version-check)\n", + "- [Runtime within a script](#Runtime-within-a-script)\n", + "- [Sorting lists of tuples by elements](#Sorting-lists-of-tuples-by-elements)\n", + "- [Sorting multiple lists relative to each other](#Sorting-multiple-lists-relative-to-each-other)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%load_ext watermark" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%watermark -d -a \"Sebastian Raschka\" -v" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Sebastian Raschka 26/09/2014 \n", + "\n", + "CPython 3.4.1\n", + "IPython 2.0.0\n" + ] + } + ], + "prompt_number": 2 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[More information](https://github.com/rasbt/watermark) about the `watermark` magic command extension." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Bitstrings from positive and negative elements in a list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Generating a bitstring from a Python list or numpy array\n", + "# where all postive values -> 1\n", + "# all negative values -> 0\n", + "\n", + "import numpy as np\n", + "\n", + "def make_bitstring(ary):\n", + " return np.where(ary > 0, 1, 0)\n", + "\n", + "\n", + "def faster_bitstring(ary):\n", + " return np.where(ary > 0).astype('i1')\n", + "\n", + "### Example:\n", + "\n", + "ary1 = np.array([1, 2, 0.3, -1, -2])\n", + "print('input values %s' %ary1)\n", + "print('bitstring %s' %make_bitstring(ary1))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "input values [ 1. 2. 0.3 -1. -2. ]\n", + "bitstring [1 1 1 0 0]\n" + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Command line arguments 1 - sys.argv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%file cmd_line_args_1_sysarg.py\n", + "import sys\n", + "\n", + "def error(msg):\n", + " \"\"\"Prints error message, sends it to stderr, and quites the program.\"\"\"\n", + " sys.exit(msg)\n", + "\n", + "args = sys.argv[1:] # sys.argv[0] is the name of the python script itself\n", + "\n", + "try:\n", + " arg1 = int(args[0])\n", + " arg2 = args[1]\n", + " arg3 = args[2]\n", + " print(\"Everything okay!\")\n", + "\n", + "except ValueError:\n", + " error(\"First argument must be integer type!\")\n", + "\n", + "except IndexError:\n", + " error(\"Requires 3 arguments!\")" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Overwriting cmd_line_args_1_sysarg.py\n" + ] + } + ], + "prompt_number": 5 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "% run cmd_line_args_1_sysarg.py 1 2 3" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Everything okay!\n" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "% run cmd_line_args_1_sysarg.py a 2 3" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "SystemExit", + "evalue": "First argument must be integer type!", + "output_type": "pyerr", + "traceback": [ + "An exception has occurred, use %tb to see the full traceback.\n", + "\u001b[0;31mSystemExit\u001b[0m\u001b[0;31m:\u001b[0m First argument must be integer type!\n" + ] + } + ], + "prompt_number": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Data and time basics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import time\n", + "\n", + "# print time HOURS:MINUTES:SECONDS\n", + "# e.g., '10:50:58'\n", + "print(time.strftime(\"%H:%M:%S\"))\n", + "\n", + "# print current date DAY:MONTH:YEAR\n", + "# e.g., '06/03/2014'\n", + "print(time.strftime(\"%d/%m/%Y\"))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "13:28:05\n", + "26/09/2014\n" + ] + } + ], + "prompt_number": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Differences between 2 files" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%file id_file1.txt\n", + "1234\n", + "2342\n", + "2341" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Writing id_file1.txt\n" + ] + } + ], + "prompt_number": 9 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%file id_file2.txt\n", + "5234\n", + "3344\n", + "2341" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Writing id_file2.txt\n" + ] + } + ], + "prompt_number": 10 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Print lines that are different between 2 files. Insensitive\n", + "# to the order of the file contents.\n", + "\n", + "id_set1 = set()\n", + "id_set2 = set()\n", + "\n", + "with open('id_file1.txt', 'r') as id_file:\n", + " for line in id_file:\n", + " id_set1.add(line.strip())\n", + "\n", + "with open('id_file2.txt', 'r') as id_file:\n", + " for line in id_file:\n", + " id_set2.add(line.strip()) \n", + "\n", + "diffs = id_set2.difference(id_set1)\n", + "\n", + "for d in diffs:\n", + " print(d)\n", + "print(\"Total differences:\",len(diffs))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "5234\n", + "3344\n", + "Total differences: 2\n" + ] + } + ], + "prompt_number": 11 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Differences between successive elements in a list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from itertools import islice\n", + "\n", + "lst = [1,2,3,5,8]\n", + "diff = [j - i for i, j in zip(lst, islice(lst, 1, None))]\n", + "print(diff)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[1, 1, 2, 3]\n" + ] + } + ], + "prompt_number": 12 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Doctest example" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def subtract(a, b):\n", + " \"\"\"\n", + " Subtracts second from first number and returns result.\n", + " >>> subtract(10, 5)\n", + " 5\n", + " >>> subtract(11, 0.7)\n", + " 10.3\n", + " \"\"\"\n", + " return a-b\n", + "\n", + "if __name__ == \"__main__\": # is 'false' if imported\n", + " import doctest\n", + " doctest.testmod()\n", + " print('ok')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "ok\n" + ] + } + ], + "prompt_number": 17 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def hello_world():\n", + " \"\"\"\n", + " Returns 'Hello, World'\n", + " >>> hello_world()\n", + " 'Hello, World'\n", + " \"\"\"\n", + " return 'hello world'\n", + "\n", + "if __name__ == \"__main__\": # is 'false' if imported\n", + " import doctest\n", + " doctest.testmod()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "**********************************************************************\n", + "File \"__main__\", line 4, in __main__.hello_world\n", + "Failed example:\n", + " hello_world()\n", + "Expected:\n", + " 'Hello, World'\n", + "Got:\n", + " 'hello world'\n", + "**********************************************************************\n", + "1 items had failures:\n", + " 1 of 1 in __main__.hello_world\n", + "***Test Failed*** 1 failures.\n" + ] + } + ], + "prompt_number": 18 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "File browsing basics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import os\n", + "import shutil\n", + "import glob\n", + "\n", + "# working directory\n", + "c_dir = os.getcwd() # show current working directory\n", + "os.listdir(c_dir) # shows all files in the working directory\n", + "os.chdir('~/Data') # change working directory\n", + "\n", + "\n", + "# get all files in a directory\n", + "glob.glob('/Users/sebastian/Desktop/*')\n", + "\n", + "# e.g., ['/Users/sebastian/Desktop/untitled folder', '/Users/sebastian/Desktop/Untitled.txt']\n", + "\n", + "# walk\n", + "tree = os.walk(c_dir) \n", + "# moves through sub directories and creates a 'generator' object of tuples\n", + "# ('dir', [file1, file2, ...] [subdirectory1, subdirectory2, ...]), \n", + "# (...), ...\n", + "\n", + "#check files: returns either True or False\n", + "os.exists('../rel_path')\n", + "os.exists('/home/abs_path')\n", + "os.isfile('./file.txt')\n", + "os.isdir('./subdir')\n", + "\n", + "\n", + "# file permission (True or False\n", + "os.access('./some_file', os.F_OK) # File exists? Python 2.7\n", + "os.access('./some_file', os.R_OK) # Ok to read? Python 2.7\n", + "os.access('./some_file', os.W_OK) # Ok to write? Python 2.7\n", + "os.access('./some_file', os.X_OK) # Ok to execute? Python 2.7\n", + "os.access('./some_file', os.X_OK | os.W_OK) # Ok to execute or write? Python 2.7\n", + "\n", + "# join (creates operating system dependent paths)\n", + "os.path.join('a', 'b', 'c')\n", + "# 'a/b/c' on Unix/Linux\n", + "# 'a\\\\b\\\\c' on Windows\n", + "os.path.normpath('a/b/c') # converts file separators\n", + "\n", + "\n", + "# os.path: direcory and file names\n", + "os.path.samefile('./some_file', '/home/some_file') # True if those are the same\n", + "os.path.dirname('./some_file') # returns '.' (everythin but last component)\n", + "os.path.basename('./some_file') # returns 'some_file' (only last component\n", + "os.path.split('./some_file') # returns (dirname, basename) or ('.', 'some_file)\n", + "os.path.splitext('./some_file.txt') # returns ('./some_file', '.txt')\n", + "os.path.splitdrive('./some_file.txt') # returns ('', './some_file.txt')\n", + "os.path.isabs('./some_file.txt') # returns False (not an absolute path)\n", + "os.path.abspath('./some_file.txt')\n", + "\n", + "\n", + "# create and delete files and directories\n", + "os.mkdir('./test') # create a new direcotory\n", + "os.rmdir('./test') # removes an empty direcotory\n", + "os.removedirs('./test') # removes nested empty directories\n", + "os.remove('file.txt') # removes an individual file\n", + "shutil.rmtree('./test') # removes directory (empty or not empty)\n", + "\n", + "os.rename('./dir_before', './renamed') # renames directory if destination doesn't exist\n", + "shutil.move('./dir_before', './renamed') # renames directory always\n", + "\n", + "shutil.copytree('./orig', './copy') # copies a directory recursively\n", + "shutil.copyfile('file', 'copy') # copies a file\n", + "\n", + " \n", + "# Getting files of particular type from directory\n", + "files = [f for f in os.listdir(s_pdb_dir) if f.endswith(\".txt\")]\n", + " \n", + "# Copy and move\n", + "shutil.copyfile(\"/path/to/file\", \"/path/to/new/file\") \n", + "shutil.copy(\"/path/to/file\", \"/path/to/directory\")\n", + "shutil.move(\"/path/to/file\",\"/path/to/directory\")\n", + " \n", + "# Check if file or directory exists\n", + "os.path.exists(\"file or directory\")\n", + "os.path.isfile(\"file\")\n", + "os.path.isdir(\"directory\")\n", + " \n", + "# Working directory and absolute path to files\n", + "os.getcwd()\n", + "os.path.abspath(\"file\")" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "File reading basics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Note: rb opens file in binary mode to avoid issues with Windows systems\n", + "# where '\\r\\n' is used instead of '\\n' as newline character(s).\n", + "\n", + "\n", + "# A) Reading in Byte chunks\n", + "reader_a = open(\"file.txt\", \"rb\")\n", + "chunks = []\n", + "data = reader_a.read(64) # reads first 64 bytes\n", + "while data != \"\":\n", + " chunks.append(data)\n", + " data = reader_a.read(64)\n", + "if data:\n", + " chunks.append(data)\n", + "print(len(chunks))\n", + "reader_a.close()\n", + "\n", + "\n", + "# B) Reading whole file at once into a list of lines\n", + "with open(\"file.txt\", \"rb\") as reader_b: # recommended syntax, auto closes\n", + " data = reader_b.readlines() # data is assigned a list of lines\n", + "print(len(data))\n", + "\n", + "\n", + "# C) Reading whole file at once into a string\n", + "with open(\"file.txt\", \"rb\") as reader_c:\n", + " data = reader_c.read() # data is assigned a list of lines\n", + "print(len(data))\n", + "\n", + "\n", + "# D) Reading line by line into a list\n", + "data = []\n", + "with open(\"file.txt\", \"rb\") as reader_d:\n", + " for line in reader_d:\n", + " data.append(line)\n", + "print(len(data))\n" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Indices of min and max elements from a list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import operator\n", + "\n", + "values = [1, 2, 3, 4, 5]\n", + "\n", + "min_index, min_value = min(enumerate(values), key=operator.itemgetter(1))\n", + "max_index, max_value = max(enumerate(values), key=operator.itemgetter(1))\n", + "\n", + "print('min_index:', min_index, 'min_value:', min_value)\n", + "print('max_index:', max_index, 'max_value:', max_value)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "min_index: 0 min_value: 1\n", + "max_index: 4 max_value: 5\n" + ] + } + ], + "prompt_number": 19 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Lambda functions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Lambda functions are just a short-hand way or writing\n", + "# short function definitions\n", + "\n", + "def square_root1(x):\n", + " return x**0.5\n", + " \n", + "square_root2 = lambda x: x**0.5\n", + "\n", + "assert(square_root1(9) == square_root2(9))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 20 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Private functions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def create_message(msg_txt):\n", + " def _priv_msg(message): # private, no access from outside\n", + " print(\"{}: {}\".format(msg_txt, message))\n", + " return _priv_msg # returns a function\n", + "\n", + "new_msg = create_message(\"My message\")\n", + "# note, new_msg is a function\n", + "\n", + "new_msg(\"Hello, World\")" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "My message: Hello, World\n" + ] + } + ], + "prompt_number": 2 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Namedtuples" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from collections import namedtuple\n", + "\n", + "my_namedtuple = namedtuple('field_name', ['x', 'y', 'z', 'bla', 'blub'])\n", + "p = my_namedtuple(1, 2, 3, 4, 5)\n", + "print(p.x, p.y, p.z)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1 2 3\n" + ] + } + ], + "prompt_number": 25 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Normalizing data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def normalize(data, min_val=0, max_val=1):\n", + " \"\"\"\n", + " Normalizes values in a list of data points to a range, e.g.,\n", + " between 0.0 and 1.0. \n", + " Returns the original object if value is not a integer or float.\n", + " \n", + " \"\"\"\n", + " norm_data = []\n", + " data_min = min(data)\n", + " data_max = max(data)\n", + " for x in data:\n", + " numerator = x - data_min\n", + " denominator = data_max - data_min\n", + " x_norm = (max_val-min_val) * numerator/denominator + min_val\n", + " norm_data.append(x_norm)\n", + " return norm_data" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 28 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "normalize([1,2,3,4,5])" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 31, + "text": [ + "[0.0, 0.25, 0.5, 0.75, 1.0]" + ] + } + ], + "prompt_number": 31 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "normalize([1,2,3,4,5], min_val=-10, max_val=10)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 30, + "text": [ + "[-10.0, -5.0, 0.0, 5.0, 10.0]" + ] + } + ], + "prompt_number": 30 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "NumPy essentials" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import numpy as np\n", + "\n", + "ary1 = np.array([1,2,3,4,5]) # must be same type\n", + "ary2 = np.zeros((3,4)) # 3x4 matrix consisiting of 0s \n", + "ary3 = np.ones((3,4)) # 3x4 matrix consisiting of 1s \n", + "ary4 = np.identity(3) # 3x3 identity matrix\n", + "ary5 = ary1.copy() # make a copy of ary1\n", + "\n", + "item1 = ary3[0, 0] # item in row1, column1\n", + "\n", + "ary2.shape # tuple of dimensions. Here: (3,4)\n", + "ary2.size # number of elements. Here: 12\n", + "\n", + "\n", + "ary2_t = ary2.transpose() # transposes matrix\n", + "\n", + "ary2.ravel() # makes an array linear (1-dimensional)\n", + " # by concatenating rows\n", + "ary2.reshape(2,6) # reshapes array (must have same dimensions)\n", + "\n", + "ary3[0:2, 0:3] # submatrix of first 2 rows and first 3 columns \n", + "\n", + "ary3 = ary3[[2,0,1]] # re-arrange rows\n", + "\n", + "\n", + "# element-wise operations\n", + "\n", + "ary1 + ary1\n", + "ary1 * ary1\n", + "numpy.dot(ary1, ary1) # matrix/vector (dot) product\n", + "\n", + "numpy.sum(ary1, axis=1) # sum of a 1D array, column sums of a 2D array\n", + "numpy.mean(ary1, axis=1) # mean of a 1D array, column means of a 2D array" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Pickling Python objects to bitstreams" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import pickle\n", + "\n", + "#### Generate some object\n", + "my_dict = dict()\n", + "for i in range(1,10):\n", + " my_dict[i] = \"some text\"\n", + "\n", + "#### Save object to file\n", + "pickle_out = open('my_file.pkl', 'wb')\n", + "pickle.dump(my_dict, pickle_out)\n", + "pickle_out.close()\n", + "\n", + "#### Load object from file\n", + "my_object_file = open('my_file.pkl', 'rb')\n", + "my_dict = pickle.load(my_object_file)\n", + "my_object_file.close()\n", + "\n", + "print(my_dict)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "{1: 'some text', 2: 'some text', 3: 'some text', 4: 'some text', 5: 'some text', 6: 'some text', 7: 'some text', 8: 'some text', 9: 'some text'}\n" + ] + } + ], + "prompt_number": 35 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Python version check" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import sys\n", + "\n", + "def give_letter(word):\n", + " for letter in word:\n", + " yield letter\n", + "\n", + "if sys.version_info[0] == 3:\n", + " print('executed in Python 3.x')\n", + " test = give_letter('Hello')\n", + " print(next(test))\n", + " print('in for-loop:')\n", + " for l in test:\n", + " print(l)\n", + "\n", + "# if Python 2.x\n", + "if sys.version_info[0] == 2:\n", + " print('executed in Python 2.x')\n", + " test = give_letter('Hello')\n", + " print(test.next())\n", + " print('in for-loop:') \n", + " for l in test:\n", + " print(l)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "executed in Python 3.x\n", + "H\n", + "in for-loop:\n", + "e\n", + "l\n", + "l\n", + "o\n" + ] + } + ], + "prompt_number": 36 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Runtime within a script" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import time\n", + "\n", + "start_time = time.clock()\n", + "\n", + "for i in range(10000000):\n", + " pass\n", + "\n", + "elapsed_time = time.clock() - start_time\n", + "print(\"Time elapsed: {} seconds\".format(elapsed_time))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Time elapsed: 0.49176900000000057 seconds\n" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "elapsed_time = timeit.timeit('for i in range(10000000): pass', number=1)\n", + "print(\"Time elapsed: {} seconds\".format(elapsed_time))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Time elapsed: 0.3550995970144868 seconds\n" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Sorting lists of tuples by elements" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Here, we make use of the \"key\" parameter of the in-built \"sorted()\" function \n", + "# (also available for the \".sort()\" method), which let's us define a function \n", + "# that is called on every element that is to be sorted. In this case, our \n", + "# \"key\"-function is a simple lambda function that returns the last item \n", + "# from every tuple.\n", + "\n", + "a_list = [(1,3,'c'), (2,3,'a'), (3,2,'b'), (2,2,'b')]\n", + "\n", + "sorted_list = sorted(a_list, key=lambda e: e[::-1])\n", + "\n", + "print(sorted_list)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[(2, 3, 'a'), (2, 2, 'b'), (3, 2, 'b'), (1, 3, 'c')]\n" + ] + } + ], + "prompt_number": 37 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# prints [(2, 3, 'a'), (2, 2, 'b'), (3, 2, 'b'), (1, 3, 'c')]\n", + "\n", + "# If we are only interesting in sorting the list by the last element\n", + "# of the tuple and don't care about a \"tie\" situation, we can also use\n", + "# the index of the tuple item directly instead of reversing the tuple \n", + "# for efficiency.\n", + "\n", + "a_list = [(1,3,'c'), (2,3,'a'), (3,2,'b'), (2,2,'b')]\n", + "\n", + "sorted_list = sorted(a_list, key=lambda e: e[-1])\n", + "\n", + "print(sorted_list)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[(2, 3, 'a'), (3, 2, 'b'), (2, 2, 'b'), (1, 3, 'c')]\n" + ] + } + ], + "prompt_number": 38 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Sorting multiple lists relative to each other" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "\"\"\"\n", + "You have 3 lists that you want to sort \"relative\" to each other,\n", + "for example, picturing each list as a row in a 3x3 matrix: sort it by columns\n", + "\n", + "########################\n", + "If the input lists are\n", + "########################\n", + "\n", + " list1 = ['c','b','a']\n", + " list2 = [6,5,4]\n", + " list3 = ['some-val-associated-with-c','another_val-b','z_another_third_val-a']\n", + "\n", + "########################\n", + "the desired outcome is:\n", + "########################\n", + "\n", + " ['a', 'b', 'c'] \n", + " [4, 5, 6] \n", + " ['z_another_third_val-a', 'another_val-b', 'some-val-associated-with-c']\n", + "\n", + "########################\n", + "and NOT:\n", + "########################\n", + "\n", + " ['a', 'b', 'c'] \n", + " [4, 5, 6] \n", + " ['another_val-b', 'some-val-associated-with-c', 'z_another_third_val-a']\n", + "\n", + "\n", + "\"\"\"\n", + "\n", + "list1 = ['c','b','a']\n", + "list2 = [6,5,4]\n", + "list3 = ['some-val-associated-with-c','another_val-b','z_another_third_val-a']\n", + "\n", + "print('input values:\\n', list1, list2, list3)\n", + "\n", + "list1, list2, list3 = [list(t) for t in zip(*sorted(zip(list1, list2, list3)))]\n", + "\n", + "print('\\n\\nsorted output:\\n', list1, list2, list3 )" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "input values:\n", + " ['c', 'b', 'a'] [6, 5, 4] ['some-val-associated-with-c', 'another_val-b', 'z_another_third_val-a']\n", + "\n", + "\n", + "sorted output:\n", + " ['a', 'b', 'c'] [4, 5, 6] ['z_another_third_val-a', 'another_val-b', 'some-val-associated-with-c']\n" + ] + } + ], + "prompt_number": 49 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/howtos_as_py_files/pickle_module.py b/howtos_as_py_files/pickle_module.py deleted file mode 100755 index 81afd92..0000000 --- a/howtos_as_py_files/pickle_module.py +++ /dev/null @@ -1,23 +0,0 @@ -# sr 10/29/13 -# The pickle module converts Python objects into byte streams -# to save them as a file on your drive for re-use. -# -# module documentation http://docs.python.org/2/library/pickle.html - -import pickle - -#### Generate some object -my_dict = dict() -for i in range(1,1000): - my_dict[i] = "some text" - -#### Save object to file -pickle_out = open('my_file.pkl', 'wb') -pickle.dump(my_dict, pickle_out) -pickle_out.close() - -#### Load object from file -my_object_file = open('my_file.pkl', 'rb') -my_dict = pickle.load(my_object_file) -my_object_file.close() - diff --git a/howtos_as_py_files/pil_image_processing.py b/howtos_as_py_files/pil_image_processing.py deleted file mode 100644 index e69de29..0000000 diff --git a/howtos_as_py_files/python2_vs_3_version_info.py b/howtos_as_py_files/python2_vs_3_version_info.py deleted file mode 100644 index 19e7bb2..0000000 --- a/howtos_as_py_files/python2_vs_3_version_info.py +++ /dev/null @@ -1,24 +0,0 @@ -# Sebastian Raschka 04/10/2014 - -import sys - -def give_letter(word): - for letter in word: - yield letter - -if sys.version_info[0] == 3: - print('executed in Python 3.x') - test = give_letter('Hello') - print(next(test)) - print('in for-loop:') - for l in test: - print(l) - -# if Python 2.x -if sys.version_info[0] == 2: - print('executed in Python 2.x') - test = give_letter('Hello') - print(test.next()) - print('in for-loop:') - for l in test: - print(l) diff --git a/howtos_as_py_files/read_file.py b/howtos_as_py_files/read_file.py deleted file mode 100755 index 567ae0c..0000000 --- a/howtos_as_py_files/read_file.py +++ /dev/null @@ -1,44 +0,0 @@ -# Different methods to read from text files -# sr 11/18/2013 -# Python 3.x - -# Note: rb opens file in binary mode to avoid issues with Windows systems -# where '\r\n' is used instead of '\n' as newline character(s). - - -# A) Reading in Byte chunks -reader_a = open("file.txt", "rb") -chunks = [] -data = reader_a.read(64) # reads first 64 bytes -while data != "": - chunks.append(data) - data = reader_a.read(64) -if data: - chunks.append(data) -print (len(chunks)) -reader_a.close() - - -# B) Reading whole file at once into a list of lines -with open("file.txt", "rb") as reader_b: # recommended syntax, auto closes - data = reader_b.readlines() # data is assigned a list of lines -print (len(data)) - - -# C) Reading whole file at once into a string -with open("file.txt", "rb") as reader_c: - data = reader_c.read() # data is assigned a list of lines -print (len(data)) - - -# D) Reading line by line into a list -data = [] -with open("file.txt", "rb") as reader_d: - for line in reader_d: - data.append(line) -print (len(data)) - - - - - diff --git a/howtos_as_py_files/reg_expr_1_basics.py b/howtos_as_py_files/reg_expr_1_basics.py deleted file mode 100644 index 5fafab8..0000000 --- a/howtos_as_py_files/reg_expr_1_basics.py +++ /dev/null @@ -1,101 +0,0 @@ -# Examples for using Python's Regular expression module "re" -# sr 11/30/2013 - -import re - -'''OVERVIEW - '|' means 'or' - '.' matches any single character - '()' groups into substrings -''' - - - - - -# read in data -fileobj = '''abc mno -def pqr -ghi stu -jkl vwx''' - -data = fileobj.strip().split('\n') - - -# A >> if 's' in line -print (50*'-' + '\nA\n' + 50*'-') -for line in data: - if re.search('abc', line): - print(">>", line) - else: - print(" ", line) - -''' --------------------------------------------------- -A --------------------------------------------------- ->> abc mno - def pqr - ghi stu - jkl vwx''' - - - -# B >> if 's' in line or 'r' in line -print (50*'-' + '\nB\n' + 50*'-') -for line in data: - if re.search('abc|efg', line): - print(">>", line) - else: - print(" ", line) - -''' --------------------------------------------------- -B --------------------------------------------------- ->> abc mno - def pqr - ghi stu - jkl vwx ----------------''' - - -# C >> -# use () to remember which object was found and return a match object -print (50*'-' + '\nC\n' + 50*'-') -for line in data: - match = re.search('(abc|efg)', line) # note the parantheses - if match: - print(match.group(1)) # prints 'abc' if found, else None - # match.group(0) is the whole pattern that matched - -''' --------------------------------------------------- -C --------------------------------------------------- -abc''' - - - -# read in data -fileobj = '''2013-01-01 -2012-02-02 -ghi stu -2012-03-03''' - -data = fileobj.strip().split('\n') - - -# D >> use '.' to match 'any character' -print (50*'-' + '\nD\n' + 50*'-') -for line in data: - match = re.search('(2012)-(..)-(..)', line) # note the parantheses - if match: - print(match.group(1), match.group(2), match.group(3)) - -''' --------------------------------------------------- -D --------------------------------------------------- -2012 02 02 -2012 03 03''' diff --git a/howtos_as_py_files/reg_expr_2_operators.py b/howtos_as_py_files/reg_expr_2_operators.py deleted file mode 100644 index 4994159..0000000 --- a/howtos_as_py_files/reg_expr_2_operators.py +++ /dev/null @@ -1,127 +0,0 @@ -# Examples for using Python's Regular expression module "re" -# sr 11/30/2013 - -import re - -'''OVERVIEW - '*' matches all characters that follow (0 or more) - '+' matches all characters that follow (1 or more) - '?' makes the previous character optional - '{4}' previous character must match exactly 4 times - '{2-4}' previous character must match exactly 2-4 times - '[0-9]' matches all characters in the set of numbers 0 to 9 - '[A-Z]' matches all characters in the set of A to Z - '\d' matches all digits, e.g., '4', '9' ... - '\D' matches all NON-digit characters - '\s' matches all space characters: '', '\t', '\r', '\n' - '\S' matches all NON-space characters - '\w' matches all non-punctuation characters (i.e., letters and digits) - '\W' matches all NON-letter and NON-digit characters - '^bla' NOT-matches 'bla' - 'let$' matches 'let' but not 'letter' - '\b' matches transition between non-word characters and word characters - -''' - -data = '''2013-01-01 -2012-02-02 -aaaa-02-02 -aa-02-02 --04-04 -2000 02-02 -ghi stu -2012-03-03'''.strip().split('\n') - - -# A >> '*' matches all characters that follow (0 or more) -print (50*'-' + '\nA\n' + 50*'-') - -for line in data: - match = re.search('(.*)-(..)-(..)', line) # note the parantheses - if match: - print(match.group(1), match.group(2), match.group(3)) - -''' --------------------------------------------------- -A --------------------------------------------------- -2013 01 01 -2012 02 02 -aaaa 02 02 -aa 02 02 - 04 04 -2012 03 03 -''' - - -# B >> '+' matches all characters that follow (1 or more) -print (50*'-' + '\nB\n' + 50*'-') - -for line in data: - match = re.search('(.+)-(..)-(..)', line) # note the parantheses - if match: - print(match.group(1), match.group(2), match.group(3)) - -''' --------------------------------------------------- -B --------------------------------------------------- -2013 01 01 -2012 02 02 -aaaa 02 02 -aa 02 02 -2012 03 03 -''' - - -# C >> '?' makes the previous character optional -print (50*'-' + '\nC\n' + 50*'-') - -for line in data: - match = re.search('(.+)-?(..)-(..)', line) # note the parantheses - if match: - print(match.group(1), match.group(2), match.group(3)) - -''' --------------------------------------------------- -C --------------------------------------------------- -2013- 01 01 -2012- 02 02 -aaaa- 02 02 -aa- 02 02 -- 04 04 -2000 02 02 -2012- 03 03 -''' - -# D >> '{4}' previous character must match exactly 4 times -print (50*'-' + '\nD\n' + 50*'-') - -for line in data: - match = re.search('(a{4})-(..)-(..)', line) # note the parantheses - if match: - print(match.group(1), match.group(2), match.group(3)) - -''' --------------------------------------------------- -D --------------------------------------------------- -aaaa 02 02 -''' - -# E >>'{2-4}' previous character must match exactly 2-4 times -print (50*'-' + '\nE\n' + 50*'-') - -for line in data: - match = re.search('(a{2,4})-(..)-(..)', line) # note the parantheses - if match: - print(match.group(1), match.group(2), match.group(3)) - -''' --------------------------------------------------- -E --------------------------------------------------- -aaaa 02 02 -aa 02 02 -''' diff --git a/howtos_as_py_files/sort_list_of_tuples_by_ele.py b/howtos_as_py_files/sort_list_of_tuples_by_ele.py deleted file mode 100644 index 4a94d4b..0000000 --- a/howtos_as_py_files/sort_list_of_tuples_by_ele.py +++ /dev/null @@ -1,34 +0,0 @@ -# Sebastian Raschka 09/02/2014 -# Sorting a list of tuples by starting with the last element of the tuple (=reversed tuple) - -# Here, we make use of the "key" parameter of the in-built "sorted()" function -# (also available for the ".sort()" method), which let's us define a function -# that is called on every element that is to be sorted. In this case, our -# "key"-function is a simple lambda function that returns the last item -# from every tuple. - - -a_list = [(1,3,'c'), (2,3,'a'), (3,2,'b'), (2,2,'b')] - -sorted_list = sorted(a_list, key=lambda e: e[::-1]) - -print(sorted_list) - -# prints [(2, 3, 'a'), (2, 2, 'b'), (3, 2, 'b'), (1, 3, 'c')] - - - -# If we are only interesting in sorting the list by the last element -# of the tuple and don't care about a "tie" situation, we can also use -# the index of the tuple item directly instead of reversing the tuple -# for efficiency. - - - -a_list = [(1,3,'c'), (2,3,'a'), (3,2,'b'), (2,2,'b')] - -sorted_list = sorted(a_list, key=lambda e: e[-1]) - -print(sorted_list) - -# prints [(2, 3, 'a'), (3, 2, 'b'), (2, 2, 'b'), (1, 3, 'c')] \ No newline at end of file diff --git a/howtos_as_py_files/sorting_multiple_lists_by_col.py b/howtos_as_py_files/sorting_multiple_lists_by_col.py deleted file mode 100644 index 7c534cb..0000000 --- a/howtos_as_py_files/sorting_multiple_lists_by_col.py +++ /dev/null @@ -1,39 +0,0 @@ -# Sebastian Raschka 2014 - -""" -You have 3 lists that you want to sort "relative" to each other, -for example, picturing each list as a row in a 3x3 matrix: sort it by columns - -######################## -If the input lists are -######################## - - list1 = ['c','b','a'] - list2 = [6,5,4] - list3 = ['some-val-associated-with-c','another_val-b','z_another_third_val-a'] - -######################## -the desired outcome is: -######################## - - ['a', 'b', 'c'] - [4, 5, 6] - ['z_another_third_val-a', 'another_val-b', 'some-val-associated-with-c'] - -######################## -and NOT: -######################## - - ['a', 'b', 'c'] - [4, 5, 6] - ['another_val-b', 'some-val-associated-with-c', 'z_another_third_val-a'] - - -""" - -list1 = ['c','b','a'] -list2 = [6,5,4] -list3 = ['some-val-associated-with-c','another_val-b','z_another_third_val-a'] - - -list1, list2, list3 = zip(*sorted(zip(list1, list2, list3))) diff --git a/howtos_as_py_files/timeit_test.py b/howtos_as_py_files/timeit_test.py deleted file mode 100644 index 31bb93e..0000000 --- a/howtos_as_py_files/timeit_test.py +++ /dev/null @@ -1,24 +0,0 @@ -# Sebastian Raschka, 03/2014 -# comparing string formating: %s and .format() - -import timeit - -format_res = timeit.timeit("['{}'.format(i) for i in range(10000)]", number=1000) - -binaryop_res = timeit.timeit("['%s' %i for i in range(10000)]", number=1000) - -print('{}: {}\n{}: {}'.format('format()', format_res, '%s', binaryop_res)) - -################################ -# On my machine -################################ -# -# Python 3.4.0 -# MacOS X 10.9.2 -# 2.5 GHz Intel Core i5 -# 4 GB 1600 Mhz DDR3 -# -################################ -# format(): 2.815331667999999 -# %s: 1.630353775999538 -################################ diff --git a/howtos_as_py_files/zen_of_python.py b/howtos_as_py_files/zen_of_python.py deleted file mode 100644 index d82cacd..0000000 --- a/howtos_as_py_files/zen_of_python.py +++ /dev/null @@ -1,24 +0,0 @@ ->>> import this -""" -The Zen of Python, by Tim Peters - -Beautiful is better than ugly. -Explicit is better than implicit. -Simple is better than complex. -Complex is better than complicated. -Flat is better than nested. -Sparse is better than dense. -Readability counts. -Special cases aren't special enough to break the rules. -Although practicality beats purity. -Errors should never pass silently. -Unless explicitly silenced. -In the face of ambiguity, refuse the temptation to guess. -There should be one-- and preferably only one --obvious way to do it. -Although that way may not be obvious at first unless you're Dutch. -Now is better than never. -Although never is often better than *right* now. -If the implementation is hard to explain, it's a bad idea. -If the implementation is easy to explain, it may be a good idea. -Namespaces are one honking great idea -- let's do more of those! -""" From aea7c4403ece6c71a1ebd8ad7f37d511619521bb Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 26 Sep 2014 14:20:59 -0400 Subject: [PATCH 190/248] linked A random collection of useful Python patterns --- README.md | 2 ++ howtos_as_py_files/README.md | 10 ---------- python_patterns/README.md | 3 +++ .../id_file1.txt | 0 .../id_file2.txt | 0 {howtos_as_py_files => python_patterns}/my_file.pkl | Bin .../patterns.ipynb | 0 7 files changed, 5 insertions(+), 10 deletions(-) delete mode 100644 howtos_as_py_files/README.md create mode 100644 python_patterns/README.md rename {howtos_as_py_files => python_patterns}/id_file1.txt (100%) rename {howtos_as_py_files => python_patterns}/id_file2.txt (100%) rename {howtos_as_py_files => python_patterns}/my_file.pkl (100%) rename {howtos_as_py_files => python_patterns}/patterns.ipynb (100%) diff --git a/README.md b/README.md index a1872c6..e2e1ee8 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,8 @@ - Quick guide for dealing with missing numbers in NumPy [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/numpy_nan_quickguide.ipynb)] +- A random collection of useful Python patterns [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/python_patterns/patterns.ipynb)] +
    diff --git a/howtos_as_py_files/README.md b/howtos_as_py_files/README.md deleted file mode 100644 index 840e737..0000000 --- a/howtos_as_py_files/README.md +++ /dev/null @@ -1,10 +0,0 @@ -Sebastian Raschka -last updated: 09/26/2014 - -# A collection of useful Python patterns - - -new_msg("Hello, World") -# prints: "My message: Hello, World" - -# print(dir(create_message.__closure__)) \ No newline at end of file diff --git a/python_patterns/README.md b/python_patterns/README.md new file mode 100644 index 0000000..084d5c2 --- /dev/null +++ b/python_patterns/README.md @@ -0,0 +1,3 @@ +# A collection of useful Python patterns + +[View](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/python_patterns/patterns.ipynb) the IPython Notebook. \ No newline at end of file diff --git a/howtos_as_py_files/id_file1.txt b/python_patterns/id_file1.txt similarity index 100% rename from howtos_as_py_files/id_file1.txt rename to python_patterns/id_file1.txt diff --git a/howtos_as_py_files/id_file2.txt b/python_patterns/id_file2.txt similarity index 100% rename from howtos_as_py_files/id_file2.txt rename to python_patterns/id_file2.txt diff --git a/howtos_as_py_files/my_file.pkl b/python_patterns/my_file.pkl similarity index 100% rename from howtos_as_py_files/my_file.pkl rename to python_patterns/my_file.pkl diff --git a/howtos_as_py_files/patterns.ipynb b/python_patterns/patterns.ipynb similarity index 100% rename from howtos_as_py_files/patterns.ipynb rename to python_patterns/patterns.ipynb From 5a8f0a63c77b578eac904dd06357fa9aa59dc518 Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 26 Sep 2014 14:24:11 -0400 Subject: [PATCH 191/248] linked A random collection of useful Python patterns --- python_patterns/patterns.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python_patterns/patterns.ipynb b/python_patterns/patterns.ipynb index 42fb3aa..d3a8f93 100644 --- a/python_patterns/patterns.ipynb +++ b/python_patterns/patterns.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:0d6c2b08bbaff6330460e1379004dabcfdd16f3712b1fb820c0315a3f70294f5" + "signature": "sha256:51af96cc55143f75f6699c3e53aeead72f1b503d1759501f341f13fbc3436a4c" }, "nbformat": 3, "nbformat_minor": 0, @@ -12,7 +12,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "[Go back](#https://github.com/rasbt/python_reference) to the `python_reference` repository." + "[Go back](https://github.com/rasbt/python_reference) to the `python_reference` repository." ] }, { From 3f0841a4f6f9de967b7538a6776d652facd60004 Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 26 Sep 2014 18:07:47 -0400 Subject: [PATCH 192/248] patterns changed to snippets --- README.md | 2 +- python_patterns/README.md | 2 +- python_patterns/patterns.ipynb | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e2e1ee8..69640db 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ - Quick guide for dealing with missing numbers in NumPy [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/numpy_nan_quickguide.ipynb)] -- A random collection of useful Python patterns [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/python_patterns/patterns.ipynb)] +- A random collection of useful Python snippets [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/python_patterns/patterns.ipynb)]
    diff --git a/python_patterns/README.md b/python_patterns/README.md index 084d5c2..37a1770 100644 --- a/python_patterns/README.md +++ b/python_patterns/README.md @@ -1,3 +1,3 @@ -# A collection of useful Python patterns +# A collection of useful Python snippets [View](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/python_patterns/patterns.ipynb) the IPython Notebook. \ No newline at end of file diff --git a/python_patterns/patterns.ipynb b/python_patterns/patterns.ipynb index d3a8f93..5b6e031 100644 --- a/python_patterns/patterns.ipynb +++ b/python_patterns/patterns.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:51af96cc55143f75f6699c3e53aeead72f1b503d1759501f341f13fbc3436a4c" + "signature": "sha256:f89c18f0692550a8e1f3a2999eda339bc0905a2dd1413049101148918e7a6c5e" }, "nbformat": 3, "nbformat_minor": 0, @@ -20,7 +20,7 @@ "level": 1, "metadata": {}, "source": [ - "A random collection of useful Python patterns" + "A random collection of useful Python snippets" ] }, { From 14996364a2e32ad13840cff27c0874024ee50b2e Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 26 Sep 2014 18:09:11 -0400 Subject: [PATCH 193/248] snippet upd --- python_patterns/patterns.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python_patterns/patterns.ipynb b/python_patterns/patterns.ipynb index 5b6e031..fc3e45f 100644 --- a/python_patterns/patterns.ipynb +++ b/python_patterns/patterns.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:f89c18f0692550a8e1f3a2999eda339bc0905a2dd1413049101148918e7a6c5e" + "signature": "sha256:0c9d8c8b65b0eec5bb7c2a2790f08a1e49daf27dac2c9dcfe8d85ce958046a2c" }, "nbformat": 3, "nbformat_minor": 0, @@ -27,7 +27,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "I just cleaned my hard drive and found a couple of useful Python patterns that I had some use for in the past. I thought it would be worthwhile to collect them in a IPython notebook for personal reference and share it with people who might find them useful too. \n", + "I just cleaned my hard drive and found a couple of useful Python snippets that I had some use for in the past. I thought it would be worthwhile to collect them in a IPython notebook for personal reference and share it with people who might find them useful too. \n", "Most of those snippets are hopefully self-explanatory, but I am planning to add more comments and descriptions in future." ] }, From 3f81eadf98547948604762f1827f63644e341130 Mon Sep 17 00:00:00 2001 From: rasbt Date: Thu, 9 Oct 2014 14:21:43 -0400 Subject: [PATCH 194/248] english language detect. snippet --- python_patterns/patterns.ipynb | 58 +++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/python_patterns/patterns.ipynb b/python_patterns/patterns.ipynb index fc3e45f..2a769ba 100644 --- a/python_patterns/patterns.ipynb +++ b/python_patterns/patterns.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:0c9d8c8b65b0eec5bb7c2a2790f08a1e49daf27dac2c9dcfe8d85ce958046a2c" + "signature": "sha256:714a46a359c5b1c3e7e7bd4d19d73221f9def5bcb806840be82541070041d29e" }, "nbformat": 3, "nbformat_minor": 0, @@ -57,6 +57,7 @@ "- [Differences between 2 files](#Differences-between-2-files)\n", "- [Differences between successive elements in a list](#Differences-between-successive-elements-in-a-list)\n", "- [Doctest example](#Doctest-example)\n", + "- [English language detection](#English-language-detection)\n", "- [File browsing basics](#File-browsing-basics)\n", "- [File reading basics](#File-reading-basics)\n", "- [Indices of min and max elements from a list](#Indices-of-min-and-max-elements-from-a-list)\n", @@ -595,6 +596,61 @@ "
    " ] }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "English language detection" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import nltk\n", + "\n", + "def eng_ratio(text):\n", + " ''' Returns the ratio of non-English to English words from a text '''\n", + "\n", + " english_vocab = set(w.lower() for w in nltk.corpus.words.words()) \n", + " text_vocab = set(w.lower() for w in text.split() if w.lower().isalpha()) \n", + " unusual = text_vocab.difference(english_vocab)\n", + " diff = len(unusual)/len(text_vocab)\n", + " return diff\n", + " \n", + "text = 'This is a test fahrrad'\n", + "\n", + "print(eng_ratio(text))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "0.2\n" + ] + } + ], + "prompt_number": 1 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, { "cell_type": "heading", "level": 2, From 32b66da48e2f545d0d66e86f5220fe7980ce65c1 Mon Sep 17 00:00:00 2001 From: kzhk75 Date: Thu, 23 Oct 2014 23:24:41 +0100 Subject: [PATCH 195/248] Update scope_resolution_legb_rule.ipynb --- tutorials/scope_resolution_legb_rule.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/scope_resolution_legb_rule.ipynb b/tutorials/scope_resolution_legb_rule.ipynb index a47fd1d..143e8ba 100644 --- a/tutorials/scope_resolution_legb_rule.ipynb +++ b/tutorials/scope_resolution_legb_rule.ipynb @@ -457,7 +457,7 @@ "\n", "def a_func():\n", " a_var = 'local value'\n", - " print(a_var, '[ a_var inside a_func() ]')\n", + " print(a_var, '[ a_var in a_func() ]')\n", "\n", "a_func()\n", "print(a_var, '[ a_var outside a_func() ]')" From b145519291b6b4ee3c82e37ec336cf2d65cfe9fa Mon Sep 17 00:00:00 2001 From: kzhk75 Date: Thu, 23 Oct 2014 23:43:47 +0100 Subject: [PATCH 196/248] Update scope_resolution_legb_rule.ipynb To match the above and following sentences. --- tutorials/scope_resolution_legb_rule.ipynb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tutorials/scope_resolution_legb_rule.ipynb b/tutorials/scope_resolution_legb_rule.ipynb index 143e8ba..93f01a2 100644 --- a/tutorials/scope_resolution_legb_rule.ipynb +++ b/tutorials/scope_resolution_legb_rule.ipynb @@ -416,7 +416,7 @@ "global value [ a_var outside a_func() ]\n", "\n", "**c)** \n", - "
    global value [ a_var in a_func() ]  \n",
    +      "
    global value [ a_var inside a_func() ]  \n",
           "global value [ a_var outside a_func() ]
    \n", "\n", "\n" @@ -457,7 +457,7 @@ "\n", "def a_func():\n", " a_var = 'local value'\n", - " print(a_var, '[ a_var in a_func() ]')\n", + " print(a_var, '[ a_var inside a_func() ]')\n", "\n", "a_func()\n", "print(a_var, '[ a_var outside a_func() ]')" @@ -475,11 +475,11 @@ "
    raises an error
    \n", "\n", "**b)** \n", - "
    local value [ a_var in a_func() ]\n",
    +      "
    local value [ a_var inside a_func() ]\n",
           "global value [ a_var outside a_func() ]
    \n", "\n", "**c)** \n", - "
    global value [ a_var in a_func() ]  \n",
    +      "
    global value [ a_var inside a_func() ]  \n",
           "global value [ a_var outside a_func() ]
    \n" ] }, From 4ac59a474db8c0820f8ba9026a9c418d653d1652 Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 19 Dec 2014 13:11:05 -0500 Subject: [PATCH 197/248] combinations --- useful_scripts/combinations.py | 71 ++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100755 useful_scripts/combinations.py diff --git a/useful_scripts/combinations.py b/useful_scripts/combinations.py new file mode 100755 index 0000000..5dbe91d --- /dev/null +++ b/useful_scripts/combinations.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python + +# Sebastian Raschka 2014 +# Functions to calculate factorial, combinations, and permutations +# bundled in an simple command line interface. + +def factorial(n): + if n == 0: + return 1 + else: + return n * factorial(n-1) + +def combinations(n, r): + numerator = factorial(n) + denominator = factorial(r) * factorial(n-r) + return int(numerator/denominator) + +def permutations(n, r): + numerator = factorial(n) + denominator = factorial(n-r) + return int(numerator/denominator) + +assert(factorial(3) == 6) +assert(combinations(20, 8) == 125970) +assert(permutations(30, 3) == 24360) + + + + +if __name__ == '__main__': + + import argparse + parser = argparse.ArgumentParser( + description='Script to calculate the number of combinations or permutations ("n choose r")', + formatter_class=argparse.RawTextHelpFormatter, + + prog='Combinations', + epilog='Example: ./combinations.py -c 20 3' + ) + + parser.add_argument('-c', '--combinations', type=int, metavar='NUMBER', nargs=2, + help='Combinations: Number of ways to combine n items with sequence length r where the item order does not matter.') + + parser.add_argument('-p', '--permutations', type=int, metavar='NUMBER', nargs=2, + help='Permutations: Number of ways to combine n items with sequence length r where the item order does not matter.') + + parser.add_argument('-f', '--factorial', type=int, metavar='NUMBER', help='n! e.g., 5! = 5*4*3*2*1 = 120.') + + parser.add_argument('--version', action='version', version='%(prog)s 1.0') + + args = parser.parse_args() + + if not any((args.combinations, args.permutations, args.factorial)): + parser.print_help() + quit() + + if args.factorial: + print(factorial(args.factorial)) + + if args.combinations: + print(combinations(args.combinations[0], args.combinations[1])) + + if args.permutations: + print(permutations(args.permutations[0], args.permutations[1])) + + if args.factorial: + print(factorial(args.factorial)) + + + + \ No newline at end of file From 9fc9d1ee54c5f837770a8bbdc4b5291d2493df77 Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 23 Dec 2014 22:33:39 -0500 Subject: [PATCH 198/248] pandas sum tricks --- README.md | 8 +- benchmarks/pandas_sum_tricks.ipynb | 450 +++++++++++++++++++++++++++++ 2 files changed, 457 insertions(+), 1 deletion(-) create mode 100644 benchmarks/pandas_sum_tricks.ipynb diff --git a/README.md b/README.md index 69640db..e880d27 100644 --- a/README.md +++ b/README.md @@ -100,10 +100,16 @@ ###// Benchmarks [[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] -*The benchmark category has been moved to a separate GitHub repository [One-Python-benchmark-per-day](https://github.com/rasbt/One-Python-benchmark-per-day)* + +- Simple tricks to speed up the sum calculation in pandas [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/pandas_sum_tricks.ipynb)] + +
    +*More benchmarks can be found in the separate GitHub repository [One-Python-benchmark-per-day](https://github.com/rasbt/One-Python-benchmark-per-day)* **Featured articles**: + + - (C)Python compilers - Cython vs. Numba vs. Parakeet [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day4_2_cython_numba_parakeet.ipynb)] - Just-in-time compilers for NumPy array expressions [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day7_2_jit_numpy.ipynb)] diff --git a/benchmarks/pandas_sum_tricks.ipynb b/benchmarks/pandas_sum_tricks.ipynb new file mode 100644 index 0000000..ccf454e --- /dev/null +++ b/benchmarks/pandas_sum_tricks.ipynb @@ -0,0 +1,450 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:8222de4af96dc6569eddec8d75df6855e8bac273e12e8739fffc42aafd712ba2" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%load_ext watermark \n", + "%watermark -d -v -a 'Sebastian Raschka' -p numpy,pandas" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Sebastian Raschka 23/12/2014 \n", + "\n", + "CPython 3.4.2\n", + "IPython 2.3.1\n", + "\n", + "numpy 1.9.1\n", + "pandas 0.15.2\n" + ] + } + ], + "prompt_number": 1 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "4 Simple Tricks To Speed up the Sum Calculation in Pandas" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I wanted to improve the performance of some passages in my code a little bit and found that some simple tweaks can speed up the `pandas` section significantly. I thought that it might be one useful thing to share -- and no Cython or just-in-time compilation is required! " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In my case, I had a large dataframe where I wanted to calculate the sum of specific columns for different combinations of rows (approx. 100,000,000 of them, that's why I was looking for ways to speed it up). Anyway, below is a simple toy DataFrame to explore the `.sum()` method a little bit." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "df = pd.DataFrame()\n", + "\n", + "for col in ('a', 'b', 'c', 'd'):\n", + " df[col] = pd.Series(range(1000), index=range(1000))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "df.tail()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "
    \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    abcd
    995 995 995 995 995
    996 996 996 996 996
    997 997 997 997 997
    998 998 998 998 998
    999 999 999 999 999
    \n", + "" + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 3, + "text": [ + " a b c d\n", + "995 995 995 995 995\n", + "996 996 996 996 996\n", + "997 997 997 997 997\n", + "998 998 998 998 998\n", + "999 999 999 999 999" + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's assume we are interested in calculating the sum of column `a`, `c`, and `d`, which would look like this:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "df.loc[:, ['a', 'c', 'd']].sum(axis=0)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 4, + "text": [ + "a 499500\n", + "c 499500\n", + "d 499500\n", + "dtype: int64" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, the `.loc` method is probably the most \"costliest\" one for this kind of operation. Since we are only intersted in the resulting numbers (i.e., the column sums), there is no need to make a copy of the array. Anyway, let's use the method above as a reference for comparison:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# 1\n", + "%timeit -n 1000 -r 5 df.loc[:, ['a', 'c', 'd']].sum(axis=0)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1000 loops, best of 5: 1.28 ms per loop\n" + ] + } + ], + "prompt_number": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Although this is a rather small DataFrame (1000 x 4), let's see by how much we can speed it up using a different slicing method:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# 2\n", + "%timeit -n 1000 -r 5 df[['a', 'c', 'd']].sum(axis=0)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1000 loops, best of 5: 1.03 ms per loop\n" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, let us use the Numpy representation of the `NDFrame` via the `.values` attribue:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# 3\n", + "%timeit -n 1000 -r 5 df[['a', 'c', 'd']].values.sum(axis=0)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1000 loops, best of 5: 721 \u00b5s per loop\n" + ] + } + ], + "prompt_number": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "While the speed improvements in #2 and #3 were not really a surprise, the next \"trick\" surprised me a little bit. Here, we are calculating the sum of each column separately rather than slicing the array." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "[df[col].values.sum(axis=0) for col in ('a', 'c', 'd')]" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 8, + "text": [ + "[499500, 499500, 499500]" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# 4\n", + "%timeit -n 1000 -r 5 [df[col].values.sum(axis=0) for col in ('a', 'c', 'd')]" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1000 loops, best of 5: 64.8 \u00b5s per loop\n" + ] + } + ], + "prompt_number": 9 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this case, this is an almost 10x improvement!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One more thing: Let's try the Einstein summation convention [`einsum`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.einsum.html)." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from numpy import einsum\n", + "[einsum('i->', df[col].values) for col in ('a', 'c', 'd')]" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 10, + "text": [ + "[499500, 499500, 499500]" + ] + } + ], + "prompt_number": 10 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# 5\n", + "%timeit -n 1000 -r 5 [einsum('i->', df[col].values) for col in ('a', 'c', 'd')]" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1000 loops, best of 5: 57.2 \u00b5s per loop\n" + ] + } + ], + "prompt_number": 11 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Conclusion:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using some simple tricks, the column sum calculation improved from 1280 to 57.2 \u00b5s per loop (approx. 22x faster!)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file From 731425d79418c4177b24641f312cee586caac463 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 24 Dec 2014 11:01:30 -0500 Subject: [PATCH 199/248] plots --- benchmarks/pandas_sum_tricks.ipynb | 332 ++++++++++++++++++++- pandas_sum_tricks.ipynb | 450 +++++++++++++++++++++++++++++ 2 files changed, 773 insertions(+), 9 deletions(-) create mode 100644 pandas_sum_tricks.ipynb diff --git a/benchmarks/pandas_sum_tricks.ipynb b/benchmarks/pandas_sum_tricks.ipynb index ccf454e..db58109 100644 --- a/benchmarks/pandas_sum_tricks.ipynb +++ b/benchmarks/pandas_sum_tricks.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:8222de4af96dc6569eddec8d75df6855e8bac273e12e8739fffc42aafd712ba2" + "signature": "sha256:3de4720b58999a1f88844021c43acd1d6d6db6da3315538f9faac86a69424446" }, "nbformat": 3, "nbformat_minor": 0, @@ -22,7 +22,9 @@ "output_type": "stream", "stream": "stdout", "text": [ - "Sebastian Raschka 23/12/2014 \n", + "The watermark extension is already loaded. To reload it, use:\n", + " %reload_ext watermark\n", + "Sebastian Raschka 24/12/2014 \n", "\n", "CPython 3.4.2\n", "IPython 2.3.1\n", @@ -32,7 +34,7 @@ ] } ], - "prompt_number": 1 + "prompt_number": 18 }, { "cell_type": "markdown", @@ -224,7 +226,7 @@ "output_type": "stream", "stream": "stdout", "text": [ - "1000 loops, best of 5: 1.28 ms per loop\n" + "1000 loops, best of 5: 1.37 ms per loop\n" ] } ], @@ -258,7 +260,7 @@ "output_type": "stream", "stream": "stdout", "text": [ - "1000 loops, best of 5: 1.03 ms per loop\n" + "1000 loops, best of 5: 986 \u00b5s per loop\n" ] } ], @@ -292,7 +294,7 @@ "output_type": "stream", "stream": "stdout", "text": [ - "1000 loops, best of 5: 721 \u00b5s per loop\n" + "1000 loops, best of 5: 687 \u00b5s per loop\n" ] } ], @@ -346,7 +348,7 @@ "output_type": "stream", "stream": "stdout", "text": [ - "1000 loops, best of 5: 64.8 \u00b5s per loop\n" + "1000 loops, best of 5: 64.4 \u00b5s per loop\n" ] } ], @@ -408,7 +410,7 @@ "output_type": "stream", "stream": "stdout", "text": [ - "1000 loops, best of 5: 57.2 \u00b5s per loop\n" + "1000 loops, best of 5: 55.7 \u00b5s per loop\n" ] } ], @@ -433,9 +435,321 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Using some simple tricks, the column sum calculation improved from 1280 to 57.2 \u00b5s per loop (approx. 22x faster!)" + "Using some simple tricks, the column sum calculation improved from 1370 to 57.7 \u00b5s per loop (approx. 25x faster!)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "What about larger DataFrames?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So, what does this trend look like for larger DataFrames?" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "import random\n", + "from numpy import einsum\n", + "import pandas as pd\n", + "\n", + "def run_loc_sum(df):\n", + " return df.loc[:, ['a', 'c', 'd']].sum(axis=0)\n", + "\n", + "def run_einsum(df):\n", + " return [einsum('i->', df[col].values) for col in ('a', 'c', 'd')]\n", + "\n", + "orders = [10**i for i in range(4, 8)]\n", + "loc_res = []\n", + "einsum_res = []\n", + "\n", + "for n in orders:\n", + "\n", + " df = pd.DataFrame()\n", + " for col in ('a', 'b', 'c', 'd'):\n", + " df[col] = pd.Series(range(n), index=range(n))\n", + " \n", + " print('n=%s (%s of %s)' %(n, orders.index(n)+1, len(orders)))\n", + "\n", + " loc_res.append(min(timeit.Timer('run_loc_sum(df)' , \n", + " 'from __main__ import run_loc_sum, df').repeat(repeat=5, number=1)))\n", + "\n", + " einsum_res.append(min(timeit.Timer('run_einsum(df)' , \n", + " 'from __main__ import run_einsum, df').repeat(repeat=5, number=1)))\n", + "\n", + "print('finished')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "n=10000 (1 of 4)\n", + "n=100000 (2 of 4)" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "n=1000000 (3 of 4)" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "n=10000000 (4 of 4)" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "finished" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 23 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%matplotlib inline" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 24 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from matplotlib import pyplot as plt\n", + "\n", + "def plot_1():\n", + " \n", + " fig = plt.figure(figsize=(12,6))\n", + " \n", + " plt.plot(orders, loc_res, \n", + " label=\"df.loc[:, ['a', 'c', 'd']].sum(axis=0)\", \n", + " lw=2, alpha=0.6)\n", + " plt.plot(orders,einsum_res, \n", + " label=\"[einsum('i->', df[col].values) for col in ('a', 'c', 'd')]\", \n", + " lw=2, alpha=0.6)\n", + "\n", + " plt.title('Pandas Column Sums', fontsize=20)\n", + " plt.xlim([min(orders), max(orders)])\n", + " plt.grid()\n", + "\n", + " #plt.xscale('log')\n", + " plt.ticklabel_format(style='plain', axis='x')\n", + " plt.legend(loc='upper left', fontsize=14)\n", + " plt.xlabel('Number of rows', fontsize=16)\n", + " plt.ylabel('time in seconds', fontsize=16)\n", + " \n", + " plt.tight_layout()\n", + " plt.show()\n", + " \n", + "plot_1()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nuTJt2rRh0aJFXHzxxZmu0a1bN3744QfatGnD3Llz6dq1KzVq1GDlypX07duXRx99lIEDB7Js2TKG\nDRtGWFgYw4cP9z5+8uTJPProozzyyCNZBhWvvPIKI0aMYOLEifTp04fDhw+zcOFCwAUr1157LVWq\nVCE+Ph5rLcOHD+fPf/4zy5cvz/Vz5attPvbYYzz11FM89dRTTJs2jVtuuYXu3bsTHh7u8xy5eV+d\nPXuWhg0b8t5771G7dm2WLl3KHXfcQa1atbxz1fLbC5X2MYMHDyYxMZHnnnuODh068Msvv5CUlOTz\n2Pyc/9133+XRRx/lhRdeIDY2lnfffZcnn3ySc845J93xGa/TuXNnnn32Wc6ePZvnoYkiIuLbqVOw\nbJnrqfrlF1dWrhx07uzWp8riz1apVmaDq5LinXfeAdzcnlQvv/wydevW5dNPP+XGG2/0+bjTp0+n\n69G64447mD59und/cnIyDz74IM2bNwegSZMm+arf+PHj6datGwB/+9vfuOeee1i1ahXt27cH3Aet\n//73v97jN2/eTKNGjTKdJzXIyIuoqCiioqKYNGkS//vf/3jzzTeJjY0lIiKCQYMGMWjQIM4991wA\nxo4dm6dzHz58mNdff53p06dz6aWXAjB9+nQaNmzoPaZGjRpUqlSJ8uXL5zgEcOrUqYSGhvLee+9R\nrpx726V9zidNmsSDDz5Iv379ALyB3KRJk3jzzTfzVPe0+vbty4gRI1i4cKG3Z+2tt97ixhtvpLxn\nNb60c1MiIyN58cUXad26NSkpKTRo0CBf133ppZdo3759ut6+mTNnUqtWLVasWEGnTp1y1QYjIiLY\ntGmTz2uUL1/eG0zUrFnT+xpMnjyZmJgY72verFkzNm/ezFNPPZUuuIqJicnUq5fR+PHjue+++xgx\nYoS3LLVtf/XVV6xdu5atW7cSEREBwOzZs2nWrBkLFizIsSczO4MGDWLAgAHeOjz77LMsXrzYW5ZR\nbt5X5cqVSzc3KiIigpUrV/L22297g6u8vk+AdP+vbN68mTlz5vD555/Tu3dvwLWp6Oho77/z+l6P\niYlh69at3u0pU6YwZMgQbr/9dgBGjx7NwoUL+Sl1gZQs7iMiIoKjR4+yY8eOLIPUskbrDok/qb2V\nLr//DosWQUICpA4eCAtzadQvucT9u6wqs8FVUfQyFYWVK1eybdu2TBnHjh07lu4DR0aNGjVK95j6\n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\ndTMvXRUS7YuUjq4rdmlZscVRtf+bqyE0dFqcFFt0dHZd+2u7Wxz1auhFIFi8qCg+56rK7d/f1uFv\nw4Y0Y9VqzJi2gmr0aAsqSVLPVNhprJhCorvFycksF2t9VbvW4qWYGZTuFDInsuG/o89vCA2V/i2S\nap7FVSd2725rSLF5c1uHvxBe3+Fv+PDKxqnyc1+CsmS+1a/jtUnuaClYdwqZjtoqr1u2jvOuPK+o\ne7Z+frVrPzNSjg33xe6T6eh+9Vy8+Geb6oXFVV6Mqatfa0OKrVvbzvXqBZdckoqpCRNg0KDKxSlJ\nOjGtbZKLLSROdLlYR4VMMbM8WRcvO/bu4NCuQ11fWKC7syzFFjKd7Wkpdpan9XqXjEmqtLrecxVj\neu7UypWpoNpVsM/ylFNg/Pi05G/8+HQsSepca5vkUs+ydHffS2efXwszLye64T6LtsoWL5JqhXuu\nMnTsGDzxRCqoVq+Gffvazg0alGamrrwSLr7YDn+SqktHbZKrqZCplTbJnRUnpe4c1t3iyOJFkmpf\nXZQPhw+nzn6rVqVOfwcPtp0bPrxt/9T550ND/S6HVidcJ14fCjuNdWdGpLPlXcUuF2t/z00rNjFm\nwpgOP7/ai5fCNsldFSftC5Qs2irbJvn1/LNNWTLfVC96bHH1yitpZmrVqvQsqqNH286deWZbh7+z\nzrLDn5SF1s36xc6ydLTvpRzLxQqvr4Zl0nsO7uGUAx2vQ27faaw7G+6LLXo62yfTVXHUWrxIklTP\netSeqxhh8WJ45BHYtAlaWlqvTc+dai2oRoyoQMBSmbVvk1zqWZbOru9OIVPtWpdmlaqtcXeXlh1v\nBqfeO41JklQs91yVwHPPwV13pbbpAI2NcNllbUv+Tj21svGp9nW3TXKpl4sd75612Ca5q0LiZAqZ\nzpaNHa+QsXiRJEknK/PiKoRwPfBloBH4Rozxix1c80/AW4FXgZtjjCs7u19zM9x/P/z856lZxeDB\n8Pa3p4KqX79yfRcqh/ZtkrsqJE50lqW7hcyWVVsYNX5UTRQvJzIj0tnm/GKXi3WnOHK/S9fcl6Cs\nmGvKkvmmepFpcRVCaAT+BXgTsB1YFkL4aYxxfcE1bwMuiDGOCyFMAb4CTO3ofs88A9/+Nmzblo5n\nzIDf+z3o37/M30iNOl6b5HIsFyu2OGp9Vetm/eeefI4Rl6a1pN0pTk62c1h3iyOLl55h1apV/gNE\n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\nAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 26 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It looks like that the benefit of calculating the sums separately for each column becomes even larger the more rows the DataFrame has." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another question to ask: How does this scale if we have a growing number of columns?" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import timeit\n", + "import random\n", + "from numpy import einsum\n", + "import pandas as pd\n", + "\n", + "def run_loc_sum(df, n):\n", + " return df.loc[:, 0:n-1].sum(axis=0)\n", + "\n", + "def run_einsum(df, n):\n", + " return [einsum('i->', df[col].values) for col in range(0,n-1)]\n", + "\n", + "orders = [10**i for i in range(2, 5)]\n", + "loc_res = []\n", + "einsum_res = []\n", + "\n", + "for n in orders:\n", + "\n", + " df = pd.DataFrame()\n", + " for col in range(n):\n", + " df[col] = pd.Series(range(1000), index=range(1000))\n", + " \n", + " print('n=%s (%s of %s)' %(n, orders.index(n)+1, len(orders)))\n", + "\n", + " loc_res.append(min(timeit.Timer('run_loc_sum(df, n)' , \n", + " 'from __main__ import run_loc_sum, df, n').repeat(repeat=5, number=1)))\n", + "\n", + " einsum_res.append(min(timeit.Timer('run_einsum(df, n)' , \n", + " 'from __main__ import run_einsum, df, n').repeat(repeat=5, number=1)))\n", + "\n", + "print('finished')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "n=100 (1 of 3)\n", + "n=1000 (2 of 3)" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "n=10000 (3 of 3)" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "finished" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 35 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from matplotlib import pyplot as plt\n", + "\n", + "def plot_2():\n", + " \n", + " fig = plt.figure(figsize=(12,6))\n", + " \n", + " plt.plot(orders, loc_res, \n", + " label=\"df.loc[:, 0:n-1].sum(axis=0)\", \n", + " lw=2, alpha=0.6)\n", + " plt.plot(orders,einsum_res, \n", + " label=\"[einsum('i->', df[col].values) for col in range(0,n-1)]\", \n", + " lw=2, alpha=0.6)\n", + "\n", + " plt.title('Pandas Column Sums', fontsize=20)\n", + " plt.xlim([min(orders), max(orders)])\n", + " plt.grid()\n", + "\n", + " #plt.xscale('log')\n", + " plt.ticklabel_format(style='plain', axis='x')\n", + " plt.legend(loc='upper left', fontsize=14)\n", + " plt.xlabel('Number of columns', fontsize=16)\n", + " plt.ylabel('time in seconds', fontsize=16)\n", + " \n", + " plt.tight_layout()\n", + " plt.show()\n", + " \n", + "plot_2()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n2bIlv/32G1u3bs223oSEBLp3705CQgJdunTx6/42b97M7t276dWrl6+sZMmSdOnShe+++477778f\ngLi4OObPn8/mzZvTnP/kk0/y0ksvUbVqVR555BHuuOOOgKUUptevXz9atmzJW2+9RbFixfjpp58o\nWbJkjusZNWoUr7/+OmXLlqVfv3707duXEiVK8P777xMWFsYtt9zC6NGjmTBhAgCJiYlER0dTqVKl\nNPWUKVOGSZMmUaNGDX7++WceeOABSpQowbPPPgvAv//9b5o1a8b48eN5/PHHGTJkCCVLlmT8+PGZ\ntuu1117js88+46OPPiImJobt27enCYQeeOABpk6dmu29rVu3jpo1a7J48WLKlClDhw4dfPs6duxI\nZGQkixcv5pJLLgGgdOnSNGnShPnz56c5VkSCQ/NfJNjU5yQQTp+GpUshPh68SxGEhUGrVtCtG7zz\nTmCuq+Aqnzty5AgTJ05k0qRJvhGHSZMmpZlTVaFCBUqVKkVERASVK1f2q95XXnmFrl27MnLkSADq\n169PUlISL774Ig8//DBJSUl89NFHfP31176gJyYmhk6dOmVbb2RkpG/kxF+7du0CoEqVKmnKK1eu\nTHJysm+7evXq1K9fP8P5Y8aM8c07euaZZ+jUqRPJyclUr17d7zbk1rZt2xg6dKgvMKhbt26u6hkz\nZgyXX3454AKWwYMHs3z5clq0aAG4QPfjjz/2HZ+UlETt2rUz1PP3v//d92/vKNM//vEPX3BVrVo1\n3nvvPW699VYOHTrEtGnTWLJkCSVKlMjy/i655BLf+16zZs00Ac+YMWMYNmxYtvdWrVo1wL3P6YNB\nYwyVK1f29YHUbU8dxImIiIj448ABmD8fFiwA7+ySMmWgc2e44gqoUCGw11dwlc6FjDAFwq+//sqp\nU6fSfKCNjIykadOmF1Tv+vXrue6669KUXX755YwePZojR46wYsUKwsLC6NatW47qbdOmTZ6OGqWe\nD5U+bdGrWbNmvn97P8jv2bOH6tWrU6ZMGV8d/fv355///GeetQ3gscce495772XKlCn06NGDPn36\ncOmll+a4ntT34A2QU7/HlStXZs+ePb7tw4cPExkZmaGejz/+mAkTJvDrr79y5MgRzp49y7lz59Ic\nc+ONN3L77bfz/PPP8/LLL2fbl+Li4ujZsyeXXHIJvXr14pprruHqq6/2vaaVKlXKEDDlhaioqDQL\n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\n+vfvz/Tp09N8kPzkk08oXbo01157LQCnT59mzJgxrF69mi+++IJ9+/Zx++23X9B1d+7cSZcuXWjW\nrBlLlizh22+/5ciRI9x4Y8rfSc7XB0uXLk2TJk2ynJt3+eWX8/PPPwMumNq1axcdOnRg2bJl9O3b\nl5tvvpk1a9bwwgsvMG7cON54440057/yyis0btyYZcuWZQi+vN5++20eeOAB7rnnHtasWcPXX3/t\nS1c9d+4cN954I3v37iUhIYF58+aRnJzMTTfdlKPXKrO++eyzz9K7d29Wr17Nrbfeyt1338327duz\nqMGZP38+a9asYc6cOXz77beA/+/tk08+yUsvvcTy5cupWLEid9xxh2/f4sWLue+++xg8eDCrVq3i\n2muvZeTIkWnaPHv2bO68806GDBnC2rVrmThxIh9//DFPPvmk75jExETatGmT5rqLFy+mc+fOlChR\nwlfWq1cvkpOT2bp1a7b3m5vXyB8NGjSgfPnyWfa7wkQjCBJs6nP5l7WwZg28/jo8/TTEx7uRqwYN\nYNAgl/p39dVFL/UvO8FeLdCfYYIJwBPWWmvcb2nvb+qgPIVx0P8GBaTet69/O0/rmz59OuD+cuz1\nr3/9iypVqvDFF1+kSV1J7cyZM2lGtO6//34mTZrk279t2zaGDh3KJZdcAkDdunVz1b4xY8Zw+eWX\nA/DAAw8wePBgli9fTosWLQC46667+Pjjj33HJyUlUTuTmY7eICMnYmNjiY2NZfz48cyePZsPPviA\nbt26UatWLQYMGMCAAQOoUcPF5SNHjsxR3UeOHGHixIlMmjSJnj17AjBp0iRq1qzpO6ZChQqUKlWK\niIiI86YAvvnmm0RFRTFjxgyKedYkTf2ajx8/nqFDh3LbbbcBMHr0aBITExk/fjwffPBBjtqeWt++\nfXn00UeZN2+eb2Rt6tSp3HLLLURERACkmYsWExPDP//5Txo3bkxycjLVq1fP1XXfeustWrRokWa0\nb8qUKVSsWJGlS5fSunVrv/pgrVq12LBhQ6bXiIiI8AXpF110ke89eOWVV+jatavvPa9fvz5JSUm8\n+OKLPPzww77zu3btmmFUL70xY8bw17/+lUcffdRX5u3b3377LT/99BObNm3yjRRNmzaN+vXrEx8f\nf96RzOwMGDCAfv36+drw6quvsmDBAl9ZZkqVKsXEiRN97yv4/96OGTPGNwfymWeeoVOnTr5jXnvt\n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\n9PTpQCA1OT8ZmFtbWZsZSDXFWNuwlojThV0iIiIiUtwUXOXZwkJmlmpRZ6cPqHbsgPr68NaXa2bG\n0NRQIJCaic8E5tZX1bOheUNGRqq9rr0oL+NVPbiEQftOwqB9J4WmPSflRMFVngwN+SzV/v0wMeHH\nqqp8x7+77oJNm0o/S5W0JIMTg4HLeGcXZgNzm6qb2NCyIeMOqbbatqIMpERERERELofOXOVQPA4H\nD/os1csvp8e7u32Wavt2qCvRq5QWkgsMTAwEAql4Ih6Y21rbupSRWrxDqqWmJYRVi4iIiIgE6cxV\nERsc9Fmqxx6DydQxoqoqH0zt2gUbNpRWliqeiNM33pcRSPVP9JNIJgJz2+vbM85HrW9eT2P1Cu0Z\nLyIiIiIrmoKryxSPw1NP+SzVq6+mx9evT2epakrgntq5hTl6xzMv4x2cGCRpycDctQ1rAxmpusoS\nTcVdItWDSxi07yQM2ndSaNpzUk4UXF2igQEfUD32GExP+7GaGnjTm9JZqmI1HZ+mdywzkBqaGuLs\nMsqIi2RextsUI9Yco6aiBKJFEREREZGQ6MxVFubn4cc/9kHVkSPp8Y0bfUB1223Fl6Va7Np3ZPgI\nR0aOcGT4CCcmTwTmRSNROhs7MzJS3U3dVEWrQli1iIiIiEj+6cxVCPr6fED1+OMwk+okXlPj26fv\n2gWxWLjrWy6eiHN09OhSIHVk5AhT81MZcyqjlXQ1dmV07etq6qIiom0gIiIiInKl9F31Webm4Mkn\nfVD1+uvp8auuSmepqqvDW9+i8bnxpSDq8PBhjo8dDzScaK5pZkvbFja1bmJL2xa6m7oVSF0m1YNL\nGLTvJAzad1Jo2nNSTvSddsrx477j3+OPw2zqmqbaWti5099L1d0d3trMjIGJgYys1KmpUxlznHN0\nN3WzuW0zm1s3s7ltM6tqV+keKRERERGRAlnRZ65mZ+GJJ3yW6tix9PiWLT6geuMbfUv1QptbmOP1\n0dc5MnyE10Ze48jIEWbiMxlzqiuq2dS6ic2tm9nUuolNrZuorawt/GJFREREREqMzlzliJkPpB5+\nGA4c8GWAAPX16SxVZ2dh1zQyM5KRleod6w20Qm+rbVvKSm1p20JXUxcRFynsQkVERERE5LxWTHA1\nM+ODqX37oLc3PX7NNf4s1S23QGVl/teRtCT94/0cHj68FFANzwxnzIm4COub17OlbctSQNVa25r/\n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\nAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 37 + }, { "cell_type": "markdown", "metadata": {}, diff --git a/pandas_sum_tricks.ipynb b/pandas_sum_tricks.ipynb new file mode 100644 index 0000000..ccf454e --- /dev/null +++ b/pandas_sum_tricks.ipynb @@ -0,0 +1,450 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:8222de4af96dc6569eddec8d75df6855e8bac273e12e8739fffc42aafd712ba2" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%load_ext watermark \n", + "%watermark -d -v -a 'Sebastian Raschka' -p numpy,pandas" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Sebastian Raschka 23/12/2014 \n", + "\n", + "CPython 3.4.2\n", + "IPython 2.3.1\n", + "\n", + "numpy 1.9.1\n", + "pandas 0.15.2\n" + ] + } + ], + "prompt_number": 1 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "4 Simple Tricks To Speed up the Sum Calculation in Pandas" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I wanted to improve the performance of some passages in my code a little bit and found that some simple tweaks can speed up the `pandas` section significantly. I thought that it might be one useful thing to share -- and no Cython or just-in-time compilation is required! " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In my case, I had a large dataframe where I wanted to calculate the sum of specific columns for different combinations of rows (approx. 100,000,000 of them, that's why I was looking for ways to speed it up). Anyway, below is a simple toy DataFrame to explore the `.sum()` method a little bit." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "df = pd.DataFrame()\n", + "\n", + "for col in ('a', 'b', 'c', 'd'):\n", + " df[col] = pd.Series(range(1000), index=range(1000))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "df.tail()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    abcd
    995 995 995 995 995
    996 996 996 996 996
    997 997 997 997 997
    998 998 998 998 998
    999 999 999 999 999
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 3, + "text": [ + " a b c d\n", + "995 995 995 995 995\n", + "996 996 996 996 996\n", + "997 997 997 997 997\n", + "998 998 998 998 998\n", + "999 999 999 999 999" + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's assume we are interested in calculating the sum of column `a`, `c`, and `d`, which would look like this:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "df.loc[:, ['a', 'c', 'd']].sum(axis=0)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 4, + "text": [ + "a 499500\n", + "c 499500\n", + "d 499500\n", + "dtype: int64" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, the `.loc` method is probably the most \"costliest\" one for this kind of operation. Since we are only intersted in the resulting numbers (i.e., the column sums), there is no need to make a copy of the array. Anyway, let's use the method above as a reference for comparison:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# 1\n", + "%timeit -n 1000 -r 5 df.loc[:, ['a', 'c', 'd']].sum(axis=0)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1000 loops, best of 5: 1.28 ms per loop\n" + ] + } + ], + "prompt_number": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Although this is a rather small DataFrame (1000 x 4), let's see by how much we can speed it up using a different slicing method:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# 2\n", + "%timeit -n 1000 -r 5 df[['a', 'c', 'd']].sum(axis=0)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1000 loops, best of 5: 1.03 ms per loop\n" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, let us use the Numpy representation of the `NDFrame` via the `.values` attribue:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# 3\n", + "%timeit -n 1000 -r 5 df[['a', 'c', 'd']].values.sum(axis=0)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1000 loops, best of 5: 721 \u00b5s per loop\n" + ] + } + ], + "prompt_number": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "While the speed improvements in #2 and #3 were not really a surprise, the next \"trick\" surprised me a little bit. Here, we are calculating the sum of each column separately rather than slicing the array." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "[df[col].values.sum(axis=0) for col in ('a', 'c', 'd')]" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 8, + "text": [ + "[499500, 499500, 499500]" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# 4\n", + "%timeit -n 1000 -r 5 [df[col].values.sum(axis=0) for col in ('a', 'c', 'd')]" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1000 loops, best of 5: 64.8 \u00b5s per loop\n" + ] + } + ], + "prompt_number": 9 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this case, this is an almost 10x improvement!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One more thing: Let's try the Einstein summation convention [`einsum`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.einsum.html)." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from numpy import einsum\n", + "[einsum('i->', df[col].values) for col in ('a', 'c', 'd')]" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 10, + "text": [ + "[499500, 499500, 499500]" + ] + } + ], + "prompt_number": 10 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# 5\n", + "%timeit -n 1000 -r 5 [einsum('i->', df[col].values) for col in ('a', 'c', 'd')]" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1000 loops, best of 5: 57.2 \u00b5s per loop\n" + ] + } + ], + "prompt_number": 11 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Conclusion:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using some simple tricks, the column sum calculation improved from 1280 to 57.2 \u00b5s per loop (approx. 22x faster!)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file From 044d334ef9f6f910f7fe46dd0b54209d41b661c0 Mon Sep 17 00:00:00 2001 From: rasbt Date: Mon, 29 Dec 2014 00:26:25 -0500 Subject: [PATCH 200/248] function to process first and last names --- useful_scripts/preprocess_first_last_names.py | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 useful_scripts/preprocess_first_last_names.py diff --git a/useful_scripts/preprocess_first_last_names.py b/useful_scripts/preprocess_first_last_names.py new file mode 100644 index 0000000..07d36f3 --- /dev/null +++ b/useful_scripts/preprocess_first_last_names.py @@ -0,0 +1,82 @@ +# Sebastian Raschka 2014 +# +# A Python function to generalize first and last names. +# The typical use case of such a function to merge data that have been collected +# from different sources (e.g., names of soccer players as shown in the doctest.) +# + +import unicodedata +import string +import re + +def preprocess_names(name, output_sep=' ', firstname_output_letters=1): + """ + Function that outputs a person's name in the format + (all lowercase) + + >>> preprocess_names("Samuel Eto'o") + 'etoo s' + + >>> preprocess_names("Eto'o, Samuel") + 'etoo s' + + >>> preprocess_names("Eto'o,Samuel") + 'etoo s' + + >>> preprocess_names('Xavi') + 'xavi' + + >>> preprocess_names('Yaya Touré') + 'toure y' + + >>> preprocess_names('José Ángel Pozo') + 'pozo j' + + >>> preprocess_names('Pozo, José Ángel') + 'pozo j' + + >>> preprocess_names('Pozo, José Ángel', firstname_output_letters=2) + 'pozo jo' + + >>> preprocess_names("Eto'o, Samuel", firstname_output_letters=2) + 'etoo sa' + + >>> preprocess_names("Eto'o, Samuel", firstname_output_letters=0) + 'etoo' + + >>> preprocess_names("Eto'o, Samuel", output_sep=', ') + 'etoo, s' + + """ + + # set first and last name positions + last, first = 'last', 'first' + last_pos = -1 + + if ',' in name: + last, first = first, last + name = name.replace(',', ' ') + last_pos = 1 + + spl = name.split() + if len(spl) > 2: + name = '%s %s' % (spl[0], spl[last_pos]) + + spl1, *spl2 = name.split() + '%s %s' % (spl1, ''.join(spl2)) + + # remove accents + name = ''.join(x for x in unicodedata.normalize('NFKD', name) if x in string.ascii_letters+' ') + + # get first and last name if applicable + m = re.match('(?P\w+)\W+(?P\w+)', name) + if m: + output = '%s%s%s' % (m.group(last), output_sep, m.group(first)[:firstname_output_letters]) + else: + output = name + return output.lower().strip() + + +if __name__ == "__main__": + import doctest + doctest.testmod() \ No newline at end of file From 7d879b4e336fc6512fa81157101fb8bce8c2b4fd Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 30 Dec 2014 16:57:12 -0500 Subject: [PATCH 201/248] removed redundant lines --- useful_scripts/preprocess_first_last_names.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/useful_scripts/preprocess_first_last_names.py b/useful_scripts/preprocess_first_last_names.py index 07d36f3..b0957c2 100644 --- a/useful_scripts/preprocess_first_last_names.py +++ b/useful_scripts/preprocess_first_last_names.py @@ -62,9 +62,6 @@ def preprocess_names(name, output_sep=' ', firstname_output_letters=1): if len(spl) > 2: name = '%s %s' % (spl[0], spl[last_pos]) - spl1, *spl2 = name.split() - '%s %s' % (spl1, ''.join(spl2)) - # remove accents name = ''.join(x for x in unicodedata.normalize('NFKD', name) if x in string.ascii_letters+' ') @@ -79,4 +76,4 @@ def preprocess_names(name, output_sep=' ', firstname_output_letters=1): if __name__ == "__main__": import doctest - doctest.testmod() \ No newline at end of file + doctest.testmod() From 75c8f46f4aa40121d58d96ab5aaa7653c1af227a Mon Sep 17 00:00:00 2001 From: rasbt Date: Thu, 1 Jan 2015 20:14:07 -0500 Subject: [PATCH 202/248] find files --- useful_scripts/find_file.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 useful_scripts/find_file.py diff --git a/useful_scripts/find_file.py b/useful_scripts/find_file.py new file mode 100644 index 0000000..8cbcc4d --- /dev/null +++ b/useful_scripts/find_file.py @@ -0,0 +1,18 @@ +# Sebastian Raschka 2014 +# +# A Python function to find files in a directory based on a substring search. + + +import os + +def find_files(substring, path): + results = [] + for f in os.listdir(path): + if substring in f: + results.append(os.path.join(path, f)) + return results + +# E.g. +# find_files('Untitled', '/Users/sebastian/Desktop/') +# returns +# ['/Users/sebastian/Desktop/Untitled0.ipynb'] \ No newline at end of file From 6b3a7e282b33edae6877d009bc1ab29600f25c79 Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 23 Jan 2015 23:20:17 -0500 Subject: [PATCH 203/248] some soccer data --- Data/some_soccer_data.csv | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Data/some_soccer_data.csv diff --git a/Data/some_soccer_data.csv b/Data/some_soccer_data.csv new file mode 100644 index 0000000..7966d52 --- /dev/null +++ b/Data/some_soccer_data.csv @@ -0,0 +1,21 @@ +PLAYER,SALARY,GP,G,A,SOT,PPG,P +"Sergio Agüero + Forward — Manchester City",$19.2m,16,14,3,34,13.12,209.98 +"Eden Hazard + Midfield — Chelsea",$18.9m,21,8,4,17,13.05,274.04 +"Alexis Sánchez + Forward — Arsenal",$17.6m,20,12,7,29,11.19,223.86 +"Yaya Touré + Midfield — Manchester City",$16.6m,18,7,1,19,10.99,197.91 +"Ángel Di María + Midfield — Manchester United",$15.0m,13,3,6,13,10.17,132.23 +"Santiago Cazorla + Midfield — Arsenal",$14.8m,20,4,3,20,9.97,199.49 +"David Silva + Midfield — Manchester City",$14.3m,15,6,2,11,10.35,155.26 +"Cesc Fàbregas + Midfield — Chelsea",$14.0m,20,2,14,10,10.47,209.49 +"Saido Berahino + Forward — West Brom",$13.8m,21,9,0,20,7.02,147.43 +"Steven Gerrard + Midfield — Liverpool",$13.8m,20,5,1,11,7.5,150.01 \ No newline at end of file From d9c2ca8b66727b2391b35a974b39fbe420ca8c19 Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 23 Jan 2015 23:38:27 -0500 Subject: [PATCH 204/248] some soccer data for pandas tutorial --- Data/some_soccer_data.csv | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Data/some_soccer_data.csv b/Data/some_soccer_data.csv index 7966d52..c2cdab8 100644 --- a/Data/some_soccer_data.csv +++ b/Data/some_soccer_data.csv @@ -1,21 +1,21 @@ -PLAYER,SALARY,GP,G,A,SOT,PPG,P +PLAYER,SALARY,GP,G,A,SOT,PPG,P "Sergio Agüero - Forward — Manchester City",$19.2m,16,14,3,34,13.12,209.98 + Forward — Manchester City",$19.2m,16,14,3,34,13.12,209.98 "Eden Hazard - Midfield — Chelsea",$18.9m,21,8,4,17,13.05,274.04 + Midfield — Chelsea",$18.9m,21,8,4,17,13.05,274.04 "Alexis Sánchez - Forward — Arsenal",$17.6m,20,12,7,29,11.19,223.86 + Forward — Arsenal",$17.6m,,12,7,29,11.19,223.86 "Yaya Touré - Midfield — Manchester City",$16.6m,18,7,1,19,10.99,197.91 + Midfield — Manchester City",$16.6m,18,7,1,19,10.99,197.91 "Ángel Di María - Midfield — Manchester United",$15.0m,13,3,6,13,10.17,132.23 + Midfield — Manchester United",$15.0m,13,3,,13,10.17,132.23 "Santiago Cazorla - Midfield — Arsenal",$14.8m,20,4,3,20,9.97,199.49 + Midfield — Arsenal",$14.8m,20,4,,20,9.97, "David Silva - Midfield — Manchester City",$14.3m,15,6,2,11,10.35,155.26 + Midfield — Manchester City",$14.3m,15,6,2,11,10.35,155.26 "Cesc Fàbregas - Midfield — Chelsea",$14.0m,20,2,14,10,10.47,209.49 + Midfield — Chelsea",$14.0m,20,2,14,10,10.47,209.49 "Saido Berahino - Forward — West Brom",$13.8m,21,9,0,20,7.02,147.43 + Forward — West Brom",$13.8m,21,9,0,20,7.02,147.43 "Steven Gerrard - Midfield — Liverpool",$13.8m,20,5,1,11,7.5,150.01 \ No newline at end of file + Midfield — Liverpool",$13.8m,20,5,1,11,7.5,150.01 From 4edb98e53e3639c566c221cec9fa36aea82034f0 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 24 Jan 2015 00:03:50 -0500 Subject: [PATCH 205/248] pandas snippets --- README.md | 4 + tutorials/classifiers.pkl | Bin 2453 -> 0 bytes tutorials/cython_bubblesort_nomagic.c | 19147 ---------------------- tutorials/cython_bubblesort_nomagic.pyx | 21 - tutorials/example.csv | 3 - tutorials/hello_world.py | 3 - tutorials/setup.py | 14 - tutorials/standardized_data.pkl | Bin 20263 -> 0 bytes tutorials/test_set.csv | 54 - tutorials/things_in_pandas.ipynb | 1770 ++ tutorials/training_set.csv | 124 - tutorials/wine_data.csv | 178 - 12 files changed, 1774 insertions(+), 19544 deletions(-) delete mode 100644 tutorials/classifiers.pkl delete mode 100644 tutorials/cython_bubblesort_nomagic.c delete mode 100644 tutorials/cython_bubblesort_nomagic.pyx delete mode 100644 tutorials/example.csv delete mode 100644 tutorials/hello_world.py delete mode 100644 tutorials/setup.py delete mode 100644 tutorials/standardized_data.pkl delete mode 100644 tutorials/test_set.csv create mode 100644 tutorials/things_in_pandas.ipynb delete mode 100644 tutorials/training_set.csv delete mode 100644 tutorials/wine_data.csv diff --git a/README.md b/README.md index e880d27..2ec57f6 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,10 @@ - A random collection of useful Python snippets [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/python_patterns/patterns.ipynb)] +- Things in pandas I wish I'd had known earlier [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/things_in_pandas.ipynb)] + + +
    diff --git a/tutorials/classifiers.pkl b/tutorials/classifiers.pkl deleted file mode 100644 index 1272af5379477528ccd2e994c314d3b43328e07a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2453 zcmaJ@eN+_J6<@v-SCJ2iU*HGCDnvj81Qx+JxEKtpsH@Rc0+X5DS$1)m**h}}LJTnx z5e!wTL?ubJCpI4@610j2(aa!5Jlasj21LUVG#WvgqoM{{deWKM#h$h&eShrR_vXF( ze)rzr@4mOiBO6pM)&~ z&SM*lbuBdUMRrOJ;|%W7S>{CW(W!K9+hM#Oe8Y4e1~+Lo8T>LcGc$gXn)0Jl@!(HZ zXeTHA_#xM-=|EWnn~LgUn+CwEhd5lVXfV|pf$J89}MdX8$8jtPggoJ@zMFWv-LJqb1T;1+|;nmJVzndGeSJ<3= z=nqSi`-Sxxm4Ed0ypLcC4^v5lT8e^|<|)=l*?Am-M#2y*hhdr?rn?d{Lk_~^i%`CD z-P~X?!F(|F^qH~ZRX@*xWJ9C~GkFLh4WlGu`4mA*@eCa?^rCENmL7hi7}EKa!EDLY z;zTKRLTC>eUc&}UD{l!^Cn}4N?D!T@roBgP!CgYJzmKhVs7dGy zNGMtL*-0TPHmqlf>I>x6x&I@#i=PPRH)6%1uk;BYT+E!iZ`yU#ec`hD-APSo%Dt9? zgO`64;`5r#N!!~Hih5do?Ce9-S{P9nQq_iD8|@z3n|K%X?ag_sYS|HVp?q>d%g#qa zZk=}~yYiV(5EnNzYTbPlJVT?qQrssb?wQ$Zui4f%!&pbUuOX9KouWaVa zvXM0Sh#NU_fqZ1V9uk}>mL!uXvn9G@{nr=Xi5(*r zqWHD~{Act{=j2Juoa?A>?ZRnUKJH@pn!)--jR9DYXGV@=w+aId4@sn9oOA+>8<~7N zLsK-*!NN?1Ss3D@|jYkb7jZ*ldPoZq*M*gbXz7W1Gb9pt~OrInVdCZ5ljC|eZAGe!%+ z@m3?A%MvE5NOdCwjOd^=y4?= zIhl0Tlmx995zlYdH-?KHx3Y$3m97-wbsh-P@|?e5=VqWWEwjn(QJ85h?aQ4d(anbExQp)zt!WP~Ne*4_-=ZKqp zu9o3FA>yQ%!s?quI2KUbkTNtx7f4g=94!LhKqfS@1j^vgJlICFx8xh5n0pw)jQ9=D25&^AAjp{hzMpLa-Aj0 zHXmmR-pYU_9W}=)&EP39h2n{5u%F9k+9;u< zf&CQ`=bCV{Bx3ba$(Hma;nLAVC-!Z?>%pPCMYK@xd|GkRCYgpph5r_LA8b-+&r0fM m6n#jLik!5!Q#4`Yi=bGEge?Z%aM9f=-OjLC=j9-&sDA;7_lHja diff --git a/tutorials/cython_bubblesort_nomagic.c b/tutorials/cython_bubblesort_nomagic.c deleted file mode 100644 index 028e020..0000000 --- a/tutorials/cython_bubblesort_nomagic.c +++ /dev/null @@ -1,19147 +0,0 @@ -/* Generated by Cython 0.20.2 on Sun Jul 6 22:33:02 2014 */ - -#define PY_SSIZE_T_CLEAN -#ifndef CYTHON_USE_PYLONG_INTERNALS -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 0 -#else -#include "pyconfig.h" -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 1 -#else -#define CYTHON_USE_PYLONG_INTERNALS 0 -#endif -#endif -#endif -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02040000 - #error Cython requires Python 2.4+. -#else -#define CYTHON_ABI "0_20_2" -#include /* For offsetof */ -#ifndef offsetof -#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION -#define CYTHON_COMPILING_IN_PYPY 1 -#define CYTHON_COMPILING_IN_CPYTHON 0 -#else -#define CYTHON_COMPILING_IN_PYPY 0 -#define CYTHON_COMPILING_IN_CPYTHON 1 -#endif -#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 -#define Py_OptimizeFlag 0 -#endif -#if PY_VERSION_HEX < 0x02050000 - typedef int Py_ssize_t; - #define PY_SSIZE_T_MAX INT_MAX - #define PY_SSIZE_T_MIN INT_MIN - #define PY_FORMAT_SIZE_T "" - #define CYTHON_FORMAT_SSIZE_T "" - #define PyInt_FromSsize_t(z) PyInt_FromLong(z) - #define PyInt_AsSsize_t(o) __Pyx_PyInt_As_int(o) - #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ - (PyErr_Format(PyExc_TypeError, \ - "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ - (PyObject*)0)) - #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ - !PyComplex_Check(o)) - #define PyIndex_Check __Pyx_PyIndex_Check - #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) - #define __PYX_BUILD_PY_SSIZE_T "i" -#else - #define __PYX_BUILD_PY_SSIZE_T "n" - #define CYTHON_FORMAT_SSIZE_T "z" - #define __Pyx_PyIndex_Check PyIndex_Check -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) - #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) - #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) - #define PyVarObject_HEAD_INIT(type, size) \ - PyObject_HEAD_INIT(type) size, - #define PyType_Modified(t) - typedef struct { - void *buf; - PyObject *obj; - Py_ssize_t len; - Py_ssize_t itemsize; - int readonly; - int ndim; - char *format; - Py_ssize_t *shape; - Py_ssize_t *strides; - Py_ssize_t *suboffsets; - void *internal; - } Py_buffer; - #define PyBUF_SIMPLE 0 - #define PyBUF_WRITABLE 0x0001 - #define PyBUF_FORMAT 0x0004 - #define PyBUF_ND 0x0008 - #define PyBUF_STRIDES (0x0010 | PyBUF_ND) - #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) - #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) - #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) - #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) - #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) - #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) - typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); - typedef void (*releasebufferproc)(PyObject *, Py_buffer *); -#endif -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyType_Type -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") -#endif -#if PY_MAJOR_VERSION >= 3 - #define Py_TPFLAGS_CHECKTYPES 0 - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_TPFLAGS_HAVE_VERSION_TAG 0 -#endif -#if PY_VERSION_HEX < 0x02060000 && !defined(Py_TPFLAGS_IS_ABSTRACT) - #define Py_TPFLAGS_IS_ABSTRACT 0 -#endif -#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE) - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) -#else - #define CYTHON_PEP393_ENABLED 0 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyBytesObject PyStringObject - #define PyBytes_Type PyString_Type - #define PyBytes_Check PyString_Check - #define PyBytes_CheckExact PyString_CheckExact - #define PyBytes_FromString PyString_FromString - #define PyBytes_FromStringAndSize PyString_FromStringAndSize - #define PyBytes_FromFormat PyString_FromFormat - #define PyBytes_DecodeEscape PyString_DecodeEscape - #define PyBytes_AsString PyString_AsString - #define PyBytes_AsStringAndSize PyString_AsStringAndSize - #define PyBytes_Size PyString_Size - #define PyBytes_AS_STRING PyString_AS_STRING - #define PyBytes_GET_SIZE PyString_GET_SIZE - #define PyBytes_Repr PyString_Repr - #define PyBytes_Concat PyString_Concat - #define PyBytes_ConcatAndDel PyString_ConcatAndDel -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ - PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) - #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) - #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) - #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) -#else - #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) - #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) -#else - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_NAMESTR(n) ((char *)(n)) - #define __Pyx_DOCSTR(n) ((char *)(n)) -#else - #define __Pyx_NAMESTR(n) (n) - #define __Pyx_DOCSTR(n) (n) -#endif -#ifndef CYTHON_INLINE - #if defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and - a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is - a quiet NaN. */ - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif -#ifdef __cplusplus -template -void __Pyx_call_destructor(T* x) { - x->~T(); -} -#endif - - -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) -#define _USE_MATH_DEFINES -#endif -#include -#define __PYX_HAVE__cython_bubblesort_nomagic -#define __PYX_HAVE_API__cython_bubblesort_nomagic -#include "string.h" -#include "stdio.h" -#include "stdlib.h" -#include "numpy/arrayobject.h" -#include "numpy/ufuncobject.h" -#include "pythread.h" -#include "pystate.h" -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#ifdef PYREX_WITHOUT_ASSERTIONS -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) ( \ - (sizeof(type) < sizeof(Py_ssize_t)) || \ - (sizeof(type) > sizeof(Py_ssize_t) && \ - likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX) && \ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN || \ - v == (type)PY_SSIZE_T_MIN))) || \ - (sizeof(type) == sizeof(Py_ssize_t) && \ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyObject_AsSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((const char*)s) -#define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((const char*)s) -#define __Pyx_PyByteArray_FromUString(s) __Pyx_PyByteArray_FromString((const char*)s) -#define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((const char*)s) -#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((const char*)s) -#if PY_MAJOR_VERSION < 3 -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) -{ - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return (size_t)(u_end - u - 1); -} -#else -#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen -#endif -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) -#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_COMPILING_IN_CPYTHON -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - const char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - if (strcmp(default_encoding_c, "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (!ascii_chars_u) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - Py_DECREF(ascii_chars_u); - Py_DECREF(ascii_chars_b); - } - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); - if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -/* Test for GCC > 2.95 */ -#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) -#else /* !__GNUC__ or GCC < 2.95 */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ - -static PyObject *__pyx_m; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - -#if !defined(CYTHON_CCOMPLEX) - #if defined(__cplusplus) - #define CYTHON_CCOMPLEX 1 - #elif defined(_Complex_I) - #define CYTHON_CCOMPLEX 1 - #else - #define CYTHON_CCOMPLEX 0 - #endif -#endif -#if CYTHON_CCOMPLEX - #ifdef __cplusplus - #include - #else - #include - #endif -#endif -#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__) - #undef _Complex_I - #define _Complex_I 1.0fj -#endif - - -static const char *__pyx_f[] = { - "cython_bubblesort_nomagic.pyx", - "__init__.pxd", - "stringsource", - "type.pxd", -}; -#define IS_UNSIGNED(type) (((type) -1) > 0) -struct __Pyx_StructField_; -#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0) -typedef struct { - const char* name; /* for error messages only */ - struct __Pyx_StructField_* fields; - size_t size; /* sizeof(type) */ - size_t arraysize[8]; /* length of array in each dimension */ - int ndim; - char typegroup; /* _R_eal, _C_omplex, Signed _I_nt, _U_nsigned int, _S_truct, _P_ointer, _O_bject, c_H_ar */ - char is_unsigned; - int flags; -} __Pyx_TypeInfo; -typedef struct __Pyx_StructField_ { - __Pyx_TypeInfo* type; - const char* name; - size_t offset; -} __Pyx_StructField; -typedef struct { - __Pyx_StructField* field; - size_t parent_offset; -} __Pyx_BufFmt_StackElem; -typedef struct { - __Pyx_StructField root; - __Pyx_BufFmt_StackElem* head; - size_t fmt_offset; - size_t new_count, enc_count; - size_t struct_alignment; - int is_complex; - char enc_type; - char new_packmode; - char enc_packmode; - char is_valid_array; -} __Pyx_BufFmt_Context; - -struct __pyx_memoryview_obj; -typedef struct { - struct __pyx_memoryview_obj *memview; - char *data; - Py_ssize_t shape[8]; - Py_ssize_t strides[8]; - Py_ssize_t suboffsets[8]; -} __Pyx_memviewslice; - -#include -#ifndef CYTHON_ATOMICS - #define CYTHON_ATOMICS 1 -#endif -#define __pyx_atomic_int_type int -#if CYTHON_ATOMICS && __GNUC__ >= 4 && (__GNUC_MINOR__ > 1 || \ - (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL >= 2)) && \ - !defined(__i386__) - #define __pyx_atomic_incr_aligned(value, lock) __sync_fetch_and_add(value, 1) - #define __pyx_atomic_decr_aligned(value, lock) __sync_fetch_and_sub(value, 1) - #ifdef __PYX_DEBUG_ATOMICS - #warning "Using GNU atomics" - #endif -#elif CYTHON_ATOMICS && MSC_VER - #include - #define __pyx_atomic_int_type LONG - #define __pyx_atomic_incr_aligned(value, lock) InterlockedIncrement(value) - #define __pyx_atomic_decr_aligned(value, lock) InterlockedDecrement(value) - #ifdef __PYX_DEBUG_ATOMICS - #warning "Using MSVC atomics" - #endif -#elif CYTHON_ATOMICS && (defined(__ICC) || defined(__INTEL_COMPILER)) && 0 - #define __pyx_atomic_incr_aligned(value, lock) _InterlockedIncrement(value) - #define __pyx_atomic_decr_aligned(value, lock) _InterlockedDecrement(value) - #ifdef __PYX_DEBUG_ATOMICS - #warning "Using Intel atomics" - #endif -#else - #undef CYTHON_ATOMICS - #define CYTHON_ATOMICS 0 - #ifdef __PYX_DEBUG_ATOMICS - #warning "Not using atomics" - #endif -#endif -typedef volatile __pyx_atomic_int_type __pyx_atomic_int; -#if CYTHON_ATOMICS - #define __pyx_add_acquisition_count(memview) \ - __pyx_atomic_incr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock) - #define __pyx_sub_acquisition_count(memview) \ - __pyx_atomic_decr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock) -#else - #define __pyx_add_acquisition_count(memview) \ - __pyx_add_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) - #define __pyx_sub_acquisition_count(memview) \ - __pyx_sub_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) -#endif - - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":723 - * # in Cython to enable them only on the right systems. - * - * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< - * ctypedef npy_int16 int16_t - * ctypedef npy_int32 int32_t - */ -typedef npy_int8 __pyx_t_5numpy_int8_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":724 - * - * ctypedef npy_int8 int8_t - * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< - * ctypedef npy_int32 int32_t - * ctypedef npy_int64 int64_t - */ -typedef npy_int16 __pyx_t_5numpy_int16_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":725 - * ctypedef npy_int8 int8_t - * ctypedef npy_int16 int16_t - * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< - * ctypedef npy_int64 int64_t - * #ctypedef npy_int96 int96_t - */ -typedef npy_int32 __pyx_t_5numpy_int32_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":726 - * ctypedef npy_int16 int16_t - * ctypedef npy_int32 int32_t - * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< - * #ctypedef npy_int96 int96_t - * #ctypedef npy_int128 int128_t - */ -typedef npy_int64 __pyx_t_5numpy_int64_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":730 - * #ctypedef npy_int128 int128_t - * - * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< - * ctypedef npy_uint16 uint16_t - * ctypedef npy_uint32 uint32_t - */ -typedef npy_uint8 __pyx_t_5numpy_uint8_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":731 - * - * ctypedef npy_uint8 uint8_t - * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< - * ctypedef npy_uint32 uint32_t - * ctypedef npy_uint64 uint64_t - */ -typedef npy_uint16 __pyx_t_5numpy_uint16_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":732 - * ctypedef npy_uint8 uint8_t - * ctypedef npy_uint16 uint16_t - * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< - * ctypedef npy_uint64 uint64_t - * #ctypedef npy_uint96 uint96_t - */ -typedef npy_uint32 __pyx_t_5numpy_uint32_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":733 - * ctypedef npy_uint16 uint16_t - * ctypedef npy_uint32 uint32_t - * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< - * #ctypedef npy_uint96 uint96_t - * #ctypedef npy_uint128 uint128_t - */ -typedef npy_uint64 __pyx_t_5numpy_uint64_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":737 - * #ctypedef npy_uint128 uint128_t - * - * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< - * ctypedef npy_float64 float64_t - * #ctypedef npy_float80 float80_t - */ -typedef npy_float32 __pyx_t_5numpy_float32_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":738 - * - * ctypedef npy_float32 float32_t - * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< - * #ctypedef npy_float80 float80_t - * #ctypedef npy_float128 float128_t - */ -typedef npy_float64 __pyx_t_5numpy_float64_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":747 - * # The int types are mapped a bit surprising -- - * # numpy.int corresponds to 'l' and numpy.long to 'q' - * ctypedef npy_long int_t # <<<<<<<<<<<<<< - * ctypedef npy_longlong long_t - * ctypedef npy_longlong longlong_t - */ -typedef npy_long __pyx_t_5numpy_int_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":748 - * # numpy.int corresponds to 'l' and numpy.long to 'q' - * ctypedef npy_long int_t - * ctypedef npy_longlong long_t # <<<<<<<<<<<<<< - * ctypedef npy_longlong longlong_t - * - */ -typedef npy_longlong __pyx_t_5numpy_long_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":749 - * ctypedef npy_long int_t - * ctypedef npy_longlong long_t - * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< - * - * ctypedef npy_ulong uint_t - */ -typedef npy_longlong __pyx_t_5numpy_longlong_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":751 - * ctypedef npy_longlong longlong_t - * - * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< - * ctypedef npy_ulonglong ulong_t - * ctypedef npy_ulonglong ulonglong_t - */ -typedef npy_ulong __pyx_t_5numpy_uint_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":752 - * - * ctypedef npy_ulong uint_t - * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< - * ctypedef npy_ulonglong ulonglong_t - * - */ -typedef npy_ulonglong __pyx_t_5numpy_ulong_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":753 - * ctypedef npy_ulong uint_t - * ctypedef npy_ulonglong ulong_t - * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< - * - * ctypedef npy_intp intp_t - */ -typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":755 - * ctypedef npy_ulonglong ulonglong_t - * - * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< - * ctypedef npy_uintp uintp_t - * - */ -typedef npy_intp __pyx_t_5numpy_intp_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":756 - * - * ctypedef npy_intp intp_t - * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< - * - * ctypedef npy_double float_t - */ -typedef npy_uintp __pyx_t_5numpy_uintp_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":758 - * ctypedef npy_uintp uintp_t - * - * ctypedef npy_double float_t # <<<<<<<<<<<<<< - * ctypedef npy_double double_t - * ctypedef npy_longdouble longdouble_t - */ -typedef npy_double __pyx_t_5numpy_float_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":759 - * - * ctypedef npy_double float_t - * ctypedef npy_double double_t # <<<<<<<<<<<<<< - * ctypedef npy_longdouble longdouble_t - * - */ -typedef npy_double __pyx_t_5numpy_double_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":760 - * ctypedef npy_double float_t - * ctypedef npy_double double_t - * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< - * - * ctypedef npy_cfloat cfloat_t - */ -typedef npy_longdouble __pyx_t_5numpy_longdouble_t; -#if CYTHON_CCOMPLEX - #ifdef __cplusplus - typedef ::std::complex< float > __pyx_t_float_complex; - #else - typedef float _Complex __pyx_t_float_complex; - #endif -#else - typedef struct { float real, imag; } __pyx_t_float_complex; -#endif - -#if CYTHON_CCOMPLEX - #ifdef __cplusplus - typedef ::std::complex< double > __pyx_t_double_complex; - #else - typedef double _Complex __pyx_t_double_complex; - #endif -#else - typedef struct { double real, imag; } __pyx_t_double_complex; -#endif - - -/*--- Type declarations ---*/ -struct __pyx_array_obj; -struct __pyx_MemviewEnum_obj; -struct __pyx_memoryview_obj; -struct __pyx_memoryviewslice_obj; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":762 - * ctypedef npy_longdouble longdouble_t - * - * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< - * ctypedef npy_cdouble cdouble_t - * ctypedef npy_clongdouble clongdouble_t - */ -typedef npy_cfloat __pyx_t_5numpy_cfloat_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":763 - * - * ctypedef npy_cfloat cfloat_t - * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< - * ctypedef npy_clongdouble clongdouble_t - * - */ -typedef npy_cdouble __pyx_t_5numpy_cdouble_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":764 - * ctypedef npy_cfloat cfloat_t - * ctypedef npy_cdouble cdouble_t - * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< - * - * ctypedef npy_cdouble complex_t - */ -typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":766 - * ctypedef npy_clongdouble clongdouble_t - * - * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< - * - * cdef inline object PyArray_MultiIterNew1(a): - */ -typedef npy_cdouble __pyx_t_5numpy_complex_t; - -/* "View.MemoryView":99 - * - * @cname("__pyx_array") - * cdef class array: # <<<<<<<<<<<<<< - * - * cdef: - */ -struct __pyx_array_obj { - PyObject_HEAD - char *data; - Py_ssize_t len; - char *format; - int ndim; - Py_ssize_t *_shape; - Py_ssize_t *_strides; - Py_ssize_t itemsize; - PyObject *mode; - PyObject *_format; - void (*callback_free_data)(void *); - int free_data; - int dtype_is_object; -}; - - -/* "View.MemoryView":269 - * - * @cname('__pyx_MemviewEnum') - * cdef class Enum(object): # <<<<<<<<<<<<<< - * cdef object name - * def __init__(self, name): - */ -struct __pyx_MemviewEnum_obj { - PyObject_HEAD - PyObject *name; -}; - - -/* "View.MemoryView":302 - * - * @cname('__pyx_memoryview') - * cdef class memoryview(object): # <<<<<<<<<<<<<< - * - * cdef object obj - */ -struct __pyx_memoryview_obj { - PyObject_HEAD - struct __pyx_vtabstruct_memoryview *__pyx_vtab; - PyObject *obj; - PyObject *_size; - PyObject *_array_interface; - PyThread_type_lock lock; - __pyx_atomic_int acquisition_count[2]; - __pyx_atomic_int *acquisition_count_aligned_p; - Py_buffer view; - int flags; - int dtype_is_object; - __Pyx_TypeInfo *typeinfo; -}; - - -/* "View.MemoryView":922 - * - * @cname('__pyx_memoryviewslice') - * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< - * "Internal class for passing memoryview slices to Python" - * - */ -struct __pyx_memoryviewslice_obj { - struct __pyx_memoryview_obj __pyx_base; - __Pyx_memviewslice from_slice; - PyObject *from_object; - PyObject *(*to_object_func)(char *); - int (*to_dtype_func)(char *, PyObject *); -}; - - - -/* "View.MemoryView":302 - * - * @cname('__pyx_memoryview') - * cdef class memoryview(object): # <<<<<<<<<<<<<< - * - * cdef object obj - */ - -struct __pyx_vtabstruct_memoryview { - char *(*get_item_pointer)(struct __pyx_memoryview_obj *, PyObject *); - PyObject *(*is_slice)(struct __pyx_memoryview_obj *, PyObject *); - PyObject *(*setitem_slice_assignment)(struct __pyx_memoryview_obj *, PyObject *, PyObject *); - PyObject *(*setitem_slice_assign_scalar)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *); - PyObject *(*setitem_indexed)(struct __pyx_memoryview_obj *, PyObject *, PyObject *); - PyObject *(*convert_item_to_object)(struct __pyx_memoryview_obj *, char *); - PyObject *(*assign_item_from_object)(struct __pyx_memoryview_obj *, char *, PyObject *); -}; -static struct __pyx_vtabstruct_memoryview *__pyx_vtabptr_memoryview; - - -/* "View.MemoryView":922 - * - * @cname('__pyx_memoryviewslice') - * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< - * "Internal class for passing memoryview slices to Python" - * - */ - -struct __pyx_vtabstruct__memoryviewslice { - struct __pyx_vtabstruct_memoryview __pyx_base; -}; -static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice; -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - if (acquire_gil) { \ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - PyGILState_Release(__pyx_gilstate_save); \ - } else { \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext() \ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif /* CYTHON_REFNANNY */ -#define __Pyx_XDECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_XDECREF(tmp); \ - } while (0) -#define __Pyx_DECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_DECREF(tmp); \ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ - -static CYTHON_INLINE int __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* obj, - __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack); -static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); - -#define __Pyx_BUF_MAX_NDIMS %(BUF_MAX_NDIMS)d -#define __Pyx_MEMVIEW_DIRECT 1 -#define __Pyx_MEMVIEW_PTR 2 -#define __Pyx_MEMVIEW_FULL 4 -#define __Pyx_MEMVIEW_CONTIG 8 -#define __Pyx_MEMVIEW_STRIDED 16 -#define __Pyx_MEMVIEW_FOLLOW 32 -#define __Pyx_IS_C_CONTIG 1 -#define __Pyx_IS_F_CONTIG 2 -static int __Pyx_init_memviewslice( - struct __pyx_memoryview_obj *memview, - int ndim, - __Pyx_memviewslice *memviewslice, - int memview_is_new_reference); -static CYTHON_INLINE int __pyx_add_acquisition_count_locked( - __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); -static CYTHON_INLINE int __pyx_sub_acquisition_count_locked( - __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); -#define __pyx_get_slice_count_pointer(memview) (memview->acquisition_count_aligned_p) -#define __pyx_get_slice_count(memview) (*__pyx_get_slice_count_pointer(memview)) -#define __PYX_INC_MEMVIEW(slice, have_gil) __Pyx_INC_MEMVIEW(slice, have_gil, __LINE__) -#define __PYX_XDEC_MEMVIEW(slice, have_gil) __Pyx_XDEC_MEMVIEW(slice, have_gil, __LINE__) -static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *, int, int); -static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *, int, int); - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, - const char *name, int exact); /*proto*/ - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/ -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ - -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); - -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); - -static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); - -static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/ - -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ - -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ - -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ - const char* function_name); /*proto*/ - -#include - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals -#else -#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals -#endif - -static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t, Py_ssize_t); /* proto */ - -#ifndef __PYX_FORCE_INIT_THREADS - #define __PYX_FORCE_INIT_THREADS 0 -#endif - -#define UNARY_NEG_WOULD_OVERFLOW(x) (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x))) - -static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ -static PyObject *get_memview(PyObject *__pyx_v_self); /*proto*/ -static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); /*proto*/ - -static CYTHON_INLINE PyObject* __Pyx_decode_c_string( - const char* cstring, Py_ssize_t start, Py_ssize_t stop, - const char* encoding, const char* errors, - PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)); - -static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ -static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ - -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ - __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) : \ - (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) : \ - __Pyx_GetItemInt_Generic(o, to_py_func(i)))) -#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ - __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \ - (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ - __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \ - (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck); - -static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ -static PyObject *__pyx_memoryview_transpose(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview__get__base(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview_get_shape(PyObject *__pyx_v_self); /*proto*/ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { - PyListObject* L = (PyListObject*) list; - Py_ssize_t len = Py_SIZE(list); - if (likely(L->allocated > len)) { - Py_INCREF(x); - PyList_SET_ITEM(list, len, x); - Py_SIZE(list) = len+1; - return 0; - } - return PyList_Append(list, x); -} -#else -#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) -#endif - -static PyObject *__pyx_memoryview_get_strides(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview_get_suboffsets(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview_get_ndim(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview_get_itemsize(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview_get_nbytes(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview_get_size(PyObject *__pyx_v_self); /*proto*/ -static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject* none = _PyList_Extend((PyListObject*)L, v); - if (unlikely(!none)) - return -1; - Py_DECREF(none); - return 0; -#else - return PyList_SetSlice(L, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, v); -#endif -} - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { - PyListObject* L = (PyListObject*) list; - Py_ssize_t len = Py_SIZE(list); - if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { - Py_INCREF(x); - PyList_SET_ITEM(list, len, x); - Py_SIZE(list) = len+1; - return 0; - } - return PyList_Append(list, x); -} -#else -#define __Pyx_PyList_Append(L,x) PyList_Append(L,x) -#endif - -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); - -static CYTHON_INLINE long __Pyx_div_long(long, long); /* proto */ - -static PyObject *__pyx_memoryviewslice__get__base(PyObject *__pyx_v_self); /*proto*/ -static void __Pyx_WriteUnraisable(const char *name, int clineno, - int lineno, const char *filename, - int full_traceback); /*proto*/ - -static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/ - -typedef struct { - Py_ssize_t shape, strides, suboffsets; -} __Pyx_Buf_DimInfo; -typedef struct { - size_t refcount; - Py_buffer pybuffer; -} __Pyx_Buffer; -typedef struct { - __Pyx_Buffer *rcbuffer; - char *data; - __Pyx_Buf_DimInfo diminfo[8]; -} __Pyx_LocalBuf_ND; - -#if PY_MAJOR_VERSION < 3 - static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags); - static void __Pyx_ReleaseBuffer(Py_buffer *view); -#else - #define __Pyx_GetBuffer PyObject_GetBuffer - #define __Pyx_ReleaseBuffer PyBuffer_Release -#endif - - -static Py_ssize_t __Pyx_zeros[] = {0, 0, 0, 0, 0, 0, 0, 0}; -static Py_ssize_t __Pyx_minusones[] = {-1, -1, -1, -1, -1, -1, -1, -1}; - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value); - -static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *); - -#if CYTHON_CCOMPLEX - #ifdef __cplusplus - #define __Pyx_CREAL(z) ((z).real()) - #define __Pyx_CIMAG(z) ((z).imag()) - #else - #define __Pyx_CREAL(z) (__real__(z)) - #define __Pyx_CIMAG(z) (__imag__(z)) - #endif -#else - #define __Pyx_CREAL(z) ((z).real) - #define __Pyx_CIMAG(z) ((z).imag) -#endif -#if (defined(_WIN32) || defined(__clang__)) && defined(__cplusplus) && CYTHON_CCOMPLEX - #define __Pyx_SET_CREAL(z,x) ((z).real(x)) - #define __Pyx_SET_CIMAG(z,y) ((z).imag(y)) -#else - #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x) - #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y) -#endif - -static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); - -#if CYTHON_CCOMPLEX - #define __Pyx_c_eqf(a, b) ((a)==(b)) - #define __Pyx_c_sumf(a, b) ((a)+(b)) - #define __Pyx_c_difff(a, b) ((a)-(b)) - #define __Pyx_c_prodf(a, b) ((a)*(b)) - #define __Pyx_c_quotf(a, b) ((a)/(b)) - #define __Pyx_c_negf(a) (-(a)) - #ifdef __cplusplus - #define __Pyx_c_is_zerof(z) ((z)==(float)0) - #define __Pyx_c_conjf(z) (::std::conj(z)) - #if 1 - #define __Pyx_c_absf(z) (::std::abs(z)) - #define __Pyx_c_powf(a, b) (::std::pow(a, b)) - #endif - #else - #define __Pyx_c_is_zerof(z) ((z)==0) - #define __Pyx_c_conjf(z) (conjf(z)) - #if 1 - #define __Pyx_c_absf(z) (cabsf(z)) - #define __Pyx_c_powf(a, b) (cpowf(a, b)) - #endif - #endif -#else - static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex); - static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex); - #if 1 - static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex); - #endif -#endif - -static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); - -#if CYTHON_CCOMPLEX - #define __Pyx_c_eq(a, b) ((a)==(b)) - #define __Pyx_c_sum(a, b) ((a)+(b)) - #define __Pyx_c_diff(a, b) ((a)-(b)) - #define __Pyx_c_prod(a, b) ((a)*(b)) - #define __Pyx_c_quot(a, b) ((a)/(b)) - #define __Pyx_c_neg(a) (-(a)) - #ifdef __cplusplus - #define __Pyx_c_is_zero(z) ((z)==(double)0) - #define __Pyx_c_conj(z) (::std::conj(z)) - #if 1 - #define __Pyx_c_abs(z) (::std::abs(z)) - #define __Pyx_c_pow(a, b) (::std::pow(a, b)) - #endif - #else - #define __Pyx_c_is_zero(z) ((z)==0) - #define __Pyx_c_conj(z) (conj(z)) - #if 1 - #define __Pyx_c_abs(z) (cabs(z)) - #define __Pyx_c_pow(a, b) (cpow(a, b)) - #endif - #endif -#else - static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex); - static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex); - #if 1 - static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex); - #endif -#endif - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); - -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -static int __pyx_memviewslice_is_contig(const __Pyx_memviewslice *mvs, - char order, int ndim); - -static int __pyx_slices_overlap(__Pyx_memviewslice *slice1, - __Pyx_memviewslice *slice2, - int ndim, size_t itemsize); - -static __Pyx_memviewslice -__pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, - const char *mode, int ndim, - size_t sizeof_dtype, int contig_flag, - int dtype_is_object); - -static CYTHON_INLINE PyObject *__pyx_capsule_create(void *p, const char *sig); - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *); - -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -static int __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b); - -static int __Pyx_ValidateAndInit_memviewslice( - int *axes_specs, - int c_or_f_flag, - int buf_flags, - int ndim, - __Pyx_TypeInfo *dtype, - __Pyx_BufFmt_StackElem stack[], - __Pyx_memviewslice *memviewslice, - PyObject *original_obj); - -static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_long(PyObject *); - -static int __Pyx_check_binary_version(void); - -#if !defined(__Pyx_PyIdentifier_FromString) -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s) -#else - #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s) -#endif -#endif - -static PyObject *__Pyx_ImportModule(const char *name); /*proto*/ - -static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict); /*proto*/ - -typedef struct { - int code_line; - PyCodeObject* code_object; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); /*proto*/ - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ - - -/* Module declarations from 'cpython.buffer' */ - -/* Module declarations from 'cpython.ref' */ - -/* Module declarations from 'libc.string' */ - -/* Module declarations from 'libc.stdio' */ - -/* Module declarations from 'cpython.object' */ - -/* Module declarations from '__builtin__' */ - -/* Module declarations from 'cpython.type' */ -static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; - -/* Module declarations from 'libc.stdlib' */ - -/* Module declarations from 'numpy' */ - -/* Module declarations from 'numpy' */ -static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; -static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; -static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; -static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; -static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0; -static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/ - -/* Module declarations from 'cython.view' */ - -/* Module declarations from 'cython' */ - -/* Module declarations from 'cython_bubblesort_nomagic' */ -static PyTypeObject *__pyx_array_type = 0; -static PyTypeObject *__pyx_MemviewEnum_type = 0; -static PyTypeObject *__pyx_memoryview_type = 0; -static PyTypeObject *__pyx_memoryviewslice_type = 0; -static PyObject *generic = 0; -static PyObject *strided = 0; -static PyObject *indirect = 0; -static PyObject *contiguous = 0; -static PyObject *indirect_contiguous = 0; -static PyObject *__pyx_f_25cython_bubblesort_nomagic_cython_bubblesort_nomagic(PyArrayObject *, int __pyx_skip_dispatch); /*proto*/ -static struct __pyx_array_obj *__pyx_array_new(PyObject *, Py_ssize_t, char *, char *, char *); /*proto*/ -static void *__pyx_align_pointer(void *, size_t); /*proto*/ -static PyObject *__pyx_memoryview_new(PyObject *, int, int, __Pyx_TypeInfo *); /*proto*/ -static CYTHON_INLINE int __pyx_memoryview_check(PyObject *); /*proto*/ -static PyObject *_unellipsify(PyObject *, int); /*proto*/ -static PyObject *assert_direct_dimensions(Py_ssize_t *, int); /*proto*/ -static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *, PyObject *); /*proto*/ -static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int, int); /*proto*/ -static char *__pyx_pybuffer_index(Py_buffer *, char *, Py_ssize_t, Py_ssize_t); /*proto*/ -static int __pyx_memslice_transpose(__Pyx_memviewslice *); /*proto*/ -static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice, int, PyObject *(*)(char *), int (*)(char *, PyObject *), int); /*proto*/ -static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ -static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ -static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *); /*proto*/ -static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ -static Py_ssize_t abs_py_ssize_t(Py_ssize_t); /*proto*/ -static char __pyx_get_best_slice_order(__Pyx_memviewslice *, int); /*proto*/ -static void _copy_strided_to_strided(char *, Py_ssize_t *, char *, Py_ssize_t *, Py_ssize_t *, Py_ssize_t *, int, size_t); /*proto*/ -static void copy_strided_to_strided(__Pyx_memviewslice *, __Pyx_memviewslice *, int, size_t); /*proto*/ -static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *, int); /*proto*/ -static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *, Py_ssize_t *, Py_ssize_t, int, char); /*proto*/ -static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *, __Pyx_memviewslice *, char, int); /*proto*/ -static int __pyx_memoryview_err_extents(int, Py_ssize_t, Py_ssize_t); /*proto*/ -static int __pyx_memoryview_err_dim(PyObject *, char *, int); /*proto*/ -static int __pyx_memoryview_err(PyObject *, char *); /*proto*/ -static int __pyx_memoryview_copy_contents(__Pyx_memviewslice, __Pyx_memviewslice, int, int, int); /*proto*/ -static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *, int, int); /*proto*/ -static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *, int, int, int); /*proto*/ -static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/ -static void __pyx_memoryview_refcount_objects_in_slice(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/ -static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *, int, size_t, void *, int); /*proto*/ -static void __pyx_memoryview__slice_assign_scalar(char *, Py_ssize_t *, Py_ssize_t *, int, size_t, void *); /*proto*/ -static __Pyx_TypeInfo __Pyx_TypeInfo_long = { "long", NULL, sizeof(long), { 0 }, 0, IS_UNSIGNED(long) ? 'U' : 'I', IS_UNSIGNED(long), 0 }; -#define __Pyx_MODULE_NAME "cython_bubblesort_nomagic" -int __pyx_module_is_main_cython_bubblesort_nomagic = 0; - -/* Implementation of 'cython_bubblesort_nomagic' */ -static PyObject *__pyx_builtin_xrange; -static PyObject *__pyx_builtin_ValueError; -static PyObject *__pyx_builtin_range; -static PyObject *__pyx_builtin_RuntimeError; -static PyObject *__pyx_builtin_MemoryError; -static PyObject *__pyx_builtin_enumerate; -static PyObject *__pyx_builtin_Ellipsis; -static PyObject *__pyx_builtin_TypeError; -static PyObject *__pyx_builtin_id; -static PyObject *__pyx_builtin_IndexError; -static PyObject *__pyx_pf_25cython_bubblesort_nomagic_cython_bubblesort_nomagic(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_inp_ary); /* proto */ -static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ -static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */ -static int __pyx_array_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer); /* proto */ -static int __pyx_array_getbuffer_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ -static void __pyx_array_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self); /* proto */ -static PyObject *get_memview_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self); /* proto */ -static PyObject *__pyx_array_MemoryView_5array_6__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr); /* proto */ -static PyObject *__pyx_array_MemoryView_5array_8__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ -static int __pyx_array_MemoryView_5array_10__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /* proto */ -static int __pyx_MemviewEnum_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name); /* proto */ -static PyObject *__pyx_MemviewEnum_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */ -static int __pyx_memoryview_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object); /* proto */ -static void __pyx_memoryview_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ -static PyObject *__pyx_memoryview_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto */ -static int __pyx_memoryview_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto */ -static int __pyx_memoryview_getbuffer_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ -static PyObject *__pyx_memoryview_transpose_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ -static PyObject *__pyx_memoryview__get__base_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ -static PyObject *__pyx_memoryview_get_shape_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ -static PyObject *__pyx_memoryview_get_strides_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ -static PyObject *__pyx_memoryview_get_suboffsets_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ -static PyObject *__pyx_memoryview_get_ndim_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ -static PyObject *__pyx_memoryview_get_itemsize_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ -static PyObject *__pyx_memoryview_get_nbytes_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ -static PyObject *__pyx_memoryview_get_size_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ -static Py_ssize_t __pyx_memoryview_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ -static PyObject *__pyx_memoryview_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ -static PyObject *__pyx_memoryview_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ -static PyObject *__pyx_memoryview_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ -static PyObject *__pyx_memoryview_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ -static PyObject *__pyx_memoryview_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ -static PyObject *__pyx_memoryview_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ -static void __pyx_memoryviewslice_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ -static PyObject *__pyx_memoryviewslice__get__base_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ -static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static char __pyx_k_B[] = "B"; -static char __pyx_k_H[] = "H"; -static char __pyx_k_I[] = "I"; -static char __pyx_k_L[] = "L"; -static char __pyx_k_O[] = "O"; -static char __pyx_k_Q[] = "Q"; -static char __pyx_k_b[] = "b"; -static char __pyx_k_c[] = "c"; -static char __pyx_k_d[] = "d"; -static char __pyx_k_f[] = "f"; -static char __pyx_k_g[] = "g"; -static char __pyx_k_h[] = "h"; -static char __pyx_k_i[] = "i"; -static char __pyx_k_l[] = "l"; -static char __pyx_k_q[] = "q"; -static char __pyx_k_Zd[] = "Zd"; -static char __pyx_k_Zf[] = "Zf"; -static char __pyx_k_Zg[] = "Zg"; -static char __pyx_k_id[] = "id"; -static char __pyx_k_obj[] = "obj"; -static char __pyx_k_base[] = "base"; -static char __pyx_k_main[] = "__main__"; -static char __pyx_k_mode[] = "mode"; -static char __pyx_k_name[] = "name"; -static char __pyx_k_ndim[] = "ndim"; -static char __pyx_k_pack[] = "pack"; -static char __pyx_k_size[] = "size"; -static char __pyx_k_step[] = "step"; -static char __pyx_k_stop[] = "stop"; -static char __pyx_k_test[] = "__test__"; -static char __pyx_k_class[] = "__class__"; -static char __pyx_k_error[] = "error"; -static char __pyx_k_flags[] = "flags"; -static char __pyx_k_range[] = "range"; -static char __pyx_k_shape[] = "shape"; -static char __pyx_k_start[] = "start"; -static char __pyx_k_format[] = "format"; -static char __pyx_k_import[] = "__import__"; -static char __pyx_k_name_2[] = "__name__"; -static char __pyx_k_struct[] = "struct"; -static char __pyx_k_unpack[] = "unpack"; -static char __pyx_k_xrange[] = "xrange"; -static char __pyx_k_fortran[] = "fortran"; -static char __pyx_k_memview[] = "memview"; -static char __pyx_k_Ellipsis[] = "Ellipsis"; -static char __pyx_k_itemsize[] = "itemsize"; -static char __pyx_k_TypeError[] = "TypeError"; -static char __pyx_k_enumerate[] = "enumerate"; -static char __pyx_k_IndexError[] = "IndexError"; -static char __pyx_k_ValueError[] = "ValueError"; -static char __pyx_k_pyx_vtable[] = "__pyx_vtable__"; -static char __pyx_k_MemoryError[] = "MemoryError"; -static char __pyx_k_RuntimeError[] = "RuntimeError"; -static char __pyx_k_pyx_getbuffer[] = "__pyx_getbuffer"; -static char __pyx_k_allocate_buffer[] = "allocate_buffer"; -static char __pyx_k_dtype_is_object[] = "dtype_is_object"; -static char __pyx_k_pyx_releasebuffer[] = "__pyx_releasebuffer"; -static char __pyx_k_strided_and_direct[] = ""; -static char __pyx_k_strided_and_indirect[] = ""; -static char __pyx_k_contiguous_and_direct[] = ""; -static char __pyx_k_MemoryView_of_r_object[] = ""; -static char __pyx_k_MemoryView_of_r_at_0x_x[] = ""; -static char __pyx_k_contiguous_and_indirect[] = ""; -static char __pyx_k_Cannot_index_with_type_s[] = "Cannot index with type '%s'"; -static char __pyx_k_getbuffer_obj_view_flags[] = "getbuffer(obj, view, flags)"; -static char __pyx_k_Dimension_d_is_not_direct[] = "Dimension %d is not direct"; -static char __pyx_k_Invalid_shape_in_axis_d_d[] = "Invalid shape in axis %d: %d."; -static char __pyx_k_Index_out_of_bounds_axis_d[] = "Index out of bounds (axis %d)"; -static char __pyx_k_Step_may_not_be_zero_axis_d[] = "Step may not be zero (axis %d)"; -static char __pyx_k_itemsize_0_for_cython_array[] = "itemsize <= 0 for cython.array"; -static char __pyx_k_ndarray_is_not_C_contiguous[] = "ndarray is not C contiguous"; -static char __pyx_k_unable_to_allocate_array_data[] = "unable to allocate array data."; -static char __pyx_k_strided_and_direct_or_indirect[] = ""; -static char __pyx_k_unknown_dtype_code_in_numpy_pxd[] = "unknown dtype code in numpy.pxd (%d)"; -static char __pyx_k_All_dimensions_preceding_dimensi[] = "All dimensions preceding dimension %d must be indexed and not sliced"; -static char __pyx_k_Buffer_view_does_not_expose_stri[] = "Buffer view does not expose strides"; -static char __pyx_k_Can_only_create_a_buffer_that_is[] = "Can only create a buffer that is contiguous in memory."; -static char __pyx_k_Cannot_transpose_memoryview_with[] = "Cannot transpose memoryview with indirect dimensions"; -static char __pyx_k_Empty_shape_tuple_for_cython_arr[] = "Empty shape tuple for cython.array"; -static char __pyx_k_Format_string_allocated_too_shor[] = "Format string allocated too short, see comment in numpy.pxd"; -static char __pyx_k_Indirect_dimensions_not_supporte[] = "Indirect dimensions not supported"; -static char __pyx_k_Invalid_mode_expected_c_or_fortr[] = "Invalid mode, expected 'c' or 'fortran', got %s"; -static char __pyx_k_Non_native_byte_order_not_suppor[] = "Non-native byte order not supported"; -static char __pyx_k_Out_of_bounds_on_buffer_access_a[] = "Out of bounds on buffer access (axis %d)"; -static char __pyx_k_Unable_to_convert_item_to_object[] = "Unable to convert item to object"; -static char __pyx_k_got_differing_extents_in_dimensi[] = "got differing extents in dimension %d (got %d and %d)"; -static char __pyx_k_ndarray_is_not_Fortran_contiguou[] = "ndarray is not Fortran contiguous"; -static char __pyx_k_unable_to_allocate_shape_and_str[] = "unable to allocate shape and strides."; -static char __pyx_k_Format_string_allocated_too_shor_2[] = "Format string allocated too short."; -static PyObject *__pyx_kp_s_Buffer_view_does_not_expose_stri; -static PyObject *__pyx_kp_s_Can_only_create_a_buffer_that_is; -static PyObject *__pyx_kp_s_Cannot_index_with_type_s; -static PyObject *__pyx_n_s_Ellipsis; -static PyObject *__pyx_kp_s_Empty_shape_tuple_for_cython_arr; -static PyObject *__pyx_kp_u_Format_string_allocated_too_shor; -static PyObject *__pyx_kp_u_Format_string_allocated_too_shor_2; -static PyObject *__pyx_n_s_IndexError; -static PyObject *__pyx_kp_s_Indirect_dimensions_not_supporte; -static PyObject *__pyx_kp_s_Invalid_mode_expected_c_or_fortr; -static PyObject *__pyx_kp_s_Invalid_shape_in_axis_d_d; -static PyObject *__pyx_n_s_MemoryError; -static PyObject *__pyx_kp_s_MemoryView_of_r_at_0x_x; -static PyObject *__pyx_kp_s_MemoryView_of_r_object; -static PyObject *__pyx_kp_u_Non_native_byte_order_not_suppor; -static PyObject *__pyx_n_b_O; -static PyObject *__pyx_kp_s_Out_of_bounds_on_buffer_access_a; -static PyObject *__pyx_n_s_RuntimeError; -static PyObject *__pyx_n_s_TypeError; -static PyObject *__pyx_kp_s_Unable_to_convert_item_to_object; -static PyObject *__pyx_n_s_ValueError; -static PyObject *__pyx_n_s_allocate_buffer; -static PyObject *__pyx_n_s_base; -static PyObject *__pyx_n_s_c; -static PyObject *__pyx_n_u_c; -static PyObject *__pyx_n_s_class; -static PyObject *__pyx_kp_s_contiguous_and_direct; -static PyObject *__pyx_kp_s_contiguous_and_indirect; -static PyObject *__pyx_n_s_dtype_is_object; -static PyObject *__pyx_n_s_enumerate; -static PyObject *__pyx_n_s_error; -static PyObject *__pyx_n_s_flags; -static PyObject *__pyx_n_s_format; -static PyObject *__pyx_n_s_fortran; -static PyObject *__pyx_n_u_fortran; -static PyObject *__pyx_kp_s_got_differing_extents_in_dimensi; -static PyObject *__pyx_n_s_id; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_itemsize; -static PyObject *__pyx_kp_s_itemsize_0_for_cython_array; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_memview; -static PyObject *__pyx_n_s_mode; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_name_2; -static PyObject *__pyx_kp_u_ndarray_is_not_C_contiguous; -static PyObject *__pyx_kp_u_ndarray_is_not_Fortran_contiguou; -static PyObject *__pyx_n_s_ndim; -static PyObject *__pyx_n_s_obj; -static PyObject *__pyx_n_s_pack; -static PyObject *__pyx_n_s_pyx_getbuffer; -static PyObject *__pyx_n_s_pyx_releasebuffer; -static PyObject *__pyx_n_s_pyx_vtable; -static PyObject *__pyx_n_s_range; -static PyObject *__pyx_n_s_shape; -static PyObject *__pyx_n_s_size; -static PyObject *__pyx_n_s_start; -static PyObject *__pyx_n_s_step; -static PyObject *__pyx_n_s_stop; -static PyObject *__pyx_kp_s_strided_and_direct; -static PyObject *__pyx_kp_s_strided_and_direct_or_indirect; -static PyObject *__pyx_kp_s_strided_and_indirect; -static PyObject *__pyx_n_s_struct; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_kp_s_unable_to_allocate_array_data; -static PyObject *__pyx_kp_s_unable_to_allocate_shape_and_str; -static PyObject *__pyx_kp_u_unknown_dtype_code_in_numpy_pxd; -static PyObject *__pyx_n_s_unpack; -static PyObject *__pyx_n_s_xrange; -static PyObject *__pyx_int_0; -static PyObject *__pyx_int_1; -static PyObject *__pyx_int_neg_1; -static PyObject *__pyx_tuple_; -static PyObject *__pyx_tuple__2; -static PyObject *__pyx_tuple__3; -static PyObject *__pyx_tuple__4; -static PyObject *__pyx_tuple__5; -static PyObject *__pyx_tuple__6; -static PyObject *__pyx_tuple__7; -static PyObject *__pyx_tuple__8; -static PyObject *__pyx_tuple__9; -static PyObject *__pyx_tuple__10; -static PyObject *__pyx_tuple__11; -static PyObject *__pyx_tuple__12; -static PyObject *__pyx_tuple__13; -static PyObject *__pyx_tuple__14; -static PyObject *__pyx_tuple__15; -static PyObject *__pyx_tuple__16; -static PyObject *__pyx_tuple__17; -static PyObject *__pyx_tuple__18; -static PyObject *__pyx_tuple__19; -static PyObject *__pyx_tuple__20; -static PyObject *__pyx_tuple__21; -static PyObject *__pyx_tuple__22; - -/* "cython_bubblesort_nomagic.pyx":6 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * cpdef cython_bubblesort_nomagic(np.ndarray[long, ndim=1] inp_ary): # <<<<<<<<<<<<<< - * """ The Cython implementation of Bubblesort with NumPy memoryview.""" - * cdef unsigned long length, i, swapped, ele, temp - */ - -static PyObject *__pyx_pw_25cython_bubblesort_nomagic_1cython_bubblesort_nomagic(PyObject *__pyx_self, PyObject *__pyx_v_inp_ary); /*proto*/ -static PyObject *__pyx_f_25cython_bubblesort_nomagic_cython_bubblesort_nomagic(PyArrayObject *__pyx_v_inp_ary, CYTHON_UNUSED int __pyx_skip_dispatch) { - unsigned long __pyx_v_length; - unsigned long __pyx_v_i; - unsigned long __pyx_v_swapped; - unsigned long __pyx_v_ele; - unsigned long __pyx_v_temp; - __Pyx_memviewslice __pyx_v_np_ary = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_LocalBuf_ND __pyx_pybuffernd_inp_ary; - __Pyx_Buffer __pyx_pybuffer_inp_ary; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_memviewslice __pyx_t_1 = { 0, 0, { 0 }, { 0 }, { 0 } }; - unsigned long __pyx_t_2; - unsigned long __pyx_t_3; - int __pyx_t_4; - unsigned long __pyx_t_5; - unsigned long __pyx_t_6; - unsigned long __pyx_t_7; - unsigned long __pyx_t_8; - unsigned long __pyx_t_9; - unsigned long __pyx_t_10; - unsigned long __pyx_t_11; - unsigned long __pyx_t_12; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("cython_bubblesort_nomagic", 0); - __pyx_pybuffer_inp_ary.pybuffer.buf = NULL; - __pyx_pybuffer_inp_ary.refcount = 0; - __pyx_pybuffernd_inp_ary.data = NULL; - __pyx_pybuffernd_inp_ary.rcbuffer = &__pyx_pybuffer_inp_ary; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_inp_ary.rcbuffer->pybuffer, (PyObject*)__pyx_v_inp_ary, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_pybuffernd_inp_ary.diminfo[0].strides = __pyx_pybuffernd_inp_ary.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_inp_ary.diminfo[0].shape = __pyx_pybuffernd_inp_ary.rcbuffer->pybuffer.shape[0]; - - /* "cython_bubblesort_nomagic.pyx":9 - * """ The Cython implementation of Bubblesort with NumPy memoryview.""" - * cdef unsigned long length, i, swapped, ele, temp - * cdef long[:] np_ary = inp_ary # <<<<<<<<<<<<<< - * length = np_ary.shape[0] - * swapped = 1 - */ - __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_long(((PyObject *)__pyx_v_inp_ary)); - if (unlikely(!__pyx_t_1.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_np_ary = __pyx_t_1; - __pyx_t_1.memview = NULL; - __pyx_t_1.data = NULL; - - /* "cython_bubblesort_nomagic.pyx":10 - * cdef unsigned long length, i, swapped, ele, temp - * cdef long[:] np_ary = inp_ary - * length = np_ary.shape[0] # <<<<<<<<<<<<<< - * swapped = 1 - * for i in xrange(0, length): - */ - __pyx_v_length = (__pyx_v_np_ary.shape[0]); - - /* "cython_bubblesort_nomagic.pyx":11 - * cdef long[:] np_ary = inp_ary - * length = np_ary.shape[0] - * swapped = 1 # <<<<<<<<<<<<<< - * for i in xrange(0, length): - * if swapped: - */ - __pyx_v_swapped = 1; - - /* "cython_bubblesort_nomagic.pyx":12 - * length = np_ary.shape[0] - * swapped = 1 - * for i in xrange(0, length): # <<<<<<<<<<<<<< - * if swapped: - * swapped = 0 - */ - __pyx_t_2 = __pyx_v_length; - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { - __pyx_v_i = __pyx_t_3; - - /* "cython_bubblesort_nomagic.pyx":13 - * swapped = 1 - * for i in xrange(0, length): - * if swapped: # <<<<<<<<<<<<<< - * swapped = 0 - * for ele in xrange(0, length-i-1): - */ - __pyx_t_4 = (__pyx_v_swapped != 0); - if (__pyx_t_4) { - - /* "cython_bubblesort_nomagic.pyx":14 - * for i in xrange(0, length): - * if swapped: - * swapped = 0 # <<<<<<<<<<<<<< - * for ele in xrange(0, length-i-1): - * if np_ary[ele] > np_ary[ele + 1]: - */ - __pyx_v_swapped = 0; - - /* "cython_bubblesort_nomagic.pyx":15 - * if swapped: - * swapped = 0 - * for ele in xrange(0, length-i-1): # <<<<<<<<<<<<<< - * if np_ary[ele] > np_ary[ele + 1]: - * temp = np_ary[ele + 1] - */ - __pyx_t_5 = ((__pyx_v_length - __pyx_v_i) - 1); - for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { - __pyx_v_ele = __pyx_t_6; - - /* "cython_bubblesort_nomagic.pyx":16 - * swapped = 0 - * for ele in xrange(0, length-i-1): - * if np_ary[ele] > np_ary[ele + 1]: # <<<<<<<<<<<<<< - * temp = np_ary[ele + 1] - * np_ary[ele + 1] = np_ary[ele] - */ - __pyx_t_7 = __pyx_v_ele; - __pyx_t_8 = (__pyx_v_ele + 1); - __pyx_t_4 = (((*((long *) ( /* dim=0 */ (__pyx_v_np_ary.data + __pyx_t_7 * __pyx_v_np_ary.strides[0]) ))) > (*((long *) ( /* dim=0 */ (__pyx_v_np_ary.data + __pyx_t_8 * __pyx_v_np_ary.strides[0]) )))) != 0); - if (__pyx_t_4) { - - /* "cython_bubblesort_nomagic.pyx":17 - * for ele in xrange(0, length-i-1): - * if np_ary[ele] > np_ary[ele + 1]: - * temp = np_ary[ele + 1] # <<<<<<<<<<<<<< - * np_ary[ele + 1] = np_ary[ele] - * np_ary[ele] = temp - */ - __pyx_t_9 = (__pyx_v_ele + 1); - __pyx_v_temp = (*((long *) ( /* dim=0 */ (__pyx_v_np_ary.data + __pyx_t_9 * __pyx_v_np_ary.strides[0]) ))); - - /* "cython_bubblesort_nomagic.pyx":18 - * if np_ary[ele] > np_ary[ele + 1]: - * temp = np_ary[ele + 1] - * np_ary[ele + 1] = np_ary[ele] # <<<<<<<<<<<<<< - * np_ary[ele] = temp - * swapped = 1 - */ - __pyx_t_10 = __pyx_v_ele; - __pyx_t_11 = (__pyx_v_ele + 1); - *((long *) ( /* dim=0 */ (__pyx_v_np_ary.data + __pyx_t_11 * __pyx_v_np_ary.strides[0]) )) = (*((long *) ( /* dim=0 */ (__pyx_v_np_ary.data + __pyx_t_10 * __pyx_v_np_ary.strides[0]) ))); - - /* "cython_bubblesort_nomagic.pyx":19 - * temp = np_ary[ele + 1] - * np_ary[ele + 1] = np_ary[ele] - * np_ary[ele] = temp # <<<<<<<<<<<<<< - * swapped = 1 - * return inp_ary - */ - __pyx_t_12 = __pyx_v_ele; - *((long *) ( /* dim=0 */ (__pyx_v_np_ary.data + __pyx_t_12 * __pyx_v_np_ary.strides[0]) )) = __pyx_v_temp; - - /* "cython_bubblesort_nomagic.pyx":20 - * np_ary[ele + 1] = np_ary[ele] - * np_ary[ele] = temp - * swapped = 1 # <<<<<<<<<<<<<< - * return inp_ary - */ - __pyx_v_swapped = 1; - goto __pyx_L8; - } - __pyx_L8:; - } - goto __pyx_L5; - } - __pyx_L5:; - } - - /* "cython_bubblesort_nomagic.pyx":21 - * np_ary[ele] = temp - * swapped = 1 - * return inp_ary # <<<<<<<<<<<<<< - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_inp_ary)); - __pyx_r = ((PyObject *)__pyx_v_inp_ary); - goto __pyx_L0; - - /* "cython_bubblesort_nomagic.pyx":6 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * cpdef cython_bubblesort_nomagic(np.ndarray[long, ndim=1] inp_ary): # <<<<<<<<<<<<<< - * """ The Cython implementation of Bubblesort with NumPy memoryview.""" - * cdef unsigned long length, i, swapped, ele, temp - */ - - /* function exit code */ - __pyx_L1_error:; - __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_inp_ary.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("cython_bubblesort_nomagic.cython_bubblesort_nomagic", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - goto __pyx_L2; - __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_inp_ary.rcbuffer->pybuffer); - __pyx_L2:; - __PYX_XDEC_MEMVIEW(&__pyx_v_np_ary, 1); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_25cython_bubblesort_nomagic_1cython_bubblesort_nomagic(PyObject *__pyx_self, PyObject *__pyx_v_inp_ary); /*proto*/ -static char __pyx_doc_25cython_bubblesort_nomagic_cython_bubblesort_nomagic[] = " The Cython implementation of Bubblesort with NumPy memoryview."; -static PyObject *__pyx_pw_25cython_bubblesort_nomagic_1cython_bubblesort_nomagic(PyObject *__pyx_self, PyObject *__pyx_v_inp_ary) { - CYTHON_UNUSED int __pyx_lineno = 0; - CYTHON_UNUSED const char *__pyx_filename = NULL; - CYTHON_UNUSED int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("cython_bubblesort_nomagic (wrapper)", 0); - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_inp_ary), __pyx_ptype_5numpy_ndarray, 1, "inp_ary", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_r = __pyx_pf_25cython_bubblesort_nomagic_cython_bubblesort_nomagic(__pyx_self, ((PyArrayObject *)__pyx_v_inp_ary)); - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_25cython_bubblesort_nomagic_cython_bubblesort_nomagic(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_inp_ary) { - __Pyx_LocalBuf_ND __pyx_pybuffernd_inp_ary; - __Pyx_Buffer __pyx_pybuffer_inp_ary; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("cython_bubblesort_nomagic", 0); - __pyx_pybuffer_inp_ary.pybuffer.buf = NULL; - __pyx_pybuffer_inp_ary.refcount = 0; - __pyx_pybuffernd_inp_ary.data = NULL; - __pyx_pybuffernd_inp_ary.rcbuffer = &__pyx_pybuffer_inp_ary; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_inp_ary.rcbuffer->pybuffer, (PyObject*)__pyx_v_inp_ary, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_pybuffernd_inp_ary.diminfo[0].strides = __pyx_pybuffernd_inp_ary.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_inp_ary.diminfo[0].shape = __pyx_pybuffernd_inp_ary.rcbuffer->pybuffer.shape[0]; - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __pyx_f_25cython_bubblesort_nomagic_cython_bubblesort_nomagic(__pyx_v_inp_ary, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_inp_ary.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("cython_bubblesort_nomagic.cython_bubblesort_nomagic", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - goto __pyx_L2; - __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_inp_ary.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":194 - * # experimental exception made for __getbuffer__ and __releasebuffer__ - * # -- the details of this may change. - * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< - * # This implementation of getbuffer is geared towards Cython - * # requirements, and does not yet fullfill the PEP. - */ - -/* Python wrapper */ -static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ -static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); - __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { - int __pyx_v_copy_shape; - int __pyx_v_i; - int __pyx_v_ndim; - int __pyx_v_endian_detector; - int __pyx_v_little_endian; - int __pyx_v_t; - char *__pyx_v_f; - PyArray_Descr *__pyx_v_descr = 0; - int __pyx_v_offset; - int __pyx_v_hasfields; - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_t_6; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - char *__pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__getbuffer__", 0); - if (__pyx_v_info != NULL) { - __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(__pyx_v_info->obj); - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":200 - * # of flags - * - * if info == NULL: return # <<<<<<<<<<<<<< - * - * cdef int copy_shape, i, ndim - */ - __pyx_t_1 = ((__pyx_v_info == NULL) != 0); - if (__pyx_t_1) { - __pyx_r = 0; - goto __pyx_L0; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":203 - * - * cdef int copy_shape, i, ndim - * cdef int endian_detector = 1 # <<<<<<<<<<<<<< - * cdef bint little_endian = ((&endian_detector)[0] != 0) - * - */ - __pyx_v_endian_detector = 1; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":204 - * cdef int copy_shape, i, ndim - * cdef int endian_detector = 1 - * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< - * - * ndim = PyArray_NDIM(self) - */ - __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":206 - * cdef bint little_endian = ((&endian_detector)[0] != 0) - * - * ndim = PyArray_NDIM(self) # <<<<<<<<<<<<<< - * - * if sizeof(npy_intp) != sizeof(Py_ssize_t): - */ - __pyx_v_ndim = PyArray_NDIM(__pyx_v_self); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":208 - * ndim = PyArray_NDIM(self) - * - * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< - * copy_shape = 1 - * else: - */ - __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); - if (__pyx_t_1) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":209 - * - * if sizeof(npy_intp) != sizeof(Py_ssize_t): - * copy_shape = 1 # <<<<<<<<<<<<<< - * else: - * copy_shape = 0 - */ - __pyx_v_copy_shape = 1; - goto __pyx_L4; - } - /*else*/ { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":211 - * copy_shape = 1 - * else: - * copy_shape = 0 # <<<<<<<<<<<<<< - * - * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) - */ - __pyx_v_copy_shape = 0; - } - __pyx_L4:; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":213 - * copy_shape = 0 - * - * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< - * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): - * raise ValueError(u"ndarray is not C contiguous") - */ - __pyx_t_1 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0); - if (__pyx_t_1) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":214 - * - * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) - * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): # <<<<<<<<<<<<<< - * raise ValueError(u"ndarray is not C contiguous") - * - */ - __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS) != 0)) != 0); - __pyx_t_3 = __pyx_t_2; - } else { - __pyx_t_3 = __pyx_t_1; - } - if (__pyx_t_3) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":215 - * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) - * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): - * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< - * - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) - */ - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":217 - * raise ValueError(u"ndarray is not C contiguous") - * - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< - * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): - * raise ValueError(u"ndarray is not Fortran contiguous") - */ - __pyx_t_3 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0); - if (__pyx_t_3) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":218 - * - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) - * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): # <<<<<<<<<<<<<< - * raise ValueError(u"ndarray is not Fortran contiguous") - * - */ - __pyx_t_1 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS) != 0)) != 0); - __pyx_t_2 = __pyx_t_1; - } else { - __pyx_t_2 = __pyx_t_3; - } - if (__pyx_t_2) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":219 - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) - * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): - * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< - * - * info.buf = PyArray_DATA(self) - */ - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":221 - * raise ValueError(u"ndarray is not Fortran contiguous") - * - * info.buf = PyArray_DATA(self) # <<<<<<<<<<<<<< - * info.ndim = ndim - * if copy_shape: - */ - __pyx_v_info->buf = PyArray_DATA(__pyx_v_self); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":222 - * - * info.buf = PyArray_DATA(self) - * info.ndim = ndim # <<<<<<<<<<<<<< - * if copy_shape: - * # Allocate new buffer for strides and shape info. - */ - __pyx_v_info->ndim = __pyx_v_ndim; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":223 - * info.buf = PyArray_DATA(self) - * info.ndim = ndim - * if copy_shape: # <<<<<<<<<<<<<< - * # Allocate new buffer for strides and shape info. - * # This is allocated as one block, strides first. - */ - __pyx_t_2 = (__pyx_v_copy_shape != 0); - if (__pyx_t_2) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":226 - * # Allocate new buffer for strides and shape info. - * # This is allocated as one block, strides first. - * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) # <<<<<<<<<<<<<< - * info.shape = info.strides + ndim - * for i in range(ndim): - */ - __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2))); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":227 - * # This is allocated as one block, strides first. - * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) - * info.shape = info.strides + ndim # <<<<<<<<<<<<<< - * for i in range(ndim): - * info.strides[i] = PyArray_STRIDES(self)[i] - */ - __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":228 - * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) - * info.shape = info.strides + ndim - * for i in range(ndim): # <<<<<<<<<<<<<< - * info.strides[i] = PyArray_STRIDES(self)[i] - * info.shape[i] = PyArray_DIMS(self)[i] - */ - __pyx_t_5 = __pyx_v_ndim; - for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { - __pyx_v_i = __pyx_t_6; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":229 - * info.shape = info.strides + ndim - * for i in range(ndim): - * info.strides[i] = PyArray_STRIDES(self)[i] # <<<<<<<<<<<<<< - * info.shape[i] = PyArray_DIMS(self)[i] - * else: - */ - (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":230 - * for i in range(ndim): - * info.strides[i] = PyArray_STRIDES(self)[i] - * info.shape[i] = PyArray_DIMS(self)[i] # <<<<<<<<<<<<<< - * else: - * info.strides = PyArray_STRIDES(self) - */ - (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]); - } - goto __pyx_L7; - } - /*else*/ { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":232 - * info.shape[i] = PyArray_DIMS(self)[i] - * else: - * info.strides = PyArray_STRIDES(self) # <<<<<<<<<<<<<< - * info.shape = PyArray_DIMS(self) - * info.suboffsets = NULL - */ - __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self)); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":233 - * else: - * info.strides = PyArray_STRIDES(self) - * info.shape = PyArray_DIMS(self) # <<<<<<<<<<<<<< - * info.suboffsets = NULL - * info.itemsize = PyArray_ITEMSIZE(self) - */ - __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self)); - } - __pyx_L7:; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":234 - * info.strides = PyArray_STRIDES(self) - * info.shape = PyArray_DIMS(self) - * info.suboffsets = NULL # <<<<<<<<<<<<<< - * info.itemsize = PyArray_ITEMSIZE(self) - * info.readonly = not PyArray_ISWRITEABLE(self) - */ - __pyx_v_info->suboffsets = NULL; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":235 - * info.shape = PyArray_DIMS(self) - * info.suboffsets = NULL - * info.itemsize = PyArray_ITEMSIZE(self) # <<<<<<<<<<<<<< - * info.readonly = not PyArray_ISWRITEABLE(self) - * - */ - __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":236 - * info.suboffsets = NULL - * info.itemsize = PyArray_ITEMSIZE(self) - * info.readonly = not PyArray_ISWRITEABLE(self) # <<<<<<<<<<<<<< - * - * cdef int t - */ - __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0)); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":239 - * - * cdef int t - * cdef char* f = NULL # <<<<<<<<<<<<<< - * cdef dtype descr = self.descr - * cdef list stack - */ - __pyx_v_f = NULL; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":240 - * cdef int t - * cdef char* f = NULL - * cdef dtype descr = self.descr # <<<<<<<<<<<<<< - * cdef list stack - * cdef int offset - */ - __pyx_t_4 = ((PyObject *)__pyx_v_self->descr); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_descr = ((PyArray_Descr *)__pyx_t_4); - __pyx_t_4 = 0; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":244 - * cdef int offset - * - * cdef bint hasfields = PyDataType_HASFIELDS(descr) # <<<<<<<<<<<<<< - * - * if not hasfields and not copy_shape: - */ - __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":246 - * cdef bint hasfields = PyDataType_HASFIELDS(descr) - * - * if not hasfields and not copy_shape: # <<<<<<<<<<<<<< - * # do not call releasebuffer - * info.obj = None - */ - __pyx_t_2 = ((!(__pyx_v_hasfields != 0)) != 0); - if (__pyx_t_2) { - __pyx_t_3 = ((!(__pyx_v_copy_shape != 0)) != 0); - __pyx_t_1 = __pyx_t_3; - } else { - __pyx_t_1 = __pyx_t_2; - } - if (__pyx_t_1) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":248 - * if not hasfields and not copy_shape: - * # do not call releasebuffer - * info.obj = None # <<<<<<<<<<<<<< - * else: - * # need to call releasebuffer - */ - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); - __pyx_v_info->obj = Py_None; - goto __pyx_L10; - } - /*else*/ { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":251 - * else: - * # need to call releasebuffer - * info.obj = self # <<<<<<<<<<<<<< - * - * if not hasfields: - */ - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); - __pyx_v_info->obj = ((PyObject *)__pyx_v_self); - } - __pyx_L10:; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":253 - * info.obj = self - * - * if not hasfields: # <<<<<<<<<<<<<< - * t = descr.type_num - * if ((descr.byteorder == c'>' and little_endian) or - */ - __pyx_t_1 = ((!(__pyx_v_hasfields != 0)) != 0); - if (__pyx_t_1) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":254 - * - * if not hasfields: - * t = descr.type_num # <<<<<<<<<<<<<< - * if ((descr.byteorder == c'>' and little_endian) or - * (descr.byteorder == c'<' and not little_endian)): - */ - __pyx_t_5 = __pyx_v_descr->type_num; - __pyx_v_t = __pyx_t_5; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":255 - * if not hasfields: - * t = descr.type_num - * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< - * (descr.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") - */ - __pyx_t_1 = ((__pyx_v_descr->byteorder == '>') != 0); - if (__pyx_t_1) { - __pyx_t_2 = (__pyx_v_little_endian != 0); - } else { - __pyx_t_2 = __pyx_t_1; - } - if (!__pyx_t_2) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":256 - * t = descr.type_num - * if ((descr.byteorder == c'>' and little_endian) or - * (descr.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< - * raise ValueError(u"Non-native byte order not supported") - * if t == NPY_BYTE: f = "b" - */ - __pyx_t_1 = ((__pyx_v_descr->byteorder == '<') != 0); - if (__pyx_t_1) { - __pyx_t_3 = ((!(__pyx_v_little_endian != 0)) != 0); - __pyx_t_7 = __pyx_t_3; - } else { - __pyx_t_7 = __pyx_t_1; - } - __pyx_t_1 = __pyx_t_7; - } else { - __pyx_t_1 = __pyx_t_2; - } - if (__pyx_t_1) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":257 - * if ((descr.byteorder == c'>' and little_endian) or - * (descr.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< - * if t == NPY_BYTE: f = "b" - * elif t == NPY_UBYTE: f = "B" - */ - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":274 - * elif t == NPY_CDOUBLE: f = "Zd" - * elif t == NPY_CLONGDOUBLE: f = "Zg" - * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) - */ - switch (__pyx_v_t) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":258 - * (descr.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") - * if t == NPY_BYTE: f = "b" # <<<<<<<<<<<<<< - * elif t == NPY_UBYTE: f = "B" - * elif t == NPY_SHORT: f = "h" - */ - case NPY_BYTE: - __pyx_v_f = __pyx_k_b; - break; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":259 - * raise ValueError(u"Non-native byte order not supported") - * if t == NPY_BYTE: f = "b" - * elif t == NPY_UBYTE: f = "B" # <<<<<<<<<<<<<< - * elif t == NPY_SHORT: f = "h" - * elif t == NPY_USHORT: f = "H" - */ - case NPY_UBYTE: - __pyx_v_f = __pyx_k_B; - break; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":260 - * if t == NPY_BYTE: f = "b" - * elif t == NPY_UBYTE: f = "B" - * elif t == NPY_SHORT: f = "h" # <<<<<<<<<<<<<< - * elif t == NPY_USHORT: f = "H" - * elif t == NPY_INT: f = "i" - */ - case NPY_SHORT: - __pyx_v_f = __pyx_k_h; - break; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":261 - * elif t == NPY_UBYTE: f = "B" - * elif t == NPY_SHORT: f = "h" - * elif t == NPY_USHORT: f = "H" # <<<<<<<<<<<<<< - * elif t == NPY_INT: f = "i" - * elif t == NPY_UINT: f = "I" - */ - case NPY_USHORT: - __pyx_v_f = __pyx_k_H; - break; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":262 - * elif t == NPY_SHORT: f = "h" - * elif t == NPY_USHORT: f = "H" - * elif t == NPY_INT: f = "i" # <<<<<<<<<<<<<< - * elif t == NPY_UINT: f = "I" - * elif t == NPY_LONG: f = "l" - */ - case NPY_INT: - __pyx_v_f = __pyx_k_i; - break; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":263 - * elif t == NPY_USHORT: f = "H" - * elif t == NPY_INT: f = "i" - * elif t == NPY_UINT: f = "I" # <<<<<<<<<<<<<< - * elif t == NPY_LONG: f = "l" - * elif t == NPY_ULONG: f = "L" - */ - case NPY_UINT: - __pyx_v_f = __pyx_k_I; - break; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":264 - * elif t == NPY_INT: f = "i" - * elif t == NPY_UINT: f = "I" - * elif t == NPY_LONG: f = "l" # <<<<<<<<<<<<<< - * elif t == NPY_ULONG: f = "L" - * elif t == NPY_LONGLONG: f = "q" - */ - case NPY_LONG: - __pyx_v_f = __pyx_k_l; - break; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":265 - * elif t == NPY_UINT: f = "I" - * elif t == NPY_LONG: f = "l" - * elif t == NPY_ULONG: f = "L" # <<<<<<<<<<<<<< - * elif t == NPY_LONGLONG: f = "q" - * elif t == NPY_ULONGLONG: f = "Q" - */ - case NPY_ULONG: - __pyx_v_f = __pyx_k_L; - break; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":266 - * elif t == NPY_LONG: f = "l" - * elif t == NPY_ULONG: f = "L" - * elif t == NPY_LONGLONG: f = "q" # <<<<<<<<<<<<<< - * elif t == NPY_ULONGLONG: f = "Q" - * elif t == NPY_FLOAT: f = "f" - */ - case NPY_LONGLONG: - __pyx_v_f = __pyx_k_q; - break; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":267 - * elif t == NPY_ULONG: f = "L" - * elif t == NPY_LONGLONG: f = "q" - * elif t == NPY_ULONGLONG: f = "Q" # <<<<<<<<<<<<<< - * elif t == NPY_FLOAT: f = "f" - * elif t == NPY_DOUBLE: f = "d" - */ - case NPY_ULONGLONG: - __pyx_v_f = __pyx_k_Q; - break; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":268 - * elif t == NPY_LONGLONG: f = "q" - * elif t == NPY_ULONGLONG: f = "Q" - * elif t == NPY_FLOAT: f = "f" # <<<<<<<<<<<<<< - * elif t == NPY_DOUBLE: f = "d" - * elif t == NPY_LONGDOUBLE: f = "g" - */ - case NPY_FLOAT: - __pyx_v_f = __pyx_k_f; - break; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":269 - * elif t == NPY_ULONGLONG: f = "Q" - * elif t == NPY_FLOAT: f = "f" - * elif t == NPY_DOUBLE: f = "d" # <<<<<<<<<<<<<< - * elif t == NPY_LONGDOUBLE: f = "g" - * elif t == NPY_CFLOAT: f = "Zf" - */ - case NPY_DOUBLE: - __pyx_v_f = __pyx_k_d; - break; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":270 - * elif t == NPY_FLOAT: f = "f" - * elif t == NPY_DOUBLE: f = "d" - * elif t == NPY_LONGDOUBLE: f = "g" # <<<<<<<<<<<<<< - * elif t == NPY_CFLOAT: f = "Zf" - * elif t == NPY_CDOUBLE: f = "Zd" - */ - case NPY_LONGDOUBLE: - __pyx_v_f = __pyx_k_g; - break; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":271 - * elif t == NPY_DOUBLE: f = "d" - * elif t == NPY_LONGDOUBLE: f = "g" - * elif t == NPY_CFLOAT: f = "Zf" # <<<<<<<<<<<<<< - * elif t == NPY_CDOUBLE: f = "Zd" - * elif t == NPY_CLONGDOUBLE: f = "Zg" - */ - case NPY_CFLOAT: - __pyx_v_f = __pyx_k_Zf; - break; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":272 - * elif t == NPY_LONGDOUBLE: f = "g" - * elif t == NPY_CFLOAT: f = "Zf" - * elif t == NPY_CDOUBLE: f = "Zd" # <<<<<<<<<<<<<< - * elif t == NPY_CLONGDOUBLE: f = "Zg" - * elif t == NPY_OBJECT: f = "O" - */ - case NPY_CDOUBLE: - __pyx_v_f = __pyx_k_Zd; - break; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":273 - * elif t == NPY_CFLOAT: f = "Zf" - * elif t == NPY_CDOUBLE: f = "Zd" - * elif t == NPY_CLONGDOUBLE: f = "Zg" # <<<<<<<<<<<<<< - * elif t == NPY_OBJECT: f = "O" - * else: - */ - case NPY_CLONGDOUBLE: - __pyx_v_f = __pyx_k_Zg; - break; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":274 - * elif t == NPY_CDOUBLE: f = "Zd" - * elif t == NPY_CLONGDOUBLE: f = "Zg" - * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) - */ - case NPY_OBJECT: - __pyx_v_f = __pyx_k_O; - break; - default: - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":276 - * elif t == NPY_OBJECT: f = "O" - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< - * info.format = f - * return - */ - __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_t); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_8); - __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_8, 0, 0, 0); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - break; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":277 - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) - * info.format = f # <<<<<<<<<<<<<< - * return - * else: - */ - __pyx_v_info->format = __pyx_v_f; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":278 - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) - * info.format = f - * return # <<<<<<<<<<<<<< - * else: - * info.format = stdlib.malloc(_buffer_format_string_len) - */ - __pyx_r = 0; - goto __pyx_L0; - } - /*else*/ { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":280 - * return - * else: - * info.format = stdlib.malloc(_buffer_format_string_len) # <<<<<<<<<<<<<< - * info.format[0] = c'^' # Native data types, manual alignment - * offset = 0 - */ - __pyx_v_info->format = ((char *)malloc(255)); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":281 - * else: - * info.format = stdlib.malloc(_buffer_format_string_len) - * info.format[0] = c'^' # Native data types, manual alignment # <<<<<<<<<<<<<< - * offset = 0 - * f = _util_dtypestring(descr, info.format + 1, - */ - (__pyx_v_info->format[0]) = '^'; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":282 - * info.format = stdlib.malloc(_buffer_format_string_len) - * info.format[0] = c'^' # Native data types, manual alignment - * offset = 0 # <<<<<<<<<<<<<< - * f = _util_dtypestring(descr, info.format + 1, - * info.format + _buffer_format_string_len, - */ - __pyx_v_offset = 0; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":283 - * info.format[0] = c'^' # Native data types, manual alignment - * offset = 0 - * f = _util_dtypestring(descr, info.format + 1, # <<<<<<<<<<<<<< - * info.format + _buffer_format_string_len, - * &offset) - */ - __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 255), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_f = __pyx_t_9; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":286 - * info.format + _buffer_format_string_len, - * &offset) - * f[0] = c'\0' # Terminate format string # <<<<<<<<<<<<<< - * - * def __releasebuffer__(ndarray self, Py_buffer* info): - */ - (__pyx_v_f[0]) = '\x00'; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":194 - * # experimental exception made for __getbuffer__ and __releasebuffer__ - * # -- the details of this may change. - * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< - * # This implementation of getbuffer is geared towards Cython - * # requirements, and does not yet fullfill the PEP. - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) { - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL; - } - goto __pyx_L2; - __pyx_L0:; - if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) { - __Pyx_GOTREF(Py_None); - __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL; - } - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_descr); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":288 - * f[0] = c'\0' # Terminate format string - * - * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< - * if PyArray_HASFIELDS(self): - * stdlib.free(info.format) - */ - -/* Python wrapper */ -static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/ -static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0); - __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) { - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("__releasebuffer__", 0); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":289 - * - * def __releasebuffer__(ndarray self, Py_buffer* info): - * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< - * stdlib.free(info.format) - * if sizeof(npy_intp) != sizeof(Py_ssize_t): - */ - __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0); - if (__pyx_t_1) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":290 - * def __releasebuffer__(ndarray self, Py_buffer* info): - * if PyArray_HASFIELDS(self): - * stdlib.free(info.format) # <<<<<<<<<<<<<< - * if sizeof(npy_intp) != sizeof(Py_ssize_t): - * stdlib.free(info.strides) - */ - free(__pyx_v_info->format); - goto __pyx_L3; - } - __pyx_L3:; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":291 - * if PyArray_HASFIELDS(self): - * stdlib.free(info.format) - * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< - * stdlib.free(info.strides) - * # info.shape was stored after info.strides in the same block - */ - __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); - if (__pyx_t_1) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":292 - * stdlib.free(info.format) - * if sizeof(npy_intp) != sizeof(Py_ssize_t): - * stdlib.free(info.strides) # <<<<<<<<<<<<<< - * # info.shape was stored after info.strides in the same block - * - */ - free(__pyx_v_info->strides); - goto __pyx_L4; - } - __pyx_L4:; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":288 - * f[0] = c'\0' # Terminate format string - * - * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< - * if PyArray_HASFIELDS(self): - * stdlib.free(info.format) - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":768 - * ctypedef npy_cdouble complex_t - * - * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(1, a) - * - */ - -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":769 - * - * cdef inline object PyArray_MultiIterNew1(a): - * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< - * - * cdef inline object PyArray_MultiIterNew2(a, b): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":768 - * ctypedef npy_cdouble complex_t - * - * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(1, a) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":771 - * return PyArray_MultiIterNew(1, a) - * - * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(2, a, b) - * - */ - -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":772 - * - * cdef inline object PyArray_MultiIterNew2(a, b): - * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< - * - * cdef inline object PyArray_MultiIterNew3(a, b, c): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":771 - * return PyArray_MultiIterNew(1, a) - * - * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(2, a, b) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":774 - * return PyArray_MultiIterNew(2, a, b) - * - * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(3, a, b, c) - * - */ - -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":775 - * - * cdef inline object PyArray_MultiIterNew3(a, b, c): - * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< - * - * cdef inline object PyArray_MultiIterNew4(a, b, c, d): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":774 - * return PyArray_MultiIterNew(2, a, b) - * - * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(3, a, b, c) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":777 - * return PyArray_MultiIterNew(3, a, b, c) - * - * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(4, a, b, c, d) - * - */ - -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":778 - * - * cdef inline object PyArray_MultiIterNew4(a, b, c, d): - * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< - * - * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":777 - * return PyArray_MultiIterNew(3, a, b, c) - * - * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(4, a, b, c, d) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":780 - * return PyArray_MultiIterNew(4, a, b, c, d) - * - * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(5, a, b, c, d, e) - * - */ - -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":781 - * - * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): - * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< - * - * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":780 - * return PyArray_MultiIterNew(4, a, b, c, d) - * - * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(5, a, b, c, d, e) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":783 - * return PyArray_MultiIterNew(5, a, b, c, d, e) - * - * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< - * # Recursive utility function used in __getbuffer__ to get format - * # string. The new location in the format string is returned. - */ - -static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) { - PyArray_Descr *__pyx_v_child = 0; - int __pyx_v_endian_detector; - int __pyx_v_little_endian; - PyObject *__pyx_v_fields = 0; - PyObject *__pyx_v_childname = NULL; - PyObject *__pyx_v_new_offset = NULL; - PyObject *__pyx_v_t = NULL; - char *__pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_t_6; - int __pyx_t_7; - int __pyx_t_8; - int __pyx_t_9; - long __pyx_t_10; - char *__pyx_t_11; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_util_dtypestring", 0); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":790 - * cdef int delta_offset - * cdef tuple i - * cdef int endian_detector = 1 # <<<<<<<<<<<<<< - * cdef bint little_endian = ((&endian_detector)[0] != 0) - * cdef tuple fields - */ - __pyx_v_endian_detector = 1; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":791 - * cdef tuple i - * cdef int endian_detector = 1 - * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< - * cdef tuple fields - * - */ - __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":794 - * cdef tuple fields - * - * for childname in descr.names: # <<<<<<<<<<<<<< - * fields = descr.fields[childname] - * child, new_offset = fields - */ - if (unlikely(__pyx_v_descr->names == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_t_1 = __pyx_v_descr->names; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; - for (;;) { - if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - __Pyx_XDECREF_SET(__pyx_v_childname, __pyx_t_3); - __pyx_t_3 = 0; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":795 - * - * for childname in descr.names: - * fields = descr.fields[childname] # <<<<<<<<<<<<<< - * child, new_offset = fields - * - */ - __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_3); - if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_XDECREF_SET(__pyx_v_fields, ((PyObject*)__pyx_t_3)); - __pyx_t_3 = 0; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":796 - * for childname in descr.names: - * fields = descr.fields[childname] - * child, new_offset = fields # <<<<<<<<<<<<<< - * - * if (end - f) - (new_offset - offset[0]) < 15: - */ - if (likely(__pyx_v_fields != Py_None)) { - PyObject* sequence = __pyx_v_fields; - #if CYTHON_COMPILING_IN_CPYTHON - Py_ssize_t size = Py_SIZE(sequence); - #else - Py_ssize_t size = PySequence_Size(sequence); - #endif - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - #else - __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - #endif - } else { - __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_XDECREF_SET(__pyx_v_child, ((PyArray_Descr *)__pyx_t_3)); - __pyx_t_3 = 0; - __Pyx_XDECREF_SET(__pyx_v_new_offset, __pyx_t_4); - __pyx_t_4 = 0; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":798 - * child, new_offset = fields - * - * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< - * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") - * - */ - __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = ((((__pyx_v_end - __pyx_v_f) - ((int)__pyx_t_5)) < 15) != 0); - if (__pyx_t_6) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":799 - * - * if (end - f) - (new_offset - offset[0]) < 15: - * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< - * - * if ((child.byteorder == c'>' and little_endian) or - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":801 - * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") - * - * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< - * (child.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") - */ - __pyx_t_6 = ((__pyx_v_child->byteorder == '>') != 0); - if (__pyx_t_6) { - __pyx_t_7 = (__pyx_v_little_endian != 0); - } else { - __pyx_t_7 = __pyx_t_6; - } - if (!__pyx_t_7) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":802 - * - * if ((child.byteorder == c'>' and little_endian) or - * (child.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< - * raise ValueError(u"Non-native byte order not supported") - * # One could encode it in the format string and have Cython - */ - __pyx_t_6 = ((__pyx_v_child->byteorder == '<') != 0); - if (__pyx_t_6) { - __pyx_t_8 = ((!(__pyx_v_little_endian != 0)) != 0); - __pyx_t_9 = __pyx_t_8; - } else { - __pyx_t_9 = __pyx_t_6; - } - __pyx_t_6 = __pyx_t_9; - } else { - __pyx_t_6 = __pyx_t_7; - } - if (__pyx_t_6) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":803 - * if ((child.byteorder == c'>' and little_endian) or - * (child.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< - * # One could encode it in the format string and have Cython - * # complain instead, BUT: < and > in format strings also imply - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":813 - * - * # Output padding bytes - * while offset[0] < new_offset: # <<<<<<<<<<<<<< - * f[0] = 120 # "x"; pad byte - * f += 1 - */ - while (1) { - __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!__pyx_t_6) break; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":814 - * # Output padding bytes - * while offset[0] < new_offset: - * f[0] = 120 # "x"; pad byte # <<<<<<<<<<<<<< - * f += 1 - * offset[0] += 1 - */ - (__pyx_v_f[0]) = 120; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":815 - * while offset[0] < new_offset: - * f[0] = 120 # "x"; pad byte - * f += 1 # <<<<<<<<<<<<<< - * offset[0] += 1 - * - */ - __pyx_v_f = (__pyx_v_f + 1); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":816 - * f[0] = 120 # "x"; pad byte - * f += 1 - * offset[0] += 1 # <<<<<<<<<<<<<< - * - * offset[0] += child.itemsize - */ - __pyx_t_10 = 0; - (__pyx_v_offset[__pyx_t_10]) = ((__pyx_v_offset[__pyx_t_10]) + 1); - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":818 - * offset[0] += 1 - * - * offset[0] += child.itemsize # <<<<<<<<<<<<<< - * - * if not PyDataType_HASFIELDS(child): - */ - __pyx_t_10 = 0; - (__pyx_v_offset[__pyx_t_10]) = ((__pyx_v_offset[__pyx_t_10]) + __pyx_v_child->elsize); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":820 - * offset[0] += child.itemsize - * - * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< - * t = child.type_num - * if end - f < 5: - */ - __pyx_t_6 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0); - if (__pyx_t_6) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":821 - * - * if not PyDataType_HASFIELDS(child): - * t = child.type_num # <<<<<<<<<<<<<< - * if end - f < 5: - * raise RuntimeError(u"Format string allocated too short.") - */ - __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_child->type_num); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_4); - __pyx_t_4 = 0; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":822 - * if not PyDataType_HASFIELDS(child): - * t = child.type_num - * if end - f < 5: # <<<<<<<<<<<<<< - * raise RuntimeError(u"Format string allocated too short.") - * - */ - __pyx_t_6 = (((__pyx_v_end - __pyx_v_f) < 5) != 0); - if (__pyx_t_6) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":823 - * t = child.type_num - * if end - f < 5: - * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< - * - * # Until ticket #99 is fixed, use integers to avoid warnings - */ - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":826 - * - * # Until ticket #99 is fixed, use integers to avoid warnings - * if t == NPY_BYTE: f[0] = 98 #"b" # <<<<<<<<<<<<<< - * elif t == NPY_UBYTE: f[0] = 66 #"B" - * elif t == NPY_SHORT: f[0] = 104 #"h" - */ - __pyx_t_4 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 98; - goto __pyx_L11; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":827 - * # Until ticket #99 is fixed, use integers to avoid warnings - * if t == NPY_BYTE: f[0] = 98 #"b" - * elif t == NPY_UBYTE: f[0] = 66 #"B" # <<<<<<<<<<<<<< - * elif t == NPY_SHORT: f[0] = 104 #"h" - * elif t == NPY_USHORT: f[0] = 72 #"H" - */ - __pyx_t_3 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 66; - goto __pyx_L11; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":828 - * if t == NPY_BYTE: f[0] = 98 #"b" - * elif t == NPY_UBYTE: f[0] = 66 #"B" - * elif t == NPY_SHORT: f[0] = 104 #"h" # <<<<<<<<<<<<<< - * elif t == NPY_USHORT: f[0] = 72 #"H" - * elif t == NPY_INT: f[0] = 105 #"i" - */ - __pyx_t_4 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 104; - goto __pyx_L11; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":829 - * elif t == NPY_UBYTE: f[0] = 66 #"B" - * elif t == NPY_SHORT: f[0] = 104 #"h" - * elif t == NPY_USHORT: f[0] = 72 #"H" # <<<<<<<<<<<<<< - * elif t == NPY_INT: f[0] = 105 #"i" - * elif t == NPY_UINT: f[0] = 73 #"I" - */ - __pyx_t_3 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 72; - goto __pyx_L11; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":830 - * elif t == NPY_SHORT: f[0] = 104 #"h" - * elif t == NPY_USHORT: f[0] = 72 #"H" - * elif t == NPY_INT: f[0] = 105 #"i" # <<<<<<<<<<<<<< - * elif t == NPY_UINT: f[0] = 73 #"I" - * elif t == NPY_LONG: f[0] = 108 #"l" - */ - __pyx_t_4 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 105; - goto __pyx_L11; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":831 - * elif t == NPY_USHORT: f[0] = 72 #"H" - * elif t == NPY_INT: f[0] = 105 #"i" - * elif t == NPY_UINT: f[0] = 73 #"I" # <<<<<<<<<<<<<< - * elif t == NPY_LONG: f[0] = 108 #"l" - * elif t == NPY_ULONG: f[0] = 76 #"L" - */ - __pyx_t_3 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 73; - goto __pyx_L11; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":832 - * elif t == NPY_INT: f[0] = 105 #"i" - * elif t == NPY_UINT: f[0] = 73 #"I" - * elif t == NPY_LONG: f[0] = 108 #"l" # <<<<<<<<<<<<<< - * elif t == NPY_ULONG: f[0] = 76 #"L" - * elif t == NPY_LONGLONG: f[0] = 113 #"q" - */ - __pyx_t_4 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 108; - goto __pyx_L11; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":833 - * elif t == NPY_UINT: f[0] = 73 #"I" - * elif t == NPY_LONG: f[0] = 108 #"l" - * elif t == NPY_ULONG: f[0] = 76 #"L" # <<<<<<<<<<<<<< - * elif t == NPY_LONGLONG: f[0] = 113 #"q" - * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" - */ - __pyx_t_3 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 76; - goto __pyx_L11; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":834 - * elif t == NPY_LONG: f[0] = 108 #"l" - * elif t == NPY_ULONG: f[0] = 76 #"L" - * elif t == NPY_LONGLONG: f[0] = 113 #"q" # <<<<<<<<<<<<<< - * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" - * elif t == NPY_FLOAT: f[0] = 102 #"f" - */ - __pyx_t_4 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 113; - goto __pyx_L11; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":835 - * elif t == NPY_ULONG: f[0] = 76 #"L" - * elif t == NPY_LONGLONG: f[0] = 113 #"q" - * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" # <<<<<<<<<<<<<< - * elif t == NPY_FLOAT: f[0] = 102 #"f" - * elif t == NPY_DOUBLE: f[0] = 100 #"d" - */ - __pyx_t_3 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 81; - goto __pyx_L11; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":836 - * elif t == NPY_LONGLONG: f[0] = 113 #"q" - * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" - * elif t == NPY_FLOAT: f[0] = 102 #"f" # <<<<<<<<<<<<<< - * elif t == NPY_DOUBLE: f[0] = 100 #"d" - * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" - */ - __pyx_t_4 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 102; - goto __pyx_L11; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":837 - * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" - * elif t == NPY_FLOAT: f[0] = 102 #"f" - * elif t == NPY_DOUBLE: f[0] = 100 #"d" # <<<<<<<<<<<<<< - * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" - * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf - */ - __pyx_t_3 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 100; - goto __pyx_L11; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":838 - * elif t == NPY_FLOAT: f[0] = 102 #"f" - * elif t == NPY_DOUBLE: f[0] = 100 #"d" - * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" # <<<<<<<<<<<<<< - * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf - * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd - */ - __pyx_t_4 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 103; - goto __pyx_L11; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":839 - * elif t == NPY_DOUBLE: f[0] = 100 #"d" - * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" - * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf # <<<<<<<<<<<<<< - * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd - * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg - */ - __pyx_t_3 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 90; - (__pyx_v_f[1]) = 102; - __pyx_v_f = (__pyx_v_f + 1); - goto __pyx_L11; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":840 - * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" - * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf - * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd # <<<<<<<<<<<<<< - * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg - * elif t == NPY_OBJECT: f[0] = 79 #"O" - */ - __pyx_t_4 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 90; - (__pyx_v_f[1]) = 100; - __pyx_v_f = (__pyx_v_f + 1); - goto __pyx_L11; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":841 - * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf - * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd - * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg # <<<<<<<<<<<<<< - * elif t == NPY_OBJECT: f[0] = 79 #"O" - * else: - */ - __pyx_t_3 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 90; - (__pyx_v_f[1]) = 103; - __pyx_v_f = (__pyx_v_f + 1); - goto __pyx_L11; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":842 - * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd - * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg - * elif t == NPY_OBJECT: f[0] = 79 #"O" # <<<<<<<<<<<<<< - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) - */ - __pyx_t_4 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 79; - goto __pyx_L11; - } - /*else*/ { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":844 - * elif t == NPY_OBJECT: f[0] = 79 #"O" - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< - * f += 1 - * else: - */ - __pyx_t_3 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_v_t); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_L11:; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":845 - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) - * f += 1 # <<<<<<<<<<<<<< - * else: - * # Cython ignores struct boundary information ("T{...}"), - */ - __pyx_v_f = (__pyx_v_f + 1); - goto __pyx_L9; - } - /*else*/ { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":849 - * # Cython ignores struct boundary information ("T{...}"), - * # so don't output it - * f = _util_dtypestring(child, f, end, offset) # <<<<<<<<<<<<<< - * return f - * - */ - __pyx_t_11 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_11 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_f = __pyx_t_11; - } - __pyx_L9:; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":850 - * # so don't output it - * f = _util_dtypestring(child, f, end, offset) - * return f # <<<<<<<<<<<<<< - * - * - */ - __pyx_r = __pyx_v_f; - goto __pyx_L0; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":783 - * return PyArray_MultiIterNew(5, a, b, c, d, e) - * - * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< - * # Recursive utility function used in __getbuffer__ to get format - * # string. The new location in the format string is returned. - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_child); - __Pyx_XDECREF(__pyx_v_fields); - __Pyx_XDECREF(__pyx_v_childname); - __Pyx_XDECREF(__pyx_v_new_offset); - __Pyx_XDECREF(__pyx_v_t); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":966 - * - * - * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< - * cdef PyObject* baseptr - * if base is None: - */ - -static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { - PyObject *__pyx_v_baseptr; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - __Pyx_RefNannySetupContext("set_array_base", 0); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":968 - * cdef inline void set_array_base(ndarray arr, object base): - * cdef PyObject* baseptr - * if base is None: # <<<<<<<<<<<<<< - * baseptr = NULL - * else: - */ - __pyx_t_1 = (__pyx_v_base == Py_None); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":969 - * cdef PyObject* baseptr - * if base is None: - * baseptr = NULL # <<<<<<<<<<<<<< - * else: - * Py_INCREF(base) # important to do this before decref below! - */ - __pyx_v_baseptr = NULL; - goto __pyx_L3; - } - /*else*/ { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":971 - * baseptr = NULL - * else: - * Py_INCREF(base) # important to do this before decref below! # <<<<<<<<<<<<<< - * baseptr = base - * Py_XDECREF(arr.base) - */ - Py_INCREF(__pyx_v_base); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":972 - * else: - * Py_INCREF(base) # important to do this before decref below! - * baseptr = base # <<<<<<<<<<<<<< - * Py_XDECREF(arr.base) - * arr.base = baseptr - */ - __pyx_v_baseptr = ((PyObject *)__pyx_v_base); - } - __pyx_L3:; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":973 - * Py_INCREF(base) # important to do this before decref below! - * baseptr = base - * Py_XDECREF(arr.base) # <<<<<<<<<<<<<< - * arr.base = baseptr - * - */ - Py_XDECREF(__pyx_v_arr->base); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":974 - * baseptr = base - * Py_XDECREF(arr.base) - * arr.base = baseptr # <<<<<<<<<<<<<< - * - * cdef inline object get_array_base(ndarray arr): - */ - __pyx_v_arr->base = __pyx_v_baseptr; - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":966 - * - * - * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< - * cdef PyObject* baseptr - * if base is None: - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":976 - * arr.base = baseptr - * - * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< - * if arr.base is NULL: - * return None - */ - -static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("get_array_base", 0); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":977 - * - * cdef inline object get_array_base(ndarray arr): - * if arr.base is NULL: # <<<<<<<<<<<<<< - * return None - * else: - */ - __pyx_t_1 = ((__pyx_v_arr->base == NULL) != 0); - if (__pyx_t_1) { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":978 - * cdef inline object get_array_base(ndarray arr): - * if arr.base is NULL: - * return None # <<<<<<<<<<<<<< - * else: - * return arr.base - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_None); - __pyx_r = Py_None; - goto __pyx_L0; - } - /*else*/ { - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":980 - * return None - * else: - * return arr.base # <<<<<<<<<<<<<< - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_arr->base)); - __pyx_r = ((PyObject *)__pyx_v_arr->base); - goto __pyx_L0; - } - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":976 - * arr.base = baseptr - * - * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< - * if arr.base is NULL: - * return None - */ - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":116 - * cdef bint dtype_is_object - * - * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< - * mode="c", bint allocate_buffer=True): - * - */ - -/* Python wrapper */ -static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_shape = 0; - Py_ssize_t __pyx_v_itemsize; - PyObject *__pyx_v_format = 0; - PyObject *__pyx_v_mode = 0; - int __pyx_v_allocate_buffer; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_shape,&__pyx_n_s_itemsize,&__pyx_n_s_format,&__pyx_n_s_mode,&__pyx_n_s_allocate_buffer,0}; - PyObject* values[5] = {0,0,0,0,0}; - values[3] = ((PyObject *)__pyx_n_s_c); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_shape)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_itemsize)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_format)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode); - if (value) { values[3] = value; kw_args--; } - } - case 4: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_allocate_buffer); - if (value) { values[4] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_shape = ((PyObject*)values[0]); - __pyx_v_itemsize = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_itemsize == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_v_format = values[2]; - __pyx_v_mode = values[3]; - if (values[4]) { - __pyx_v_allocate_buffer = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_allocate_buffer == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } else { - - /* "View.MemoryView":117 - * - * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, - * mode="c", bint allocate_buffer=True): # <<<<<<<<<<<<<< - * - * cdef int idx - */ - __pyx_v_allocate_buffer = ((int)1); - } - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return -1; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shape), (&PyTuple_Type), 1, "shape", 1))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (unlikely(((PyObject *)__pyx_v_format) == Py_None)) { - PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "format"); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_r = __pyx_array_MemoryView_5array___cinit__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v_shape, __pyx_v_itemsize, __pyx_v_format, __pyx_v_mode, __pyx_v_allocate_buffer); - - /* "View.MemoryView":116 - * cdef bint dtype_is_object - * - * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< - * mode="c", bint allocate_buffer=True): - * - */ - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_array_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer) { - int __pyx_v_idx; - Py_ssize_t __pyx_v_i; - Py_ssize_t __pyx_v_dim; - PyObject **__pyx_v_p; - char __pyx_v_order; - int __pyx_r; - __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - char *__pyx_t_5; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - Py_ssize_t __pyx_t_8; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__cinit__", 0); - __Pyx_INCREF(__pyx_v_format); - - /* "View.MemoryView":123 - * cdef PyObject **p - * - * self.ndim = len(shape) # <<<<<<<<<<<<<< - * self.itemsize = itemsize - * - */ - if (unlikely(__pyx_v_shape == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_self->ndim = ((int)__pyx_t_1); - - /* "View.MemoryView":124 - * - * self.ndim = len(shape) - * self.itemsize = itemsize # <<<<<<<<<<<<<< - * - * if not self.ndim: - */ - __pyx_v_self->itemsize = __pyx_v_itemsize; - - /* "View.MemoryView":126 - * self.itemsize = itemsize - * - * if not self.ndim: # <<<<<<<<<<<<<< - * raise ValueError("Empty shape tuple for cython.array") - * - */ - __pyx_t_2 = ((!(__pyx_v_self->ndim != 0)) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":127 - * - * if not self.ndim: - * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< - * - * if itemsize <= 0: - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "View.MemoryView":129 - * raise ValueError("Empty shape tuple for cython.array") - * - * if itemsize <= 0: # <<<<<<<<<<<<<< - * raise ValueError("itemsize <= 0 for cython.array") - * - */ - __pyx_t_2 = ((__pyx_v_itemsize <= 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":130 - * - * if itemsize <= 0: - * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< - * - * if isinstance(format, unicode): - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "View.MemoryView":132 - * raise ValueError("itemsize <= 0 for cython.array") - * - * if isinstance(format, unicode): # <<<<<<<<<<<<<< - * format = (format).encode('ASCII') - * self._format = format # keep a reference to the byte string - */ - __pyx_t_2 = PyUnicode_Check(__pyx_v_format); - __pyx_t_4 = (__pyx_t_2 != 0); - if (__pyx_t_4) { - - /* "View.MemoryView":133 - * - * if isinstance(format, unicode): - * format = (format).encode('ASCII') # <<<<<<<<<<<<<< - * self._format = format # keep a reference to the byte string - * self.format = self._format - */ - if (unlikely(__pyx_v_format == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "encode"); - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_t_3 = PyUnicode_AsASCIIString(((PyObject*)__pyx_v_format)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_3); - __pyx_t_3 = 0; - goto __pyx_L5; - } - __pyx_L5:; - - /* "View.MemoryView":134 - * if isinstance(format, unicode): - * format = (format).encode('ASCII') - * self._format = format # keep a reference to the byte string # <<<<<<<<<<<<<< - * self.format = self._format - * - */ - if (!(likely(PyBytes_CheckExact(__pyx_v_format))||((__pyx_v_format) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_format)->tp_name), 0))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_3 = __pyx_v_format; - __Pyx_INCREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_v_self->_format); - __Pyx_DECREF(__pyx_v_self->_format); - __pyx_v_self->_format = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "View.MemoryView":135 - * format = (format).encode('ASCII') - * self._format = format # keep a reference to the byte string - * self.format = self._format # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_self->_format); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_self->format = __pyx_t_5; - - /* "View.MemoryView":138 - * - * - * self._shape = PyMem_Malloc(sizeof(Py_ssize_t)*self.ndim*2) # <<<<<<<<<<<<<< - * self._strides = self._shape + self.ndim - * - */ - __pyx_v_self->_shape = ((Py_ssize_t *)PyMem_Malloc((((sizeof(Py_ssize_t)) * __pyx_v_self->ndim) * 2))); - - /* "View.MemoryView":139 - * - * self._shape = PyMem_Malloc(sizeof(Py_ssize_t)*self.ndim*2) - * self._strides = self._shape + self.ndim # <<<<<<<<<<<<<< - * - * if not self._shape: - */ - __pyx_v_self->_strides = (__pyx_v_self->_shape + __pyx_v_self->ndim); - - /* "View.MemoryView":141 - * self._strides = self._shape + self.ndim - * - * if not self._shape: # <<<<<<<<<<<<<< - * raise MemoryError("unable to allocate shape and strides.") - * - */ - __pyx_t_4 = ((!(__pyx_v_self->_shape != 0)) != 0); - if (__pyx_t_4) { - - /* "View.MemoryView":142 - * - * if not self._shape: - * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "View.MemoryView":145 - * - * - * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< - * if dim <= 0: - * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) - */ - __pyx_t_6 = 0; - __pyx_t_3 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_3); __pyx_t_1 = 0; - for (;;) { - if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_7); __pyx_t_1++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_7); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_v_dim = __pyx_t_8; - __pyx_v_idx = __pyx_t_6; - __pyx_t_6 = (__pyx_t_6 + 1); - - /* "View.MemoryView":146 - * - * for idx, dim in enumerate(shape): - * if dim <= 0: # <<<<<<<<<<<<<< - * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) - * self._shape[idx] = dim - */ - __pyx_t_4 = ((__pyx_v_dim <= 0) != 0); - if (__pyx_t_4) { - - /* "View.MemoryView":147 - * for idx, dim in enumerate(shape): - * if dim <= 0: - * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) # <<<<<<<<<<<<<< - * self._shape[idx] = dim - * - */ - __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_idx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_7); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_9); - __Pyx_GIVEREF(__pyx_t_9); - __pyx_t_7 = 0; - __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyString_Format(__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_t_10); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); - __Pyx_GIVEREF(__pyx_t_9); - __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_10, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_Raise(__pyx_t_9, 0, 0, 0); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "View.MemoryView":148 - * if dim <= 0: - * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) - * self._shape[idx] = dim # <<<<<<<<<<<<<< - * - * cdef char order - */ - (__pyx_v_self->_shape[__pyx_v_idx]) = __pyx_v_dim; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "View.MemoryView":151 - * - * cdef char order - * if mode == 'fortran': # <<<<<<<<<<<<<< - * order = b'F' - * self.mode = u'fortran' - */ - __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_fortran, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_4) { - - /* "View.MemoryView":152 - * cdef char order - * if mode == 'fortran': - * order = b'F' # <<<<<<<<<<<<<< - * self.mode = u'fortran' - * elif mode == 'c': - */ - __pyx_v_order = 'F'; - - /* "View.MemoryView":153 - * if mode == 'fortran': - * order = b'F' - * self.mode = u'fortran' # <<<<<<<<<<<<<< - * elif mode == 'c': - * order = b'C' - */ - __Pyx_INCREF(__pyx_n_u_fortran); - __Pyx_GIVEREF(__pyx_n_u_fortran); - __Pyx_GOTREF(__pyx_v_self->mode); - __Pyx_DECREF(__pyx_v_self->mode); - __pyx_v_self->mode = __pyx_n_u_fortran; - goto __pyx_L10; - } - - /* "View.MemoryView":154 - * order = b'F' - * self.mode = u'fortran' - * elif mode == 'c': # <<<<<<<<<<<<<< - * order = b'C' - * self.mode = u'c' - */ - __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_4) { - - /* "View.MemoryView":155 - * self.mode = u'fortran' - * elif mode == 'c': - * order = b'C' # <<<<<<<<<<<<<< - * self.mode = u'c' - * else: - */ - __pyx_v_order = 'C'; - - /* "View.MemoryView":156 - * elif mode == 'c': - * order = b'C' - * self.mode = u'c' # <<<<<<<<<<<<<< - * else: - * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) - */ - __Pyx_INCREF(__pyx_n_u_c); - __Pyx_GIVEREF(__pyx_n_u_c); - __Pyx_GOTREF(__pyx_v_self->mode); - __Pyx_DECREF(__pyx_v_self->mode); - __pyx_v_self->mode = __pyx_n_u_c; - goto __pyx_L10; - } - /*else*/ { - - /* "View.MemoryView":158 - * self.mode = u'c' - * else: - * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) # <<<<<<<<<<<<<< - * - * self.len = fill_contig_strides_array(self._shape, self._strides, - */ - __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_v_mode); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_9, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_L10:; - - /* "View.MemoryView":160 - * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) - * - * self.len = fill_contig_strides_array(self._shape, self._strides, # <<<<<<<<<<<<<< - * itemsize, self.ndim, order) - * - */ - __pyx_v_self->len = __pyx_fill_contig_strides_array(__pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_itemsize, __pyx_v_self->ndim, __pyx_v_order); - - /* "View.MemoryView":163 - * itemsize, self.ndim, order) - * - * self.free_data = allocate_buffer # <<<<<<<<<<<<<< - * self.dtype_is_object = format == b'O' - * if allocate_buffer: - */ - __pyx_v_self->free_data = __pyx_v_allocate_buffer; - - /* "View.MemoryView":164 - * - * self.free_data = allocate_buffer - * self.dtype_is_object = format == b'O' # <<<<<<<<<<<<<< - * if allocate_buffer: - * - */ - __pyx_t_3 = PyObject_RichCompare(__pyx_v_format, __pyx_n_b_O, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_self->dtype_is_object = __pyx_t_4; - - /* "View.MemoryView":165 - * self.free_data = allocate_buffer - * self.dtype_is_object = format == b'O' - * if allocate_buffer: # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_4 = (__pyx_v_allocate_buffer != 0); - if (__pyx_t_4) { - - /* "View.MemoryView":168 - * - * - * self.data = malloc(self.len) # <<<<<<<<<<<<<< - * if not self.data: - * raise MemoryError("unable to allocate array data.") - */ - __pyx_v_self->data = ((char *)malloc(__pyx_v_self->len)); - - /* "View.MemoryView":169 - * - * self.data = malloc(self.len) - * if not self.data: # <<<<<<<<<<<<<< - * raise MemoryError("unable to allocate array data.") - * - */ - __pyx_t_4 = ((!(__pyx_v_self->data != 0)) != 0); - if (__pyx_t_4) { - - /* "View.MemoryView":170 - * self.data = malloc(self.len) - * if not self.data: - * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< - * - * if self.dtype_is_object: - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "View.MemoryView":172 - * raise MemoryError("unable to allocate array data.") - * - * if self.dtype_is_object: # <<<<<<<<<<<<<< - * p = self.data - * for i in range(self.len / itemsize): - */ - __pyx_t_4 = (__pyx_v_self->dtype_is_object != 0); - if (__pyx_t_4) { - - /* "View.MemoryView":173 - * - * if self.dtype_is_object: - * p = self.data # <<<<<<<<<<<<<< - * for i in range(self.len / itemsize): - * p[i] = Py_None - */ - __pyx_v_p = ((PyObject **)__pyx_v_self->data); - - /* "View.MemoryView":174 - * if self.dtype_is_object: - * p = self.data - * for i in range(self.len / itemsize): # <<<<<<<<<<<<<< - * p[i] = Py_None - * Py_INCREF(Py_None) - */ - if (unlikely(__pyx_v_itemsize == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); - #ifdef WITH_THREAD - PyGILState_Release(__pyx_gilstate_save); - #endif - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - else if (sizeof(Py_ssize_t) == sizeof(long) && unlikely(__pyx_v_itemsize == -1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_self->len))) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); - #ifdef WITH_THREAD - PyGILState_Release(__pyx_gilstate_save); - #endif - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_t_1 = __Pyx_div_Py_ssize_t(__pyx_v_self->len, __pyx_v_itemsize); - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_1; __pyx_t_8+=1) { - __pyx_v_i = __pyx_t_8; - - /* "View.MemoryView":175 - * p = self.data - * for i in range(self.len / itemsize): - * p[i] = Py_None # <<<<<<<<<<<<<< - * Py_INCREF(Py_None) - * - */ - (__pyx_v_p[__pyx_v_i]) = Py_None; - - /* "View.MemoryView":176 - * for i in range(self.len / itemsize): - * p[i] = Py_None - * Py_INCREF(Py_None) # <<<<<<<<<<<<<< - * - * @cname('getbuffer') - */ - Py_INCREF(Py_None); - } - goto __pyx_L13; - } - __pyx_L13:; - goto __pyx_L11; - } - __pyx_L11:; - - /* "View.MemoryView":116 - * cdef bint dtype_is_object - * - * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< - * mode="c", bint allocate_buffer=True): - * - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_format); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":179 - * - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< - * cdef int bufmode = -1 - * if self.mode == u"c": - */ - -/* Python wrapper */ -static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ -static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); - __pyx_r = __pyx_array_getbuffer_MemoryView_5array_2__getbuffer__(((struct __pyx_array_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_array_getbuffer_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { - int __pyx_v_bufmode; - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - char *__pyx_t_4; - Py_ssize_t __pyx_t_5; - int __pyx_t_6; - Py_ssize_t *__pyx_t_7; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__getbuffer__", 0); - if (__pyx_v_info != NULL) { - __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(__pyx_v_info->obj); - } - - /* "View.MemoryView":180 - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): - * cdef int bufmode = -1 # <<<<<<<<<<<<<< - * if self.mode == u"c": - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - */ - __pyx_v_bufmode = -1; - - /* "View.MemoryView":181 - * def __getbuffer__(self, Py_buffer *info, int flags): - * cdef int bufmode = -1 - * if self.mode == u"c": # <<<<<<<<<<<<<< - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * elif self.mode == u"fortran": - */ - __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_c, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":182 - * cdef int bufmode = -1 - * if self.mode == u"c": - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< - * elif self.mode == u"fortran": - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - */ - __pyx_v_bufmode = (PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); - goto __pyx_L3; - } - - /* "View.MemoryView":183 - * if self.mode == u"c": - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * elif self.mode == u"fortran": # <<<<<<<<<<<<<< - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * if not (flags & bufmode): - */ - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_fortran, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_1 = (__pyx_t_2 != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":184 - * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * elif self.mode == u"fortran": - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< - * if not (flags & bufmode): - * raise ValueError("Can only create a buffer that is contiguous in memory.") - */ - __pyx_v_bufmode = (PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); - goto __pyx_L3; - } - __pyx_L3:; - - /* "View.MemoryView":185 - * elif self.mode == u"fortran": - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * if not (flags & bufmode): # <<<<<<<<<<<<<< - * raise ValueError("Can only create a buffer that is contiguous in memory.") - * info.buf = self.data - */ - __pyx_t_1 = ((!((__pyx_v_flags & __pyx_v_bufmode) != 0)) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":186 - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * if not (flags & bufmode): - * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< - * info.buf = self.data - * info.len = self.len - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "View.MemoryView":187 - * if not (flags & bufmode): - * raise ValueError("Can only create a buffer that is contiguous in memory.") - * info.buf = self.data # <<<<<<<<<<<<<< - * info.len = self.len - * info.ndim = self.ndim - */ - __pyx_t_4 = __pyx_v_self->data; - __pyx_v_info->buf = __pyx_t_4; - - /* "View.MemoryView":188 - * raise ValueError("Can only create a buffer that is contiguous in memory.") - * info.buf = self.data - * info.len = self.len # <<<<<<<<<<<<<< - * info.ndim = self.ndim - * info.shape = self._shape - */ - __pyx_t_5 = __pyx_v_self->len; - __pyx_v_info->len = __pyx_t_5; - - /* "View.MemoryView":189 - * info.buf = self.data - * info.len = self.len - * info.ndim = self.ndim # <<<<<<<<<<<<<< - * info.shape = self._shape - * info.strides = self._strides - */ - __pyx_t_6 = __pyx_v_self->ndim; - __pyx_v_info->ndim = __pyx_t_6; - - /* "View.MemoryView":190 - * info.len = self.len - * info.ndim = self.ndim - * info.shape = self._shape # <<<<<<<<<<<<<< - * info.strides = self._strides - * info.suboffsets = NULL - */ - __pyx_t_7 = __pyx_v_self->_shape; - __pyx_v_info->shape = __pyx_t_7; - - /* "View.MemoryView":191 - * info.ndim = self.ndim - * info.shape = self._shape - * info.strides = self._strides # <<<<<<<<<<<<<< - * info.suboffsets = NULL - * info.itemsize = self.itemsize - */ - __pyx_t_7 = __pyx_v_self->_strides; - __pyx_v_info->strides = __pyx_t_7; - - /* "View.MemoryView":192 - * info.shape = self._shape - * info.strides = self._strides - * info.suboffsets = NULL # <<<<<<<<<<<<<< - * info.itemsize = self.itemsize - * info.readonly = 0 - */ - __pyx_v_info->suboffsets = NULL; - - /* "View.MemoryView":193 - * info.strides = self._strides - * info.suboffsets = NULL - * info.itemsize = self.itemsize # <<<<<<<<<<<<<< - * info.readonly = 0 - * - */ - __pyx_t_5 = __pyx_v_self->itemsize; - __pyx_v_info->itemsize = __pyx_t_5; - - /* "View.MemoryView":194 - * info.suboffsets = NULL - * info.itemsize = self.itemsize - * info.readonly = 0 # <<<<<<<<<<<<<< - * - * if flags & PyBUF_FORMAT: - */ - __pyx_v_info->readonly = 0; - - /* "View.MemoryView":196 - * info.readonly = 0 - * - * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< - * info.format = self.format - * else: - */ - __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":197 - * - * if flags & PyBUF_FORMAT: - * info.format = self.format # <<<<<<<<<<<<<< - * else: - * info.format = NULL - */ - __pyx_t_4 = __pyx_v_self->format; - __pyx_v_info->format = __pyx_t_4; - goto __pyx_L5; - } - /*else*/ { - - /* "View.MemoryView":199 - * info.format = self.format - * else: - * info.format = NULL # <<<<<<<<<<<<<< - * - * info.obj = self - */ - __pyx_v_info->format = NULL; - } - __pyx_L5:; - - /* "View.MemoryView":201 - * info.format = NULL - * - * info.obj = self # <<<<<<<<<<<<<< - * - * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") - */ - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); - __pyx_v_info->obj = ((PyObject *)__pyx_v_self); - - /* "View.MemoryView":179 - * - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< - * cdef int bufmode = -1 - * if self.mode == u"c": - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.array.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) { - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL; - } - goto __pyx_L2; - __pyx_L0:; - if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) { - __Pyx_GOTREF(Py_None); - __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL; - } - __pyx_L2:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":205 - * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") - * - * def __dealloc__(array self): # <<<<<<<<<<<<<< - * if self.callback_free_data != NULL: - * self.callback_free_data(self.data) - */ - -/* Python wrapper */ -static void __pyx_array___dealloc__(PyObject *__pyx_v_self); /*proto*/ -static void __pyx_array___dealloc__(PyObject *__pyx_v_self) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); - __pyx_array_MemoryView_5array_4__dealloc__(((struct __pyx_array_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -static void __pyx_array_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self) { - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("__dealloc__", 0); - - /* "View.MemoryView":206 - * - * def __dealloc__(array self): - * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< - * self.callback_free_data(self.data) - * elif self.free_data: - */ - __pyx_t_1 = ((__pyx_v_self->callback_free_data != NULL) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":207 - * def __dealloc__(array self): - * if self.callback_free_data != NULL: - * self.callback_free_data(self.data) # <<<<<<<<<<<<<< - * elif self.free_data: - * if self.dtype_is_object: - */ - __pyx_v_self->callback_free_data(__pyx_v_self->data); - goto __pyx_L3; - } - - /* "View.MemoryView":208 - * if self.callback_free_data != NULL: - * self.callback_free_data(self.data) - * elif self.free_data: # <<<<<<<<<<<<<< - * if self.dtype_is_object: - * refcount_objects_in_slice(self.data, self._shape, - */ - __pyx_t_1 = (__pyx_v_self->free_data != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":209 - * self.callback_free_data(self.data) - * elif self.free_data: - * if self.dtype_is_object: # <<<<<<<<<<<<<< - * refcount_objects_in_slice(self.data, self._shape, - * self._strides, self.ndim, False) - */ - __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":210 - * elif self.free_data: - * if self.dtype_is_object: - * refcount_objects_in_slice(self.data, self._shape, # <<<<<<<<<<<<<< - * self._strides, self.ndim, False) - * free(self.data) - */ - __pyx_memoryview_refcount_objects_in_slice(__pyx_v_self->data, __pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_self->ndim, 0); - goto __pyx_L4; - } - __pyx_L4:; - - /* "View.MemoryView":212 - * refcount_objects_in_slice(self.data, self._shape, - * self._strides, self.ndim, False) - * free(self.data) # <<<<<<<<<<<<<< - * PyMem_Free(self._shape) - * - */ - free(__pyx_v_self->data); - goto __pyx_L3; - } - __pyx_L3:; - - /* "View.MemoryView":213 - * self._strides, self.ndim, False) - * free(self.data) - * PyMem_Free(self._shape) # <<<<<<<<<<<<<< - * - * property memview: - */ - PyMem_Free(__pyx_v_self->_shape); - - /* "View.MemoryView":205 - * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") - * - * def __dealloc__(array self): # <<<<<<<<<<<<<< - * if self.callback_free_data != NULL: - * self.callback_free_data(self.data) - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "View.MemoryView":217 - * property memview: - * @cname('get_memview') - * def __get__(self): # <<<<<<<<<<<<<< - * - * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE - */ - -/* Python wrapper */ -static PyObject *get_memview(PyObject *__pyx_v_self); /*proto*/ -static PyObject *get_memview(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = get_memview_MemoryView_5array_7memview___get__(((struct __pyx_array_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *get_memview_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self) { - int __pyx_v_flags; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":219 - * def __get__(self): - * - * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE # <<<<<<<<<<<<<< - * return memoryview(self, flags, self.dtype_is_object) - * - */ - __pyx_v_flags = ((PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT) | PyBUF_WRITABLE); - - /* "View.MemoryView":220 - * - * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE - * return memoryview(self, flags, self.dtype_is_object) # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject *)__pyx_memoryview_type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* "View.MemoryView":217 - * property memview: - * @cname('get_memview') - * def __get__(self): # <<<<<<<<<<<<<< - * - * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.array.memview.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":223 - * - * - * def __getattr__(self, attr): # <<<<<<<<<<<<<< - * return getattr(self.memview, attr) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr); /*proto*/ -static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0); - __pyx_r = __pyx_array_MemoryView_5array_6__getattr__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_attr)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_array_MemoryView_5array_6__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__getattr__", 0); - - /* "View.MemoryView":224 - * - * def __getattr__(self, attr): - * return getattr(self.memview, attr) # <<<<<<<<<<<<<< - * - * def __getitem__(self, item): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_GetAttr(__pyx_t_1, __pyx_v_attr); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* "View.MemoryView":223 - * - * - * def __getattr__(self, attr): # <<<<<<<<<<<<<< - * return getattr(self.memview, attr) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.array.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":226 - * return getattr(self.memview, attr) - * - * def __getitem__(self, item): # <<<<<<<<<<<<<< - * return self.memview[item] - * - */ - -/* Python wrapper */ -static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ -static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); - __pyx_r = __pyx_array_MemoryView_5array_8__getitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_array_MemoryView_5array_8__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__getitem__", 0); - - /* "View.MemoryView":227 - * - * def __getitem__(self, item): - * return self.memview[item] # <<<<<<<<<<<<<< - * - * def __setitem__(self, item, value): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* "View.MemoryView":226 - * return getattr(self.memview, attr) - * - * def __getitem__(self, item): # <<<<<<<<<<<<<< - * return self.memview[item] - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.array.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":229 - * return self.memview[item] - * - * def __setitem__(self, item, value): # <<<<<<<<<<<<<< - * self.memview[item] = value - * - */ - -/* Python wrapper */ -static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); - __pyx_r = __pyx_array_MemoryView_5array_10__setitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_array_MemoryView_5array_10__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setitem__", 0); - - /* "View.MemoryView":230 - * - * def __setitem__(self, item, value): - * self.memview[item] = value # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_item, __pyx_v_value) < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "View.MemoryView":229 - * return self.memview[item] - * - * def __setitem__(self, item, value): # <<<<<<<<<<<<<< - * self.memview[item] = value - * - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.array.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":234 - * - * @cname("__pyx_array_new") - * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< - * char *mode, char *buf): - * cdef array result - */ - -static struct __pyx_array_obj *__pyx_array_new(PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, char *__pyx_v_format, char *__pyx_v_mode, char *__pyx_v_buf) { - struct __pyx_array_obj *__pyx_v_result = 0; - struct __pyx_array_obj *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("array_cwrapper", 0); - - /* "View.MemoryView":238 - * cdef array result - * - * if buf == NULL: # <<<<<<<<<<<<<< - * result = array(shape, itemsize, format, mode.decode('ASCII')) - * else: - */ - __pyx_t_1 = ((__pyx_v_buf == NULL) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":239 - * - * if buf == NULL: - * result = array(shape, itemsize, format, mode.decode('ASCII')) # <<<<<<<<<<<<<< - * else: - * result = array(shape, itemsize, format, mode.decode('ASCII'), - */ - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_shape); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_shape); - __Pyx_GIVEREF(__pyx_v_shape); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_2 = 0; - __pyx_t_3 = 0; - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject *)__pyx_array_type)), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_4); - __pyx_t_4 = 0; - goto __pyx_L3; - } - /*else*/ { - - /* "View.MemoryView":241 - * result = array(shape, itemsize, format, mode.decode('ASCII')) - * else: - * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< - * allocate_buffer=False) - * result.data = buf - */ - __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_shape); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape); - __Pyx_GIVEREF(__pyx_v_shape); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_4 = 0; - __pyx_t_5 = 0; - __pyx_t_3 = 0; - __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - - /* "View.MemoryView":242 - * else: - * result = array(shape, itemsize, format, mode.decode('ASCII'), - * allocate_buffer=False) # <<<<<<<<<<<<<< - * result.data = buf - * - */ - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_allocate_buffer, Py_False) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "View.MemoryView":241 - * result = array(shape, itemsize, format, mode.decode('ASCII')) - * else: - * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< - * allocate_buffer=False) - * result.data = buf - */ - __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject *)__pyx_array_type)), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_5); - __pyx_t_5 = 0; - - /* "View.MemoryView":243 - * result = array(shape, itemsize, format, mode.decode('ASCII'), - * allocate_buffer=False) - * result.data = buf # <<<<<<<<<<<<<< - * - * return result - */ - __pyx_v_result->data = __pyx_v_buf; - } - __pyx_L3:; - - /* "View.MemoryView":245 - * result.data = buf - * - * return result # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(((PyObject *)__pyx_r)); - __Pyx_INCREF(((PyObject *)__pyx_v_result)); - __pyx_r = __pyx_v_result; - goto __pyx_L0; - - /* "View.MemoryView":234 - * - * @cname("__pyx_array_new") - * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< - * char *mode, char *buf): - * cdef array result - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.array_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_result); - __Pyx_XGIVEREF((PyObject *)__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":271 - * cdef class Enum(object): - * cdef object name - * def __init__(self, name): # <<<<<<<<<<<<<< - * self.name = name - * def __repr__(self): - */ - -/* Python wrapper */ -static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_name = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0}; - PyObject* values[1] = {0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - } - __pyx_v_name = values[0]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("View.MemoryView.Enum.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return -1; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_MemviewEnum_MemoryView_4Enum___init__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v_name); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_MemviewEnum_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__", 0); - - /* "View.MemoryView":272 - * cdef object name - * def __init__(self, name): - * self.name = name # <<<<<<<<<<<<<< - * def __repr__(self): - * return self.name - */ - __Pyx_INCREF(__pyx_v_name); - __Pyx_GIVEREF(__pyx_v_name); - __Pyx_GOTREF(__pyx_v_self->name); - __Pyx_DECREF(__pyx_v_self->name); - __pyx_v_self->name = __pyx_v_name; - - /* "View.MemoryView":271 - * cdef class Enum(object): - * cdef object name - * def __init__(self, name): # <<<<<<<<<<<<<< - * self.name = name - * def __repr__(self): - */ - - /* function exit code */ - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":273 - * def __init__(self, name): - * self.name = name - * def __repr__(self): # <<<<<<<<<<<<<< - * return self.name - * - */ - -/* Python wrapper */ -static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); - __pyx_r = __pyx_MemviewEnum_MemoryView_4Enum_2__repr__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_MemviewEnum_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__repr__", 0); - - /* "View.MemoryView":274 - * self.name = name - * def __repr__(self): - * return self.name # <<<<<<<<<<<<<< - * - * cdef generic = Enum("") - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->name); - __pyx_r = __pyx_v_self->name; - goto __pyx_L0; - - /* "View.MemoryView":273 - * def __init__(self, name): - * self.name = name - * def __repr__(self): # <<<<<<<<<<<<<< - * return self.name - * - */ - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":288 - * - * @cname('__pyx_align_pointer') - * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< - * "Align pointer memory on a given boundary" - * cdef Py_intptr_t aligned_p = memory - */ - -static void *__pyx_align_pointer(void *__pyx_v_memory, size_t __pyx_v_alignment) { - Py_intptr_t __pyx_v_aligned_p; - size_t __pyx_v_offset; - void *__pyx_r; - int __pyx_t_1; - - /* "View.MemoryView":290 - * cdef void *align_pointer(void *memory, size_t alignment) nogil: - * "Align pointer memory on a given boundary" - * cdef Py_intptr_t aligned_p = memory # <<<<<<<<<<<<<< - * cdef size_t offset - * - */ - __pyx_v_aligned_p = ((Py_intptr_t)__pyx_v_memory); - - /* "View.MemoryView":294 - * - * with cython.cdivision(True): - * offset = aligned_p % alignment # <<<<<<<<<<<<<< - * - * if offset > 0: - */ - __pyx_v_offset = (__pyx_v_aligned_p % __pyx_v_alignment); - - /* "View.MemoryView":296 - * offset = aligned_p % alignment - * - * if offset > 0: # <<<<<<<<<<<<<< - * aligned_p += alignment - offset - * - */ - __pyx_t_1 = ((__pyx_v_offset > 0) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":297 - * - * if offset > 0: - * aligned_p += alignment - offset # <<<<<<<<<<<<<< - * - * return aligned_p - */ - __pyx_v_aligned_p = (__pyx_v_aligned_p + (__pyx_v_alignment - __pyx_v_offset)); - goto __pyx_L3; - } - __pyx_L3:; - - /* "View.MemoryView":299 - * aligned_p += alignment - offset - * - * return aligned_p # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview') - */ - __pyx_r = ((void *)__pyx_v_aligned_p); - goto __pyx_L0; - - /* "View.MemoryView":288 - * - * @cname('__pyx_align_pointer') - * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< - * "Align pointer memory on a given boundary" - * cdef Py_intptr_t aligned_p = memory - */ - - /* function exit code */ - __pyx_L0:; - return __pyx_r; -} - -/* "View.MemoryView":317 - * cdef __Pyx_TypeInfo *typeinfo - * - * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< - * self.obj = obj - * self.flags = flags - */ - -/* Python wrapper */ -static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_obj = 0; - int __pyx_v_flags; - int __pyx_v_dtype_is_object; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_flags,&__pyx_n_s_dtype_is_object,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_flags)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dtype_is_object); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_obj = values[0]; - __pyx_v_flags = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_flags == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (values[2]) { - __pyx_v_dtype_is_object = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_dtype_is_object == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } else { - __pyx_v_dtype_is_object = ((int)0); - } - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return -1; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_memoryview_MemoryView_10memoryview___cinit__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_obj, __pyx_v_flags, __pyx_v_dtype_is_object); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_memoryview_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object) { - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__cinit__", 0); - - /* "View.MemoryView":318 - * - * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): - * self.obj = obj # <<<<<<<<<<<<<< - * self.flags = flags - * if type(self) is memoryview or obj is not None: - */ - __Pyx_INCREF(__pyx_v_obj); - __Pyx_GIVEREF(__pyx_v_obj); - __Pyx_GOTREF(__pyx_v_self->obj); - __Pyx_DECREF(__pyx_v_self->obj); - __pyx_v_self->obj = __pyx_v_obj; - - /* "View.MemoryView":319 - * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): - * self.obj = obj - * self.flags = flags # <<<<<<<<<<<<<< - * if type(self) is memoryview or obj is not None: - * __Pyx_GetBuffer(obj, &self.view, flags) - */ - __pyx_v_self->flags = __pyx_v_flags; - - /* "View.MemoryView":320 - * self.obj = obj - * self.flags = flags - * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< - * __Pyx_GetBuffer(obj, &self.view, flags) - * if self.view.obj == NULL: - */ - __pyx_t_1 = (((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))) == ((PyObject *)((PyObject *)__pyx_memoryview_type))); - if (!(__pyx_t_1 != 0)) { - __pyx_t_2 = (__pyx_v_obj != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - } else { - __pyx_t_3 = (__pyx_t_1 != 0); - } - if (__pyx_t_3) { - - /* "View.MemoryView":321 - * self.flags = flags - * if type(self) is memoryview or obj is not None: - * __Pyx_GetBuffer(obj, &self.view, flags) # <<<<<<<<<<<<<< - * if self.view.obj == NULL: - * (<__pyx_buffer *> &self.view).obj = Py_None - */ - __pyx_t_4 = __Pyx_GetBuffer(__pyx_v_obj, (&__pyx_v_self->view), __pyx_v_flags); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "View.MemoryView":322 - * if type(self) is memoryview or obj is not None: - * __Pyx_GetBuffer(obj, &self.view, flags) - * if self.view.obj == NULL: # <<<<<<<<<<<<<< - * (<__pyx_buffer *> &self.view).obj = Py_None - * Py_INCREF(Py_None) - */ - __pyx_t_3 = ((((PyObject *)__pyx_v_self->view.obj) == NULL) != 0); - if (__pyx_t_3) { - - /* "View.MemoryView":323 - * __Pyx_GetBuffer(obj, &self.view, flags) - * if self.view.obj == NULL: - * (<__pyx_buffer *> &self.view).obj = Py_None # <<<<<<<<<<<<<< - * Py_INCREF(Py_None) - * - */ - ((Py_buffer *)(&__pyx_v_self->view))->obj = Py_None; - - /* "View.MemoryView":324 - * if self.view.obj == NULL: - * (<__pyx_buffer *> &self.view).obj = Py_None - * Py_INCREF(Py_None) # <<<<<<<<<<<<<< - * - * self.lock = PyThread_allocate_lock() - */ - Py_INCREF(Py_None); - goto __pyx_L4; - } - __pyx_L4:; - goto __pyx_L3; - } - __pyx_L3:; - - /* "View.MemoryView":326 - * Py_INCREF(Py_None) - * - * self.lock = PyThread_allocate_lock() # <<<<<<<<<<<<<< - * if self.lock == NULL: - * raise MemoryError - */ - __pyx_v_self->lock = PyThread_allocate_lock(); - - /* "View.MemoryView":327 - * - * self.lock = PyThread_allocate_lock() - * if self.lock == NULL: # <<<<<<<<<<<<<< - * raise MemoryError - * - */ - __pyx_t_3 = ((__pyx_v_self->lock == NULL) != 0); - if (__pyx_t_3) { - - /* "View.MemoryView":328 - * self.lock = PyThread_allocate_lock() - * if self.lock == NULL: - * raise MemoryError # <<<<<<<<<<<<<< - * - * if flags & PyBUF_FORMAT: - */ - PyErr_NoMemory(); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "View.MemoryView":330 - * raise MemoryError - * - * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< - * self.dtype_is_object = self.view.format == b'O' - * else: - */ - __pyx_t_3 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); - if (__pyx_t_3) { - - /* "View.MemoryView":331 - * - * if flags & PyBUF_FORMAT: - * self.dtype_is_object = self.view.format == b'O' # <<<<<<<<<<<<<< - * else: - * self.dtype_is_object = dtype_is_object - */ - __pyx_t_5 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PyObject_RichCompare(__pyx_t_5, __pyx_n_b_O, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_self->dtype_is_object = __pyx_t_3; - goto __pyx_L6; - } - /*else*/ { - - /* "View.MemoryView":333 - * self.dtype_is_object = self.view.format == b'O' - * else: - * self.dtype_is_object = dtype_is_object # <<<<<<<<<<<<<< - * - * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( - */ - __pyx_v_self->dtype_is_object = __pyx_v_dtype_is_object; - } - __pyx_L6:; - - /* "View.MemoryView":335 - * self.dtype_is_object = dtype_is_object - * - * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( # <<<<<<<<<<<<<< - * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) - * self.typeinfo = NULL - */ - __pyx_v_self->acquisition_count_aligned_p = ((__pyx_atomic_int *)__pyx_align_pointer(((void *)(&(__pyx_v_self->acquisition_count[0]))), (sizeof(__pyx_atomic_int)))); - - /* "View.MemoryView":337 - * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( - * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) - * self.typeinfo = NULL # <<<<<<<<<<<<<< - * - * def __dealloc__(memoryview self): - */ - __pyx_v_self->typeinfo = NULL; - - /* "View.MemoryView":317 - * cdef __Pyx_TypeInfo *typeinfo - * - * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< - * self.obj = obj - * self.flags = flags - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":339 - * self.typeinfo = NULL - * - * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< - * if self.obj is not None: - * __Pyx_ReleaseBuffer(&self.view) - */ - -/* Python wrapper */ -static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self); /*proto*/ -static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); - __pyx_memoryview_MemoryView_10memoryview_2__dealloc__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -static void __pyx_memoryview_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self) { - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - __Pyx_RefNannySetupContext("__dealloc__", 0); - - /* "View.MemoryView":340 - * - * def __dealloc__(memoryview self): - * if self.obj is not None: # <<<<<<<<<<<<<< - * __Pyx_ReleaseBuffer(&self.view) - * - */ - __pyx_t_1 = (__pyx_v_self->obj != Py_None); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":341 - * def __dealloc__(memoryview self): - * if self.obj is not None: - * __Pyx_ReleaseBuffer(&self.view) # <<<<<<<<<<<<<< - * - * if self.lock != NULL: - */ - __Pyx_ReleaseBuffer((&__pyx_v_self->view)); - goto __pyx_L3; - } - __pyx_L3:; - - /* "View.MemoryView":343 - * __Pyx_ReleaseBuffer(&self.view) - * - * if self.lock != NULL: # <<<<<<<<<<<<<< - * PyThread_free_lock(self.lock) - * - */ - __pyx_t_2 = ((__pyx_v_self->lock != NULL) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":344 - * - * if self.lock != NULL: - * PyThread_free_lock(self.lock) # <<<<<<<<<<<<<< - * - * cdef char *get_item_pointer(memoryview self, object index) except NULL: - */ - PyThread_free_lock(__pyx_v_self->lock); - goto __pyx_L4; - } - __pyx_L4:; - - /* "View.MemoryView":339 - * self.typeinfo = NULL - * - * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< - * if self.obj is not None: - * __Pyx_ReleaseBuffer(&self.view) - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "View.MemoryView":346 - * PyThread_free_lock(self.lock) - * - * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< - * cdef Py_ssize_t dim - * cdef char *itemp = self.view.buf - */ - -static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { - Py_ssize_t __pyx_v_dim; - char *__pyx_v_itemp; - PyObject *__pyx_v_idx = NULL; - char *__pyx_r; - __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t __pyx_t_3; - PyObject *(*__pyx_t_4)(PyObject *); - PyObject *__pyx_t_5 = NULL; - Py_ssize_t __pyx_t_6; - char *__pyx_t_7; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_item_pointer", 0); - - /* "View.MemoryView":348 - * cdef char *get_item_pointer(memoryview self, object index) except NULL: - * cdef Py_ssize_t dim - * cdef char *itemp = self.view.buf # <<<<<<<<<<<<<< - * - * for dim, idx in enumerate(index): - */ - __pyx_v_itemp = ((char *)__pyx_v_self->view.buf); - - /* "View.MemoryView":350 - * cdef char *itemp = self.view.buf - * - * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< - * itemp = pybuffer_index(&self.view, itemp, idx, dim) - * - */ - __pyx_t_1 = 0; - if (PyList_CheckExact(__pyx_v_index) || PyTuple_CheckExact(__pyx_v_index)) { - __pyx_t_2 = __pyx_v_index; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; - __pyx_t_4 = NULL; - } else { - __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_index); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; - } - for (;;) { - if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) { - if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) { - if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_5 = __pyx_t_4(__pyx_t_2); - if (unlikely(!__pyx_t_5)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[2]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_5); - } - __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_5); - __pyx_t_5 = 0; - __pyx_v_dim = __pyx_t_1; - __pyx_t_1 = (__pyx_t_1 + 1); - - /* "View.MemoryView":351 - * - * for dim, idx in enumerate(index): - * itemp = pybuffer_index(&self.view, itemp, idx, dim) # <<<<<<<<<<<<<< - * - * return itemp - */ - __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_idx); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_7 = __pyx_pybuffer_index((&__pyx_v_self->view), __pyx_v_itemp, __pyx_t_6, __pyx_v_dim); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_itemp = __pyx_t_7; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "View.MemoryView":353 - * itemp = pybuffer_index(&self.view, itemp, idx, dim) - * - * return itemp # <<<<<<<<<<<<<< - * - * - */ - __pyx_r = __pyx_v_itemp; - goto __pyx_L0; - - /* "View.MemoryView":346 - * PyThread_free_lock(self.lock) - * - * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< - * cdef Py_ssize_t dim - * cdef char *itemp = self.view.buf - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.memoryview.get_item_pointer", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_idx); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":356 - * - * - * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< - * if index is Ellipsis: - * return self - */ - -/* Python wrapper */ -static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/ -static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); - __pyx_r = __pyx_memoryview_MemoryView_10memoryview_4__getitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_memoryview_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { - PyObject *__pyx_v_have_slices = NULL; - PyObject *__pyx_v_indices = NULL; - char *__pyx_v_itemp; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - char *__pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__getitem__", 0); - - /* "View.MemoryView":357 - * - * def __getitem__(memoryview self, object index): - * if index is Ellipsis: # <<<<<<<<<<<<<< - * return self - * - */ - __pyx_t_1 = (__pyx_v_index == __pyx_builtin_Ellipsis); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":358 - * def __getitem__(memoryview self, object index): - * if index is Ellipsis: - * return self # <<<<<<<<<<<<<< - * - * have_slices, indices = _unellipsify(index, self.view.ndim) - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - __pyx_r = ((PyObject *)__pyx_v_self); - goto __pyx_L0; - } - - /* "View.MemoryView":360 - * return self - * - * have_slices, indices = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< - * - * cdef char *itemp - */ - __pyx_t_3 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (likely(__pyx_t_3 != Py_None)) { - PyObject* sequence = __pyx_t_3; - #if CYTHON_COMPILING_IN_CPYTHON - Py_ssize_t size = Py_SIZE(sequence); - #else - Py_ssize_t size = PySequence_Size(sequence); - #endif - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - #else - __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - #endif - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else { - __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_v_have_slices = __pyx_t_4; - __pyx_t_4 = 0; - __pyx_v_indices = __pyx_t_5; - __pyx_t_5 = 0; - - /* "View.MemoryView":363 - * - * cdef char *itemp - * if have_slices: # <<<<<<<<<<<<<< - * return memview_slice(self, indices) - * else: - */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_2) { - - /* "View.MemoryView":364 - * cdef char *itemp - * if have_slices: - * return memview_slice(self, indices) # <<<<<<<<<<<<<< - * else: - * itemp = self.get_item_pointer(indices) - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = ((PyObject *)__pyx_memview_slice(__pyx_v_self, __pyx_v_indices)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - } - /*else*/ { - - /* "View.MemoryView":366 - * return memview_slice(self, indices) - * else: - * itemp = self.get_item_pointer(indices) # <<<<<<<<<<<<<< - * return self.convert_item_to_object(itemp) - * - */ - __pyx_t_6 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_indices); if (unlikely(__pyx_t_6 == NULL)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_itemp = __pyx_t_6; - - /* "View.MemoryView":367 - * else: - * itemp = self.get_item_pointer(indices) - * return self.convert_item_to_object(itemp) # <<<<<<<<<<<<<< - * - * def __setitem__(memoryview self, object index, object value): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->convert_item_to_object(__pyx_v_self, __pyx_v_itemp); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - } - - /* "View.MemoryView":356 - * - * - * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< - * if index is Ellipsis: - * return self - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.memoryview.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_have_slices); - __Pyx_XDECREF(__pyx_v_indices); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":369 - * return self.convert_item_to_object(itemp) - * - * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< - * have_slices, index = _unellipsify(index, self.view.ndim) - * - */ - -/* Python wrapper */ -static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); - __pyx_r = __pyx_memoryview_MemoryView_10memoryview_6__setitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_memoryview_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { - PyObject *__pyx_v_have_slices = NULL; - PyObject *__pyx_v_obj = NULL; - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setitem__", 0); - __Pyx_INCREF(__pyx_v_index); - - /* "View.MemoryView":370 - * - * def __setitem__(memoryview self, object index, object value): - * have_slices, index = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< - * - * if have_slices: - */ - __pyx_t_1 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (likely(__pyx_t_1 != Py_None)) { - PyObject* sequence = __pyx_t_1; - #if CYTHON_COMPILING_IN_CPYTHON - Py_ssize_t size = Py_SIZE(sequence); - #else - Py_ssize_t size = PySequence_Size(sequence); - #endif - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - #else - __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - #endif - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } else { - __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_v_have_slices = __pyx_t_2; - __pyx_t_2 = 0; - __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_3); - __pyx_t_3 = 0; - - /* "View.MemoryView":372 - * have_slices, index = _unellipsify(index, self.view.ndim) - * - * if have_slices: # <<<<<<<<<<<<<< - * obj = self.is_slice(value) - * if obj: - */ - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_4) { - - /* "View.MemoryView":373 - * - * if have_slices: - * obj = self.is_slice(value) # <<<<<<<<<<<<<< - * if obj: - * self.setitem_slice_assignment(self[index], obj) - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->is_slice(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_obj = __pyx_t_1; - __pyx_t_1 = 0; - - /* "View.MemoryView":374 - * if have_slices: - * obj = self.is_slice(value) - * if obj: # <<<<<<<<<<<<<< - * self.setitem_slice_assignment(self[index], obj) - * else: - */ - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_4) { - - /* "View.MemoryView":375 - * obj = self.is_slice(value) - * if obj: - * self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<< - * else: - * self.setitem_slice_assign_scalar(self[index], value) - */ - __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assignment(__pyx_v_self, __pyx_t_1, __pyx_v_obj); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L4; - } - /*else*/ { - - /* "View.MemoryView":377 - * self.setitem_slice_assignment(self[index], obj) - * else: - * self.setitem_slice_assign_scalar(self[index], value) # <<<<<<<<<<<<<< - * else: - * self.setitem_indexed(index, value) - */ - __pyx_t_3 = PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_3); - if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assign_scalar(__pyx_v_self, ((struct __pyx_memoryview_obj *)__pyx_t_3), __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __pyx_L4:; - goto __pyx_L3; - } - /*else*/ { - - /* "View.MemoryView":379 - * self.setitem_slice_assign_scalar(self[index], value) - * else: - * self.setitem_indexed(index, value) # <<<<<<<<<<<<<< - * - * cdef is_slice(self, obj): - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_indexed(__pyx_v_self, __pyx_v_index, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __pyx_L3:; - - /* "View.MemoryView":369 - * return self.convert_item_to_object(itemp) - * - * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< - * have_slices, index = _unellipsify(index, self.view.ndim) - * - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_have_slices); - __Pyx_XDECREF(__pyx_v_obj); - __Pyx_XDECREF(__pyx_v_index); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":381 - * self.setitem_indexed(index, value) - * - * cdef is_slice(self, obj): # <<<<<<<<<<<<<< - * if not isinstance(obj, memoryview): - * try: - */ - -static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("is_slice", 0); - __Pyx_INCREF(__pyx_v_obj); - - /* "View.MemoryView":382 - * - * cdef is_slice(self, obj): - * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< - * try: - * obj = memoryview(obj, self.flags|PyBUF_ANY_CONTIGUOUS, - */ - __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, ((PyObject *)__pyx_memoryview_type)); - __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":383 - * cdef is_slice(self, obj): - * if not isinstance(obj, memoryview): - * try: # <<<<<<<<<<<<<< - * obj = memoryview(obj, self.flags|PyBUF_ANY_CONTIGUOUS, - * self.dtype_is_object) - */ - { - __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_5); - /*try:*/ { - - /* "View.MemoryView":384 - * if not isinstance(obj, memoryview): - * try: - * obj = memoryview(obj, self.flags|PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< - * self.dtype_is_object) - * except TypeError: - */ - __pyx_t_6 = __Pyx_PyInt_From_int((__pyx_v_self->flags | PyBUF_ANY_CONTIGUOUS)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L4_error;} - __Pyx_GOTREF(__pyx_t_6); - - /* "View.MemoryView":385 - * try: - * obj = memoryview(obj, self.flags|PyBUF_ANY_CONTIGUOUS, - * self.dtype_is_object) # <<<<<<<<<<<<<< - * except TypeError: - * return None - */ - __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L4_error;} - __Pyx_GOTREF(__pyx_t_7); - - /* "View.MemoryView":384 - * if not isinstance(obj, memoryview): - * try: - * obj = memoryview(obj, self.flags|PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< - * self.dtype_is_object) - * except TypeError: - */ - __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L4_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_obj); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_obj); - __Pyx_GIVEREF(__pyx_v_obj); - PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7); - __Pyx_GIVEREF(__pyx_t_7); - __pyx_t_6 = 0; - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)((PyObject *)__pyx_memoryview_type)), __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L4_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_7); - __pyx_t_7 = 0; - } - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L11_try_end; - __pyx_L4_error:; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "View.MemoryView":386 - * obj = memoryview(obj, self.flags|PyBUF_ANY_CONTIGUOUS, - * self.dtype_is_object) - * except TypeError: # <<<<<<<<<<<<<< - * return None - * - */ - __pyx_t_9 = PyErr_ExceptionMatches(__pyx_builtin_TypeError); - if (__pyx_t_9) { - __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_6); - - /* "View.MemoryView":387 - * self.dtype_is_object) - * except TypeError: - * return None # <<<<<<<<<<<<<< - * - * return obj - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_None); - __pyx_r = Py_None; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L7_except_return; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L5_exception_handled; - } - goto __pyx_L6_except_error; - __pyx_L6_except_error:; - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); - goto __pyx_L1_error; - __pyx_L7_except_return:; - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); - goto __pyx_L0; - __pyx_L5_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); - __pyx_L11_try_end:; - } - goto __pyx_L3; - } - __pyx_L3:; - - /* "View.MemoryView":389 - * return None - * - * return obj # <<<<<<<<<<<<<< - * - * cdef setitem_slice_assignment(self, dst, src): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_obj); - __pyx_r = __pyx_v_obj; - goto __pyx_L0; - - /* "View.MemoryView":381 - * self.setitem_indexed(index, value) - * - * cdef is_slice(self, obj): # <<<<<<<<<<<<<< - * if not isinstance(obj, memoryview): - * try: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_obj); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":391 - * return obj - * - * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice dst_slice - * cdef __Pyx_memviewslice src_slice - */ - -static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src) { - __Pyx_memviewslice __pyx_v_dst_slice; - __Pyx_memviewslice __pyx_v_src_slice; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("setitem_slice_assignment", 0); - - /* "View.MemoryView":395 - * cdef __Pyx_memviewslice src_slice - * - * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< - * get_slice_from_memview(dst, &dst_slice)[0], - * src.ndim, dst.ndim, self.dtype_is_object) - */ - if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "View.MemoryView":396 - * - * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], - * get_slice_from_memview(dst, &dst_slice)[0], # <<<<<<<<<<<<<< - * src.ndim, dst.ndim, self.dtype_is_object) - * - */ - if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "View.MemoryView":397 - * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], - * get_slice_from_memview(dst, &dst_slice)[0], - * src.ndim, dst.ndim, self.dtype_is_object) # <<<<<<<<<<<<<< - * - * cdef setitem_slice_assign_scalar(self, memoryview dst, value): - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "View.MemoryView":395 - * cdef __Pyx_memviewslice src_slice - * - * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< - * get_slice_from_memview(dst, &dst_slice)[0], - * src.ndim, dst.ndim, self.dtype_is_object) - */ - __pyx_t_4 = __pyx_memoryview_copy_contents((__pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice))[0]), (__pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice))[0]), __pyx_t_2, __pyx_t_3, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "View.MemoryView":391 - * return obj - * - * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice dst_slice - * cdef __Pyx_memviewslice src_slice - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":399 - * src.ndim, dst.ndim, self.dtype_is_object) - * - * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< - * cdef int array[128] - * cdef void *tmp = NULL - */ - -static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value) { - int __pyx_v_array[128]; - void *__pyx_v_tmp; - void *__pyx_v_item; - __Pyx_memviewslice *__pyx_v_dst_slice; - __Pyx_memviewslice __pyx_v_tmp_slice; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - int __pyx_t_4; - char const *__pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0); - - /* "View.MemoryView":401 - * cdef setitem_slice_assign_scalar(self, memoryview dst, value): - * cdef int array[128] - * cdef void *tmp = NULL # <<<<<<<<<<<<<< - * cdef void *item - * - */ - __pyx_v_tmp = NULL; - - /* "View.MemoryView":406 - * cdef __Pyx_memviewslice *dst_slice - * cdef __Pyx_memviewslice tmp_slice - * dst_slice = get_slice_from_memview(dst, &tmp_slice) # <<<<<<<<<<<<<< - * - * if self.view.itemsize > sizeof(array): - */ - __pyx_v_dst_slice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice)); - - /* "View.MemoryView":408 - * dst_slice = get_slice_from_memview(dst, &tmp_slice) - * - * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< - * tmp = PyMem_Malloc(self.view.itemsize) - * if tmp == NULL: - */ - __pyx_t_1 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":409 - * - * if self.view.itemsize > sizeof(array): - * tmp = PyMem_Malloc(self.view.itemsize) # <<<<<<<<<<<<<< - * if tmp == NULL: - * raise MemoryError - */ - __pyx_v_tmp = PyMem_Malloc(__pyx_v_self->view.itemsize); - - /* "View.MemoryView":410 - * if self.view.itemsize > sizeof(array): - * tmp = PyMem_Malloc(self.view.itemsize) - * if tmp == NULL: # <<<<<<<<<<<<<< - * raise MemoryError - * item = tmp - */ - __pyx_t_1 = ((__pyx_v_tmp == NULL) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":411 - * tmp = PyMem_Malloc(self.view.itemsize) - * if tmp == NULL: - * raise MemoryError # <<<<<<<<<<<<<< - * item = tmp - * else: - */ - PyErr_NoMemory(); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "View.MemoryView":412 - * if tmp == NULL: - * raise MemoryError - * item = tmp # <<<<<<<<<<<<<< - * else: - * item = array - */ - __pyx_v_item = __pyx_v_tmp; - goto __pyx_L3; - } - /*else*/ { - - /* "View.MemoryView":414 - * item = tmp - * else: - * item = array # <<<<<<<<<<<<<< - * - * try: - */ - __pyx_v_item = ((void *)__pyx_v_array); - } - __pyx_L3:; - - /* "View.MemoryView":416 - * item = array - * - * try: # <<<<<<<<<<<<<< - * if self.dtype_is_object: - * ( item)[0] = value - */ - /*try:*/ { - - /* "View.MemoryView":417 - * - * try: - * if self.dtype_is_object: # <<<<<<<<<<<<<< - * ( item)[0] = value - * else: - */ - __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":418 - * try: - * if self.dtype_is_object: - * ( item)[0] = value # <<<<<<<<<<<<<< - * else: - * self.assign_item_from_object( item, value) - */ - (((PyObject **)__pyx_v_item)[0]) = ((PyObject *)__pyx_v_value); - goto __pyx_L8; - } - /*else*/ { - - /* "View.MemoryView":420 - * ( item)[0] = value - * else: - * self.assign_item_from_object( item, value) # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L6_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __pyx_L8:; - - /* "View.MemoryView":424 - * - * - * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< - * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) - * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, - */ - __pyx_t_1 = ((__pyx_v_self->view.suboffsets != NULL) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":425 - * - * if self.view.suboffsets != NULL: - * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) # <<<<<<<<<<<<<< - * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, - * item, self.dtype_is_object) - */ - __pyx_t_2 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L6_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L9; - } - __pyx_L9:; - - /* "View.MemoryView":426 - * if self.view.suboffsets != NULL: - * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) - * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, # <<<<<<<<<<<<<< - * item, self.dtype_is_object) - * finally: - */ - __pyx_memoryview_slice_assign_scalar(__pyx_v_dst_slice, __pyx_v_dst->view.ndim, __pyx_v_self->view.itemsize, __pyx_v_item, __pyx_v_self->dtype_is_object); - } - - /* "View.MemoryView":429 - * item, self.dtype_is_object) - * finally: - * PyMem_Free(tmp) # <<<<<<<<<<<<<< - * - * cdef setitem_indexed(self, index, value): - */ - /*finally:*/ { - /*normal exit:*/{ - PyMem_Free(__pyx_v_tmp); - goto __pyx_L7; - } - /*exception exit:*/{ - __pyx_L6_error:; - __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8); - __Pyx_XGOTREF(__pyx_t_6); - __Pyx_XGOTREF(__pyx_t_7); - __Pyx_XGOTREF(__pyx_t_8); - __Pyx_XGOTREF(__pyx_t_9); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename; - { - PyMem_Free(__pyx_v_tmp); - } - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); - } - __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8); - __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; - __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5; - goto __pyx_L1_error; - } - __pyx_L7:; - } - - /* "View.MemoryView":399 - * src.ndim, dst.ndim, self.dtype_is_object) - * - * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< - * cdef int array[128] - * cdef void *tmp = NULL - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":431 - * PyMem_Free(tmp) - * - * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< - * cdef char *itemp = self.get_item_pointer(index) - * self.assign_item_from_object(itemp, value) - */ - -static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { - char *__pyx_v_itemp; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - char *__pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("setitem_indexed", 0); - - /* "View.MemoryView":432 - * - * cdef setitem_indexed(self, index, value): - * cdef char *itemp = self.get_item_pointer(index) # <<<<<<<<<<<<<< - * self.assign_item_from_object(itemp, value) - * - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_index); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_itemp = __pyx_t_1; - - /* "View.MemoryView":433 - * cdef setitem_indexed(self, index, value): - * cdef char *itemp = self.get_item_pointer(index) - * self.assign_item_from_object(itemp, value) # <<<<<<<<<<<<<< - * - * cdef convert_item_to_object(self, char *itemp): - */ - __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "View.MemoryView":431 - * PyMem_Free(tmp) - * - * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< - * cdef char *itemp = self.get_item_pointer(index) - * self.assign_item_from_object(itemp, value) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_indexed", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":435 - * self.assign_item_from_object(itemp, value) - * - * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< - * """Only used if instantiated manually by the user, or if Cython doesn't - * know how to convert the type""" - */ - -static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp) { - PyObject *__pyx_v_struct = NULL; - PyObject *__pyx_v_bytesitem = 0; - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - size_t __pyx_t_7; - int __pyx_t_8; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("convert_item_to_object", 0); - - /* "View.MemoryView":438 - * """Only used if instantiated manually by the user, or if Cython doesn't - * know how to convert the type""" - * import struct # <<<<<<<<<<<<<< - * cdef bytes bytesitem - * - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_struct = __pyx_t_1; - __pyx_t_1 = 0; - - /* "View.MemoryView":441 - * cdef bytes bytesitem - * - * bytesitem = itemp[:self.view.itemsize] # <<<<<<<<<<<<<< - * try: - * result = struct.unpack(self.view.format, bytesitem) - */ - __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_itemp + 0, __pyx_v_self->view.itemsize - 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_bytesitem = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "View.MemoryView":442 - * - * bytesitem = itemp[:self.view.itemsize] - * try: # <<<<<<<<<<<<<< - * result = struct.unpack(self.view.format, bytesitem) - * except struct.error: - */ - { - __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_4); - /*try:*/ { - - /* "View.MemoryView":443 - * bytesitem = itemp[:self.view.itemsize] - * try: - * result = struct.unpack(self.view.format, bytesitem) # <<<<<<<<<<<<<< - * except struct.error: - * raise ValueError("Unable to convert item to object") - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_unpack); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_bytesitem); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_bytesitem); - __Pyx_GIVEREF(__pyx_v_bytesitem); - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_result = __pyx_t_5; - __pyx_t_5 = 0; - } - /*else:*/ { - - /* "View.MemoryView":447 - * raise ValueError("Unable to convert item to object") - * else: - * if len(self.view.format) == 1: # <<<<<<<<<<<<<< - * return result[0] - * return result - */ - __pyx_t_7 = strlen(__pyx_v_self->view.format); - __pyx_t_8 = ((__pyx_t_7 == 1) != 0); - if (__pyx_t_8) { - - /* "View.MemoryView":448 - * else: - * if len(self.view.format) == 1: - * return result[0] # <<<<<<<<<<<<<< - * return result - * - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_result, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}; - __Pyx_GOTREF(__pyx_t_5); - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L6_except_return; - } - - /* "View.MemoryView":449 - * if len(self.view.format) == 1: - * return result[0] - * return result # <<<<<<<<<<<<<< - * - * cdef assign_item_from_object(self, char *itemp, object value): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_result); - __pyx_r = __pyx_v_result; - goto __pyx_L6_except_return; - } - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "View.MemoryView":444 - * try: - * result = struct.unpack(self.view.format, bytesitem) - * except struct.error: # <<<<<<<<<<<<<< - * raise ValueError("Unable to convert item to object") - * else: - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_error); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = PyErr_ExceptionMatches(__pyx_t_5); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_9) { - __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_1) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_1); - - /* "View.MemoryView":445 - * result = struct.unpack(self.view.format, bytesitem) - * except struct.error: - * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< - * else: - * if len(self.view.format) == 1: - */ - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_Raise(__pyx_t_10, 0, 0, 0); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L1_error; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - __pyx_L10_try_end:; - } - - /* "View.MemoryView":435 - * self.assign_item_from_object(itemp, value) - * - * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< - * """Only used if instantiated manually by the user, or if Cython doesn't - * know how to convert the type""" - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_struct); - __Pyx_XDECREF(__pyx_v_bytesitem); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":451 - * return result - * - * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< - * """Only used if instantiated manually by the user, or if Cython doesn't - * know how to convert the type""" - */ - -static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { - PyObject *__pyx_v_struct = NULL; - char __pyx_v_c; - PyObject *__pyx_v_bytesvalue = 0; - Py_ssize_t __pyx_v_i; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - Py_ssize_t __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - char *__pyx_t_9; - char *__pyx_t_10; - char *__pyx_t_11; - char *__pyx_t_12; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("assign_item_from_object", 0); - - /* "View.MemoryView":454 - * """Only used if instantiated manually by the user, or if Cython doesn't - * know how to convert the type""" - * import struct # <<<<<<<<<<<<<< - * cdef char c - * cdef bytes bytesvalue - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_struct = __pyx_t_1; - __pyx_t_1 = 0; - - /* "View.MemoryView":459 - * cdef Py_ssize_t i - * - * if isinstance(value, tuple): # <<<<<<<<<<<<<< - * bytesvalue = struct.pack(self.view.format, *value) - * else: - */ - __pyx_t_2 = PyTuple_Check(__pyx_v_value); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - - /* "View.MemoryView":460 - * - * if isinstance(value, tuple): - * bytesvalue = struct.pack(self.view.format, *value) # <<<<<<<<<<<<<< - * else: - * bytesvalue = struct.pack(self.view.format, value) - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); - __pyx_t_4 = 0; - goto __pyx_L3; - } - /*else*/ { - - /* "View.MemoryView":462 - * bytesvalue = struct.pack(self.view.format, *value) - * else: - * bytesvalue = struct.pack(self.view.format, value) # <<<<<<<<<<<<<< - * - * for i, c in enumerate(bytesvalue): - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_6); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(PyBytes_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_6)->tp_name), 0))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_bytesvalue = ((PyObject*)__pyx_t_6); - __pyx_t_6 = 0; - } - __pyx_L3:; - - /* "View.MemoryView":464 - * bytesvalue = struct.pack(self.view.format, value) - * - * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< - * itemp[i] = c - * - */ - __pyx_t_7 = 0; - if (unlikely(__pyx_v_bytesvalue == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable"); - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __Pyx_INCREF(__pyx_v_bytesvalue); - __pyx_t_8 = __pyx_v_bytesvalue; - __pyx_t_10 = PyBytes_AS_STRING(__pyx_t_8); - __pyx_t_11 = (__pyx_t_10 + PyBytes_GET_SIZE(__pyx_t_8)); - for (__pyx_t_12 = __pyx_t_10; __pyx_t_12 < __pyx_t_11; __pyx_t_12++) { - __pyx_t_9 = __pyx_t_12; - __pyx_v_c = (__pyx_t_9[0]); - - /* "View.MemoryView":465 - * - * for i, c in enumerate(bytesvalue): - * itemp[i] = c # <<<<<<<<<<<<<< - * - * @cname('getbuffer') - */ - __pyx_v_i = __pyx_t_7; - - /* "View.MemoryView":464 - * bytesvalue = struct.pack(self.view.format, value) - * - * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< - * itemp[i] = c - * - */ - __pyx_t_7 = (__pyx_t_7 + 1); - - /* "View.MemoryView":465 - * - * for i, c in enumerate(bytesvalue): - * itemp[i] = c # <<<<<<<<<<<<<< - * - * @cname('getbuffer') - */ - (__pyx_v_itemp[__pyx_v_i]) = __pyx_v_c; - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "View.MemoryView":451 - * return result - * - * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< - * """Only used if instantiated manually by the user, or if Cython doesn't - * know how to convert the type""" - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("View.MemoryView.memoryview.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_struct); - __Pyx_XDECREF(__pyx_v_bytesvalue); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":468 - * - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< - * if flags & PyBUF_STRIDES: - * info.shape = self.view.shape - */ - -/* Python wrapper */ -static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ -static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); - __pyx_r = __pyx_memoryview_getbuffer_MemoryView_10memoryview_8__getbuffer__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_memoryview_getbuffer_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - Py_ssize_t *__pyx_t_2; - char *__pyx_t_3; - void *__pyx_t_4; - int __pyx_t_5; - Py_ssize_t __pyx_t_6; - __Pyx_RefNannySetupContext("__getbuffer__", 0); - if (__pyx_v_info != NULL) { - __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(__pyx_v_info->obj); - } - - /* "View.MemoryView":469 - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): - * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< - * info.shape = self.view.shape - * else: - */ - __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":470 - * def __getbuffer__(self, Py_buffer *info, int flags): - * if flags & PyBUF_STRIDES: - * info.shape = self.view.shape # <<<<<<<<<<<<<< - * else: - * info.shape = NULL - */ - __pyx_t_2 = __pyx_v_self->view.shape; - __pyx_v_info->shape = __pyx_t_2; - goto __pyx_L3; - } - /*else*/ { - - /* "View.MemoryView":472 - * info.shape = self.view.shape - * else: - * info.shape = NULL # <<<<<<<<<<<<<< - * - * if flags & PyBUF_STRIDES: - */ - __pyx_v_info->shape = NULL; - } - __pyx_L3:; - - /* "View.MemoryView":474 - * info.shape = NULL - * - * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< - * info.strides = self.view.strides - * else: - */ - __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":475 - * - * if flags & PyBUF_STRIDES: - * info.strides = self.view.strides # <<<<<<<<<<<<<< - * else: - * info.strides = NULL - */ - __pyx_t_2 = __pyx_v_self->view.strides; - __pyx_v_info->strides = __pyx_t_2; - goto __pyx_L4; - } - /*else*/ { - - /* "View.MemoryView":477 - * info.strides = self.view.strides - * else: - * info.strides = NULL # <<<<<<<<<<<<<< - * - * if flags & PyBUF_INDIRECT: - */ - __pyx_v_info->strides = NULL; - } - __pyx_L4:; - - /* "View.MemoryView":479 - * info.strides = NULL - * - * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< - * info.suboffsets = self.view.suboffsets - * else: - */ - __pyx_t_1 = ((__pyx_v_flags & PyBUF_INDIRECT) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":480 - * - * if flags & PyBUF_INDIRECT: - * info.suboffsets = self.view.suboffsets # <<<<<<<<<<<<<< - * else: - * info.suboffsets = NULL - */ - __pyx_t_2 = __pyx_v_self->view.suboffsets; - __pyx_v_info->suboffsets = __pyx_t_2; - goto __pyx_L5; - } - /*else*/ { - - /* "View.MemoryView":482 - * info.suboffsets = self.view.suboffsets - * else: - * info.suboffsets = NULL # <<<<<<<<<<<<<< - * - * if flags & PyBUF_FORMAT: - */ - __pyx_v_info->suboffsets = NULL; - } - __pyx_L5:; - - /* "View.MemoryView":484 - * info.suboffsets = NULL - * - * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< - * info.format = self.view.format - * else: - */ - __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":485 - * - * if flags & PyBUF_FORMAT: - * info.format = self.view.format # <<<<<<<<<<<<<< - * else: - * info.format = NULL - */ - __pyx_t_3 = __pyx_v_self->view.format; - __pyx_v_info->format = __pyx_t_3; - goto __pyx_L6; - } - /*else*/ { - - /* "View.MemoryView":487 - * info.format = self.view.format - * else: - * info.format = NULL # <<<<<<<<<<<<<< - * - * info.buf = self.view.buf - */ - __pyx_v_info->format = NULL; - } - __pyx_L6:; - - /* "View.MemoryView":489 - * info.format = NULL - * - * info.buf = self.view.buf # <<<<<<<<<<<<<< - * info.ndim = self.view.ndim - * info.itemsize = self.view.itemsize - */ - __pyx_t_4 = __pyx_v_self->view.buf; - __pyx_v_info->buf = __pyx_t_4; - - /* "View.MemoryView":490 - * - * info.buf = self.view.buf - * info.ndim = self.view.ndim # <<<<<<<<<<<<<< - * info.itemsize = self.view.itemsize - * info.len = self.view.len - */ - __pyx_t_5 = __pyx_v_self->view.ndim; - __pyx_v_info->ndim = __pyx_t_5; - - /* "View.MemoryView":491 - * info.buf = self.view.buf - * info.ndim = self.view.ndim - * info.itemsize = self.view.itemsize # <<<<<<<<<<<<<< - * info.len = self.view.len - * info.readonly = 0 - */ - __pyx_t_6 = __pyx_v_self->view.itemsize; - __pyx_v_info->itemsize = __pyx_t_6; - - /* "View.MemoryView":492 - * info.ndim = self.view.ndim - * info.itemsize = self.view.itemsize - * info.len = self.view.len # <<<<<<<<<<<<<< - * info.readonly = 0 - * info.obj = self - */ - __pyx_t_6 = __pyx_v_self->view.len; - __pyx_v_info->len = __pyx_t_6; - - /* "View.MemoryView":493 - * info.itemsize = self.view.itemsize - * info.len = self.view.len - * info.readonly = 0 # <<<<<<<<<<<<<< - * info.obj = self - * - */ - __pyx_v_info->readonly = 0; - - /* "View.MemoryView":494 - * info.len = self.view.len - * info.readonly = 0 - * info.obj = self # <<<<<<<<<<<<<< - * - * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") - */ - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); - __pyx_v_info->obj = ((PyObject *)__pyx_v_self); - - /* "View.MemoryView":468 - * - * @cname('getbuffer') - * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< - * if flags & PyBUF_STRIDES: - * info.shape = self.view.shape - */ - - /* function exit code */ - __pyx_r = 0; - if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) { - __Pyx_GOTREF(Py_None); - __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL; - } - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":501 - * property T: - * @cname('__pyx_memoryview_transpose') - * def __get__(self): # <<<<<<<<<<<<<< - * cdef _memoryviewslice result = memoryview_copy(self) - * transpose_memslice(&result.from_slice) - */ - -/* Python wrapper */ -static PyObject *__pyx_memoryview_transpose(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview_transpose(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_memoryview_transpose_MemoryView_10memoryview_1T___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_memoryview_transpose_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":502 - * @cname('__pyx_memoryview_transpose') - * def __get__(self): - * cdef _memoryviewslice result = memoryview_copy(self) # <<<<<<<<<<<<<< - * transpose_memslice(&result.from_slice) - * return result - */ - __pyx_t_1 = __pyx_memoryview_copy_object(__pyx_v_self); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_memoryviewslice_type))))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "View.MemoryView":503 - * def __get__(self): - * cdef _memoryviewslice result = memoryview_copy(self) - * transpose_memslice(&result.from_slice) # <<<<<<<<<<<<<< - * return result - * - */ - __pyx_t_2 = __pyx_memslice_transpose((&__pyx_v_result->from_slice)); if (unlikely(__pyx_t_2 == 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "View.MemoryView":504 - * cdef _memoryviewslice result = memoryview_copy(self) - * transpose_memslice(&result.from_slice) - * return result # <<<<<<<<<<<<<< - * - * property base: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_result)); - __pyx_r = ((PyObject *)__pyx_v_result); - goto __pyx_L0; - - /* "View.MemoryView":501 - * property T: - * @cname('__pyx_memoryview_transpose') - * def __get__(self): # <<<<<<<<<<<<<< - * cdef _memoryviewslice result = memoryview_copy(self) - * transpose_memslice(&result.from_slice) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview.T.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":508 - * property base: - * @cname('__pyx_memoryview__get__base') - * def __get__(self): # <<<<<<<<<<<<<< - * return self.obj - * - */ - -/* Python wrapper */ -static PyObject *__pyx_memoryview__get__base(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview__get__base(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_memoryview__get__base_MemoryView_10memoryview_4base___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_memoryview__get__base_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":509 - * @cname('__pyx_memoryview__get__base') - * def __get__(self): - * return self.obj # <<<<<<<<<<<<<< - * - * property shape: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->obj); - __pyx_r = __pyx_v_self->obj; - goto __pyx_L0; - - /* "View.MemoryView":508 - * property base: - * @cname('__pyx_memoryview__get__base') - * def __get__(self): # <<<<<<<<<<<<<< - * return self.obj - * - */ - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":513 - * property shape: - * @cname('__pyx_memoryview_get_shape') - * def __get__(self): # <<<<<<<<<<<<<< - * return tuple([self.view.shape[i] for i in xrange(self.view.ndim)]) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_memoryview_get_shape(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview_get_shape(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_memoryview_get_shape_MemoryView_10memoryview_5shape___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_memoryview_get_shape_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - int __pyx_v_i; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":514 - * @cname('__pyx_memoryview_get_shape') - * def __get__(self): - * return tuple([self.view.shape[i] for i in xrange(self.view.ndim)]) # <<<<<<<<<<<<<< - * - * property strides: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __pyx_v_self->view.ndim; - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { - __pyx_v_i = __pyx_t_3; - __pyx_t_4 = PyInt_FromSsize_t((__pyx_v_self->view.shape[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __pyx_t_4 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - - /* "View.MemoryView":513 - * property shape: - * @cname('__pyx_memoryview_get_shape') - * def __get__(self): # <<<<<<<<<<<<<< - * return tuple([self.view.shape[i] for i in xrange(self.view.ndim)]) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("View.MemoryView.memoryview.shape.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":518 - * property strides: - * @cname('__pyx_memoryview_get_strides') - * def __get__(self): # <<<<<<<<<<<<<< - * if self.view.strides == NULL: - * - */ - -/* Python wrapper */ -static PyObject *__pyx_memoryview_get_strides(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview_get_strides(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_memoryview_get_strides_MemoryView_10memoryview_7strides___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_memoryview_get_strides_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - int __pyx_v_i; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":519 - * @cname('__pyx_memoryview_get_strides') - * def __get__(self): - * if self.view.strides == NULL: # <<<<<<<<<<<<<< - * - * raise ValueError("Buffer view does not expose strides") - */ - __pyx_t_1 = ((__pyx_v_self->view.strides == NULL) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":521 - * if self.view.strides == NULL: - * - * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< - * - * return tuple([self.view.strides[i] for i in xrange(self.view.ndim)]) - */ - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_Raise(__pyx_t_2, 0, 0, 0); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "View.MemoryView":523 - * raise ValueError("Buffer view does not expose strides") - * - * return tuple([self.view.strides[i] for i in xrange(self.view.ndim)]) # <<<<<<<<<<<<<< - * - * property suboffsets: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __pyx_v_self->view.ndim; - for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { - __pyx_v_i = __pyx_t_4; - __pyx_t_5 = PyInt_FromSsize_t((__pyx_v_self->view.strides[__pyx_v_i])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_5))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L0; - - /* "View.MemoryView":518 - * property strides: - * @cname('__pyx_memoryview_get_strides') - * def __get__(self): # <<<<<<<<<<<<<< - * if self.view.strides == NULL: - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.memoryview.strides.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":527 - * property suboffsets: - * @cname('__pyx_memoryview_get_suboffsets') - * def __get__(self): # <<<<<<<<<<<<<< - * if self.view.suboffsets == NULL: - * return [-1] * self.view.ndim - */ - -/* Python wrapper */ -static PyObject *__pyx_memoryview_get_suboffsets(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview_get_suboffsets(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_memoryview_get_suboffsets_MemoryView_10memoryview_10suboffsets___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_memoryview_get_suboffsets_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - int __pyx_v_i; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":528 - * @cname('__pyx_memoryview_get_suboffsets') - * def __get__(self): - * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< - * return [-1] * self.view.ndim - * - */ - __pyx_t_1 = ((__pyx_v_self->view.suboffsets == NULL) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":529 - * def __get__(self): - * if self.view.suboffsets == NULL: - * return [-1] * self.view.ndim # <<<<<<<<<<<<<< - * - * return tuple([self.view.suboffsets[i] for i in xrange(self.view.ndim)]) - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = PyList_New(1 * ((__pyx_v_self->view.ndim<0) ? 0:__pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - { Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < __pyx_v_self->view.ndim; __pyx_temp++) { - __Pyx_INCREF(__pyx_int_neg_1); - PyList_SET_ITEM(__pyx_t_2, __pyx_temp, __pyx_int_neg_1); - __Pyx_GIVEREF(__pyx_int_neg_1); - } - } - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - } - - /* "View.MemoryView":531 - * return [-1] * self.view.ndim - * - * return tuple([self.view.suboffsets[i] for i in xrange(self.view.ndim)]) # <<<<<<<<<<<<<< - * - * property ndim: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __pyx_v_self->view.ndim; - for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { - __pyx_v_i = __pyx_t_4; - __pyx_t_5 = PyInt_FromSsize_t((__pyx_v_self->view.suboffsets[__pyx_v_i])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_5))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L0; - - /* "View.MemoryView":527 - * property suboffsets: - * @cname('__pyx_memoryview_get_suboffsets') - * def __get__(self): # <<<<<<<<<<<<<< - * if self.view.suboffsets == NULL: - * return [-1] * self.view.ndim - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.memoryview.suboffsets.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":535 - * property ndim: - * @cname('__pyx_memoryview_get_ndim') - * def __get__(self): # <<<<<<<<<<<<<< - * return self.view.ndim - * - */ - -/* Python wrapper */ -static PyObject *__pyx_memoryview_get_ndim(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview_get_ndim(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_memoryview_get_ndim_MemoryView_10memoryview_4ndim___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_memoryview_get_ndim_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":536 - * @cname('__pyx_memoryview_get_ndim') - * def __get__(self): - * return self.view.ndim # <<<<<<<<<<<<<< - * - * property itemsize: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "View.MemoryView":535 - * property ndim: - * @cname('__pyx_memoryview_get_ndim') - * def __get__(self): # <<<<<<<<<<<<<< - * return self.view.ndim - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":540 - * property itemsize: - * @cname('__pyx_memoryview_get_itemsize') - * def __get__(self): # <<<<<<<<<<<<<< - * return self.view.itemsize - * - */ - -/* Python wrapper */ -static PyObject *__pyx_memoryview_get_itemsize(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview_get_itemsize(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_memoryview_get_itemsize_MemoryView_10memoryview_8itemsize___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_memoryview_get_itemsize_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":541 - * @cname('__pyx_memoryview_get_itemsize') - * def __get__(self): - * return self.view.itemsize # <<<<<<<<<<<<<< - * - * property nbytes: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "View.MemoryView":540 - * property itemsize: - * @cname('__pyx_memoryview_get_itemsize') - * def __get__(self): # <<<<<<<<<<<<<< - * return self.view.itemsize - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview.itemsize.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":545 - * property nbytes: - * @cname('__pyx_memoryview_get_nbytes') - * def __get__(self): # <<<<<<<<<<<<<< - * return self.size * self.view.itemsize - * - */ - -/* Python wrapper */ -static PyObject *__pyx_memoryview_get_nbytes(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview_get_nbytes(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_memoryview_get_nbytes_MemoryView_10memoryview_6nbytes___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_memoryview_get_nbytes_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":546 - * @cname('__pyx_memoryview_get_nbytes') - * def __get__(self): - * return self.size * self.view.itemsize # <<<<<<<<<<<<<< - * - * property size: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "View.MemoryView":545 - * property nbytes: - * @cname('__pyx_memoryview_get_nbytes') - * def __get__(self): # <<<<<<<<<<<<<< - * return self.size * self.view.itemsize - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":550 - * property size: - * @cname('__pyx_memoryview_get_size') - * def __get__(self): # <<<<<<<<<<<<<< - * if self._size is None: - * result = 1 - */ - -/* Python wrapper */ -static PyObject *__pyx_memoryview_get_size(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview_get_size(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_memoryview_get_size_MemoryView_10memoryview_4size___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_memoryview_get_size_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_v_length = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":551 - * @cname('__pyx_memoryview_get_size') - * def __get__(self): - * if self._size is None: # <<<<<<<<<<<<<< - * result = 1 - * - */ - __pyx_t_1 = (__pyx_v_self->_size == Py_None); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":552 - * def __get__(self): - * if self._size is None: - * result = 1 # <<<<<<<<<<<<<< - * - * for length in self.shape: - */ - __Pyx_INCREF(__pyx_int_1); - __pyx_v_result = __pyx_int_1; - - /* "View.MemoryView":554 - * result = 1 - * - * for length in self.shape: # <<<<<<<<<<<<<< - * result *= length - * - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_shape); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) { - __pyx_t_4 = __pyx_t_3; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - for (;;) { - if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_3 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_3); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_3); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_3 = __pyx_t_6(__pyx_t_4); - if (unlikely(!__pyx_t_3)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[2]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_3); - } - __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_3); - __pyx_t_3 = 0; - - /* "View.MemoryView":555 - * - * for length in self.shape: - * result *= length # <<<<<<<<<<<<<< - * - * self._size = result - */ - __pyx_t_3 = PyNumber_InPlaceMultiply(__pyx_v_result, __pyx_v_length); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_3); - __pyx_t_3 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "View.MemoryView":557 - * result *= length - * - * self._size = result # <<<<<<<<<<<<<< - * - * return self._size - */ - __Pyx_INCREF(__pyx_v_result); - __Pyx_GIVEREF(__pyx_v_result); - __Pyx_GOTREF(__pyx_v_self->_size); - __Pyx_DECREF(__pyx_v_self->_size); - __pyx_v_self->_size = __pyx_v_result; - goto __pyx_L3; - } - __pyx_L3:; - - /* "View.MemoryView":559 - * self._size = result - * - * return self._size # <<<<<<<<<<<<<< - * - * def __len__(self): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->_size); - __pyx_r = __pyx_v_self->_size; - goto __pyx_L0; - - /* "View.MemoryView":550 - * property size: - * @cname('__pyx_memoryview_get_size') - * def __get__(self): # <<<<<<<<<<<<<< - * if self._size is None: - * result = 1 - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("View.MemoryView.memoryview.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_length); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":561 - * return self._size - * - * def __len__(self): # <<<<<<<<<<<<<< - * if self.view.ndim >= 1: - * return self.view.shape[0] - */ - -/* Python wrapper */ -static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self); /*proto*/ -static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self) { - Py_ssize_t __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); - __pyx_r = __pyx_memoryview_MemoryView_10memoryview_10__len__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static Py_ssize_t __pyx_memoryview_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self) { - Py_ssize_t __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("__len__", 0); - - /* "View.MemoryView":562 - * - * def __len__(self): - * if self.view.ndim >= 1: # <<<<<<<<<<<<<< - * return self.view.shape[0] - * - */ - __pyx_t_1 = ((__pyx_v_self->view.ndim >= 1) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":563 - * def __len__(self): - * if self.view.ndim >= 1: - * return self.view.shape[0] # <<<<<<<<<<<<<< - * - * return 0 - */ - __pyx_r = (__pyx_v_self->view.shape[0]); - goto __pyx_L0; - } - - /* "View.MemoryView":565 - * return self.view.shape[0] - * - * return 0 # <<<<<<<<<<<<<< - * - * def __repr__(self): - */ - __pyx_r = 0; - goto __pyx_L0; - - /* "View.MemoryView":561 - * return self._size - * - * def __len__(self): # <<<<<<<<<<<<<< - * if self.view.ndim >= 1: - * return self.view.shape[0] - */ - - /* function exit code */ - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":567 - * return 0 - * - * def __repr__(self): # <<<<<<<<<<<<<< - * return "" % (self.base.__class__.__name__, - * id(self)) - */ - -/* Python wrapper */ -static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); - __pyx_r = __pyx_memoryview_MemoryView_10memoryview_12__repr__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_memoryview_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__repr__", 0); - - /* "View.MemoryView":568 - * - * def __repr__(self): - * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< - * id(self)) - * - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "View.MemoryView":569 - * def __repr__(self): - * return "" % (self.base.__class__.__name__, - * id(self)) # <<<<<<<<<<<<<< - * - * def __str__(self): - */ - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_id, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "View.MemoryView":568 - * - * def __repr__(self): - * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< - * id(self)) - * - */ - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_1 = 0; - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "View.MemoryView":567 - * return 0 - * - * def __repr__(self): # <<<<<<<<<<<<<< - * return "" % (self.base.__class__.__name__, - * id(self)) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":571 - * id(self)) - * - * def __str__(self): # <<<<<<<<<<<<<< - * return "" % (self.base.__class__.__name__,) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); - __pyx_r = __pyx_memoryview_MemoryView_10memoryview_14__str__(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_memoryview_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__str__", 0); - - /* "View.MemoryView":572 - * - * def __str__(self): - * return "" % (self.base.__class__.__name__,) # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_object, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "View.MemoryView":571 - * id(self)) - * - * def __str__(self): # <<<<<<<<<<<<<< - * return "" % (self.base.__class__.__name__,) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.memoryview.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":575 - * - * - * def is_c_contig(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice *mslice - * cdef __Pyx_memviewslice tmp - */ - -/* Python wrapper */ -static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("is_c_contig (wrapper)", 0); - __pyx_r = __pyx_memoryview_MemoryView_10memoryview_16is_c_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_memoryview_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self) { - __Pyx_memviewslice *__pyx_v_mslice; - __Pyx_memviewslice __pyx_v_tmp; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("is_c_contig", 0); - - /* "View.MemoryView":578 - * cdef __Pyx_memviewslice *mslice - * cdef __Pyx_memviewslice tmp - * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< - * return slice_is_contig(mslice, 'C', self.view.ndim) - * - */ - __pyx_v_mslice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); - - /* "View.MemoryView":579 - * cdef __Pyx_memviewslice tmp - * mslice = get_slice_from_memview(self, &tmp) - * return slice_is_contig(mslice, 'C', self.view.ndim) # <<<<<<<<<<<<<< - * - * def is_f_contig(self): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig(__pyx_v_mslice, 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "View.MemoryView":575 - * - * - * def is_c_contig(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice *mslice - * cdef __Pyx_memviewslice tmp - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":581 - * return slice_is_contig(mslice, 'C', self.view.ndim) - * - * def is_f_contig(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice *mslice - * cdef __Pyx_memviewslice tmp - */ - -/* Python wrapper */ -static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("is_f_contig (wrapper)", 0); - __pyx_r = __pyx_memoryview_MemoryView_10memoryview_18is_f_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_memoryview_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self) { - __Pyx_memviewslice *__pyx_v_mslice; - __Pyx_memviewslice __pyx_v_tmp; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("is_f_contig", 0); - - /* "View.MemoryView":584 - * cdef __Pyx_memviewslice *mslice - * cdef __Pyx_memviewslice tmp - * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< - * return slice_is_contig(mslice, 'F', self.view.ndim) - * - */ - __pyx_v_mslice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); - - /* "View.MemoryView":585 - * cdef __Pyx_memviewslice tmp - * mslice = get_slice_from_memview(self, &tmp) - * return slice_is_contig(mslice, 'F', self.view.ndim) # <<<<<<<<<<<<<< - * - * def copy(self): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig(__pyx_v_mslice, 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "View.MemoryView":581 - * return slice_is_contig(mslice, 'C', self.view.ndim) - * - * def is_f_contig(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice *mslice - * cdef __Pyx_memviewslice tmp - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":587 - * return slice_is_contig(mslice, 'F', self.view.ndim) - * - * def copy(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice mslice - * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS - */ - -/* Python wrapper */ -static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("copy (wrapper)", 0); - __pyx_r = __pyx_memoryview_MemoryView_10memoryview_20copy(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_memoryview_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self) { - __Pyx_memviewslice __pyx_v_mslice; - int __pyx_v_flags; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_memviewslice __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("copy", 0); - - /* "View.MemoryView":589 - * def copy(self): - * cdef __Pyx_memviewslice mslice - * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS # <<<<<<<<<<<<<< - * - * slice_copy(self, &mslice) - */ - __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_F_CONTIGUOUS)); - - /* "View.MemoryView":591 - * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS - * - * slice_copy(self, &mslice) # <<<<<<<<<<<<<< - * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, - * self.view.itemsize, - */ - __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_mslice)); - - /* "View.MemoryView":592 - * - * slice_copy(self, &mslice) - * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, # <<<<<<<<<<<<<< - * self.view.itemsize, - * flags|PyBUF_C_CONTIGUOUS, - */ - __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_mslice), __pyx_k_c, __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_C_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_mslice = __pyx_t_1; - - /* "View.MemoryView":597 - * self.dtype_is_object) - * - * return memoryview_copy_from_slice(self, &mslice) # <<<<<<<<<<<<<< - * - * def copy_fortran(self): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_mslice)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 597; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* "View.MemoryView":587 - * return slice_is_contig(mslice, 'F', self.view.ndim) - * - * def copy(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice mslice - * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.memoryview.copy", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":599 - * return memoryview_copy_from_slice(self, &mslice) - * - * def copy_fortran(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice src, dst - * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS - */ - -/* Python wrapper */ -static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("copy_fortran (wrapper)", 0); - __pyx_r = __pyx_memoryview_MemoryView_10memoryview_22copy_fortran(((struct __pyx_memoryview_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_memoryview_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self) { - __Pyx_memviewslice __pyx_v_src; - __Pyx_memviewslice __pyx_v_dst; - int __pyx_v_flags; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_memviewslice __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("copy_fortran", 0); - - /* "View.MemoryView":601 - * def copy_fortran(self): - * cdef __Pyx_memviewslice src, dst - * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS # <<<<<<<<<<<<<< - * - * slice_copy(self, &src) - */ - __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_C_CONTIGUOUS)); - - /* "View.MemoryView":603 - * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS - * - * slice_copy(self, &src) # <<<<<<<<<<<<<< - * dst = slice_copy_contig(&src, "fortran", self.view.ndim, - * self.view.itemsize, - */ - __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_src)); - - /* "View.MemoryView":604 - * - * slice_copy(self, &src) - * dst = slice_copy_contig(&src, "fortran", self.view.ndim, # <<<<<<<<<<<<<< - * self.view.itemsize, - * flags|PyBUF_F_CONTIGUOUS, - */ - __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_src), __pyx_k_fortran, __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_F_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_dst = __pyx_t_1; - - /* "View.MemoryView":609 - * self.dtype_is_object) - * - * return memoryview_copy_from_slice(self, &dst) # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_dst)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* "View.MemoryView":599 - * return memoryview_copy_from_slice(self, &mslice) - * - * def copy_fortran(self): # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice src, dst - * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView.memoryview.copy_fortran", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":613 - * - * @cname('__pyx_memoryview_new') - * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< - * cdef memoryview result = memoryview(o, flags, dtype_is_object) - * result.typeinfo = typeinfo - */ - -static PyObject *__pyx_memoryview_new(PyObject *__pyx_v_o, int __pyx_v_flags, int __pyx_v_dtype_is_object, __Pyx_TypeInfo *__pyx_v_typeinfo) { - struct __pyx_memoryview_obj *__pyx_v_result = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("memoryview_cwrapper", 0); - - /* "View.MemoryView":614 - * @cname('__pyx_memoryview_new') - * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): - * cdef memoryview result = memoryview(o, flags, dtype_is_object) # <<<<<<<<<<<<<< - * result.typeinfo = typeinfo - * return result - */ - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_o); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_o); - __Pyx_GIVEREF(__pyx_v_o); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject *)__pyx_memoryview_type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_result = ((struct __pyx_memoryview_obj *)__pyx_t_2); - __pyx_t_2 = 0; - - /* "View.MemoryView":615 - * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): - * cdef memoryview result = memoryview(o, flags, dtype_is_object) - * result.typeinfo = typeinfo # <<<<<<<<<<<<<< - * return result - * - */ - __pyx_v_result->typeinfo = __pyx_v_typeinfo; - - /* "View.MemoryView":616 - * cdef memoryview result = memoryview(o, flags, dtype_is_object) - * result.typeinfo = typeinfo - * return result # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_check') - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_result)); - __pyx_r = ((PyObject *)__pyx_v_result); - goto __pyx_L0; - - /* "View.MemoryView":613 - * - * @cname('__pyx_memoryview_new') - * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< - * cdef memoryview result = memoryview(o, flags, dtype_is_object) - * result.typeinfo = typeinfo - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":619 - * - * @cname('__pyx_memoryview_check') - * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< - * return isinstance(o, memoryview) - * - */ - -static CYTHON_INLINE int __pyx_memoryview_check(PyObject *__pyx_v_o) { - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("memoryview_check", 0); - - /* "View.MemoryView":620 - * @cname('__pyx_memoryview_check') - * cdef inline bint memoryview_check(object o): - * return isinstance(o, memoryview) # <<<<<<<<<<<<<< - * - * cdef tuple _unellipsify(object index, int ndim): - */ - __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_o, ((PyObject *)__pyx_memoryview_type)); - __pyx_r = __pyx_t_1; - goto __pyx_L0; - - /* "View.MemoryView":619 - * - * @cname('__pyx_memoryview_check') - * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< - * return isinstance(o, memoryview) - * - */ - - /* function exit code */ - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":622 - * return isinstance(o, memoryview) - * - * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< - * """ - * Replace all ellipses with full slices and fill incomplete indices with - */ - -static PyObject *_unellipsify(PyObject *__pyx_v_index, int __pyx_v_ndim) { - PyObject *__pyx_v_tup = NULL; - PyObject *__pyx_v_result = NULL; - int __pyx_v_have_slices; - int __pyx_v_seen_ellipsis; - CYTHON_UNUSED PyObject *__pyx_v_idx = NULL; - PyObject *__pyx_v_item = NULL; - Py_ssize_t __pyx_v_nslices; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - PyObject *__pyx_t_7 = NULL; - Py_ssize_t __pyx_t_8; - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - int __pyx_t_11; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_unellipsify", 0); - - /* "View.MemoryView":627 - * full slices. - * """ - * if not isinstance(index, tuple): # <<<<<<<<<<<<<< - * tup = (index,) - * else: - */ - __pyx_t_1 = PyTuple_Check(__pyx_v_index); - __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":628 - * """ - * if not isinstance(index, tuple): - * tup = (index,) # <<<<<<<<<<<<<< - * else: - * tup = index - */ - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_index); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_index); - __Pyx_GIVEREF(__pyx_v_index); - __pyx_v_tup = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L3; - } - /*else*/ { - - /* "View.MemoryView":630 - * tup = (index,) - * else: - * tup = index # <<<<<<<<<<<<<< - * - * result = [] - */ - __Pyx_INCREF(__pyx_v_index); - __pyx_v_tup = __pyx_v_index; - } - __pyx_L3:; - - /* "View.MemoryView":632 - * tup = index - * - * result = [] # <<<<<<<<<<<<<< - * have_slices = False - * seen_ellipsis = False - */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_result = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "View.MemoryView":633 - * - * result = [] - * have_slices = False # <<<<<<<<<<<<<< - * seen_ellipsis = False - * for idx, item in enumerate(tup): - */ - __pyx_v_have_slices = 0; - - /* "View.MemoryView":634 - * result = [] - * have_slices = False - * seen_ellipsis = False # <<<<<<<<<<<<<< - * for idx, item in enumerate(tup): - * if item is Ellipsis: - */ - __pyx_v_seen_ellipsis = 0; - - /* "View.MemoryView":635 - * have_slices = False - * seen_ellipsis = False - * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< - * if item is Ellipsis: - * if not seen_ellipsis: - */ - __Pyx_INCREF(__pyx_int_0); - __pyx_t_3 = __pyx_int_0; - if (PyList_CheckExact(__pyx_v_tup) || PyTuple_CheckExact(__pyx_v_tup)) { - __pyx_t_4 = __pyx_v_tup; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_tup); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; - } - for (;;) { - if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_7 = __pyx_t_6(__pyx_t_4); - if (unlikely(!__pyx_t_7)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[2]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_7); - } - __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_7); - __pyx_t_7 = 0; - __Pyx_INCREF(__pyx_t_3); - __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_3); - __pyx_t_7 = PyNumber_Add(__pyx_t_3, __pyx_int_1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_3); - __pyx_t_3 = __pyx_t_7; - __pyx_t_7 = 0; - - /* "View.MemoryView":636 - * seen_ellipsis = False - * for idx, item in enumerate(tup): - * if item is Ellipsis: # <<<<<<<<<<<<<< - * if not seen_ellipsis: - * result.extend([slice(None)] * (ndim - len(tup) + 1)) - */ - __pyx_t_2 = (__pyx_v_item == __pyx_builtin_Ellipsis); - __pyx_t_1 = (__pyx_t_2 != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":637 - * for idx, item in enumerate(tup): - * if item is Ellipsis: - * if not seen_ellipsis: # <<<<<<<<<<<<<< - * result.extend([slice(None)] * (ndim - len(tup) + 1)) - * seen_ellipsis = True - */ - __pyx_t_1 = ((!(__pyx_v_seen_ellipsis != 0)) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":638 - * if item is Ellipsis: - * if not seen_ellipsis: - * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<< - * seen_ellipsis = True - * else: - */ - __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyObject_Length(__pyx_v_tup); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_9 = PyList_New(1 * ((((__pyx_v_ndim - __pyx_t_8) + 1)<0) ? 0:((__pyx_v_ndim - __pyx_t_8) + 1))); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - { Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < ((__pyx_v_ndim - __pyx_t_8) + 1); __pyx_temp++) { - __Pyx_INCREF(__pyx_t_7); - PyList_SET_ITEM(__pyx_t_9, __pyx_temp, __pyx_t_7); - __Pyx_GIVEREF(__pyx_t_7); - } - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_10 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "View.MemoryView":639 - * if not seen_ellipsis: - * result.extend([slice(None)] * (ndim - len(tup) + 1)) - * seen_ellipsis = True # <<<<<<<<<<<<<< - * else: - * result.append(slice(None)) - */ - __pyx_v_seen_ellipsis = 1; - goto __pyx_L7; - } - /*else*/ { - - /* "View.MemoryView":641 - * seen_ellipsis = True - * else: - * result.append(slice(None)) # <<<<<<<<<<<<<< - * have_slices = True - * else: - */ - __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - __pyx_L7:; - - /* "View.MemoryView":642 - * else: - * result.append(slice(None)) - * have_slices = True # <<<<<<<<<<<<<< - * else: - * if not isinstance(item, slice) and not PyIndex_Check(item): - */ - __pyx_v_have_slices = 1; - goto __pyx_L6; - } - /*else*/ { - - /* "View.MemoryView":644 - * have_slices = True - * else: - * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< - * raise TypeError("Cannot index with type '%s'" % type(item)) - * - */ - __pyx_t_1 = PySlice_Check(__pyx_v_item); - __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); - if (__pyx_t_2) { - __pyx_t_1 = ((!(__Pyx_PyIndex_Check(__pyx_v_item) != 0)) != 0); - __pyx_t_11 = __pyx_t_1; - } else { - __pyx_t_11 = __pyx_t_2; - } - if (__pyx_t_11) { - - /* "View.MemoryView":645 - * else: - * if not isinstance(item, slice) and not PyIndex_Check(item): - * raise TypeError("Cannot index with type '%s'" % type(item)) # <<<<<<<<<<<<<< - * - * have_slices = have_slices or isinstance(item, slice) - */ - __pyx_t_9 = __Pyx_PyString_Format(__pyx_kp_s_Cannot_index_with_type_s, ((PyObject *)Py_TYPE(__pyx_v_item))); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_9); - __Pyx_GIVEREF(__pyx_t_9); - __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_t_7, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_Raise(__pyx_t_9, 0, 0, 0); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "View.MemoryView":647 - * raise TypeError("Cannot index with type '%s'" % type(item)) - * - * have_slices = have_slices or isinstance(item, slice) # <<<<<<<<<<<<<< - * result.append(item) - * - */ - if (!__pyx_v_have_slices) { - __pyx_t_11 = PySlice_Check(__pyx_v_item); - __pyx_t_2 = __pyx_t_11; - } else { - __pyx_t_2 = __pyx_v_have_slices; - } - __pyx_v_have_slices = __pyx_t_2; - - /* "View.MemoryView":648 - * - * have_slices = have_slices or isinstance(item, slice) - * result.append(item) # <<<<<<<<<<<<<< - * - * nslices = ndim - len(result) - */ - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_result, __pyx_v_item); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_L6:; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "View.MemoryView":650 - * result.append(item) - * - * nslices = ndim - len(result) # <<<<<<<<<<<<<< - * if nslices: - * result.extend([slice(None)] * nslices) - */ - __pyx_t_5 = PyList_GET_SIZE(__pyx_v_result); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_nslices = (__pyx_v_ndim - __pyx_t_5); - - /* "View.MemoryView":651 - * - * nslices = ndim - len(result) - * if nslices: # <<<<<<<<<<<<<< - * result.extend([slice(None)] * nslices) - * - */ - __pyx_t_2 = (__pyx_v_nslices != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":652 - * nslices = ndim - len(result) - * if nslices: - * result.extend([slice(None)] * nslices) # <<<<<<<<<<<<<< - * - * return have_slices or nslices, tuple(result) - */ - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyList_New(1 * ((__pyx_v_nslices<0) ? 0:__pyx_v_nslices)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - { Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < __pyx_v_nslices; __pyx_temp++) { - __Pyx_INCREF(__pyx_t_3); - PyList_SET_ITEM(__pyx_t_4, __pyx_temp, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - } - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_10 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_4); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L9; - } - __pyx_L9:; - - /* "View.MemoryView":654 - * result.extend([slice(None)] * nslices) - * - * return have_slices or nslices, tuple(result) # <<<<<<<<<<<<<< - * - * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_have_slices); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!__pyx_t_2) { - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_nslices); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_9 = __pyx_t_3; - __pyx_t_3 = 0; - } else { - __pyx_t_9 = __pyx_t_4; - __pyx_t_4 = 0; - } - __pyx_t_4 = PyList_AsTuple(__pyx_v_result); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9); - __Pyx_GIVEREF(__pyx_t_9); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_9 = 0; - __pyx_t_4 = 0; - __pyx_r = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "View.MemoryView":622 - * return isinstance(o, memoryview) - * - * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< - * """ - * Replace all ellipses with full slices and fill incomplete indices with - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("View.MemoryView._unellipsify", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_tup); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_idx); - __Pyx_XDECREF(__pyx_v_item); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":656 - * return have_slices or nslices, tuple(result) - * - * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< - * cdef int i - * for i in range(ndim): - */ - -static PyObject *assert_direct_dimensions(Py_ssize_t *__pyx_v_suboffsets, int __pyx_v_ndim) { - int __pyx_v_i; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("assert_direct_dimensions", 0); - - /* "View.MemoryView":658 - * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): - * cdef int i - * for i in range(ndim): # <<<<<<<<<<<<<< - * if suboffsets[i] >= 0: - * raise ValueError("Indirect dimensions not supported") - */ - __pyx_t_1 = __pyx_v_ndim; - for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) { - __pyx_v_i = __pyx_t_2; - - /* "View.MemoryView":659 - * cdef int i - * for i in range(ndim): - * if suboffsets[i] >= 0: # <<<<<<<<<<<<<< - * raise ValueError("Indirect dimensions not supported") - * - */ - __pyx_t_3 = (((__pyx_v_suboffsets[__pyx_v_i]) >= 0) != 0); - if (__pyx_t_3) { - - /* "View.MemoryView":660 - * for i in range(ndim): - * if suboffsets[i] >= 0: - * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - } - - /* "View.MemoryView":656 - * return have_slices or nslices, tuple(result) - * - * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< - * cdef int i - * for i in range(ndim): - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("View.MemoryView.assert_direct_dimensions", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":667 - * - * @cname('__pyx_memview_slice') - * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< - * cdef int new_ndim = 0, suboffset_dim = -1, dim - * cdef bint negative_step - */ - -static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *__pyx_v_memview, PyObject *__pyx_v_indices) { - int __pyx_v_new_ndim; - int __pyx_v_suboffset_dim; - int __pyx_v_dim; - __Pyx_memviewslice __pyx_v_src; - __Pyx_memviewslice __pyx_v_dst; - __Pyx_memviewslice *__pyx_v_p_src; - struct __pyx_memoryviewslice_obj *__pyx_v_memviewsliceobj = 0; - __Pyx_memviewslice *__pyx_v_p_dst; - int *__pyx_v_p_suboffset_dim; - Py_ssize_t __pyx_v_start; - Py_ssize_t __pyx_v_stop; - Py_ssize_t __pyx_v_step; - int __pyx_v_have_start; - int __pyx_v_have_stop; - int __pyx_v_have_step; - PyObject *__pyx_v_index = NULL; - struct __pyx_memoryview_obj *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - struct __pyx_memoryview_obj *__pyx_t_4; - char *__pyx_t_5; - int __pyx_t_6; - Py_ssize_t __pyx_t_7; - PyObject *(*__pyx_t_8)(PyObject *); - PyObject *__pyx_t_9 = NULL; - Py_ssize_t __pyx_t_10; - int __pyx_t_11; - PyObject *__pyx_t_12 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("memview_slice", 0); - - /* "View.MemoryView":668 - * @cname('__pyx_memview_slice') - * cdef memoryview memview_slice(memoryview memview, object indices): - * cdef int new_ndim = 0, suboffset_dim = -1, dim # <<<<<<<<<<<<<< - * cdef bint negative_step - * cdef __Pyx_memviewslice src, dst - */ - __pyx_v_new_ndim = 0; - __pyx_v_suboffset_dim = -1; - - /* "View.MemoryView":675 - * - * - * memset(&dst, 0, sizeof(dst)) # <<<<<<<<<<<<<< - * - * cdef _memoryviewslice memviewsliceobj - */ - memset((&__pyx_v_dst), 0, (sizeof(__pyx_v_dst))); - - /* "View.MemoryView":679 - * cdef _memoryviewslice memviewsliceobj - * - * assert memview.view.ndim > 0 # <<<<<<<<<<<<<< - * - * if isinstance(memview, _memoryviewslice): - */ - #ifndef CYTHON_WITHOUT_ASSERTIONS - if (unlikely(!Py_OptimizeFlag)) { - if (unlikely(!((__pyx_v_memview->view.ndim > 0) != 0))) { - PyErr_SetNone(PyExc_AssertionError); - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - } - #endif - - /* "View.MemoryView":681 - * assert memview.view.ndim > 0 - * - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * memviewsliceobj = memview - * p_src = &memviewsliceobj.from_slice - */ - __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), ((PyObject *)__pyx_memoryviewslice_type)); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":682 - * - * if isinstance(memview, _memoryviewslice): - * memviewsliceobj = memview # <<<<<<<<<<<<<< - * p_src = &memviewsliceobj.from_slice - * else: - */ - if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_3 = ((PyObject *)__pyx_v_memview); - __Pyx_INCREF(__pyx_t_3); - __pyx_v_memviewsliceobj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); - __pyx_t_3 = 0; - - /* "View.MemoryView":683 - * if isinstance(memview, _memoryviewslice): - * memviewsliceobj = memview - * p_src = &memviewsliceobj.from_slice # <<<<<<<<<<<<<< - * else: - * slice_copy(memview, &src) - */ - __pyx_v_p_src = (&__pyx_v_memviewsliceobj->from_slice); - goto __pyx_L3; - } - /*else*/ { - - /* "View.MemoryView":685 - * p_src = &memviewsliceobj.from_slice - * else: - * slice_copy(memview, &src) # <<<<<<<<<<<<<< - * p_src = &src - * - */ - __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_src)); - - /* "View.MemoryView":686 - * else: - * slice_copy(memview, &src) - * p_src = &src # <<<<<<<<<<<<<< - * - * - */ - __pyx_v_p_src = (&__pyx_v_src); - } - __pyx_L3:; - - /* "View.MemoryView":692 - * - * - * dst.memview = p_src.memview # <<<<<<<<<<<<<< - * dst.data = p_src.data - * - */ - __pyx_t_4 = __pyx_v_p_src->memview; - __pyx_v_dst.memview = __pyx_t_4; - - /* "View.MemoryView":693 - * - * dst.memview = p_src.memview - * dst.data = p_src.data # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_5 = __pyx_v_p_src->data; - __pyx_v_dst.data = __pyx_t_5; - - /* "View.MemoryView":698 - * - * - * cdef __Pyx_memviewslice *p_dst = &dst # <<<<<<<<<<<<<< - * cdef int *p_suboffset_dim = &suboffset_dim - * cdef Py_ssize_t start, stop, step - */ - __pyx_v_p_dst = (&__pyx_v_dst); - - /* "View.MemoryView":699 - * - * cdef __Pyx_memviewslice *p_dst = &dst - * cdef int *p_suboffset_dim = &suboffset_dim # <<<<<<<<<<<<<< - * cdef Py_ssize_t start, stop, step - * cdef bint have_start, have_stop, have_step - */ - __pyx_v_p_suboffset_dim = (&__pyx_v_suboffset_dim); - - /* "View.MemoryView":703 - * cdef bint have_start, have_stop, have_step - * - * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< - * if PyIndex_Check(index): - * slice_memviewslice( - */ - __pyx_t_6 = 0; - if (PyList_CheckExact(__pyx_v_indices) || PyTuple_CheckExact(__pyx_v_indices)) { - __pyx_t_3 = __pyx_v_indices; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0; - __pyx_t_8 = NULL; - } else { - __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_indices); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - for (;;) { - if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_9 = __pyx_t_8(__pyx_t_3); - if (unlikely(!__pyx_t_9)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[2]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_9); - } - __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_9); - __pyx_t_9 = 0; - __pyx_v_dim = __pyx_t_6; - __pyx_t_6 = (__pyx_t_6 + 1); - - /* "View.MemoryView":704 - * - * for dim, index in enumerate(indices): - * if PyIndex_Check(index): # <<<<<<<<<<<<<< - * slice_memviewslice( - * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], - */ - __pyx_t_2 = (__Pyx_PyIndex_Check(__pyx_v_index) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":708 - * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], - * dim, new_ndim, p_suboffset_dim, - * index, 0, 0, # start, stop, step # <<<<<<<<<<<<<< - * 0, 0, 0, # have_{start,stop,step} - * False) - */ - __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "View.MemoryView":705 - * for dim, index in enumerate(indices): - * if PyIndex_Check(index): - * slice_memviewslice( # <<<<<<<<<<<<<< - * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], - * dim, new_ndim, p_suboffset_dim, - */ - __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_t_10, 0, 0, 0, 0, 0, 0); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L6; - } - - /* "View.MemoryView":711 - * 0, 0, 0, # have_{start,stop,step} - * False) - * elif index is None: # <<<<<<<<<<<<<< - * p_dst.shape[new_ndim] = 1 - * p_dst.strides[new_ndim] = 0 - */ - __pyx_t_2 = (__pyx_v_index == Py_None); - __pyx_t_1 = (__pyx_t_2 != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":712 - * False) - * elif index is None: - * p_dst.shape[new_ndim] = 1 # <<<<<<<<<<<<<< - * p_dst.strides[new_ndim] = 0 - * p_dst.suboffsets[new_ndim] = -1 - */ - (__pyx_v_p_dst->shape[__pyx_v_new_ndim]) = 1; - - /* "View.MemoryView":713 - * elif index is None: - * p_dst.shape[new_ndim] = 1 - * p_dst.strides[new_ndim] = 0 # <<<<<<<<<<<<<< - * p_dst.suboffsets[new_ndim] = -1 - * new_ndim += 1 - */ - (__pyx_v_p_dst->strides[__pyx_v_new_ndim]) = 0; - - /* "View.MemoryView":714 - * p_dst.shape[new_ndim] = 1 - * p_dst.strides[new_ndim] = 0 - * p_dst.suboffsets[new_ndim] = -1 # <<<<<<<<<<<<<< - * new_ndim += 1 - * else: - */ - (__pyx_v_p_dst->suboffsets[__pyx_v_new_ndim]) = -1; - - /* "View.MemoryView":715 - * p_dst.strides[new_ndim] = 0 - * p_dst.suboffsets[new_ndim] = -1 - * new_ndim += 1 # <<<<<<<<<<<<<< - * else: - * start = index.start or 0 - */ - __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); - goto __pyx_L6; - } - /*else*/ { - - /* "View.MemoryView":717 - * new_ndim += 1 - * else: - * start = index.start or 0 # <<<<<<<<<<<<<< - * stop = index.stop or 0 - * step = index.step or 0 - */ - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!__pyx_t_1) { - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_INCREF(__pyx_int_0); - __pyx_t_12 = __pyx_int_0; - } else { - __pyx_t_12 = __pyx_t_9; - __pyx_t_9 = 0; - } - __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_12); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_v_start = __pyx_t_10; - - /* "View.MemoryView":718 - * else: - * start = index.start or 0 - * stop = index.stop or 0 # <<<<<<<<<<<<<< - * step = index.step or 0 - * - */ - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!__pyx_t_1) { - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_INCREF(__pyx_int_0); - __pyx_t_9 = __pyx_int_0; - } else { - __pyx_t_9 = __pyx_t_12; - __pyx_t_12 = 0; - } - __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_v_stop = __pyx_t_10; - - /* "View.MemoryView":719 - * start = index.start or 0 - * stop = index.stop or 0 - * step = index.step or 0 # <<<<<<<<<<<<<< - * - * have_start = index.start is not None - */ - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!__pyx_t_1) { - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_INCREF(__pyx_int_0); - __pyx_t_12 = __pyx_int_0; - } else { - __pyx_t_12 = __pyx_t_9; - __pyx_t_9 = 0; - } - __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_12); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_v_step = __pyx_t_10; - - /* "View.MemoryView":721 - * step = index.step or 0 - * - * have_start = index.start is not None # <<<<<<<<<<<<<< - * have_stop = index.stop is not None - * have_step = index.step is not None - */ - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_1 = (__pyx_t_12 != Py_None); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_v_have_start = __pyx_t_1; - - /* "View.MemoryView":722 - * - * have_start = index.start is not None - * have_stop = index.stop is not None # <<<<<<<<<<<<<< - * have_step = index.step is not None - * - */ - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_1 = (__pyx_t_12 != Py_None); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_v_have_stop = __pyx_t_1; - - /* "View.MemoryView":723 - * have_start = index.start is not None - * have_stop = index.stop is not None - * have_step = index.step is not None # <<<<<<<<<<<<<< - * - * slice_memviewslice( - */ - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 723; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_1 = (__pyx_t_12 != Py_None); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_v_have_step = __pyx_t_1; - - /* "View.MemoryView":725 - * have_step = index.step is not None - * - * slice_memviewslice( # <<<<<<<<<<<<<< - * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], - * dim, new_ndim, p_suboffset_dim, - */ - __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_start, __pyx_v_stop, __pyx_v_step, __pyx_v_have_start, __pyx_v_have_stop, __pyx_v_have_step, 1); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "View.MemoryView":731 - * have_start, have_stop, have_step, - * True) - * new_ndim += 1 # <<<<<<<<<<<<<< - * - * if isinstance(memview, _memoryviewslice): - */ - __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); - } - __pyx_L6:; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "View.MemoryView":733 - * new_ndim += 1 - * - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * return memoryview_fromslice(dst, new_ndim, - * memviewsliceobj.to_object_func, - */ - __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), ((PyObject *)__pyx_memoryviewslice_type)); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":734 - * - * if isinstance(memview, _memoryviewslice): - * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< - * memviewsliceobj.to_object_func, - * memviewsliceobj.to_dtype_func, - */ - __Pyx_XDECREF(((PyObject *)__pyx_r)); - - /* "View.MemoryView":735 - * if isinstance(memview, _memoryviewslice): - * return memoryview_fromslice(dst, new_ndim, - * memviewsliceobj.to_object_func, # <<<<<<<<<<<<<< - * memviewsliceobj.to_dtype_func, - * memview.dtype_is_object) - */ - if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - - /* "View.MemoryView":736 - * return memoryview_fromslice(dst, new_ndim, - * memviewsliceobj.to_object_func, - * memviewsliceobj.to_dtype_func, # <<<<<<<<<<<<<< - * memview.dtype_is_object) - * else: - */ - if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - - /* "View.MemoryView":734 - * - * if isinstance(memview, _memoryviewslice): - * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< - * memviewsliceobj.to_object_func, - * memviewsliceobj.to_dtype_func, - */ - __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, __pyx_v_memviewsliceobj->to_object_func, __pyx_v_memviewsliceobj->to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); - __pyx_t_3 = 0; - goto __pyx_L0; - } - /*else*/ { - - /* "View.MemoryView":739 - * memview.dtype_is_object) - * else: - * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< - * memview.dtype_is_object) - * - */ - __Pyx_XDECREF(((PyObject *)__pyx_r)); - - /* "View.MemoryView":740 - * else: - * return memoryview_fromslice(dst, new_ndim, NULL, NULL, - * memview.dtype_is_object) # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, NULL, NULL, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - - /* "View.MemoryView":739 - * memview.dtype_is_object) - * else: - * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< - * memview.dtype_is_object) - * - */ - if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); - __pyx_t_3 = 0; - goto __pyx_L0; - } - - /* "View.MemoryView":667 - * - * @cname('__pyx_memview_slice') - * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< - * cdef int new_ndim = 0, suboffset_dim = -1, dim - * cdef bint negative_step - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_AddTraceback("View.MemoryView.memview_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_memviewsliceobj); - __Pyx_XDECREF(__pyx_v_index); - __Pyx_XGIVEREF((PyObject *)__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":764 - * - * @cname('__pyx_memoryview_slice_memviewslice') - * cdef int slice_memviewslice( # <<<<<<<<<<<<<< - * __Pyx_memviewslice *dst, - * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, - */ - -static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *__pyx_v_dst, Py_ssize_t __pyx_v_shape, Py_ssize_t __pyx_v_stride, Py_ssize_t __pyx_v_suboffset, int __pyx_v_dim, int __pyx_v_new_ndim, int *__pyx_v_suboffset_dim, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_stop, Py_ssize_t __pyx_v_step, int __pyx_v_have_start, int __pyx_v_have_stop, int __pyx_v_have_step, int __pyx_v_is_slice) { - Py_ssize_t __pyx_v_new_shape; - int __pyx_v_negative_step; - int __pyx_r; - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - - /* "View.MemoryView":784 - * cdef bint negative_step - * - * if not is_slice: # <<<<<<<<<<<<<< - * - * if start < 0: - */ - __pyx_t_1 = ((!(__pyx_v_is_slice != 0)) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":786 - * if not is_slice: - * - * if start < 0: # <<<<<<<<<<<<<< - * start += shape - * if not 0 <= start < shape: - */ - __pyx_t_1 = ((__pyx_v_start < 0) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":787 - * - * if start < 0: - * start += shape # <<<<<<<<<<<<<< - * if not 0 <= start < shape: - * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) - */ - __pyx_v_start = (__pyx_v_start + __pyx_v_shape); - goto __pyx_L4; - } - __pyx_L4:; - - /* "View.MemoryView":788 - * if start < 0: - * start += shape - * if not 0 <= start < shape: # <<<<<<<<<<<<<< - * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) - * else: - */ - __pyx_t_1 = (0 <= __pyx_v_start); - if (__pyx_t_1) { - __pyx_t_1 = (__pyx_v_start < __pyx_v_shape); - } - __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":789 - * start += shape - * if not 0 <= start < shape: - * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) # <<<<<<<<<<<<<< - * else: - * - */ - __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, __pyx_k_Index_out_of_bounds_axis_d, __pyx_v_dim); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L5; - } - __pyx_L5:; - goto __pyx_L3; - } - /*else*/ { - - /* "View.MemoryView":792 - * else: - * - * negative_step = have_step != 0 and step < 0 # <<<<<<<<<<<<<< - * - * if have_step and step == 0: - */ - __pyx_t_2 = (__pyx_v_have_step != 0); - if (__pyx_t_2) { - __pyx_t_1 = (__pyx_v_step < 0); - __pyx_t_4 = __pyx_t_1; - } else { - __pyx_t_4 = __pyx_t_2; - } - __pyx_v_negative_step = __pyx_t_4; - - /* "View.MemoryView":794 - * negative_step = have_step != 0 and step < 0 - * - * if have_step and step == 0: # <<<<<<<<<<<<<< - * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) - * - */ - if ((__pyx_v_have_step != 0)) { - __pyx_t_4 = (__pyx_v_step == 0); - __pyx_t_2 = __pyx_t_4; - } else { - __pyx_t_2 = (__pyx_v_have_step != 0); - } - if (__pyx_t_2) { - - /* "View.MemoryView":795 - * - * if have_step and step == 0: - * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, __pyx_k_Step_may_not_be_zero_axis_d, __pyx_v_dim); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L6; - } - __pyx_L6:; - - /* "View.MemoryView":798 - * - * - * if have_start: # <<<<<<<<<<<<<< - * if start < 0: - * start += shape - */ - __pyx_t_2 = (__pyx_v_have_start != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":799 - * - * if have_start: - * if start < 0: # <<<<<<<<<<<<<< - * start += shape - * if start < 0: - */ - __pyx_t_2 = ((__pyx_v_start < 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":800 - * if have_start: - * if start < 0: - * start += shape # <<<<<<<<<<<<<< - * if start < 0: - * start = 0 - */ - __pyx_v_start = (__pyx_v_start + __pyx_v_shape); - - /* "View.MemoryView":801 - * if start < 0: - * start += shape - * if start < 0: # <<<<<<<<<<<<<< - * start = 0 - * elif start >= shape: - */ - __pyx_t_2 = ((__pyx_v_start < 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":802 - * start += shape - * if start < 0: - * start = 0 # <<<<<<<<<<<<<< - * elif start >= shape: - * if negative_step: - */ - __pyx_v_start = 0; - goto __pyx_L9; - } - __pyx_L9:; - goto __pyx_L8; - } - - /* "View.MemoryView":803 - * if start < 0: - * start = 0 - * elif start >= shape: # <<<<<<<<<<<<<< - * if negative_step: - * start = shape - 1 - */ - __pyx_t_2 = ((__pyx_v_start >= __pyx_v_shape) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":804 - * start = 0 - * elif start >= shape: - * if negative_step: # <<<<<<<<<<<<<< - * start = shape - 1 - * else: - */ - __pyx_t_2 = (__pyx_v_negative_step != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":805 - * elif start >= shape: - * if negative_step: - * start = shape - 1 # <<<<<<<<<<<<<< - * else: - * start = shape - */ - __pyx_v_start = (__pyx_v_shape - 1); - goto __pyx_L10; - } - /*else*/ { - - /* "View.MemoryView":807 - * start = shape - 1 - * else: - * start = shape # <<<<<<<<<<<<<< - * else: - * if negative_step: - */ - __pyx_v_start = __pyx_v_shape; - } - __pyx_L10:; - goto __pyx_L8; - } - __pyx_L8:; - goto __pyx_L7; - } - /*else*/ { - - /* "View.MemoryView":809 - * start = shape - * else: - * if negative_step: # <<<<<<<<<<<<<< - * start = shape - 1 - * else: - */ - __pyx_t_2 = (__pyx_v_negative_step != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":810 - * else: - * if negative_step: - * start = shape - 1 # <<<<<<<<<<<<<< - * else: - * start = 0 - */ - __pyx_v_start = (__pyx_v_shape - 1); - goto __pyx_L11; - } - /*else*/ { - - /* "View.MemoryView":812 - * start = shape - 1 - * else: - * start = 0 # <<<<<<<<<<<<<< - * - * if have_stop: - */ - __pyx_v_start = 0; - } - __pyx_L11:; - } - __pyx_L7:; - - /* "View.MemoryView":814 - * start = 0 - * - * if have_stop: # <<<<<<<<<<<<<< - * if stop < 0: - * stop += shape - */ - __pyx_t_2 = (__pyx_v_have_stop != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":815 - * - * if have_stop: - * if stop < 0: # <<<<<<<<<<<<<< - * stop += shape - * if stop < 0: - */ - __pyx_t_2 = ((__pyx_v_stop < 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":816 - * if have_stop: - * if stop < 0: - * stop += shape # <<<<<<<<<<<<<< - * if stop < 0: - * stop = 0 - */ - __pyx_v_stop = (__pyx_v_stop + __pyx_v_shape); - - /* "View.MemoryView":817 - * if stop < 0: - * stop += shape - * if stop < 0: # <<<<<<<<<<<<<< - * stop = 0 - * elif stop > shape: - */ - __pyx_t_2 = ((__pyx_v_stop < 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":818 - * stop += shape - * if stop < 0: - * stop = 0 # <<<<<<<<<<<<<< - * elif stop > shape: - * stop = shape - */ - __pyx_v_stop = 0; - goto __pyx_L14; - } - __pyx_L14:; - goto __pyx_L13; - } - - /* "View.MemoryView":819 - * if stop < 0: - * stop = 0 - * elif stop > shape: # <<<<<<<<<<<<<< - * stop = shape - * else: - */ - __pyx_t_2 = ((__pyx_v_stop > __pyx_v_shape) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":820 - * stop = 0 - * elif stop > shape: - * stop = shape # <<<<<<<<<<<<<< - * else: - * if negative_step: - */ - __pyx_v_stop = __pyx_v_shape; - goto __pyx_L13; - } - __pyx_L13:; - goto __pyx_L12; - } - /*else*/ { - - /* "View.MemoryView":822 - * stop = shape - * else: - * if negative_step: # <<<<<<<<<<<<<< - * stop = -1 - * else: - */ - __pyx_t_2 = (__pyx_v_negative_step != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":823 - * else: - * if negative_step: - * stop = -1 # <<<<<<<<<<<<<< - * else: - * stop = shape - */ - __pyx_v_stop = -1; - goto __pyx_L15; - } - /*else*/ { - - /* "View.MemoryView":825 - * stop = -1 - * else: - * stop = shape # <<<<<<<<<<<<<< - * - * if not have_step: - */ - __pyx_v_stop = __pyx_v_shape; - } - __pyx_L15:; - } - __pyx_L12:; - - /* "View.MemoryView":827 - * stop = shape - * - * if not have_step: # <<<<<<<<<<<<<< - * step = 1 - * - */ - __pyx_t_2 = ((!(__pyx_v_have_step != 0)) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":828 - * - * if not have_step: - * step = 1 # <<<<<<<<<<<<<< - * - * - */ - __pyx_v_step = 1; - goto __pyx_L16; - } - __pyx_L16:; - - /* "View.MemoryView":832 - * - * with cython.cdivision(True): - * new_shape = (stop - start) // step # <<<<<<<<<<<<<< - * - * if (stop - start) - step * new_shape: - */ - __pyx_v_new_shape = ((__pyx_v_stop - __pyx_v_start) / __pyx_v_step); - - /* "View.MemoryView":834 - * new_shape = (stop - start) // step - * - * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< - * new_shape += 1 - * - */ - __pyx_t_2 = (((__pyx_v_stop - __pyx_v_start) - (__pyx_v_step * __pyx_v_new_shape)) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":835 - * - * if (stop - start) - step * new_shape: - * new_shape += 1 # <<<<<<<<<<<<<< - * - * if new_shape < 0: - */ - __pyx_v_new_shape = (__pyx_v_new_shape + 1); - goto __pyx_L17; - } - __pyx_L17:; - - /* "View.MemoryView":837 - * new_shape += 1 - * - * if new_shape < 0: # <<<<<<<<<<<<<< - * new_shape = 0 - * - */ - __pyx_t_2 = ((__pyx_v_new_shape < 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":838 - * - * if new_shape < 0: - * new_shape = 0 # <<<<<<<<<<<<<< - * - * - */ - __pyx_v_new_shape = 0; - goto __pyx_L18; - } - __pyx_L18:; - - /* "View.MemoryView":841 - * - * - * dst.strides[new_ndim] = stride * step # <<<<<<<<<<<<<< - * dst.shape[new_ndim] = new_shape - * dst.suboffsets[new_ndim] = suboffset - */ - (__pyx_v_dst->strides[__pyx_v_new_ndim]) = (__pyx_v_stride * __pyx_v_step); - - /* "View.MemoryView":842 - * - * dst.strides[new_ndim] = stride * step - * dst.shape[new_ndim] = new_shape # <<<<<<<<<<<<<< - * dst.suboffsets[new_ndim] = suboffset - * - */ - (__pyx_v_dst->shape[__pyx_v_new_ndim]) = __pyx_v_new_shape; - - /* "View.MemoryView":843 - * dst.strides[new_ndim] = stride * step - * dst.shape[new_ndim] = new_shape - * dst.suboffsets[new_ndim] = suboffset # <<<<<<<<<<<<<< - * - * - */ - (__pyx_v_dst->suboffsets[__pyx_v_new_ndim]) = __pyx_v_suboffset; - } - __pyx_L3:; - - /* "View.MemoryView":846 - * - * - * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< - * dst.data += start * stride - * else: - */ - __pyx_t_2 = (((__pyx_v_suboffset_dim[0]) < 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":847 - * - * if suboffset_dim[0] < 0: - * dst.data += start * stride # <<<<<<<<<<<<<< - * else: - * dst.suboffsets[suboffset_dim[0]] += start * stride - */ - __pyx_v_dst->data = (__pyx_v_dst->data + (__pyx_v_start * __pyx_v_stride)); - goto __pyx_L19; - } - /*else*/ { - - /* "View.MemoryView":849 - * dst.data += start * stride - * else: - * dst.suboffsets[suboffset_dim[0]] += start * stride # <<<<<<<<<<<<<< - * - * if suboffset >= 0: - */ - __pyx_t_3 = (__pyx_v_suboffset_dim[0]); - (__pyx_v_dst->suboffsets[__pyx_t_3]) = ((__pyx_v_dst->suboffsets[__pyx_t_3]) + (__pyx_v_start * __pyx_v_stride)); - } - __pyx_L19:; - - /* "View.MemoryView":851 - * dst.suboffsets[suboffset_dim[0]] += start * stride - * - * if suboffset >= 0: # <<<<<<<<<<<<<< - * if not is_slice: - * if new_ndim == 0: - */ - __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":852 - * - * if suboffset >= 0: - * if not is_slice: # <<<<<<<<<<<<<< - * if new_ndim == 0: - * dst.data = ( dst.data)[0] + suboffset - */ - __pyx_t_2 = ((!(__pyx_v_is_slice != 0)) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":853 - * if suboffset >= 0: - * if not is_slice: - * if new_ndim == 0: # <<<<<<<<<<<<<< - * dst.data = ( dst.data)[0] + suboffset - * else: - */ - __pyx_t_2 = ((__pyx_v_new_ndim == 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":854 - * if not is_slice: - * if new_ndim == 0: - * dst.data = ( dst.data)[0] + suboffset # <<<<<<<<<<<<<< - * else: - * _err_dim(IndexError, "All dimensions preceding dimension %d " - */ - __pyx_v_dst->data = ((((char **)__pyx_v_dst->data)[0]) + __pyx_v_suboffset); - goto __pyx_L22; - } - /*else*/ { - - /* "View.MemoryView":856 - * dst.data = ( dst.data)[0] + suboffset - * else: - * _err_dim(IndexError, "All dimensions preceding dimension %d " # <<<<<<<<<<<<<< - * "must be indexed and not sliced", dim) - * else: - */ - __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, __pyx_k_All_dimensions_preceding_dimensi, __pyx_v_dim); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 856; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_L22:; - goto __pyx_L21; - } - /*else*/ { - - /* "View.MemoryView":859 - * "must be indexed and not sliced", dim) - * else: - * suboffset_dim[0] = new_ndim # <<<<<<<<<<<<<< - * - * return 0 - */ - (__pyx_v_suboffset_dim[0]) = __pyx_v_new_ndim; - } - __pyx_L21:; - goto __pyx_L20; - } - __pyx_L20:; - - /* "View.MemoryView":861 - * suboffset_dim[0] = new_ndim - * - * return 0 # <<<<<<<<<<<<<< - * - * - */ - __pyx_r = 0; - goto __pyx_L0; - - /* "View.MemoryView":764 - * - * @cname('__pyx_memoryview_slice_memviewslice') - * cdef int slice_memviewslice( # <<<<<<<<<<<<<< - * __Pyx_memviewslice *dst, - * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, - */ - - /* function exit code */ - __pyx_L1_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); - #endif - __Pyx_AddTraceback("View.MemoryView.slice_memviewslice", __pyx_clineno, __pyx_lineno, __pyx_filename); - #ifdef WITH_THREAD - PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_r = -1; - __pyx_L0:; - return __pyx_r; -} - -/* "View.MemoryView":867 - * - * @cname('__pyx_pybuffer_index') - * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< - * Py_ssize_t dim) except NULL: - * cdef Py_ssize_t shape, stride, suboffset = -1 - */ - -static char *__pyx_pybuffer_index(Py_buffer *__pyx_v_view, char *__pyx_v_bufp, Py_ssize_t __pyx_v_index, Py_ssize_t __pyx_v_dim) { - Py_ssize_t __pyx_v_shape; - Py_ssize_t __pyx_v_stride; - Py_ssize_t __pyx_v_suboffset; - Py_ssize_t __pyx_v_itemsize; - char *__pyx_v_resultp; - char *__pyx_r; - __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("pybuffer_index", 0); - - /* "View.MemoryView":869 - * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, - * Py_ssize_t dim) except NULL: - * cdef Py_ssize_t shape, stride, suboffset = -1 # <<<<<<<<<<<<<< - * cdef Py_ssize_t itemsize = view.itemsize - * cdef char *resultp - */ - __pyx_v_suboffset = -1; - - /* "View.MemoryView":870 - * Py_ssize_t dim) except NULL: - * cdef Py_ssize_t shape, stride, suboffset = -1 - * cdef Py_ssize_t itemsize = view.itemsize # <<<<<<<<<<<<<< - * cdef char *resultp - * - */ - __pyx_t_1 = __pyx_v_view->itemsize; - __pyx_v_itemsize = __pyx_t_1; - - /* "View.MemoryView":873 - * cdef char *resultp - * - * if view.ndim == 0: # <<<<<<<<<<<<<< - * shape = view.len / itemsize - * stride = itemsize - */ - __pyx_t_2 = ((__pyx_v_view->ndim == 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":874 - * - * if view.ndim == 0: - * shape = view.len / itemsize # <<<<<<<<<<<<<< - * stride = itemsize - * else: - */ - if (unlikely(__pyx_v_itemsize == 0)) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); - #ifdef WITH_THREAD - PyGILState_Release(__pyx_gilstate_save); - #endif - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - else if (sizeof(Py_ssize_t) == sizeof(long) && unlikely(__pyx_v_itemsize == -1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_view->len))) { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); - #endif - PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); - #ifdef WITH_THREAD - PyGILState_Release(__pyx_gilstate_save); - #endif - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_v_shape = __Pyx_div_Py_ssize_t(__pyx_v_view->len, __pyx_v_itemsize); - - /* "View.MemoryView":875 - * if view.ndim == 0: - * shape = view.len / itemsize - * stride = itemsize # <<<<<<<<<<<<<< - * else: - * shape = view.shape[dim] - */ - __pyx_v_stride = __pyx_v_itemsize; - goto __pyx_L3; - } - /*else*/ { - - /* "View.MemoryView":877 - * stride = itemsize - * else: - * shape = view.shape[dim] # <<<<<<<<<<<<<< - * stride = view.strides[dim] - * if view.suboffsets != NULL: - */ - __pyx_v_shape = (__pyx_v_view->shape[__pyx_v_dim]); - - /* "View.MemoryView":878 - * else: - * shape = view.shape[dim] - * stride = view.strides[dim] # <<<<<<<<<<<<<< - * if view.suboffsets != NULL: - * suboffset = view.suboffsets[dim] - */ - __pyx_v_stride = (__pyx_v_view->strides[__pyx_v_dim]); - - /* "View.MemoryView":879 - * shape = view.shape[dim] - * stride = view.strides[dim] - * if view.suboffsets != NULL: # <<<<<<<<<<<<<< - * suboffset = view.suboffsets[dim] - * - */ - __pyx_t_2 = ((__pyx_v_view->suboffsets != NULL) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":880 - * stride = view.strides[dim] - * if view.suboffsets != NULL: - * suboffset = view.suboffsets[dim] # <<<<<<<<<<<<<< - * - * if index < 0: - */ - __pyx_v_suboffset = (__pyx_v_view->suboffsets[__pyx_v_dim]); - goto __pyx_L4; - } - __pyx_L4:; - } - __pyx_L3:; - - /* "View.MemoryView":882 - * suboffset = view.suboffsets[dim] - * - * if index < 0: # <<<<<<<<<<<<<< - * index += view.shape[dim] - * if index < 0: - */ - __pyx_t_2 = ((__pyx_v_index < 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":883 - * - * if index < 0: - * index += view.shape[dim] # <<<<<<<<<<<<<< - * if index < 0: - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) - */ - __pyx_v_index = (__pyx_v_index + (__pyx_v_view->shape[__pyx_v_dim])); - - /* "View.MemoryView":884 - * if index < 0: - * index += view.shape[dim] - * if index < 0: # <<<<<<<<<<<<<< - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) - * - */ - __pyx_t_2 = ((__pyx_v_index < 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":885 - * index += view.shape[dim] - * if index < 0: - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< - * - * if index >= shape: - */ - __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - goto __pyx_L5; - } - __pyx_L5:; - - /* "View.MemoryView":887 - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) - * - * if index >= shape: # <<<<<<<<<<<<<< - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) - * - */ - __pyx_t_2 = ((__pyx_v_index >= __pyx_v_shape) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":888 - * - * if index >= shape: - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< - * - * resultp = bufp + index * stride - */ - __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "View.MemoryView":890 - * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) - * - * resultp = bufp + index * stride # <<<<<<<<<<<<<< - * if suboffset >= 0: - * resultp = ( resultp)[0] + suboffset - */ - __pyx_v_resultp = (__pyx_v_bufp + (__pyx_v_index * __pyx_v_stride)); - - /* "View.MemoryView":891 - * - * resultp = bufp + index * stride - * if suboffset >= 0: # <<<<<<<<<<<<<< - * resultp = ( resultp)[0] + suboffset - * - */ - __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":892 - * resultp = bufp + index * stride - * if suboffset >= 0: - * resultp = ( resultp)[0] + suboffset # <<<<<<<<<<<<<< - * - * return resultp - */ - __pyx_v_resultp = ((((char **)__pyx_v_resultp)[0]) + __pyx_v_suboffset); - goto __pyx_L8; - } - __pyx_L8:; - - /* "View.MemoryView":894 - * resultp = ( resultp)[0] + suboffset - * - * return resultp # <<<<<<<<<<<<<< - * - * - */ - __pyx_r = __pyx_v_resultp; - goto __pyx_L0; - - /* "View.MemoryView":867 - * - * @cname('__pyx_pybuffer_index') - * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< - * Py_ssize_t dim) except NULL: - * cdef Py_ssize_t shape, stride, suboffset = -1 - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("View.MemoryView.pybuffer_index", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":900 - * - * @cname('__pyx_memslice_transpose') - * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< - * cdef int ndim = memslice.memview.view.ndim - * - */ - -static int __pyx_memslice_transpose(__Pyx_memviewslice *__pyx_v_memslice) { - int __pyx_v_ndim; - Py_ssize_t *__pyx_v_shape; - Py_ssize_t *__pyx_v_strides; - int __pyx_v_i; - int __pyx_v_j; - int __pyx_r; - int __pyx_t_1; - Py_ssize_t *__pyx_t_2; - long __pyx_t_3; - Py_ssize_t __pyx_t_4; - Py_ssize_t __pyx_t_5; - int __pyx_t_6; - int __pyx_t_7; - int __pyx_t_8; - int __pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - - /* "View.MemoryView":901 - * @cname('__pyx_memslice_transpose') - * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: - * cdef int ndim = memslice.memview.view.ndim # <<<<<<<<<<<<<< - * - * cdef Py_ssize_t *shape = memslice.shape - */ - __pyx_t_1 = __pyx_v_memslice->memview->view.ndim; - __pyx_v_ndim = __pyx_t_1; - - /* "View.MemoryView":903 - * cdef int ndim = memslice.memview.view.ndim - * - * cdef Py_ssize_t *shape = memslice.shape # <<<<<<<<<<<<<< - * cdef Py_ssize_t *strides = memslice.strides - * - */ - __pyx_t_2 = __pyx_v_memslice->shape; - __pyx_v_shape = __pyx_t_2; - - /* "View.MemoryView":904 - * - * cdef Py_ssize_t *shape = memslice.shape - * cdef Py_ssize_t *strides = memslice.strides # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_2 = __pyx_v_memslice->strides; - __pyx_v_strides = __pyx_t_2; - - /* "View.MemoryView":908 - * - * cdef int i, j - * for i in range(ndim / 2): # <<<<<<<<<<<<<< - * j = ndim - 1 - i - * strides[i], strides[j] = strides[j], strides[i] - */ - __pyx_t_3 = __Pyx_div_long(__pyx_v_ndim, 2); - for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_3; __pyx_t_1+=1) { - __pyx_v_i = __pyx_t_1; - - /* "View.MemoryView":909 - * cdef int i, j - * for i in range(ndim / 2): - * j = ndim - 1 - i # <<<<<<<<<<<<<< - * strides[i], strides[j] = strides[j], strides[i] - * shape[i], shape[j] = shape[j], shape[i] - */ - __pyx_v_j = ((__pyx_v_ndim - 1) - __pyx_v_i); - - /* "View.MemoryView":910 - * for i in range(ndim / 2): - * j = ndim - 1 - i - * strides[i], strides[j] = strides[j], strides[i] # <<<<<<<<<<<<<< - * shape[i], shape[j] = shape[j], shape[i] - * - */ - __pyx_t_4 = (__pyx_v_strides[__pyx_v_j]); - __pyx_t_5 = (__pyx_v_strides[__pyx_v_i]); - (__pyx_v_strides[__pyx_v_i]) = __pyx_t_4; - (__pyx_v_strides[__pyx_v_j]) = __pyx_t_5; - - /* "View.MemoryView":911 - * j = ndim - 1 - i - * strides[i], strides[j] = strides[j], strides[i] - * shape[i], shape[j] = shape[j], shape[i] # <<<<<<<<<<<<<< - * - * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: - */ - __pyx_t_5 = (__pyx_v_shape[__pyx_v_j]); - __pyx_t_4 = (__pyx_v_shape[__pyx_v_i]); - (__pyx_v_shape[__pyx_v_i]) = __pyx_t_5; - (__pyx_v_shape[__pyx_v_j]) = __pyx_t_4; - - /* "View.MemoryView":913 - * shape[i], shape[j] = shape[j], shape[i] - * - * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< - * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") - * - */ - __pyx_t_6 = (((__pyx_v_memslice->suboffsets[__pyx_v_i]) >= 0) != 0); - if (!__pyx_t_6) { - __pyx_t_7 = (((__pyx_v_memslice->suboffsets[__pyx_v_j]) >= 0) != 0); - __pyx_t_8 = __pyx_t_7; - } else { - __pyx_t_8 = __pyx_t_6; - } - if (__pyx_t_8) { - - /* "View.MemoryView":914 - * - * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: - * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") # <<<<<<<<<<<<<< - * - * return 1 - */ - __pyx_t_9 = __pyx_memoryview_err(__pyx_builtin_ValueError, __pyx_k_Cannot_transpose_memoryview_with); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 914; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L5; - } - __pyx_L5:; - } - - /* "View.MemoryView":916 - * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") - * - * return 1 # <<<<<<<<<<<<<< - * - * - */ - __pyx_r = 1; - goto __pyx_L0; - - /* "View.MemoryView":900 - * - * @cname('__pyx_memslice_transpose') - * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< - * cdef int ndim = memslice.memview.view.ndim - * - */ - - /* function exit code */ - __pyx_L1_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); - #endif - __Pyx_AddTraceback("View.MemoryView.transpose_memslice", __pyx_clineno, __pyx_lineno, __pyx_filename); - #ifdef WITH_THREAD - PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_r = 0; - __pyx_L0:; - return __pyx_r; -} - -/* "View.MemoryView":933 - * cdef int (*to_dtype_func)(char *, object) except 0 - * - * def __dealloc__(self): # <<<<<<<<<<<<<< - * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) - * - */ - -/* Python wrapper */ -static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self); /*proto*/ -static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); - __pyx_memoryviewslice_MemoryView_16_memoryviewslice___dealloc__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -static void __pyx_memoryviewslice_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__dealloc__", 0); - - /* "View.MemoryView":934 - * - * def __dealloc__(self): - * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) # <<<<<<<<<<<<<< - * - * cdef convert_item_to_object(self, char *itemp): - */ - __PYX_XDEC_MEMVIEW((&__pyx_v_self->from_slice), 1); - - /* "View.MemoryView":933 - * cdef int (*to_dtype_func)(char *, object) except 0 - * - * def __dealloc__(self): # <<<<<<<<<<<<<< - * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) - * - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "View.MemoryView":936 - * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) - * - * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< - * if self.to_object_func != NULL: - * return self.to_object_func(itemp) - */ - -static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("convert_item_to_object", 0); - - /* "View.MemoryView":937 - * - * cdef convert_item_to_object(self, char *itemp): - * if self.to_object_func != NULL: # <<<<<<<<<<<<<< - * return self.to_object_func(itemp) - * else: - */ - __pyx_t_1 = ((__pyx_v_self->to_object_func != NULL) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":938 - * cdef convert_item_to_object(self, char *itemp): - * if self.to_object_func != NULL: - * return self.to_object_func(itemp) # <<<<<<<<<<<<<< - * else: - * return memoryview.convert_item_to_object(self, itemp) - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __pyx_v_self->to_object_func(__pyx_v_itemp); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 938; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - } - /*else*/ { - - /* "View.MemoryView":940 - * return self.to_object_func(itemp) - * else: - * return memoryview.convert_item_to_object(self, itemp) # <<<<<<<<<<<<<< - * - * cdef assign_item_from_object(self, char *itemp, object value): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __pyx_vtabptr_memoryview->convert_item_to_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 940; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - } - - /* "View.MemoryView":936 - * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) - * - * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< - * if self.to_object_func != NULL: - * return self.to_object_func(itemp) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("View.MemoryView._memoryviewslice.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":942 - * return memoryview.convert_item_to_object(self, itemp) - * - * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< - * if self.to_dtype_func != NULL: - * self.to_dtype_func(itemp, value) - */ - -static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("assign_item_from_object", 0); - - /* "View.MemoryView":943 - * - * cdef assign_item_from_object(self, char *itemp, object value): - * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< - * self.to_dtype_func(itemp, value) - * else: - */ - __pyx_t_1 = ((__pyx_v_self->to_dtype_func != NULL) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":944 - * cdef assign_item_from_object(self, char *itemp, object value): - * if self.to_dtype_func != NULL: - * self.to_dtype_func(itemp, value) # <<<<<<<<<<<<<< - * else: - * memoryview.assign_item_from_object(self, itemp, value) - */ - __pyx_t_2 = __pyx_v_self->to_dtype_func(__pyx_v_itemp, __pyx_v_value); if (unlikely(__pyx_t_2 == 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 944; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L3; - } - /*else*/ { - - /* "View.MemoryView":946 - * self.to_dtype_func(itemp, value) - * else: - * memoryview.assign_item_from_object(self, itemp, value) # <<<<<<<<<<<<<< - * - * property base: - */ - __pyx_t_3 = __pyx_vtabptr_memoryview->assign_item_from_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 946; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - __pyx_L3:; - - /* "View.MemoryView":942 - * return memoryview.convert_item_to_object(self, itemp) - * - * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< - * if self.to_dtype_func != NULL: - * self.to_dtype_func(itemp, value) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView._memoryviewslice.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":950 - * property base: - * @cname('__pyx_memoryviewslice__get__base') - * def __get__(self): # <<<<<<<<<<<<<< - * return self.from_object - * - */ - -/* Python wrapper */ -static PyObject *__pyx_memoryviewslice__get__base(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_memoryviewslice__get__base(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_memoryviewslice__get__base_MemoryView_16_memoryviewslice_4base___get__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_memoryviewslice__get__base_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - - /* "View.MemoryView":951 - * @cname('__pyx_memoryviewslice__get__base') - * def __get__(self): - * return self.from_object # <<<<<<<<<<<<<< - * - * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->from_object); - __pyx_r = __pyx_v_self->from_object; - goto __pyx_L0; - - /* "View.MemoryView":950 - * property base: - * @cname('__pyx_memoryviewslice__get__base') - * def __get__(self): # <<<<<<<<<<<<<< - * return self.from_object - * - */ - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":957 - * - * @cname('__pyx_memoryview_fromslice') - * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< - * int ndim, - * object (*to_object_func)(char *), - */ - -static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewslice, int __pyx_v_ndim, PyObject *(*__pyx_v_to_object_func)(char *), int (*__pyx_v_to_dtype_func)(char *, PyObject *), int __pyx_v_dtype_is_object) { - struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; - int __pyx_v_i; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - __Pyx_TypeInfo *__pyx_t_4; - Py_buffer __pyx_t_5; - Py_ssize_t __pyx_t_6; - int __pyx_t_7; - int __pyx_t_8; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("memoryview_fromslice", 0); - - /* "View.MemoryView":966 - * cdef int i - * - * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< - * return None - * - */ - __pyx_t_1 = ((((PyObject *)__pyx_v_memviewslice.memview) == Py_None) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":967 - * - * if memviewslice.memview == Py_None: - * return None # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_None); - __pyx_r = Py_None; - goto __pyx_L0; - } - - /* "View.MemoryView":972 - * - * - * result = _memoryviewslice(None, 0, dtype_is_object) # <<<<<<<<<<<<<< - * - * result.from_slice = memviewslice - */ - __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_3, 0, Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_INCREF(__pyx_int_0); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_0); - __Pyx_GIVEREF(__pyx_int_0); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject *)__pyx_memoryviewslice_type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2); - __pyx_t_2 = 0; - - /* "View.MemoryView":974 - * result = _memoryviewslice(None, 0, dtype_is_object) - * - * result.from_slice = memviewslice # <<<<<<<<<<<<<< - * __PYX_INC_MEMVIEW(&memviewslice, 1) - * - */ - __pyx_v_result->from_slice = __pyx_v_memviewslice; - - /* "View.MemoryView":975 - * - * result.from_slice = memviewslice - * __PYX_INC_MEMVIEW(&memviewslice, 1) # <<<<<<<<<<<<<< - * - * result.from_object = ( memviewslice.memview).base - */ - __PYX_INC_MEMVIEW((&__pyx_v_memviewslice), 1); - - /* "View.MemoryView":977 - * __PYX_INC_MEMVIEW(&memviewslice, 1) - * - * result.from_object = ( memviewslice.memview).base # <<<<<<<<<<<<<< - * result.typeinfo = memviewslice.memview.typeinfo - * - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_memviewslice.memview), __pyx_n_s_base); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 977; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __Pyx_GOTREF(__pyx_v_result->from_object); - __Pyx_DECREF(__pyx_v_result->from_object); - __pyx_v_result->from_object = __pyx_t_2; - __pyx_t_2 = 0; - - /* "View.MemoryView":978 - * - * result.from_object = ( memviewslice.memview).base - * result.typeinfo = memviewslice.memview.typeinfo # <<<<<<<<<<<<<< - * - * result.view = memviewslice.memview.view - */ - __pyx_t_4 = __pyx_v_memviewslice.memview->typeinfo; - __pyx_v_result->__pyx_base.typeinfo = __pyx_t_4; - - /* "View.MemoryView":980 - * result.typeinfo = memviewslice.memview.typeinfo - * - * result.view = memviewslice.memview.view # <<<<<<<<<<<<<< - * result.view.buf = memviewslice.data - * result.view.ndim = ndim - */ - __pyx_t_5 = __pyx_v_memviewslice.memview->view; - __pyx_v_result->__pyx_base.view = __pyx_t_5; - - /* "View.MemoryView":981 - * - * result.view = memviewslice.memview.view - * result.view.buf = memviewslice.data # <<<<<<<<<<<<<< - * result.view.ndim = ndim - * (<__pyx_buffer *> &result.view).obj = Py_None - */ - __pyx_v_result->__pyx_base.view.buf = ((void *)__pyx_v_memviewslice.data); - - /* "View.MemoryView":982 - * result.view = memviewslice.memview.view - * result.view.buf = memviewslice.data - * result.view.ndim = ndim # <<<<<<<<<<<<<< - * (<__pyx_buffer *> &result.view).obj = Py_None - * Py_INCREF(Py_None) - */ - __pyx_v_result->__pyx_base.view.ndim = __pyx_v_ndim; - - /* "View.MemoryView":983 - * result.view.buf = memviewslice.data - * result.view.ndim = ndim - * (<__pyx_buffer *> &result.view).obj = Py_None # <<<<<<<<<<<<<< - * Py_INCREF(Py_None) - * - */ - ((Py_buffer *)(&__pyx_v_result->__pyx_base.view))->obj = Py_None; - - /* "View.MemoryView":984 - * result.view.ndim = ndim - * (<__pyx_buffer *> &result.view).obj = Py_None - * Py_INCREF(Py_None) # <<<<<<<<<<<<<< - * - * result.flags = PyBUF_RECORDS - */ - Py_INCREF(Py_None); - - /* "View.MemoryView":986 - * Py_INCREF(Py_None) - * - * result.flags = PyBUF_RECORDS # <<<<<<<<<<<<<< - * - * result.view.shape = result.from_slice.shape - */ - __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS; - - /* "View.MemoryView":988 - * result.flags = PyBUF_RECORDS - * - * result.view.shape = result.from_slice.shape # <<<<<<<<<<<<<< - * result.view.strides = result.from_slice.strides - * result.view.suboffsets = result.from_slice.suboffsets - */ - __pyx_v_result->__pyx_base.view.shape = ((Py_ssize_t *)__pyx_v_result->from_slice.shape); - - /* "View.MemoryView":989 - * - * result.view.shape = result.from_slice.shape - * result.view.strides = result.from_slice.strides # <<<<<<<<<<<<<< - * result.view.suboffsets = result.from_slice.suboffsets - * - */ - __pyx_v_result->__pyx_base.view.strides = ((Py_ssize_t *)__pyx_v_result->from_slice.strides); - - /* "View.MemoryView":990 - * result.view.shape = result.from_slice.shape - * result.view.strides = result.from_slice.strides - * result.view.suboffsets = result.from_slice.suboffsets # <<<<<<<<<<<<<< - * - * result.view.len = result.view.itemsize - */ - __pyx_v_result->__pyx_base.view.suboffsets = ((Py_ssize_t *)__pyx_v_result->from_slice.suboffsets); - - /* "View.MemoryView":992 - * result.view.suboffsets = result.from_slice.suboffsets - * - * result.view.len = result.view.itemsize # <<<<<<<<<<<<<< - * for i in range(ndim): - * result.view.len *= result.view.shape[i] - */ - __pyx_t_6 = __pyx_v_result->__pyx_base.view.itemsize; - __pyx_v_result->__pyx_base.view.len = __pyx_t_6; - - /* "View.MemoryView":993 - * - * result.view.len = result.view.itemsize - * for i in range(ndim): # <<<<<<<<<<<<<< - * result.view.len *= result.view.shape[i] - * - */ - __pyx_t_7 = __pyx_v_ndim; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { - __pyx_v_i = __pyx_t_8; - - /* "View.MemoryView":994 - * result.view.len = result.view.itemsize - * for i in range(ndim): - * result.view.len *= result.view.shape[i] # <<<<<<<<<<<<<< - * - * result.to_object_func = to_object_func - */ - __pyx_v_result->__pyx_base.view.len = (__pyx_v_result->__pyx_base.view.len * (__pyx_v_result->__pyx_base.view.shape[__pyx_v_i])); - } - - /* "View.MemoryView":996 - * result.view.len *= result.view.shape[i] - * - * result.to_object_func = to_object_func # <<<<<<<<<<<<<< - * result.to_dtype_func = to_dtype_func - * - */ - __pyx_v_result->to_object_func = __pyx_v_to_object_func; - - /* "View.MemoryView":997 - * - * result.to_object_func = to_object_func - * result.to_dtype_func = to_dtype_func # <<<<<<<<<<<<<< - * - * return result - */ - __pyx_v_result->to_dtype_func = __pyx_v_to_dtype_func; - - /* "View.MemoryView":999 - * result.to_dtype_func = to_dtype_func - * - * return result # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_get_slice_from_memoryview') - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_result)); - __pyx_r = ((PyObject *)__pyx_v_result); - goto __pyx_L0; - - /* "View.MemoryView":957 - * - * @cname('__pyx_memoryview_fromslice') - * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< - * int ndim, - * object (*to_object_func)(char *), - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView.memoryview_fromslice", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":1002 - * - * @cname('__pyx_memoryview_get_slice_from_memoryview') - * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< - * __Pyx_memviewslice *mslice): - * cdef _memoryviewslice obj - */ - -static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_mslice) { - struct __pyx_memoryviewslice_obj *__pyx_v_obj = 0; - __Pyx_memviewslice *__pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_slice_from_memview", 0); - - /* "View.MemoryView":1005 - * __Pyx_memviewslice *mslice): - * cdef _memoryviewslice obj - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * obj = memview - * return &obj.from_slice - */ - __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), ((PyObject *)__pyx_memoryviewslice_type)); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1006 - * cdef _memoryviewslice obj - * if isinstance(memview, _memoryviewslice): - * obj = memview # <<<<<<<<<<<<<< - * return &obj.from_slice - * else: - */ - if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1006; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_3 = ((PyObject *)__pyx_v_memview); - __Pyx_INCREF(__pyx_t_3); - __pyx_v_obj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); - __pyx_t_3 = 0; - - /* "View.MemoryView":1007 - * if isinstance(memview, _memoryviewslice): - * obj = memview - * return &obj.from_slice # <<<<<<<<<<<<<< - * else: - * slice_copy(memview, mslice) - */ - __pyx_r = (&__pyx_v_obj->from_slice); - goto __pyx_L0; - } - /*else*/ { - - /* "View.MemoryView":1009 - * return &obj.from_slice - * else: - * slice_copy(memview, mslice) # <<<<<<<<<<<<<< - * return mslice - * - */ - __pyx_memoryview_slice_copy(__pyx_v_memview, __pyx_v_mslice); - - /* "View.MemoryView":1010 - * else: - * slice_copy(memview, mslice) - * return mslice # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_slice_copy') - */ - __pyx_r = __pyx_v_mslice; - goto __pyx_L0; - } - - /* "View.MemoryView":1002 - * - * @cname('__pyx_memoryview_get_slice_from_memoryview') - * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< - * __Pyx_memviewslice *mslice): - * cdef _memoryviewslice obj - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_WriteUnraisable("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename, 0); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_obj); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":1013 - * - * @cname('__pyx_memoryview_slice_copy') - * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< - * cdef int dim - * cdef (Py_ssize_t*) shape, strides, suboffsets - */ - -static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_dst) { - int __pyx_v_dim; - Py_ssize_t *__pyx_v_shape; - Py_ssize_t *__pyx_v_strides; - Py_ssize_t *__pyx_v_suboffsets; - __Pyx_RefNannyDeclarations - Py_ssize_t *__pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; - __Pyx_RefNannySetupContext("slice_copy", 0); - - /* "View.MemoryView":1017 - * cdef (Py_ssize_t*) shape, strides, suboffsets - * - * shape = memview.view.shape # <<<<<<<<<<<<<< - * strides = memview.view.strides - * suboffsets = memview.view.suboffsets - */ - __pyx_t_1 = __pyx_v_memview->view.shape; - __pyx_v_shape = __pyx_t_1; - - /* "View.MemoryView":1018 - * - * shape = memview.view.shape - * strides = memview.view.strides # <<<<<<<<<<<<<< - * suboffsets = memview.view.suboffsets - * - */ - __pyx_t_1 = __pyx_v_memview->view.strides; - __pyx_v_strides = __pyx_t_1; - - /* "View.MemoryView":1019 - * shape = memview.view.shape - * strides = memview.view.strides - * suboffsets = memview.view.suboffsets # <<<<<<<<<<<<<< - * - * dst.memview = <__pyx_memoryview *> memview - */ - __pyx_t_1 = __pyx_v_memview->view.suboffsets; - __pyx_v_suboffsets = __pyx_t_1; - - /* "View.MemoryView":1021 - * suboffsets = memview.view.suboffsets - * - * dst.memview = <__pyx_memoryview *> memview # <<<<<<<<<<<<<< - * dst.data = memview.view.buf - * - */ - __pyx_v_dst->memview = ((struct __pyx_memoryview_obj *)__pyx_v_memview); - - /* "View.MemoryView":1022 - * - * dst.memview = <__pyx_memoryview *> memview - * dst.data = memview.view.buf # <<<<<<<<<<<<<< - * - * for dim in range(memview.view.ndim): - */ - __pyx_v_dst->data = ((char *)__pyx_v_memview->view.buf); - - /* "View.MemoryView":1024 - * dst.data = memview.view.buf - * - * for dim in range(memview.view.ndim): # <<<<<<<<<<<<<< - * dst.shape[dim] = shape[dim] - * dst.strides[dim] = strides[dim] - */ - __pyx_t_2 = __pyx_v_memview->view.ndim; - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { - __pyx_v_dim = __pyx_t_3; - - /* "View.MemoryView":1025 - * - * for dim in range(memview.view.ndim): - * dst.shape[dim] = shape[dim] # <<<<<<<<<<<<<< - * dst.strides[dim] = strides[dim] - * if suboffsets == NULL: - */ - (__pyx_v_dst->shape[__pyx_v_dim]) = (__pyx_v_shape[__pyx_v_dim]); - - /* "View.MemoryView":1026 - * for dim in range(memview.view.ndim): - * dst.shape[dim] = shape[dim] - * dst.strides[dim] = strides[dim] # <<<<<<<<<<<<<< - * if suboffsets == NULL: - * dst.suboffsets[dim] = -1 - */ - (__pyx_v_dst->strides[__pyx_v_dim]) = (__pyx_v_strides[__pyx_v_dim]); - - /* "View.MemoryView":1027 - * dst.shape[dim] = shape[dim] - * dst.strides[dim] = strides[dim] - * if suboffsets == NULL: # <<<<<<<<<<<<<< - * dst.suboffsets[dim] = -1 - * else: - */ - __pyx_t_4 = ((__pyx_v_suboffsets == NULL) != 0); - if (__pyx_t_4) { - - /* "View.MemoryView":1028 - * dst.strides[dim] = strides[dim] - * if suboffsets == NULL: - * dst.suboffsets[dim] = -1 # <<<<<<<<<<<<<< - * else: - * dst.suboffsets[dim] = suboffsets[dim] - */ - (__pyx_v_dst->suboffsets[__pyx_v_dim]) = -1; - goto __pyx_L5; - } - /*else*/ { - - /* "View.MemoryView":1030 - * dst.suboffsets[dim] = -1 - * else: - * dst.suboffsets[dim] = suboffsets[dim] # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_copy_object') - */ - (__pyx_v_dst->suboffsets[__pyx_v_dim]) = (__pyx_v_suboffsets[__pyx_v_dim]); - } - __pyx_L5:; - } - - /* "View.MemoryView":1013 - * - * @cname('__pyx_memoryview_slice_copy') - * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< - * cdef int dim - * cdef (Py_ssize_t*) shape, strides, suboffsets - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "View.MemoryView":1033 - * - * @cname('__pyx_memoryview_copy_object') - * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< - * "Create a new memoryview object" - * cdef __Pyx_memviewslice memviewslice - */ - -static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *__pyx_v_memview) { - __Pyx_memviewslice __pyx_v_memviewslice; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("memoryview_copy", 0); - - /* "View.MemoryView":1036 - * "Create a new memoryview object" - * cdef __Pyx_memviewslice memviewslice - * slice_copy(memview, &memviewslice) # <<<<<<<<<<<<<< - * return memoryview_copy_from_slice(memview, &memviewslice) - * - */ - __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_memviewslice)); - - /* "View.MemoryView":1037 - * cdef __Pyx_memviewslice memviewslice - * slice_copy(memview, &memviewslice) - * return memoryview_copy_from_slice(memview, &memviewslice) # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_copy_object_from_slice') - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __pyx_memoryview_copy_object_from_slice(__pyx_v_memview, (&__pyx_v_memviewslice)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1037; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "View.MemoryView":1033 - * - * @cname('__pyx_memoryview_copy_object') - * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< - * "Create a new memoryview object" - * cdef __Pyx_memviewslice memviewslice - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("View.MemoryView.memoryview_copy", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":1040 - * - * @cname('__pyx_memoryview_copy_object_from_slice') - * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< - * """ - * Create a new memoryview object from a given memoryview object and slice. - */ - -static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_memviewslice) { - PyObject *(*__pyx_v_to_object_func)(char *); - int (*__pyx_v_to_dtype_func)(char *, PyObject *); - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *(*__pyx_t_3)(char *); - int (*__pyx_t_4)(char *, PyObject *); - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("memoryview_copy_from_slice", 0); - - /* "View.MemoryView":1047 - * cdef int (*to_dtype_func)(char *, object) except 0 - * - * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< - * to_object_func = (<_memoryviewslice> memview).to_object_func - * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func - */ - __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), ((PyObject *)__pyx_memoryviewslice_type)); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1048 - * - * if isinstance(memview, _memoryviewslice): - * to_object_func = (<_memoryviewslice> memview).to_object_func # <<<<<<<<<<<<<< - * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func - * else: - */ - __pyx_t_3 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_object_func; - __pyx_v_to_object_func = __pyx_t_3; - - /* "View.MemoryView":1049 - * if isinstance(memview, _memoryviewslice): - * to_object_func = (<_memoryviewslice> memview).to_object_func - * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func # <<<<<<<<<<<<<< - * else: - * to_object_func = NULL - */ - __pyx_t_4 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_dtype_func; - __pyx_v_to_dtype_func = __pyx_t_4; - goto __pyx_L3; - } - /*else*/ { - - /* "View.MemoryView":1051 - * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func - * else: - * to_object_func = NULL # <<<<<<<<<<<<<< - * to_dtype_func = NULL - * - */ - __pyx_v_to_object_func = NULL; - - /* "View.MemoryView":1052 - * else: - * to_object_func = NULL - * to_dtype_func = NULL # <<<<<<<<<<<<<< - * - * return memoryview_fromslice(memviewslice[0], memview.view.ndim, - */ - __pyx_v_to_dtype_func = NULL; - } - __pyx_L3:; - - /* "View.MemoryView":1054 - * to_dtype_func = NULL - * - * return memoryview_fromslice(memviewslice[0], memview.view.ndim, # <<<<<<<<<<<<<< - * to_object_func, to_dtype_func, - * memview.dtype_is_object) - */ - __Pyx_XDECREF(__pyx_r); - - /* "View.MemoryView":1056 - * return memoryview_fromslice(memviewslice[0], memview.view.ndim, - * to_object_func, to_dtype_func, - * memview.dtype_is_object) # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_5 = __pyx_memoryview_fromslice((__pyx_v_memviewslice[0]), __pyx_v_memview->view.ndim, __pyx_v_to_object_func, __pyx_v_to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1054; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L0; - - /* "View.MemoryView":1040 - * - * @cname('__pyx_memoryview_copy_object_from_slice') - * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< - * """ - * Create a new memoryview object from a given memoryview object and slice. - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("View.MemoryView.memoryview_copy_from_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "View.MemoryView":1062 - * - * - * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< - * if arg < 0: - * return -arg - */ - -static Py_ssize_t abs_py_ssize_t(Py_ssize_t __pyx_v_arg) { - Py_ssize_t __pyx_r; - int __pyx_t_1; - - /* "View.MemoryView":1063 - * - * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: - * if arg < 0: # <<<<<<<<<<<<<< - * return -arg - * else: - */ - __pyx_t_1 = ((__pyx_v_arg < 0) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":1064 - * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: - * if arg < 0: - * return -arg # <<<<<<<<<<<<<< - * else: - * return arg - */ - __pyx_r = (-__pyx_v_arg); - goto __pyx_L0; - } - /*else*/ { - - /* "View.MemoryView":1066 - * return -arg - * else: - * return arg # <<<<<<<<<<<<<< - * - * @cname('__pyx_get_best_slice_order') - */ - __pyx_r = __pyx_v_arg; - goto __pyx_L0; - } - - /* "View.MemoryView":1062 - * - * - * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< - * if arg < 0: - * return -arg - */ - - /* function exit code */ - __pyx_L0:; - return __pyx_r; -} - -/* "View.MemoryView":1069 - * - * @cname('__pyx_get_best_slice_order') - * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< - * """ - * Figure out the best memory access order for a given slice. - */ - -static char __pyx_get_best_slice_order(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim) { - int __pyx_v_i; - Py_ssize_t __pyx_v_c_stride; - Py_ssize_t __pyx_v_f_stride; - char __pyx_r; - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - - /* "View.MemoryView":1074 - * """ - * cdef int i - * cdef Py_ssize_t c_stride = 0 # <<<<<<<<<<<<<< - * cdef Py_ssize_t f_stride = 0 - * - */ - __pyx_v_c_stride = 0; - - /* "View.MemoryView":1075 - * cdef int i - * cdef Py_ssize_t c_stride = 0 - * cdef Py_ssize_t f_stride = 0 # <<<<<<<<<<<<<< - * - * for i in range(ndim - 1, -1, -1): - */ - __pyx_v_f_stride = 0; - - /* "View.MemoryView":1077 - * cdef Py_ssize_t f_stride = 0 - * - * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< - * if mslice.shape[i] > 1: - * c_stride = mslice.strides[i] - */ - for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { - __pyx_v_i = __pyx_t_1; - - /* "View.MemoryView":1078 - * - * for i in range(ndim - 1, -1, -1): - * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< - * c_stride = mslice.strides[i] - * break - */ - __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1079 - * for i in range(ndim - 1, -1, -1): - * if mslice.shape[i] > 1: - * c_stride = mslice.strides[i] # <<<<<<<<<<<<<< - * break - * - */ - __pyx_v_c_stride = (__pyx_v_mslice->strides[__pyx_v_i]); - - /* "View.MemoryView":1080 - * if mslice.shape[i] > 1: - * c_stride = mslice.strides[i] - * break # <<<<<<<<<<<<<< - * - * for i in range(ndim): - */ - goto __pyx_L4_break; - } - } - __pyx_L4_break:; - - /* "View.MemoryView":1082 - * break - * - * for i in range(ndim): # <<<<<<<<<<<<<< - * if mslice.shape[i] > 1: - * f_stride = mslice.strides[i] - */ - __pyx_t_1 = __pyx_v_ndim; - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_1; __pyx_t_3+=1) { - __pyx_v_i = __pyx_t_3; - - /* "View.MemoryView":1083 - * - * for i in range(ndim): - * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< - * f_stride = mslice.strides[i] - * break - */ - __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1084 - * for i in range(ndim): - * if mslice.shape[i] > 1: - * f_stride = mslice.strides[i] # <<<<<<<<<<<<<< - * break - * - */ - __pyx_v_f_stride = (__pyx_v_mslice->strides[__pyx_v_i]); - - /* "View.MemoryView":1085 - * if mslice.shape[i] > 1: - * f_stride = mslice.strides[i] - * break # <<<<<<<<<<<<<< - * - * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): - */ - goto __pyx_L7_break; - } - } - __pyx_L7_break:; - - /* "View.MemoryView":1087 - * break - * - * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< - * return 'C' - * else: - */ - __pyx_t_2 = ((abs_py_ssize_t(__pyx_v_c_stride) <= abs_py_ssize_t(__pyx_v_f_stride)) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1088 - * - * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): - * return 'C' # <<<<<<<<<<<<<< - * else: - * return 'F' - */ - __pyx_r = 'C'; - goto __pyx_L0; - } - /*else*/ { - - /* "View.MemoryView":1090 - * return 'C' - * else: - * return 'F' # <<<<<<<<<<<<<< - * - * @cython.cdivision(True) - */ - __pyx_r = 'F'; - goto __pyx_L0; - } - - /* "View.MemoryView":1069 - * - * @cname('__pyx_get_best_slice_order') - * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< - * """ - * Figure out the best memory access order for a given slice. - */ - - /* function exit code */ - __pyx_L0:; - return __pyx_r; -} - -/* "View.MemoryView":1093 - * - * @cython.cdivision(True) - * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< - * char *dst_data, Py_ssize_t *dst_strides, - * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, - */ - -static void _copy_strided_to_strided(char *__pyx_v_src_data, Py_ssize_t *__pyx_v_src_strides, char *__pyx_v_dst_data, Py_ssize_t *__pyx_v_dst_strides, Py_ssize_t *__pyx_v_src_shape, Py_ssize_t *__pyx_v_dst_shape, int __pyx_v_ndim, size_t __pyx_v_itemsize) { - CYTHON_UNUSED Py_ssize_t __pyx_v_i; - CYTHON_UNUSED Py_ssize_t __pyx_v_src_extent; - Py_ssize_t __pyx_v_dst_extent; - Py_ssize_t __pyx_v_src_stride; - Py_ssize_t __pyx_v_dst_stride; - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; - Py_ssize_t __pyx_t_5; - Py_ssize_t __pyx_t_6; - - /* "View.MemoryView":1100 - * - * cdef Py_ssize_t i - * cdef Py_ssize_t src_extent = src_shape[0] # <<<<<<<<<<<<<< - * cdef Py_ssize_t dst_extent = dst_shape[0] - * cdef Py_ssize_t src_stride = src_strides[0] - */ - __pyx_v_src_extent = (__pyx_v_src_shape[0]); - - /* "View.MemoryView":1101 - * cdef Py_ssize_t i - * cdef Py_ssize_t src_extent = src_shape[0] - * cdef Py_ssize_t dst_extent = dst_shape[0] # <<<<<<<<<<<<<< - * cdef Py_ssize_t src_stride = src_strides[0] - * cdef Py_ssize_t dst_stride = dst_strides[0] - */ - __pyx_v_dst_extent = (__pyx_v_dst_shape[0]); - - /* "View.MemoryView":1102 - * cdef Py_ssize_t src_extent = src_shape[0] - * cdef Py_ssize_t dst_extent = dst_shape[0] - * cdef Py_ssize_t src_stride = src_strides[0] # <<<<<<<<<<<<<< - * cdef Py_ssize_t dst_stride = dst_strides[0] - * - */ - __pyx_v_src_stride = (__pyx_v_src_strides[0]); - - /* "View.MemoryView":1103 - * cdef Py_ssize_t dst_extent = dst_shape[0] - * cdef Py_ssize_t src_stride = src_strides[0] - * cdef Py_ssize_t dst_stride = dst_strides[0] # <<<<<<<<<<<<<< - * - * if ndim == 1: - */ - __pyx_v_dst_stride = (__pyx_v_dst_strides[0]); - - /* "View.MemoryView":1105 - * cdef Py_ssize_t dst_stride = dst_strides[0] - * - * if ndim == 1: # <<<<<<<<<<<<<< - * if (src_stride > 0 and dst_stride > 0 and - * src_stride == itemsize == dst_stride): - */ - __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":1106 - * - * if ndim == 1: - * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< - * src_stride == itemsize == dst_stride): - * memcpy(dst_data, src_data, itemsize * dst_extent) - */ - __pyx_t_1 = ((__pyx_v_src_stride > 0) != 0); - if (__pyx_t_1) { - __pyx_t_2 = ((__pyx_v_dst_stride > 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1107 - * if ndim == 1: - * if (src_stride > 0 and dst_stride > 0 and - * src_stride == itemsize == dst_stride): # <<<<<<<<<<<<<< - * memcpy(dst_data, src_data, itemsize * dst_extent) - * else: - */ - __pyx_t_3 = (((size_t)__pyx_v_src_stride) == __pyx_v_itemsize); - if (__pyx_t_3) { - __pyx_t_3 = (__pyx_v_itemsize == ((size_t)__pyx_v_dst_stride)); - } - __pyx_t_4 = (__pyx_t_3 != 0); - } else { - __pyx_t_4 = __pyx_t_2; - } - __pyx_t_2 = __pyx_t_4; - } else { - __pyx_t_2 = __pyx_t_1; - } - if (__pyx_t_2) { - - /* "View.MemoryView":1108 - * if (src_stride > 0 and dst_stride > 0 and - * src_stride == itemsize == dst_stride): - * memcpy(dst_data, src_data, itemsize * dst_extent) # <<<<<<<<<<<<<< - * else: - * for i in range(dst_extent): - */ - memcpy(__pyx_v_dst_data, __pyx_v_src_data, (__pyx_v_itemsize * __pyx_v_dst_extent)); - goto __pyx_L4; - } - /*else*/ { - - /* "View.MemoryView":1110 - * memcpy(dst_data, src_data, itemsize * dst_extent) - * else: - * for i in range(dst_extent): # <<<<<<<<<<<<<< - * memcpy(dst_data, src_data, itemsize) - * src_data += src_stride - */ - __pyx_t_5 = __pyx_v_dst_extent; - for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { - __pyx_v_i = __pyx_t_6; - - /* "View.MemoryView":1111 - * else: - * for i in range(dst_extent): - * memcpy(dst_data, src_data, itemsize) # <<<<<<<<<<<<<< - * src_data += src_stride - * dst_data += dst_stride - */ - memcpy(__pyx_v_dst_data, __pyx_v_src_data, __pyx_v_itemsize); - - /* "View.MemoryView":1112 - * for i in range(dst_extent): - * memcpy(dst_data, src_data, itemsize) - * src_data += src_stride # <<<<<<<<<<<<<< - * dst_data += dst_stride - * else: - */ - __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); - - /* "View.MemoryView":1113 - * memcpy(dst_data, src_data, itemsize) - * src_data += src_stride - * dst_data += dst_stride # <<<<<<<<<<<<<< - * else: - * for i in range(dst_extent): - */ - __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); - } - } - __pyx_L4:; - goto __pyx_L3; - } - /*else*/ { - - /* "View.MemoryView":1115 - * dst_data += dst_stride - * else: - * for i in range(dst_extent): # <<<<<<<<<<<<<< - * _copy_strided_to_strided(src_data, src_strides + 1, - * dst_data, dst_strides + 1, - */ - __pyx_t_5 = __pyx_v_dst_extent; - for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { - __pyx_v_i = __pyx_t_6; - - /* "View.MemoryView":1116 - * else: - * for i in range(dst_extent): - * _copy_strided_to_strided(src_data, src_strides + 1, # <<<<<<<<<<<<<< - * dst_data, dst_strides + 1, - * src_shape + 1, dst_shape + 1, - */ - _copy_strided_to_strided(__pyx_v_src_data, (__pyx_v_src_strides + 1), __pyx_v_dst_data, (__pyx_v_dst_strides + 1), (__pyx_v_src_shape + 1), (__pyx_v_dst_shape + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize); - - /* "View.MemoryView":1120 - * src_shape + 1, dst_shape + 1, - * ndim - 1, itemsize) - * src_data += src_stride # <<<<<<<<<<<<<< - * dst_data += dst_stride - * - */ - __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); - - /* "View.MemoryView":1121 - * ndim - 1, itemsize) - * src_data += src_stride - * dst_data += dst_stride # <<<<<<<<<<<<<< - * - * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, - */ - __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); - } - } - __pyx_L3:; - - /* "View.MemoryView":1093 - * - * @cython.cdivision(True) - * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< - * char *dst_data, Py_ssize_t *dst_strides, - * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, - */ - - /* function exit code */ -} - -/* "View.MemoryView":1123 - * dst_data += dst_stride - * - * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< - * __Pyx_memviewslice *dst, - * int ndim, size_t itemsize) nogil: - */ - -static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize) { - - /* "View.MemoryView":1126 - * __Pyx_memviewslice *dst, - * int ndim, size_t itemsize) nogil: - * _copy_strided_to_strided(src.data, src.strides, dst.data, dst.strides, # <<<<<<<<<<<<<< - * src.shape, dst.shape, ndim, itemsize) - * - */ - _copy_strided_to_strided(__pyx_v_src->data, __pyx_v_src->strides, __pyx_v_dst->data, __pyx_v_dst->strides, __pyx_v_src->shape, __pyx_v_dst->shape, __pyx_v_ndim, __pyx_v_itemsize); - - /* "View.MemoryView":1123 - * dst_data += dst_stride - * - * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< - * __Pyx_memviewslice *dst, - * int ndim, size_t itemsize) nogil: - */ - - /* function exit code */ -} - -/* "View.MemoryView":1130 - * - * @cname('__pyx_memoryview_slice_get_size') - * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< - * "Return the size of the memory occupied by the slice in number of bytes" - * cdef int i - */ - -static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) { - int __pyx_v_i; - Py_ssize_t __pyx_v_size; - Py_ssize_t __pyx_r; - Py_ssize_t __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - - /* "View.MemoryView":1133 - * "Return the size of the memory occupied by the slice in number of bytes" - * cdef int i - * cdef Py_ssize_t size = src.memview.view.itemsize # <<<<<<<<<<<<<< - * - * for i in range(ndim): - */ - __pyx_t_1 = __pyx_v_src->memview->view.itemsize; - __pyx_v_size = __pyx_t_1; - - /* "View.MemoryView":1135 - * cdef Py_ssize_t size = src.memview.view.itemsize - * - * for i in range(ndim): # <<<<<<<<<<<<<< - * size *= src.shape[i] - * - */ - __pyx_t_2 = __pyx_v_ndim; - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { - __pyx_v_i = __pyx_t_3; - - /* "View.MemoryView":1136 - * - * for i in range(ndim): - * size *= src.shape[i] # <<<<<<<<<<<<<< - * - * return size - */ - __pyx_v_size = (__pyx_v_size * (__pyx_v_src->shape[__pyx_v_i])); - } - - /* "View.MemoryView":1138 - * size *= src.shape[i] - * - * return size # <<<<<<<<<<<<<< - * - * @cname('__pyx_fill_contig_strides_array') - */ - __pyx_r = __pyx_v_size; - goto __pyx_L0; - - /* "View.MemoryView":1130 - * - * @cname('__pyx_memoryview_slice_get_size') - * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< - * "Return the size of the memory occupied by the slice in number of bytes" - * cdef int i - */ - - /* function exit code */ - __pyx_L0:; - return __pyx_r; -} - -/* "View.MemoryView":1141 - * - * @cname('__pyx_fill_contig_strides_array') - * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< - * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, - * int ndim, char order) nogil: - */ - -static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, Py_ssize_t __pyx_v_stride, int __pyx_v_ndim, char __pyx_v_order) { - int __pyx_v_idx; - Py_ssize_t __pyx_r; - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - - /* "View.MemoryView":1150 - * cdef int idx - * - * if order == 'F': # <<<<<<<<<<<<<< - * for idx in range(ndim): - * strides[idx] = stride - */ - __pyx_t_1 = ((__pyx_v_order == 'F') != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":1151 - * - * if order == 'F': - * for idx in range(ndim): # <<<<<<<<<<<<<< - * strides[idx] = stride - * stride = stride * shape[idx] - */ - __pyx_t_2 = __pyx_v_ndim; - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { - __pyx_v_idx = __pyx_t_3; - - /* "View.MemoryView":1152 - * if order == 'F': - * for idx in range(ndim): - * strides[idx] = stride # <<<<<<<<<<<<<< - * stride = stride * shape[idx] - * else: - */ - (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; - - /* "View.MemoryView":1153 - * for idx in range(ndim): - * strides[idx] = stride - * stride = stride * shape[idx] # <<<<<<<<<<<<<< - * else: - * for idx in range(ndim - 1, -1, -1): - */ - __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); - } - goto __pyx_L3; - } - /*else*/ { - - /* "View.MemoryView":1155 - * stride = stride * shape[idx] - * else: - * for idx in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< - * strides[idx] = stride - * stride = stride * shape[idx] - */ - for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) { - __pyx_v_idx = __pyx_t_2; - - /* "View.MemoryView":1156 - * else: - * for idx in range(ndim - 1, -1, -1): - * strides[idx] = stride # <<<<<<<<<<<<<< - * stride = stride * shape[idx] - * - */ - (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; - - /* "View.MemoryView":1157 - * for idx in range(ndim - 1, -1, -1): - * strides[idx] = stride - * stride = stride * shape[idx] # <<<<<<<<<<<<<< - * - * return stride - */ - __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); - } - } - __pyx_L3:; - - /* "View.MemoryView":1159 - * stride = stride * shape[idx] - * - * return stride # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_copy_data_to_temp') - */ - __pyx_r = __pyx_v_stride; - goto __pyx_L0; - - /* "View.MemoryView":1141 - * - * @cname('__pyx_fill_contig_strides_array') - * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< - * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, - * int ndim, char order) nogil: - */ - - /* function exit code */ - __pyx_L0:; - return __pyx_r; -} - -/* "View.MemoryView":1162 - * - * @cname('__pyx_memoryview_copy_data_to_temp') - * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< - * __Pyx_memviewslice *tmpslice, - * char order, - */ - -static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_tmpslice, char __pyx_v_order, int __pyx_v_ndim) { - int __pyx_v_i; - void *__pyx_v_result; - size_t __pyx_v_itemsize; - size_t __pyx_v_size; - void *__pyx_r; - Py_ssize_t __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - struct __pyx_memoryview_obj *__pyx_t_4; - int __pyx_t_5; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - - /* "View.MemoryView":1173 - * cdef void *result - * - * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< - * cdef size_t size = slice_get_size(src, ndim) - * - */ - __pyx_t_1 = __pyx_v_src->memview->view.itemsize; - __pyx_v_itemsize = __pyx_t_1; - - /* "View.MemoryView":1174 - * - * cdef size_t itemsize = src.memview.view.itemsize - * cdef size_t size = slice_get_size(src, ndim) # <<<<<<<<<<<<<< - * - * result = malloc(size) - */ - __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim); - - /* "View.MemoryView":1176 - * cdef size_t size = slice_get_size(src, ndim) - * - * result = malloc(size) # <<<<<<<<<<<<<< - * if not result: - * _err(MemoryError, NULL) - */ - __pyx_v_result = malloc(__pyx_v_size); - - /* "View.MemoryView":1177 - * - * result = malloc(size) - * if not result: # <<<<<<<<<<<<<< - * _err(MemoryError, NULL) - * - */ - __pyx_t_2 = ((!(__pyx_v_result != 0)) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1178 - * result = malloc(size) - * if not result: - * _err(MemoryError, NULL) # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L3; - } - __pyx_L3:; - - /* "View.MemoryView":1181 - * - * - * tmpslice.data = result # <<<<<<<<<<<<<< - * tmpslice.memview = src.memview - * for i in range(ndim): - */ - __pyx_v_tmpslice->data = ((char *)__pyx_v_result); - - /* "View.MemoryView":1182 - * - * tmpslice.data = result - * tmpslice.memview = src.memview # <<<<<<<<<<<<<< - * for i in range(ndim): - * tmpslice.shape[i] = src.shape[i] - */ - __pyx_t_4 = __pyx_v_src->memview; - __pyx_v_tmpslice->memview = __pyx_t_4; - - /* "View.MemoryView":1183 - * tmpslice.data = result - * tmpslice.memview = src.memview - * for i in range(ndim): # <<<<<<<<<<<<<< - * tmpslice.shape[i] = src.shape[i] - * tmpslice.suboffsets[i] = -1 - */ - __pyx_t_3 = __pyx_v_ndim; - for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_3; __pyx_t_5+=1) { - __pyx_v_i = __pyx_t_5; - - /* "View.MemoryView":1184 - * tmpslice.memview = src.memview - * for i in range(ndim): - * tmpslice.shape[i] = src.shape[i] # <<<<<<<<<<<<<< - * tmpslice.suboffsets[i] = -1 - * - */ - (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]); - - /* "View.MemoryView":1185 - * for i in range(ndim): - * tmpslice.shape[i] = src.shape[i] - * tmpslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< - * - * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, - */ - (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1; - } - - /* "View.MemoryView":1187 - * tmpslice.suboffsets[i] = -1 - * - * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, # <<<<<<<<<<<<<< - * ndim, order) - * - */ - __pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order); - - /* "View.MemoryView":1191 - * - * - * for i in range(ndim): # <<<<<<<<<<<<<< - * if tmpslice.shape[i] == 1: - * tmpslice.strides[i] = 0 - */ - __pyx_t_3 = __pyx_v_ndim; - for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_3; __pyx_t_5+=1) { - __pyx_v_i = __pyx_t_5; - - /* "View.MemoryView":1192 - * - * for i in range(ndim): - * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< - * tmpslice.strides[i] = 0 - * - */ - __pyx_t_2 = (((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1193 - * for i in range(ndim): - * if tmpslice.shape[i] == 1: - * tmpslice.strides[i] = 0 # <<<<<<<<<<<<<< - * - * if slice_is_contig(src, order, ndim): - */ - (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0; - goto __pyx_L8; - } - __pyx_L8:; - } - - /* "View.MemoryView":1195 - * tmpslice.strides[i] = 0 - * - * if slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< - * memcpy(result, src.data, size) - * else: - */ - __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1196 - * - * if slice_is_contig(src, order, ndim): - * memcpy(result, src.data, size) # <<<<<<<<<<<<<< - * else: - * copy_strided_to_strided(src, tmpslice, ndim, itemsize) - */ - memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size); - goto __pyx_L9; - } - /*else*/ { - - /* "View.MemoryView":1198 - * memcpy(result, src.data, size) - * else: - * copy_strided_to_strided(src, tmpslice, ndim, itemsize) # <<<<<<<<<<<<<< - * - * return result - */ - copy_strided_to_strided(__pyx_v_src, __pyx_v_tmpslice, __pyx_v_ndim, __pyx_v_itemsize); - } - __pyx_L9:; - - /* "View.MemoryView":1200 - * copy_strided_to_strided(src, tmpslice, ndim, itemsize) - * - * return result # <<<<<<<<<<<<<< - * - * - */ - __pyx_r = __pyx_v_result; - goto __pyx_L0; - - /* "View.MemoryView":1162 - * - * @cname('__pyx_memoryview_copy_data_to_temp') - * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< - * __Pyx_memviewslice *tmpslice, - * char order, - */ - - /* function exit code */ - __pyx_L1_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); - #endif - __Pyx_AddTraceback("View.MemoryView.copy_data_to_temp", __pyx_clineno, __pyx_lineno, __pyx_filename); - #ifdef WITH_THREAD - PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_r = NULL; - __pyx_L0:; - return __pyx_r; -} - -/* "View.MemoryView":1205 - * - * @cname('__pyx_memoryview_err_extents') - * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< - * Py_ssize_t extent2) except -1 with gil: - * raise ValueError("got differing extents in dimension %d (got %d and %d)" % - */ - -static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent1, Py_ssize_t __pyx_v_extent2) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); - #endif - __Pyx_RefNannySetupContext("_err_extents", 0); - - /* "View.MemoryView":1208 - * Py_ssize_t extent2) except -1 with gil: - * raise ValueError("got differing extents in dimension %d (got %d and %d)" % - * (i, extent1, extent2)) # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_err_dim') - */ - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_3 = 0; - - /* "View.MemoryView":1207 - * cdef int _err_extents(int i, Py_ssize_t extent1, - * Py_ssize_t extent2) except -1 with gil: - * raise ValueError("got differing extents in dimension %d (got %d and %d)" % # <<<<<<<<<<<<<< - * (i, extent1, extent2)) - * - */ - __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1207; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1207; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1207; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1207; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "View.MemoryView":1205 - * - * @cname('__pyx_memoryview_err_extents') - * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< - * Py_ssize_t extent2) except -1 with gil: - * raise ValueError("got differing extents in dimension %d (got %d and %d)" % - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("View.MemoryView._err_extents", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __Pyx_RefNannyFinishContext(); - #ifdef WITH_THREAD - PyGILState_Release(__pyx_gilstate_save); - #endif - return __pyx_r; -} - -/* "View.MemoryView":1211 - * - * @cname('__pyx_memoryview_err_dim') - * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< - * raise error(msg.decode('ascii') % dim) - * - */ - -static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg, int __pyx_v_dim) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); - #endif - __Pyx_RefNannySetupContext("_err_dim", 0); - __Pyx_INCREF(__pyx_v_error); - - /* "View.MemoryView":1212 - * @cname('__pyx_memoryview_err_dim') - * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: - * raise error(msg.decode('ascii') % dim) # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_err') - */ - __pyx_t_1 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyUnicode_Format(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_error, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "View.MemoryView":1211 - * - * @cname('__pyx_memoryview_err_dim') - * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< - * raise error(msg.decode('ascii') % dim) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView._err_dim", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __Pyx_XDECREF(__pyx_v_error); - __Pyx_RefNannyFinishContext(); - #ifdef WITH_THREAD - PyGILState_Release(__pyx_gilstate_save); - #endif - return __pyx_r; -} - -/* "View.MemoryView":1215 - * - * @cname('__pyx_memoryview_err') - * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< - * if msg != NULL: - * raise error(msg.decode('ascii')) - */ - -static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) { - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); - #endif - __Pyx_RefNannySetupContext("_err", 0); - __Pyx_INCREF(__pyx_v_error); - - /* "View.MemoryView":1216 - * @cname('__pyx_memoryview_err') - * cdef int _err(object error, char *msg) except -1 with gil: - * if msg != NULL: # <<<<<<<<<<<<<< - * raise error(msg.decode('ascii')) - * else: - */ - __pyx_t_1 = ((__pyx_v_msg != NULL) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":1217 - * cdef int _err(object error, char *msg) except -1 with gil: - * if msg != NULL: - * raise error(msg.decode('ascii')) # <<<<<<<<<<<<<< - * else: - * raise error - */ - __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_error, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_2, 0, 0, 0); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - /*else*/ { - - /* "View.MemoryView":1219 - * raise error(msg.decode('ascii')) - * else: - * raise error # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_copy_contents') - */ - __Pyx_Raise(__pyx_v_error, 0, 0, 0); - {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "View.MemoryView":1215 - * - * @cname('__pyx_memoryview_err') - * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< - * if msg != NULL: - * raise error(msg.decode('ascii')) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("View.MemoryView._err", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __Pyx_XDECREF(__pyx_v_error); - __Pyx_RefNannyFinishContext(); - #ifdef WITH_THREAD - PyGILState_Release(__pyx_gilstate_save); - #endif - return __pyx_r; -} - -/* "View.MemoryView":1222 - * - * @cname('__pyx_memoryview_copy_contents') - * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< - * __Pyx_memviewslice dst, - * int src_ndim, int dst_ndim, - */ - -static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_memviewslice __pyx_v_dst, int __pyx_v_src_ndim, int __pyx_v_dst_ndim, int __pyx_v_dtype_is_object) { - void *__pyx_v_tmpdata; - size_t __pyx_v_itemsize; - int __pyx_v_i; - char __pyx_v_order; - int __pyx_v_broadcasting; - int __pyx_v_direct_copy; - __Pyx_memviewslice __pyx_v_tmp; - int __pyx_v_ndim; - int __pyx_r; - Py_ssize_t __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; - int __pyx_t_5; - void *__pyx_t_6; - int __pyx_t_7; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - - /* "View.MemoryView":1230 - * Check for overlapping memory and verify the shapes. - * """ - * cdef void *tmpdata = NULL # <<<<<<<<<<<<<< - * cdef size_t itemsize = src.memview.view.itemsize - * cdef int i - */ - __pyx_v_tmpdata = NULL; - - /* "View.MemoryView":1231 - * """ - * cdef void *tmpdata = NULL - * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< - * cdef int i - * cdef char order = get_best_order(&src, src_ndim) - */ - __pyx_t_1 = __pyx_v_src.memview->view.itemsize; - __pyx_v_itemsize = __pyx_t_1; - - /* "View.MemoryView":1233 - * cdef size_t itemsize = src.memview.view.itemsize - * cdef int i - * cdef char order = get_best_order(&src, src_ndim) # <<<<<<<<<<<<<< - * cdef bint broadcasting = False - * cdef bint direct_copy = False - */ - __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim); - - /* "View.MemoryView":1234 - * cdef int i - * cdef char order = get_best_order(&src, src_ndim) - * cdef bint broadcasting = False # <<<<<<<<<<<<<< - * cdef bint direct_copy = False - * cdef __Pyx_memviewslice tmp - */ - __pyx_v_broadcasting = 0; - - /* "View.MemoryView":1235 - * cdef char order = get_best_order(&src, src_ndim) - * cdef bint broadcasting = False - * cdef bint direct_copy = False # <<<<<<<<<<<<<< - * cdef __Pyx_memviewslice tmp - * - */ - __pyx_v_direct_copy = 0; - - /* "View.MemoryView":1238 - * cdef __Pyx_memviewslice tmp - * - * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< - * broadcast_leading(&src, src_ndim, dst_ndim) - * elif dst_ndim < src_ndim: - */ - __pyx_t_2 = ((__pyx_v_src_ndim < __pyx_v_dst_ndim) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1239 - * - * if src_ndim < dst_ndim: - * broadcast_leading(&src, src_ndim, dst_ndim) # <<<<<<<<<<<<<< - * elif dst_ndim < src_ndim: - * broadcast_leading(&dst, dst_ndim, src_ndim) - */ - __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim); - goto __pyx_L3; - } - - /* "View.MemoryView":1240 - * if src_ndim < dst_ndim: - * broadcast_leading(&src, src_ndim, dst_ndim) - * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< - * broadcast_leading(&dst, dst_ndim, src_ndim) - * - */ - __pyx_t_2 = ((__pyx_v_dst_ndim < __pyx_v_src_ndim) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1241 - * broadcast_leading(&src, src_ndim, dst_ndim) - * elif dst_ndim < src_ndim: - * broadcast_leading(&dst, dst_ndim, src_ndim) # <<<<<<<<<<<<<< - * - * cdef int ndim = max(src_ndim, dst_ndim) - */ - __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim); - goto __pyx_L3; - } - __pyx_L3:; - - /* "View.MemoryView":1243 - * broadcast_leading(&dst, dst_ndim, src_ndim) - * - * cdef int ndim = max(src_ndim, dst_ndim) # <<<<<<<<<<<<<< - * - * for i in range(ndim): - */ - __pyx_t_3 = __pyx_v_dst_ndim; - __pyx_t_4 = __pyx_v_src_ndim; - if (((__pyx_t_3 > __pyx_t_4) != 0)) { - __pyx_t_5 = __pyx_t_3; - } else { - __pyx_t_5 = __pyx_t_4; - } - __pyx_v_ndim = __pyx_t_5; - - /* "View.MemoryView":1245 - * cdef int ndim = max(src_ndim, dst_ndim) - * - * for i in range(ndim): # <<<<<<<<<<<<<< - * if src.shape[i] != dst.shape[i]: - * if src.shape[i] == 1: - */ - __pyx_t_5 = __pyx_v_ndim; - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_5; __pyx_t_3+=1) { - __pyx_v_i = __pyx_t_3; - - /* "View.MemoryView":1246 - * - * for i in range(ndim): - * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< - * if src.shape[i] == 1: - * broadcasting = True - */ - __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i])) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1247 - * for i in range(ndim): - * if src.shape[i] != dst.shape[i]: - * if src.shape[i] == 1: # <<<<<<<<<<<<<< - * broadcasting = True - * src.strides[i] = 0 - */ - __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) == 1) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1248 - * if src.shape[i] != dst.shape[i]: - * if src.shape[i] == 1: - * broadcasting = True # <<<<<<<<<<<<<< - * src.strides[i] = 0 - * else: - */ - __pyx_v_broadcasting = 1; - - /* "View.MemoryView":1249 - * if src.shape[i] == 1: - * broadcasting = True - * src.strides[i] = 0 # <<<<<<<<<<<<<< - * else: - * _err_extents(i, dst.shape[i], src.shape[i]) - */ - (__pyx_v_src.strides[__pyx_v_i]) = 0; - goto __pyx_L7; - } - /*else*/ { - - /* "View.MemoryView":1251 - * src.strides[i] = 0 - * else: - * _err_extents(i, dst.shape[i], src.shape[i]) # <<<<<<<<<<<<<< - * - * if src.suboffsets[i] >= 0: - */ - __pyx_t_4 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_L7:; - goto __pyx_L6; - } - __pyx_L6:; - - /* "View.MemoryView":1253 - * _err_extents(i, dst.shape[i], src.shape[i]) - * - * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< - * _err_dim(ValueError, "Dimension %d is not direct", i) - * - */ - __pyx_t_2 = (((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1254 - * - * if src.suboffsets[i] >= 0: - * _err_dim(ValueError, "Dimension %d is not direct", i) # <<<<<<<<<<<<<< - * - * if slices_overlap(&src, &dst, ndim, itemsize): - */ - __pyx_t_4 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, __pyx_k_Dimension_d_is_not_direct, __pyx_v_i); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L8; - } - __pyx_L8:; - } - - /* "View.MemoryView":1256 - * _err_dim(ValueError, "Dimension %d is not direct", i) - * - * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< - * - * if not slice_is_contig(&src, order, ndim): - */ - __pyx_t_2 = (__pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1258 - * if slices_overlap(&src, &dst, ndim, itemsize): - * - * if not slice_is_contig(&src, order, ndim): # <<<<<<<<<<<<<< - * order = get_best_order(&dst, ndim) - * - */ - __pyx_t_2 = ((!(__pyx_memviewslice_is_contig((&__pyx_v_src), __pyx_v_order, __pyx_v_ndim) != 0)) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1259 - * - * if not slice_is_contig(&src, order, ndim): - * order = get_best_order(&dst, ndim) # <<<<<<<<<<<<<< - * - * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) - */ - __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim); - goto __pyx_L10; - } - __pyx_L10:; - - /* "View.MemoryView":1261 - * order = get_best_order(&dst, ndim) - * - * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) # <<<<<<<<<<<<<< - * src = tmp - * - */ - __pyx_t_6 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_6 == NULL)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_tmpdata = __pyx_t_6; - - /* "View.MemoryView":1262 - * - * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) - * src = tmp # <<<<<<<<<<<<<< - * - * if not broadcasting: - */ - __pyx_v_src = __pyx_v_tmp; - goto __pyx_L9; - } - __pyx_L9:; - - /* "View.MemoryView":1264 - * src = tmp - * - * if not broadcasting: # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_2 = ((!(__pyx_v_broadcasting != 0)) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1267 - * - * - * if slice_is_contig(&src, 'C', ndim): # <<<<<<<<<<<<<< - * direct_copy = slice_is_contig(&dst, 'C', ndim) - * elif slice_is_contig(&src, 'F', ndim): - */ - __pyx_t_2 = (__pyx_memviewslice_is_contig((&__pyx_v_src), 'C', __pyx_v_ndim) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1268 - * - * if slice_is_contig(&src, 'C', ndim): - * direct_copy = slice_is_contig(&dst, 'C', ndim) # <<<<<<<<<<<<<< - * elif slice_is_contig(&src, 'F', ndim): - * direct_copy = slice_is_contig(&dst, 'F', ndim) - */ - __pyx_v_direct_copy = __pyx_memviewslice_is_contig((&__pyx_v_dst), 'C', __pyx_v_ndim); - goto __pyx_L12; - } - - /* "View.MemoryView":1269 - * if slice_is_contig(&src, 'C', ndim): - * direct_copy = slice_is_contig(&dst, 'C', ndim) - * elif slice_is_contig(&src, 'F', ndim): # <<<<<<<<<<<<<< - * direct_copy = slice_is_contig(&dst, 'F', ndim) - * - */ - __pyx_t_2 = (__pyx_memviewslice_is_contig((&__pyx_v_src), 'F', __pyx_v_ndim) != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1270 - * direct_copy = slice_is_contig(&dst, 'C', ndim) - * elif slice_is_contig(&src, 'F', ndim): - * direct_copy = slice_is_contig(&dst, 'F', ndim) # <<<<<<<<<<<<<< - * - * if direct_copy: - */ - __pyx_v_direct_copy = __pyx_memviewslice_is_contig((&__pyx_v_dst), 'F', __pyx_v_ndim); - goto __pyx_L12; - } - __pyx_L12:; - - /* "View.MemoryView":1272 - * direct_copy = slice_is_contig(&dst, 'F', ndim) - * - * if direct_copy: # <<<<<<<<<<<<<< - * - * refcount_copying(&dst, dtype_is_object, ndim, False) - */ - __pyx_t_2 = (__pyx_v_direct_copy != 0); - if (__pyx_t_2) { - - /* "View.MemoryView":1274 - * if direct_copy: - * - * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< - * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) - * refcount_copying(&dst, dtype_is_object, ndim, True) - */ - __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); - - /* "View.MemoryView":1275 - * - * refcount_copying(&dst, dtype_is_object, ndim, False) - * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) # <<<<<<<<<<<<<< - * refcount_copying(&dst, dtype_is_object, ndim, True) - * free(tmpdata) - */ - memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim)); - - /* "View.MemoryView":1276 - * refcount_copying(&dst, dtype_is_object, ndim, False) - * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) - * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< - * free(tmpdata) - * return 0 - */ - __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); - - /* "View.MemoryView":1277 - * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) - * refcount_copying(&dst, dtype_is_object, ndim, True) - * free(tmpdata) # <<<<<<<<<<<<<< - * return 0 - * - */ - free(__pyx_v_tmpdata); - - /* "View.MemoryView":1278 - * refcount_copying(&dst, dtype_is_object, ndim, True) - * free(tmpdata) - * return 0 # <<<<<<<<<<<<<< - * - * if order == 'F' == get_best_order(&dst, ndim): - */ - __pyx_r = 0; - goto __pyx_L0; - } - goto __pyx_L11; - } - __pyx_L11:; - - /* "View.MemoryView":1280 - * return 0 - * - * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_2 = (__pyx_v_order == 'F'); - if (__pyx_t_2) { - __pyx_t_2 = ('F' == __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim)); - } - __pyx_t_7 = (__pyx_t_2 != 0); - if (__pyx_t_7) { - - /* "View.MemoryView":1283 - * - * - * transpose_memslice(&src) # <<<<<<<<<<<<<< - * transpose_memslice(&dst) - * - */ - __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "View.MemoryView":1284 - * - * transpose_memslice(&src) - * transpose_memslice(&dst) # <<<<<<<<<<<<<< - * - * refcount_copying(&dst, dtype_is_object, ndim, False) - */ - __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L14; - } - __pyx_L14:; - - /* "View.MemoryView":1286 - * transpose_memslice(&dst) - * - * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< - * copy_strided_to_strided(&src, &dst, ndim, itemsize) - * refcount_copying(&dst, dtype_is_object, ndim, True) - */ - __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); - - /* "View.MemoryView":1287 - * - * refcount_copying(&dst, dtype_is_object, ndim, False) - * copy_strided_to_strided(&src, &dst, ndim, itemsize) # <<<<<<<<<<<<<< - * refcount_copying(&dst, dtype_is_object, ndim, True) - * - */ - copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize); - - /* "View.MemoryView":1288 - * refcount_copying(&dst, dtype_is_object, ndim, False) - * copy_strided_to_strided(&src, &dst, ndim, itemsize) - * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< - * - * free(tmpdata) - */ - __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); - - /* "View.MemoryView":1290 - * refcount_copying(&dst, dtype_is_object, ndim, True) - * - * free(tmpdata) # <<<<<<<<<<<<<< - * return 0 - * - */ - free(__pyx_v_tmpdata); - - /* "View.MemoryView":1291 - * - * free(tmpdata) - * return 0 # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_broadcast_leading') - */ - __pyx_r = 0; - goto __pyx_L0; - - /* "View.MemoryView":1222 - * - * @cname('__pyx_memoryview_copy_contents') - * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< - * __Pyx_memviewslice dst, - * int src_ndim, int dst_ndim, - */ - - /* function exit code */ - __pyx_L1_error:; - { - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); - #endif - __Pyx_AddTraceback("View.MemoryView.memoryview_copy_contents", __pyx_clineno, __pyx_lineno, __pyx_filename); - #ifdef WITH_THREAD - PyGILState_Release(__pyx_gilstate_save); - #endif - } - __pyx_r = -1; - __pyx_L0:; - return __pyx_r; -} - -/* "View.MemoryView":1294 - * - * @cname('__pyx_memoryview_broadcast_leading') - * cdef void broadcast_leading(__Pyx_memviewslice *slice, # <<<<<<<<<<<<<< - * int ndim, - * int ndim_other) nogil: - */ - -static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_slice, int __pyx_v_ndim, int __pyx_v_ndim_other) { - int __pyx_v_i; - int __pyx_v_offset; - int __pyx_t_1; - int __pyx_t_2; - - /* "View.MemoryView":1298 - * int ndim_other) nogil: - * cdef int i - * cdef int offset = ndim_other - ndim # <<<<<<<<<<<<<< - * - * for i in range(ndim - 1, -1, -1): - */ - __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim); - - /* "View.MemoryView":1300 - * cdef int offset = ndim_other - ndim - * - * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< - * slice.shape[i + offset] = slice.shape[i] - * slice.strides[i + offset] = slice.strides[i] - */ - for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { - __pyx_v_i = __pyx_t_1; - - /* "View.MemoryView":1301 - * - * for i in range(ndim - 1, -1, -1): - * slice.shape[i + offset] = slice.shape[i] # <<<<<<<<<<<<<< - * slice.strides[i + offset] = slice.strides[i] - * slice.suboffsets[i + offset] = slice.suboffsets[i] - */ - (__pyx_v_slice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_slice->shape[__pyx_v_i]); - - /* "View.MemoryView":1302 - * for i in range(ndim - 1, -1, -1): - * slice.shape[i + offset] = slice.shape[i] - * slice.strides[i + offset] = slice.strides[i] # <<<<<<<<<<<<<< - * slice.suboffsets[i + offset] = slice.suboffsets[i] - * - */ - (__pyx_v_slice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_slice->strides[__pyx_v_i]); - - /* "View.MemoryView":1303 - * slice.shape[i + offset] = slice.shape[i] - * slice.strides[i + offset] = slice.strides[i] - * slice.suboffsets[i + offset] = slice.suboffsets[i] # <<<<<<<<<<<<<< - * - * for i in range(offset): - */ - (__pyx_v_slice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_slice->suboffsets[__pyx_v_i]); - } - - /* "View.MemoryView":1305 - * slice.suboffsets[i + offset] = slice.suboffsets[i] - * - * for i in range(offset): # <<<<<<<<<<<<<< - * slice.shape[i] = 1 - * slice.strides[i] = slice.strides[0] - */ - __pyx_t_1 = __pyx_v_offset; - for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) { - __pyx_v_i = __pyx_t_2; - - /* "View.MemoryView":1306 - * - * for i in range(offset): - * slice.shape[i] = 1 # <<<<<<<<<<<<<< - * slice.strides[i] = slice.strides[0] - * slice.suboffsets[i] = -1 - */ - (__pyx_v_slice->shape[__pyx_v_i]) = 1; - - /* "View.MemoryView":1307 - * for i in range(offset): - * slice.shape[i] = 1 - * slice.strides[i] = slice.strides[0] # <<<<<<<<<<<<<< - * slice.suboffsets[i] = -1 - * - */ - (__pyx_v_slice->strides[__pyx_v_i]) = (__pyx_v_slice->strides[0]); - - /* "View.MemoryView":1308 - * slice.shape[i] = 1 - * slice.strides[i] = slice.strides[0] - * slice.suboffsets[i] = -1 # <<<<<<<<<<<<<< - * - * - */ - (__pyx_v_slice->suboffsets[__pyx_v_i]) = -1; - } - - /* "View.MemoryView":1294 - * - * @cname('__pyx_memoryview_broadcast_leading') - * cdef void broadcast_leading(__Pyx_memviewslice *slice, # <<<<<<<<<<<<<< - * int ndim, - * int ndim_other) nogil: - */ - - /* function exit code */ -} - -/* "View.MemoryView":1316 - * - * @cname('__pyx_memoryview_refcount_copying') - * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< - * int ndim, bint inc) nogil: - * - */ - -static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) { - int __pyx_t_1; - - /* "View.MemoryView":1320 - * - * - * if dtype_is_object: # <<<<<<<<<<<<<< - * refcount_objects_in_slice_with_gil(dst.data, dst.shape, - * dst.strides, ndim, inc) - */ - __pyx_t_1 = (__pyx_v_dtype_is_object != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":1321 - * - * if dtype_is_object: - * refcount_objects_in_slice_with_gil(dst.data, dst.shape, # <<<<<<<<<<<<<< - * dst.strides, ndim, inc) - * - */ - __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc); - goto __pyx_L3; - } - __pyx_L3:; - - /* "View.MemoryView":1316 - * - * @cname('__pyx_memoryview_refcount_copying') - * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< - * int ndim, bint inc) nogil: - * - */ - - /* function exit code */ -} - -/* "View.MemoryView":1325 - * - * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') - * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, - * bint inc) with gil: - */ - -static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { - __Pyx_RefNannyDeclarations - #ifdef WITH_THREAD - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); - #endif - __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0); - - /* "View.MemoryView":1328 - * Py_ssize_t *strides, int ndim, - * bint inc) with gil: - * refcount_objects_in_slice(data, shape, strides, ndim, inc) # <<<<<<<<<<<<<< - * - * @cname('__pyx_memoryview_refcount_objects_in_slice') - */ - __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc); - - /* "View.MemoryView":1325 - * - * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') - * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, - * bint inc) with gil: - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - #ifdef WITH_THREAD - PyGILState_Release(__pyx_gilstate_save); - #endif -} - -/* "View.MemoryView":1331 - * - * @cname('__pyx_memoryview_refcount_objects_in_slice') - * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, bint inc): - * cdef Py_ssize_t i - */ - -static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { - CYTHON_UNUSED Py_ssize_t __pyx_v_i; - __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - Py_ssize_t __pyx_t_2; - int __pyx_t_3; - __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0); - - /* "View.MemoryView":1335 - * cdef Py_ssize_t i - * - * for i in range(shape[0]): # <<<<<<<<<<<<<< - * if ndim == 1: - * if inc: - */ - __pyx_t_1 = (__pyx_v_shape[0]); - for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) { - __pyx_v_i = __pyx_t_2; - - /* "View.MemoryView":1336 - * - * for i in range(shape[0]): - * if ndim == 1: # <<<<<<<<<<<<<< - * if inc: - * Py_INCREF(( data)[0]) - */ - __pyx_t_3 = ((__pyx_v_ndim == 1) != 0); - if (__pyx_t_3) { - - /* "View.MemoryView":1337 - * for i in range(shape[0]): - * if ndim == 1: - * if inc: # <<<<<<<<<<<<<< - * Py_INCREF(( data)[0]) - * else: - */ - __pyx_t_3 = (__pyx_v_inc != 0); - if (__pyx_t_3) { - - /* "View.MemoryView":1338 - * if ndim == 1: - * if inc: - * Py_INCREF(( data)[0]) # <<<<<<<<<<<<<< - * else: - * Py_DECREF(( data)[0]) - */ - Py_INCREF((((PyObject **)__pyx_v_data)[0])); - goto __pyx_L6; - } - /*else*/ { - - /* "View.MemoryView":1340 - * Py_INCREF(( data)[0]) - * else: - * Py_DECREF(( data)[0]) # <<<<<<<<<<<<<< - * else: - * refcount_objects_in_slice(data, shape + 1, strides + 1, - */ - Py_DECREF((((PyObject **)__pyx_v_data)[0])); - } - __pyx_L6:; - goto __pyx_L5; - } - /*else*/ { - - /* "View.MemoryView":1342 - * Py_DECREF(( data)[0]) - * else: - * refcount_objects_in_slice(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< - * ndim - 1, inc) - * - */ - __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_inc); - } - __pyx_L5:; - - /* "View.MemoryView":1345 - * ndim - 1, inc) - * - * data += strides[0] # <<<<<<<<<<<<<< - * - * - */ - __pyx_v_data = (__pyx_v_data + (__pyx_v_strides[0])); - } - - /* "View.MemoryView":1331 - * - * @cname('__pyx_memoryview_refcount_objects_in_slice') - * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, bint inc): - * cdef Py_ssize_t i - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "View.MemoryView":1351 - * - * @cname('__pyx_memoryview_slice_assign_scalar') - * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< - * size_t itemsize, void *item, - * bint dtype_is_object) nogil: - */ - -static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) { - - /* "View.MemoryView":1354 - * size_t itemsize, void *item, - * bint dtype_is_object) nogil: - * refcount_copying(dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< - * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, - * itemsize, item) - */ - __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0); - - /* "View.MemoryView":1355 - * bint dtype_is_object) nogil: - * refcount_copying(dst, dtype_is_object, ndim, False) - * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, # <<<<<<<<<<<<<< - * itemsize, item) - * refcount_copying(dst, dtype_is_object, ndim, True) - */ - __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item); - - /* "View.MemoryView":1357 - * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, - * itemsize, item) - * refcount_copying(dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< - * - * - */ - __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1); - - /* "View.MemoryView":1351 - * - * @cname('__pyx_memoryview_slice_assign_scalar') - * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< - * size_t itemsize, void *item, - * bint dtype_is_object) nogil: - */ - - /* function exit code */ -} - -/* "View.MemoryView":1361 - * - * @cname('__pyx_memoryview__slice_assign_scalar') - * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, - * size_t itemsize, void *item) nogil: - */ - -static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item) { - CYTHON_UNUSED Py_ssize_t __pyx_v_i; - Py_ssize_t __pyx_v_stride; - Py_ssize_t __pyx_v_extent; - int __pyx_t_1; - Py_ssize_t __pyx_t_2; - Py_ssize_t __pyx_t_3; - - /* "View.MemoryView":1365 - * size_t itemsize, void *item) nogil: - * cdef Py_ssize_t i - * cdef Py_ssize_t stride = strides[0] # <<<<<<<<<<<<<< - * cdef Py_ssize_t extent = shape[0] - * - */ - __pyx_v_stride = (__pyx_v_strides[0]); - - /* "View.MemoryView":1366 - * cdef Py_ssize_t i - * cdef Py_ssize_t stride = strides[0] - * cdef Py_ssize_t extent = shape[0] # <<<<<<<<<<<<<< - * - * if ndim == 1: - */ - __pyx_v_extent = (__pyx_v_shape[0]); - - /* "View.MemoryView":1368 - * cdef Py_ssize_t extent = shape[0] - * - * if ndim == 1: # <<<<<<<<<<<<<< - * for i in range(extent): - * memcpy(data, item, itemsize) - */ - __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); - if (__pyx_t_1) { - - /* "View.MemoryView":1369 - * - * if ndim == 1: - * for i in range(extent): # <<<<<<<<<<<<<< - * memcpy(data, item, itemsize) - * data += stride - */ - __pyx_t_2 = __pyx_v_extent; - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { - __pyx_v_i = __pyx_t_3; - - /* "View.MemoryView":1370 - * if ndim == 1: - * for i in range(extent): - * memcpy(data, item, itemsize) # <<<<<<<<<<<<<< - * data += stride - * else: - */ - memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize); - - /* "View.MemoryView":1371 - * for i in range(extent): - * memcpy(data, item, itemsize) - * data += stride # <<<<<<<<<<<<<< - * else: - * for i in range(extent): - */ - __pyx_v_data = (__pyx_v_data + __pyx_v_stride); - } - goto __pyx_L3; - } - /*else*/ { - - /* "View.MemoryView":1373 - * data += stride - * else: - * for i in range(extent): # <<<<<<<<<<<<<< - * _slice_assign_scalar(data, shape + 1, strides + 1, - * ndim - 1, itemsize, item) - */ - __pyx_t_2 = __pyx_v_extent; - for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { - __pyx_v_i = __pyx_t_3; - - /* "View.MemoryView":1374 - * else: - * for i in range(extent): - * _slice_assign_scalar(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< - * ndim - 1, itemsize, item) - * data += stride - */ - __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item); - - /* "View.MemoryView":1376 - * _slice_assign_scalar(data, shape + 1, strides + 1, - * ndim - 1, itemsize, item) - * data += stride # <<<<<<<<<<<<<< - * - * - */ - __pyx_v_data = (__pyx_v_data + __pyx_v_stride); - } - } - __pyx_L3:; - - /* "View.MemoryView":1361 - * - * @cname('__pyx_memoryview__slice_assign_scalar') - * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, - * size_t itemsize, void *item) nogil: - */ - - /* function exit code */ -} - -static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k) { - struct __pyx_array_obj *p; - PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { - o = (*t->tp_alloc)(t, 0); - } else { - o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); - } - if (unlikely(!o)) return 0; - p = ((struct __pyx_array_obj *)o); - p->mode = ((PyObject*)Py_None); Py_INCREF(Py_None); - p->_format = ((PyObject*)Py_None); Py_INCREF(Py_None); - if (unlikely(__pyx_array___cinit__(o, a, k) < 0)) { - Py_DECREF(o); o = 0; - } - return o; -} - -static void __pyx_tp_dealloc_array(PyObject *o) { - struct __pyx_array_obj *p = (struct __pyx_array_obj *)o; - #if PY_VERSION_HEX >= 0x030400a1 - if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { - if (PyObject_CallFinalizerFromDealloc(o)) return; - } - #endif - { - PyObject *etype, *eval, *etb; - PyErr_Fetch(&etype, &eval, &etb); - ++Py_REFCNT(o); - __pyx_array___dealloc__(o); - --Py_REFCNT(o); - PyErr_Restore(etype, eval, etb); - } - Py_CLEAR(p->mode); - Py_CLEAR(p->_format); - (*Py_TYPE(o)->tp_free)(o); -} -static PyObject *__pyx_sq_item_array(PyObject *o, Py_ssize_t i) { - PyObject *r; - PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0; - r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x); - Py_DECREF(x); - return r; -} - -static int __pyx_mp_ass_subscript_array(PyObject *o, PyObject *i, PyObject *v) { - if (v) { - return __pyx_array___setitem__(o, i, v); - } - else { - PyErr_Format(PyExc_NotImplementedError, - "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); - return -1; - } -} - -static PyObject *__pyx_tp_getattro_array(PyObject *o, PyObject *n) { - PyObject *v = PyObject_GenericGetAttr(o, n); - if (!v && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Clear(); - v = __pyx_array___getattr__(o, n); - } - return v; -} - -static PyObject *__pyx_getprop___pyx_array_memview(PyObject *o, CYTHON_UNUSED void *x) { - return get_memview(o); -} - -static PyMethodDef __pyx_methods_array[] = { - {__Pyx_NAMESTR("__getattr__"), (PyCFunction)__pyx_array___getattr__, METH_O|METH_COEXIST, __Pyx_DOCSTR(0)}, - {0, 0, 0, 0} -}; - -static struct PyGetSetDef __pyx_getsets_array[] = { - {(char *)"memview", __pyx_getprop___pyx_array_memview, 0, 0, 0}, - {0, 0, 0, 0, 0} -}; - -static PySequenceMethods __pyx_tp_as_sequence_array = { - 0, /*sq_length*/ - 0, /*sq_concat*/ - 0, /*sq_repeat*/ - __pyx_sq_item_array, /*sq_item*/ - 0, /*sq_slice*/ - 0, /*sq_ass_item*/ - 0, /*sq_ass_slice*/ - 0, /*sq_contains*/ - 0, /*sq_inplace_concat*/ - 0, /*sq_inplace_repeat*/ -}; - -static PyMappingMethods __pyx_tp_as_mapping_array = { - 0, /*mp_length*/ - __pyx_array___getitem__, /*mp_subscript*/ - __pyx_mp_ass_subscript_array, /*mp_ass_subscript*/ -}; - -static PyBufferProcs __pyx_tp_as_buffer_array = { - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getreadbuffer*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getwritebuffer*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getsegcount*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getcharbuffer*/ - #endif - #if PY_VERSION_HEX >= 0x02060000 - __pyx_array_getbuffer, /*bf_getbuffer*/ - #endif - #if PY_VERSION_HEX >= 0x02060000 - 0, /*bf_releasebuffer*/ - #endif -}; - -static PyTypeObject __pyx_type___pyx_array = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("cython_bubblesort_nomagic.array"), /*tp_name*/ - sizeof(struct __pyx_array_obj), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_array, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - &__pyx_tp_as_sequence_array, /*tp_as_sequence*/ - &__pyx_tp_as_mapping_array, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - __pyx_tp_getattro_array, /*tp_getattro*/ - 0, /*tp_setattro*/ - &__pyx_tp_as_buffer_array, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_array, /*tp_methods*/ - 0, /*tp_members*/ - __pyx_getsets_array, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_array, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; - -static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - struct __pyx_MemviewEnum_obj *p; - PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { - o = (*t->tp_alloc)(t, 0); - } else { - o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); - } - if (unlikely(!o)) return 0; - p = ((struct __pyx_MemviewEnum_obj *)o); - p->name = Py_None; Py_INCREF(Py_None); - return o; -} - -static void __pyx_tp_dealloc_Enum(PyObject *o) { - struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; - #if PY_VERSION_HEX >= 0x030400a1 - if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; - } - #endif - PyObject_GC_UnTrack(o); - Py_CLEAR(p->name); - (*Py_TYPE(o)->tp_free)(o); -} - -static int __pyx_tp_traverse_Enum(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; - if (p->name) { - e = (*v)(p->name, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_Enum(PyObject *o) { - PyObject* tmp; - struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; - tmp = ((PyObject*)p->name); - p->name = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyMethodDef __pyx_methods_Enum[] = { - {0, 0, 0, 0} -}; - -static PyTypeObject __pyx_type___pyx_MemviewEnum = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("cython_bubblesort_nomagic.Enum"), /*tp_name*/ - sizeof(struct __pyx_MemviewEnum_obj), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_Enum, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - __pyx_MemviewEnum___repr__, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_Enum, /*tp_traverse*/ - __pyx_tp_clear_Enum, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_Enum, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - __pyx_MemviewEnum___init__, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_Enum, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; -static struct __pyx_vtabstruct_memoryview __pyx_vtable_memoryview; - -static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k) { - struct __pyx_memoryview_obj *p; - PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { - o = (*t->tp_alloc)(t, 0); - } else { - o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); - } - if (unlikely(!o)) return 0; - p = ((struct __pyx_memoryview_obj *)o); - p->__pyx_vtab = __pyx_vtabptr_memoryview; - p->obj = Py_None; Py_INCREF(Py_None); - p->_size = Py_None; Py_INCREF(Py_None); - p->_array_interface = Py_None; Py_INCREF(Py_None); - p->view.obj = NULL; - if (unlikely(__pyx_memoryview___cinit__(o, a, k) < 0)) { - Py_DECREF(o); o = 0; - } - return o; -} - -static void __pyx_tp_dealloc_memoryview(PyObject *o) { - struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; - #if PY_VERSION_HEX >= 0x030400a1 - if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; - } - #endif - PyObject_GC_UnTrack(o); - { - PyObject *etype, *eval, *etb; - PyErr_Fetch(&etype, &eval, &etb); - ++Py_REFCNT(o); - __pyx_memoryview___dealloc__(o); - --Py_REFCNT(o); - PyErr_Restore(etype, eval, etb); - } - Py_CLEAR(p->obj); - Py_CLEAR(p->_size); - Py_CLEAR(p->_array_interface); - (*Py_TYPE(o)->tp_free)(o); -} - -static int __pyx_tp_traverse_memoryview(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; - if (p->obj) { - e = (*v)(p->obj, a); if (e) return e; - } - if (p->_size) { - e = (*v)(p->_size, a); if (e) return e; - } - if (p->_array_interface) { - e = (*v)(p->_array_interface, a); if (e) return e; - } - if (p->view.obj) { - e = (*v)(p->view.obj, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_memoryview(PyObject *o) { - PyObject* tmp; - struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; - tmp = ((PyObject*)p->obj); - p->obj = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->_size); - p->_size = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->_array_interface); - p->_array_interface = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - Py_CLEAR(p->view.obj); - return 0; -} -static PyObject *__pyx_sq_item_memoryview(PyObject *o, Py_ssize_t i) { - PyObject *r; - PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0; - r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x); - Py_DECREF(x); - return r; -} - -static int __pyx_mp_ass_subscript_memoryview(PyObject *o, PyObject *i, PyObject *v) { - if (v) { - return __pyx_memoryview___setitem__(o, i, v); - } - else { - PyErr_Format(PyExc_NotImplementedError, - "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); - return -1; - } -} - -static PyObject *__pyx_getprop___pyx_memoryview_T(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_memoryview_transpose(o); -} - -static PyObject *__pyx_getprop___pyx_memoryview_base(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_memoryview__get__base(o); -} - -static PyObject *__pyx_getprop___pyx_memoryview_shape(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_memoryview_get_shape(o); -} - -static PyObject *__pyx_getprop___pyx_memoryview_strides(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_memoryview_get_strides(o); -} - -static PyObject *__pyx_getprop___pyx_memoryview_suboffsets(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_memoryview_get_suboffsets(o); -} - -static PyObject *__pyx_getprop___pyx_memoryview_ndim(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_memoryview_get_ndim(o); -} - -static PyObject *__pyx_getprop___pyx_memoryview_itemsize(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_memoryview_get_itemsize(o); -} - -static PyObject *__pyx_getprop___pyx_memoryview_nbytes(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_memoryview_get_nbytes(o); -} - -static PyObject *__pyx_getprop___pyx_memoryview_size(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_memoryview_get_size(o); -} - -static PyMethodDef __pyx_methods_memoryview[] = { - {__Pyx_NAMESTR("is_c_contig"), (PyCFunction)__pyx_memoryview_is_c_contig, METH_NOARGS, __Pyx_DOCSTR(0)}, - {__Pyx_NAMESTR("is_f_contig"), (PyCFunction)__pyx_memoryview_is_f_contig, METH_NOARGS, __Pyx_DOCSTR(0)}, - {__Pyx_NAMESTR("copy"), (PyCFunction)__pyx_memoryview_copy, METH_NOARGS, __Pyx_DOCSTR(0)}, - {__Pyx_NAMESTR("copy_fortran"), (PyCFunction)__pyx_memoryview_copy_fortran, METH_NOARGS, __Pyx_DOCSTR(0)}, - {0, 0, 0, 0} -}; - -static struct PyGetSetDef __pyx_getsets_memoryview[] = { - {(char *)"T", __pyx_getprop___pyx_memoryview_T, 0, 0, 0}, - {(char *)"base", __pyx_getprop___pyx_memoryview_base, 0, 0, 0}, - {(char *)"shape", __pyx_getprop___pyx_memoryview_shape, 0, 0, 0}, - {(char *)"strides", __pyx_getprop___pyx_memoryview_strides, 0, 0, 0}, - {(char *)"suboffsets", __pyx_getprop___pyx_memoryview_suboffsets, 0, 0, 0}, - {(char *)"ndim", __pyx_getprop___pyx_memoryview_ndim, 0, 0, 0}, - {(char *)"itemsize", __pyx_getprop___pyx_memoryview_itemsize, 0, 0, 0}, - {(char *)"nbytes", __pyx_getprop___pyx_memoryview_nbytes, 0, 0, 0}, - {(char *)"size", __pyx_getprop___pyx_memoryview_size, 0, 0, 0}, - {0, 0, 0, 0, 0} -}; - -static PySequenceMethods __pyx_tp_as_sequence_memoryview = { - __pyx_memoryview___len__, /*sq_length*/ - 0, /*sq_concat*/ - 0, /*sq_repeat*/ - __pyx_sq_item_memoryview, /*sq_item*/ - 0, /*sq_slice*/ - 0, /*sq_ass_item*/ - 0, /*sq_ass_slice*/ - 0, /*sq_contains*/ - 0, /*sq_inplace_concat*/ - 0, /*sq_inplace_repeat*/ -}; - -static PyMappingMethods __pyx_tp_as_mapping_memoryview = { - __pyx_memoryview___len__, /*mp_length*/ - __pyx_memoryview___getitem__, /*mp_subscript*/ - __pyx_mp_ass_subscript_memoryview, /*mp_ass_subscript*/ -}; - -static PyBufferProcs __pyx_tp_as_buffer_memoryview = { - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getreadbuffer*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getwritebuffer*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getsegcount*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getcharbuffer*/ - #endif - #if PY_VERSION_HEX >= 0x02060000 - __pyx_memoryview_getbuffer, /*bf_getbuffer*/ - #endif - #if PY_VERSION_HEX >= 0x02060000 - 0, /*bf_releasebuffer*/ - #endif -}; - -static PyTypeObject __pyx_type___pyx_memoryview = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("cython_bubblesort_nomagic.memoryview"), /*tp_name*/ - sizeof(struct __pyx_memoryview_obj), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_memoryview, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - __pyx_memoryview___repr__, /*tp_repr*/ - 0, /*tp_as_number*/ - &__pyx_tp_as_sequence_memoryview, /*tp_as_sequence*/ - &__pyx_tp_as_mapping_memoryview, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - __pyx_memoryview___str__, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - &__pyx_tp_as_buffer_memoryview, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_memoryview, /*tp_traverse*/ - __pyx_tp_clear_memoryview, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_memoryview, /*tp_methods*/ - 0, /*tp_members*/ - __pyx_getsets_memoryview, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_memoryview, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; -static struct __pyx_vtabstruct__memoryviewslice __pyx_vtable__memoryviewslice; - -static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k) { - struct __pyx_memoryviewslice_obj *p; - PyObject *o = __pyx_tp_new_memoryview(t, a, k); - if (unlikely(!o)) return 0; - p = ((struct __pyx_memoryviewslice_obj *)o); - p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_memoryview*)__pyx_vtabptr__memoryviewslice; - p->from_object = Py_None; Py_INCREF(Py_None); - p->from_slice.memview = NULL; - return o; -} - -static void __pyx_tp_dealloc__memoryviewslice(PyObject *o) { - struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; - #if PY_VERSION_HEX >= 0x030400a1 - if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; - } - #endif - PyObject_GC_UnTrack(o); - { - PyObject *etype, *eval, *etb; - PyErr_Fetch(&etype, &eval, &etb); - ++Py_REFCNT(o); - __pyx_memoryviewslice___dealloc__(o); - --Py_REFCNT(o); - PyErr_Restore(etype, eval, etb); - } - Py_CLEAR(p->from_object); - PyObject_GC_Track(o); - __pyx_tp_dealloc_memoryview(o); -} - -static int __pyx_tp_traverse__memoryviewslice(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; - e = __pyx_tp_traverse_memoryview(o, v, a); if (e) return e; - if (p->from_object) { - e = (*v)(p->from_object, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear__memoryviewslice(PyObject *o) { - PyObject* tmp; - struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; - __pyx_tp_clear_memoryview(o); - tmp = ((PyObject*)p->from_object); - p->from_object = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - __PYX_XDEC_MEMVIEW(&p->from_slice, 1); - return 0; -} - -static PyObject *__pyx_getprop___pyx_memoryviewslice_base(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_memoryviewslice__get__base(o); -} - -static PyMethodDef __pyx_methods__memoryviewslice[] = { - {0, 0, 0, 0} -}; - -static struct PyGetSetDef __pyx_getsets__memoryviewslice[] = { - {(char *)"base", __pyx_getprop___pyx_memoryviewslice_base, 0, 0, 0}, - {0, 0, 0, 0, 0} -}; - -static PyTypeObject __pyx_type___pyx_memoryviewslice = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("cython_bubblesort_nomagic._memoryviewslice"), /*tp_name*/ - sizeof(struct __pyx_memoryviewslice_obj), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc__memoryviewslice, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - #if CYTHON_COMPILING_IN_PYPY - __pyx_memoryview___repr__, /*tp_repr*/ - #else - 0, /*tp_repr*/ - #endif - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - #if CYTHON_COMPILING_IN_PYPY - __pyx_memoryview___str__, /*tp_str*/ - #else - 0, /*tp_str*/ - #endif - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - __Pyx_DOCSTR("Internal class for passing memoryview slices to Python"), /*tp_doc*/ - __pyx_tp_traverse__memoryviewslice, /*tp_traverse*/ - __pyx_tp_clear__memoryviewslice, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods__memoryviewslice, /*tp_methods*/ - 0, /*tp_members*/ - __pyx_getsets__memoryviewslice, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new__memoryviewslice, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; - -static PyMethodDef __pyx_methods[] = { - {__Pyx_NAMESTR("cython_bubblesort_nomagic"), (PyCFunction)__pyx_pw_25cython_bubblesort_nomagic_1cython_bubblesort_nomagic, METH_O, __Pyx_DOCSTR(__pyx_doc_25cython_bubblesort_nomagic_cython_bubblesort_nomagic)}, - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -static struct PyModuleDef __pyx_moduledef = { - #if PY_VERSION_HEX < 0x03020000 - { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, - #else - PyModuleDef_HEAD_INIT, - #endif - __Pyx_NAMESTR("cython_bubblesort_nomagic"), - 0, /* m_doc */ - -1, /* m_size */ - __pyx_methods /* m_methods */, - NULL, /* m_reload */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_s_Buffer_view_does_not_expose_stri, __pyx_k_Buffer_view_does_not_expose_stri, sizeof(__pyx_k_Buffer_view_does_not_expose_stri), 0, 0, 1, 0}, - {&__pyx_kp_s_Can_only_create_a_buffer_that_is, __pyx_k_Can_only_create_a_buffer_that_is, sizeof(__pyx_k_Can_only_create_a_buffer_that_is), 0, 0, 1, 0}, - {&__pyx_kp_s_Cannot_index_with_type_s, __pyx_k_Cannot_index_with_type_s, sizeof(__pyx_k_Cannot_index_with_type_s), 0, 0, 1, 0}, - {&__pyx_n_s_Ellipsis, __pyx_k_Ellipsis, sizeof(__pyx_k_Ellipsis), 0, 0, 1, 1}, - {&__pyx_kp_s_Empty_shape_tuple_for_cython_arr, __pyx_k_Empty_shape_tuple_for_cython_arr, sizeof(__pyx_k_Empty_shape_tuple_for_cython_arr), 0, 0, 1, 0}, - {&__pyx_kp_u_Format_string_allocated_too_shor, __pyx_k_Format_string_allocated_too_shor, sizeof(__pyx_k_Format_string_allocated_too_shor), 0, 1, 0, 0}, - {&__pyx_kp_u_Format_string_allocated_too_shor_2, __pyx_k_Format_string_allocated_too_shor_2, sizeof(__pyx_k_Format_string_allocated_too_shor_2), 0, 1, 0, 0}, - {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1}, - {&__pyx_kp_s_Indirect_dimensions_not_supporte, __pyx_k_Indirect_dimensions_not_supporte, sizeof(__pyx_k_Indirect_dimensions_not_supporte), 0, 0, 1, 0}, - {&__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_k_Invalid_mode_expected_c_or_fortr, sizeof(__pyx_k_Invalid_mode_expected_c_or_fortr), 0, 0, 1, 0}, - {&__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_k_Invalid_shape_in_axis_d_d, sizeof(__pyx_k_Invalid_shape_in_axis_d_d), 0, 0, 1, 0}, - {&__pyx_n_s_MemoryError, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1}, - {&__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_k_MemoryView_of_r_at_0x_x, sizeof(__pyx_k_MemoryView_of_r_at_0x_x), 0, 0, 1, 0}, - {&__pyx_kp_s_MemoryView_of_r_object, __pyx_k_MemoryView_of_r_object, sizeof(__pyx_k_MemoryView_of_r_object), 0, 0, 1, 0}, - {&__pyx_kp_u_Non_native_byte_order_not_suppor, __pyx_k_Non_native_byte_order_not_suppor, sizeof(__pyx_k_Non_native_byte_order_not_suppor), 0, 1, 0, 0}, - {&__pyx_n_b_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 0, 1}, - {&__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_k_Out_of_bounds_on_buffer_access_a, sizeof(__pyx_k_Out_of_bounds_on_buffer_access_a), 0, 0, 1, 0}, - {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1}, - {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, - {&__pyx_kp_s_Unable_to_convert_item_to_object, __pyx_k_Unable_to_convert_item_to_object, sizeof(__pyx_k_Unable_to_convert_item_to_object), 0, 0, 1, 0}, - {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, - {&__pyx_n_s_allocate_buffer, __pyx_k_allocate_buffer, sizeof(__pyx_k_allocate_buffer), 0, 0, 1, 1}, - {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1}, - {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1}, - {&__pyx_n_u_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 1, 0, 1}, - {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 0, 0, 1, 1}, - {&__pyx_kp_s_contiguous_and_direct, __pyx_k_contiguous_and_direct, sizeof(__pyx_k_contiguous_and_direct), 0, 0, 1, 0}, - {&__pyx_kp_s_contiguous_and_indirect, __pyx_k_contiguous_and_indirect, sizeof(__pyx_k_contiguous_and_indirect), 0, 0, 1, 0}, - {&__pyx_n_s_dtype_is_object, __pyx_k_dtype_is_object, sizeof(__pyx_k_dtype_is_object), 0, 0, 1, 1}, - {&__pyx_n_s_enumerate, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1}, - {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1}, - {&__pyx_n_s_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1}, - {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, - {&__pyx_n_s_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 0, 1, 1}, - {&__pyx_n_u_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 1, 0, 1}, - {&__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_k_got_differing_extents_in_dimensi, sizeof(__pyx_k_got_differing_extents_in_dimensi), 0, 0, 1, 0}, - {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1}, - {&__pyx_kp_s_itemsize_0_for_cython_array, __pyx_k_itemsize_0_for_cython_array, sizeof(__pyx_k_itemsize_0_for_cython_array), 0, 0, 1, 0}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_memview, __pyx_k_memview, sizeof(__pyx_k_memview), 0, 0, 1, 1}, - {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1}, - {&__pyx_kp_u_ndarray_is_not_C_contiguous, __pyx_k_ndarray_is_not_C_contiguous, sizeof(__pyx_k_ndarray_is_not_C_contiguous), 0, 1, 0, 0}, - {&__pyx_kp_u_ndarray_is_not_Fortran_contiguou, __pyx_k_ndarray_is_not_Fortran_contiguou, sizeof(__pyx_k_ndarray_is_not_Fortran_contiguou), 0, 1, 0, 0}, - {&__pyx_n_s_ndim, __pyx_k_ndim, sizeof(__pyx_k_ndim), 0, 0, 1, 1}, - {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1}, - {&__pyx_n_s_pack, __pyx_k_pack, sizeof(__pyx_k_pack), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_getbuffer, __pyx_k_pyx_getbuffer, sizeof(__pyx_k_pyx_getbuffer), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_releasebuffer, __pyx_k_pyx_releasebuffer, sizeof(__pyx_k_pyx_releasebuffer), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, - {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, - {&__pyx_n_s_shape, __pyx_k_shape, sizeof(__pyx_k_shape), 0, 0, 1, 1}, - {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1}, - {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1}, - {&__pyx_n_s_step, __pyx_k_step, sizeof(__pyx_k_step), 0, 0, 1, 1}, - {&__pyx_n_s_stop, __pyx_k_stop, sizeof(__pyx_k_stop), 0, 0, 1, 1}, - {&__pyx_kp_s_strided_and_direct, __pyx_k_strided_and_direct, sizeof(__pyx_k_strided_and_direct), 0, 0, 1, 0}, - {&__pyx_kp_s_strided_and_direct_or_indirect, __pyx_k_strided_and_direct_or_indirect, sizeof(__pyx_k_strided_and_direct_or_indirect), 0, 0, 1, 0}, - {&__pyx_kp_s_strided_and_indirect, __pyx_k_strided_and_indirect, sizeof(__pyx_k_strided_and_indirect), 0, 0, 1, 0}, - {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_kp_s_unable_to_allocate_array_data, __pyx_k_unable_to_allocate_array_data, sizeof(__pyx_k_unable_to_allocate_array_data), 0, 0, 1, 0}, - {&__pyx_kp_s_unable_to_allocate_shape_and_str, __pyx_k_unable_to_allocate_shape_and_str, sizeof(__pyx_k_unable_to_allocate_shape_and_str), 0, 0, 1, 0}, - {&__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_k_unknown_dtype_code_in_numpy_pxd, sizeof(__pyx_k_unknown_dtype_code_in_numpy_pxd), 0, 1, 0, 0}, - {&__pyx_n_s_unpack, __pyx_k_unpack, sizeof(__pyx_k_unpack), 0, 0, 1, 1}, - {&__pyx_n_s_xrange, __pyx_k_xrange, sizeof(__pyx_k_xrange), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static int __Pyx_InitCachedBuiltins(void) { - #if PY_MAJOR_VERSION >= 3 - __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_xrange) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s_xrange); if (!__pyx_builtin_xrange) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -static int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":215 - * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) - * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): - * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< - * - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) - */ - __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple_)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple_); - __Pyx_GIVEREF(__pyx_tuple_); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":219 - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) - * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): - * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< - * - * info.buf = PyArray_DATA(self) - */ - __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__2); - __Pyx_GIVEREF(__pyx_tuple__2); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":257 - * if ((descr.byteorder == c'>' and little_endian) or - * (descr.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< - * if t == NPY_BYTE: f = "b" - * elif t == NPY_UBYTE: f = "B" - */ - __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__3); - __Pyx_GIVEREF(__pyx_tuple__3); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":799 - * - * if (end - f) - (new_offset - offset[0]) < 15: - * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< - * - * if ((child.byteorder == c'>' and little_endian) or - */ - __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__4); - __Pyx_GIVEREF(__pyx_tuple__4); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":803 - * if ((child.byteorder == c'>' and little_endian) or - * (child.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< - * # One could encode it in the format string and have Cython - * # complain instead, BUT: < and > in format strings also imply - */ - __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__5); - __Pyx_GIVEREF(__pyx_tuple__5); - - /* "/Users/sebastian/miniconda3/envs/py34/lib/python3.4/site-packages/Cython/Includes/numpy/__init__.pxd":823 - * t = child.type_num - * if end - f < 5: - * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< - * - * # Until ticket #99 is fixed, use integers to avoid warnings - */ - __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__6); - __Pyx_GIVEREF(__pyx_tuple__6); - - /* "View.MemoryView":127 - * - * if not self.ndim: - * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< - * - * if itemsize <= 0: - */ - __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_Empty_shape_tuple_for_cython_arr); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__7); - __Pyx_GIVEREF(__pyx_tuple__7); - - /* "View.MemoryView":130 - * - * if itemsize <= 0: - * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< - * - * if isinstance(format, unicode): - */ - __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_itemsize_0_for_cython_array); if (unlikely(!__pyx_tuple__8)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__8); - __Pyx_GIVEREF(__pyx_tuple__8); - - /* "View.MemoryView":142 - * - * if not self._shape: - * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< - * - * - */ - __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_shape_and_str); if (unlikely(!__pyx_tuple__9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__9); - __Pyx_GIVEREF(__pyx_tuple__9); - - /* "View.MemoryView":170 - * self.data = malloc(self.len) - * if not self.data: - * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< - * - * if self.dtype_is_object: - */ - __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_array_data); if (unlikely(!__pyx_tuple__10)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__10); - __Pyx_GIVEREF(__pyx_tuple__10); - - /* "View.MemoryView":186 - * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS - * if not (flags & bufmode): - * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< - * info.buf = self.data - * info.len = self.len - */ - __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_Can_only_create_a_buffer_that_is); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__11); - __Pyx_GIVEREF(__pyx_tuple__11); - - /* "View.MemoryView":445 - * result = struct.unpack(self.view.format, bytesitem) - * except struct.error: - * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< - * else: - * if len(self.view.format) == 1: - */ - __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_s_Unable_to_convert_item_to_object); if (unlikely(!__pyx_tuple__12)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__12); - __Pyx_GIVEREF(__pyx_tuple__12); - - /* "View.MemoryView":521 - * if self.view.strides == NULL: - * - * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< - * - * return tuple([self.view.strides[i] for i in xrange(self.view.ndim)]) - */ - __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_Buffer_view_does_not_expose_stri); if (unlikely(!__pyx_tuple__13)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__13); - __Pyx_GIVEREF(__pyx_tuple__13); - - /* "View.MemoryView":638 - * if item is Ellipsis: - * if not seen_ellipsis: - * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<< - * seen_ellipsis = True - * else: - */ - __pyx_tuple__14 = PyTuple_Pack(1, Py_None); if (unlikely(!__pyx_tuple__14)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__14); - __Pyx_GIVEREF(__pyx_tuple__14); - - /* "View.MemoryView":641 - * seen_ellipsis = True - * else: - * result.append(slice(None)) # <<<<<<<<<<<<<< - * have_slices = True - * else: - */ - __pyx_tuple__15 = PyTuple_Pack(1, Py_None); if (unlikely(!__pyx_tuple__15)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__15); - __Pyx_GIVEREF(__pyx_tuple__15); - - /* "View.MemoryView":652 - * nslices = ndim - len(result) - * if nslices: - * result.extend([slice(None)] * nslices) # <<<<<<<<<<<<<< - * - * return have_slices or nslices, tuple(result) - */ - __pyx_tuple__16 = PyTuple_Pack(1, Py_None); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__16); - __Pyx_GIVEREF(__pyx_tuple__16); - - /* "View.MemoryView":660 - * for i in range(ndim): - * if suboffsets[i] >= 0: - * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< - * - * - */ - __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_Indirect_dimensions_not_supporte); if (unlikely(!__pyx_tuple__17)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__17); - __Pyx_GIVEREF(__pyx_tuple__17); - - /* "View.MemoryView":276 - * return self.name - * - * cdef generic = Enum("") # <<<<<<<<<<<<<< - * cdef strided = Enum("") # default - * cdef indirect = Enum("") - */ - __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__18)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__18); - __Pyx_GIVEREF(__pyx_tuple__18); - - /* "View.MemoryView":277 - * - * cdef generic = Enum("") - * cdef strided = Enum("") # default # <<<<<<<<<<<<<< - * cdef indirect = Enum("") - * - */ - __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__19)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__19); - __Pyx_GIVEREF(__pyx_tuple__19); - - /* "View.MemoryView":278 - * cdef generic = Enum("") - * cdef strided = Enum("") # default - * cdef indirect = Enum("") # <<<<<<<<<<<<<< - * - * - */ - __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__20)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__20); - __Pyx_GIVEREF(__pyx_tuple__20); - - /* "View.MemoryView":281 - * - * - * cdef contiguous = Enum("") # <<<<<<<<<<<<<< - * cdef indirect_contiguous = Enum("") - * - */ - __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__21)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__21); - __Pyx_GIVEREF(__pyx_tuple__21); - - /* "View.MemoryView":282 - * - * cdef contiguous = Enum("") - * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< - * - * - */ - __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__22)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__22); - __Pyx_GIVEREF(__pyx_tuple__22); - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -#if PY_MAJOR_VERSION < 3 -PyMODINIT_FUNC initcython_bubblesort_nomagic(void); /*proto*/ -PyMODINIT_FUNC initcython_bubblesort_nomagic(void) -#else -PyMODINIT_FUNC PyInit_cython_bubblesort_nomagic(void); /*proto*/ -PyMODINIT_FUNC PyInit_cython_bubblesort_nomagic(void) -#endif -{ - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_REFNANNY - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); - if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); - } - #endif - __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_cython_bubblesort_nomagic(void)", 0); - if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #ifdef __Pyx_CyFunction_USED - if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4(__Pyx_NAMESTR("cython_bubblesort_nomagic"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if CYTHON_COMPILING_IN_PYPY - Py_INCREF(__pyx_b); - #endif - if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - /*--- Initialize various global constants etc. ---*/ - if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - if (__pyx_module_is_main_cython_bubblesort_nomagic) { - if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!PyDict_GetItemString(modules, "cython_bubblesort_nomagic")) { - if (unlikely(PyDict_SetItemString(modules, "cython_bubblesort_nomagic", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - } - #endif - /*--- Builtin init code ---*/ - if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Constants init code ---*/ - if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Global init code ---*/ - generic = Py_None; Py_INCREF(Py_None); - strided = Py_None; Py_INCREF(Py_None); - indirect = Py_None; Py_INCREF(Py_None); - contiguous = Py_None; Py_INCREF(Py_None); - indirect_contiguous = Py_None; Py_INCREF(Py_None); - /*--- Variable export code ---*/ - /*--- Function export code ---*/ - /*--- Type init code ---*/ - if (PyType_Ready(&__pyx_type___pyx_array) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type___pyx_array.tp_print = 0; - __pyx_array_type = &__pyx_type___pyx_array; - if (PyType_Ready(&__pyx_type___pyx_MemviewEnum) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type___pyx_MemviewEnum.tp_print = 0; - __pyx_MemviewEnum_type = &__pyx_type___pyx_MemviewEnum; - __pyx_vtabptr_memoryview = &__pyx_vtable_memoryview; - __pyx_vtable_memoryview.get_item_pointer = (char *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_get_item_pointer; - __pyx_vtable_memoryview.is_slice = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_is_slice; - __pyx_vtable_memoryview.setitem_slice_assignment = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_slice_assignment; - __pyx_vtable_memoryview.setitem_slice_assign_scalar = (PyObject *(*)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_setitem_slice_assign_scalar; - __pyx_vtable_memoryview.setitem_indexed = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_indexed; - __pyx_vtable_memoryview.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryview_convert_item_to_object; - __pyx_vtable_memoryview.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryview_assign_item_from_object; - if (PyType_Ready(&__pyx_type___pyx_memoryview) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type___pyx_memoryview.tp_print = 0; - if (__Pyx_SetVtable(__pyx_type___pyx_memoryview.tp_dict, __pyx_vtabptr_memoryview) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_memoryview_type = &__pyx_type___pyx_memoryview; - __pyx_vtabptr__memoryviewslice = &__pyx_vtable__memoryviewslice; - __pyx_vtable__memoryviewslice.__pyx_base = *__pyx_vtabptr_memoryview; - __pyx_vtable__memoryviewslice.__pyx_base.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryviewslice_convert_item_to_object; - __pyx_vtable__memoryviewslice.__pyx_base.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryviewslice_assign_item_from_object; - __pyx_type___pyx_memoryviewslice.tp_base = __pyx_memoryview_type; - if (PyType_Ready(&__pyx_type___pyx_memoryviewslice) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type___pyx_memoryviewslice.tp_print = 0; - if (__Pyx_SetVtable(__pyx_type___pyx_memoryviewslice.tp_dict, __pyx_vtabptr__memoryviewslice) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_memoryviewslice_type = &__pyx_type___pyx_memoryviewslice; - /*--- Type import code ---*/ - __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", - #if CYTHON_COMPILING_IN_PYPY - sizeof(PyTypeObject), - #else - sizeof(PyHeapTypeObject), - #endif - 0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Variable import code ---*/ - /*--- Function import code ---*/ - /*--- Execution code ---*/ - - /* "cython_bubblesort_nomagic.pyx":2 - * - * cimport numpy as np # <<<<<<<<<<<<<< - * cimport cython - * @cython.boundscheck(False) - */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "View.MemoryView":203 - * info.obj = self - * - * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< - * - * def __dealloc__(array self): - */ - __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_array_getbuffer)), __pyx_k_getbuffer_obj_view_flags); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_array_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - PyType_Modified(__pyx_array_type); - - /* "View.MemoryView":276 - * return self.name - * - * cdef generic = Enum("") # <<<<<<<<<<<<<< - * cdef strided = Enum("") # default - * cdef indirect = Enum("") - */ - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject *)__pyx_MemviewEnum_type)), __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(generic); - __Pyx_DECREF_SET(generic, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "View.MemoryView":277 - * - * cdef generic = Enum("") - * cdef strided = Enum("") # default # <<<<<<<<<<<<<< - * cdef indirect = Enum("") - * - */ - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject *)__pyx_MemviewEnum_type)), __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(strided); - __Pyx_DECREF_SET(strided, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "View.MemoryView":278 - * cdef generic = Enum("") - * cdef strided = Enum("") # default - * cdef indirect = Enum("") # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject *)__pyx_MemviewEnum_type)), __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(indirect); - __Pyx_DECREF_SET(indirect, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "View.MemoryView":281 - * - * - * cdef contiguous = Enum("") # <<<<<<<<<<<<<< - * cdef indirect_contiguous = Enum("") - * - */ - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject *)__pyx_MemviewEnum_type)), __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(contiguous); - __Pyx_DECREF_SET(contiguous, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "View.MemoryView":282 - * - * cdef contiguous = Enum("") - * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject *)__pyx_MemviewEnum_type)), __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(indirect_contiguous); - __Pyx_DECREF_SET(indirect_contiguous, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "View.MemoryView":496 - * info.obj = self - * - * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), __pyx_k_getbuffer_obj_view_flags); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_memoryview_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - PyType_Modified(__pyx_memoryview_type); - - /* "View.MemoryView":953 - * return self.from_object - * - * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), __pyx_k_getbuffer_obj_view_flags); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 953; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_memoryviewslice_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 953; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - PyType_Modified(__pyx_memoryviewslice_type); - - /* "View.MemoryView":1361 - * - * @cname('__pyx_memoryview__slice_assign_scalar') - * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< - * Py_ssize_t *strides, int ndim, - * size_t itemsize, void *item) nogil: - */ - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - if (__pyx_m) { - __Pyx_AddTraceback("init cython_bubblesort_nomagic", __pyx_clineno, __pyx_lineno, __pyx_filename); - Py_DECREF(__pyx_m); __pyx_m = 0; - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init cython_bubblesort_nomagic"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if PY_MAJOR_VERSION < 3 - return; - #else - return __pyx_m; - #endif -} - -/* Runtime support code */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule((char *)modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif /* CYTHON_REFNANNY */ - -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -static CYTHON_INLINE int __Pyx_IsLittleEndian(void) { - unsigned int n = 1; - return *(unsigned char*)(&n) != 0; -} -static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, - __Pyx_BufFmt_StackElem* stack, - __Pyx_TypeInfo* type) { - stack[0].field = &ctx->root; - stack[0].parent_offset = 0; - ctx->root.type = type; - ctx->root.name = "buffer dtype"; - ctx->root.offset = 0; - ctx->head = stack; - ctx->head->field = &ctx->root; - ctx->fmt_offset = 0; - ctx->head->parent_offset = 0; - ctx->new_packmode = '@'; - ctx->enc_packmode = '@'; - ctx->new_count = 1; - ctx->enc_count = 0; - ctx->enc_type = 0; - ctx->is_complex = 0; - ctx->is_valid_array = 0; - ctx->struct_alignment = 0; - while (type->typegroup == 'S') { - ++ctx->head; - ctx->head->field = type->fields; - ctx->head->parent_offset = 0; - type = type->fields->type; - } -} -static int __Pyx_BufFmt_ParseNumber(const char** ts) { - int count; - const char* t = *ts; - if (*t < '0' || *t > '9') { - return -1; - } else { - count = *t++ - '0'; - while (*t >= '0' && *t < '9') { - count *= 10; - count += *t++ - '0'; - } - } - *ts = t; - return count; -} -static int __Pyx_BufFmt_ExpectNumber(const char **ts) { - int number = __Pyx_BufFmt_ParseNumber(ts); - if (number == -1) /* First char was not a digit */ - PyErr_Format(PyExc_ValueError,\ - "Does not understand character buffer dtype format string ('%c')", **ts); - return number; -} -static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { - PyErr_Format(PyExc_ValueError, - "Unexpected format string character: '%c'", ch); -} -static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { - switch (ch) { - case 'c': return "'char'"; - case 'b': return "'signed char'"; - case 'B': return "'unsigned char'"; - case 'h': return "'short'"; - case 'H': return "'unsigned short'"; - case 'i': return "'int'"; - case 'I': return "'unsigned int'"; - case 'l': return "'long'"; - case 'L': return "'unsigned long'"; - case 'q': return "'long long'"; - case 'Q': return "'unsigned long long'"; - case 'f': return (is_complex ? "'complex float'" : "'float'"); - case 'd': return (is_complex ? "'complex double'" : "'double'"); - case 'g': return (is_complex ? "'complex long double'" : "'long double'"); - case 'T': return "a struct"; - case 'O': return "Python object"; - case 'P': return "a pointer"; - case 's': case 'p': return "a string"; - case 0: return "end"; - default: return "unparseable format string"; - } -} -static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { - switch (ch) { - case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; - case 'h': case 'H': return 2; - case 'i': case 'I': case 'l': case 'L': return 4; - case 'q': case 'Q': return 8; - case 'f': return (is_complex ? 8 : 4); - case 'd': return (is_complex ? 16 : 8); - case 'g': { - PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); - return 0; - } - case 'O': case 'P': return sizeof(void*); - default: - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; - } -} -static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { - switch (ch) { - case 'c': case 'b': case 'B': case 's': case 'p': return 1; - case 'h': case 'H': return sizeof(short); - case 'i': case 'I': return sizeof(int); - case 'l': case 'L': return sizeof(long); - #ifdef HAVE_LONG_LONG - case 'q': case 'Q': return sizeof(PY_LONG_LONG); - #endif - case 'f': return sizeof(float) * (is_complex ? 2 : 1); - case 'd': return sizeof(double) * (is_complex ? 2 : 1); - case 'g': return sizeof(long double) * (is_complex ? 2 : 1); - case 'O': case 'P': return sizeof(void*); - default: { - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; - } - } -} -typedef struct { char c; short x; } __Pyx_st_short; -typedef struct { char c; int x; } __Pyx_st_int; -typedef struct { char c; long x; } __Pyx_st_long; -typedef struct { char c; float x; } __Pyx_st_float; -typedef struct { char c; double x; } __Pyx_st_double; -typedef struct { char c; long double x; } __Pyx_st_longdouble; -typedef struct { char c; void *x; } __Pyx_st_void_p; -#ifdef HAVE_LONG_LONG -typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; -#endif -static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) { - switch (ch) { - case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; - case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); - case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); - case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); -#ifdef HAVE_LONG_LONG - case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG); -#endif - case 'f': return sizeof(__Pyx_st_float) - sizeof(float); - case 'd': return sizeof(__Pyx_st_double) - sizeof(double); - case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); - case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); - default: - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; - } -} -/* These are for computing the padding at the end of the struct to align - on the first member of the struct. This will probably the same as above, - but we don't have any guarantees. - */ -typedef struct { short x; char c; } __Pyx_pad_short; -typedef struct { int x; char c; } __Pyx_pad_int; -typedef struct { long x; char c; } __Pyx_pad_long; -typedef struct { float x; char c; } __Pyx_pad_float; -typedef struct { double x; char c; } __Pyx_pad_double; -typedef struct { long double x; char c; } __Pyx_pad_longdouble; -typedef struct { void *x; char c; } __Pyx_pad_void_p; -#ifdef HAVE_LONG_LONG -typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong; -#endif -static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) { - switch (ch) { - case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; - case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short); - case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int); - case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long); -#ifdef HAVE_LONG_LONG - case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG); -#endif - case 'f': return sizeof(__Pyx_pad_float) - sizeof(float); - case 'd': return sizeof(__Pyx_pad_double) - sizeof(double); - case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double); - case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*); - default: - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; - } -} -static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { - switch (ch) { - case 'c': - return 'H'; - case 'b': case 'h': case 'i': - case 'l': case 'q': case 's': case 'p': - return 'I'; - case 'B': case 'H': case 'I': case 'L': case 'Q': - return 'U'; - case 'f': case 'd': case 'g': - return (is_complex ? 'C' : 'R'); - case 'O': - return 'O'; - case 'P': - return 'P'; - default: { - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; - } - } -} -static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { - if (ctx->head == NULL || ctx->head->field == &ctx->root) { - const char* expected; - const char* quote; - if (ctx->head == NULL) { - expected = "end"; - quote = ""; - } else { - expected = ctx->head->field->type->name; - quote = "'"; - } - PyErr_Format(PyExc_ValueError, - "Buffer dtype mismatch, expected %s%s%s but got %s", - quote, expected, quote, - __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); - } else { - __Pyx_StructField* field = ctx->head->field; - __Pyx_StructField* parent = (ctx->head - 1)->field; - PyErr_Format(PyExc_ValueError, - "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", - field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), - parent->type->name, field->name); - } -} -static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { - char group; - size_t size, offset, arraysize = 1; - if (ctx->enc_type == 0) return 0; - if (ctx->head->field->type->arraysize[0]) { - int i, ndim = 0; - if (ctx->enc_type == 's' || ctx->enc_type == 'p') { - ctx->is_valid_array = ctx->head->field->type->ndim == 1; - ndim = 1; - if (ctx->enc_count != ctx->head->field->type->arraysize[0]) { - PyErr_Format(PyExc_ValueError, - "Expected a dimension of size %zu, got %zu", - ctx->head->field->type->arraysize[0], ctx->enc_count); - return -1; - } - } - if (!ctx->is_valid_array) { - PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d", - ctx->head->field->type->ndim, ndim); - return -1; - } - for (i = 0; i < ctx->head->field->type->ndim; i++) { - arraysize *= ctx->head->field->type->arraysize[i]; - } - ctx->is_valid_array = 0; - ctx->enc_count = 1; - } - group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); - do { - __Pyx_StructField* field = ctx->head->field; - __Pyx_TypeInfo* type = field->type; - if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') { - size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); - } else { - size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); - } - if (ctx->enc_packmode == '@') { - size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); - size_t align_mod_offset; - if (align_at == 0) return -1; - align_mod_offset = ctx->fmt_offset % align_at; - if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; - if (ctx->struct_alignment == 0) - ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type, - ctx->is_complex); - } - if (type->size != size || type->typegroup != group) { - if (type->typegroup == 'C' && type->fields != NULL) { - size_t parent_offset = ctx->head->parent_offset + field->offset; - ++ctx->head; - ctx->head->field = type->fields; - ctx->head->parent_offset = parent_offset; - continue; - } - if ((type->typegroup == 'H' || group == 'H') && type->size == size) { - } else { - __Pyx_BufFmt_RaiseExpected(ctx); - return -1; - } - } - offset = ctx->head->parent_offset + field->offset; - if (ctx->fmt_offset != offset) { - PyErr_Format(PyExc_ValueError, - "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected", - (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset); - return -1; - } - ctx->fmt_offset += size; - if (arraysize) - ctx->fmt_offset += (arraysize - 1) * size; - --ctx->enc_count; /* Consume from buffer string */ - while (1) { - if (field == &ctx->root) { - ctx->head = NULL; - if (ctx->enc_count != 0) { - __Pyx_BufFmt_RaiseExpected(ctx); - return -1; - } - break; /* breaks both loops as ctx->enc_count == 0 */ - } - ctx->head->field = ++field; - if (field->type == NULL) { - --ctx->head; - field = ctx->head->field; - continue; - } else if (field->type->typegroup == 'S') { - size_t parent_offset = ctx->head->parent_offset + field->offset; - if (field->type->fields->type == NULL) continue; /* empty struct */ - field = field->type->fields; - ++ctx->head; - ctx->head->field = field; - ctx->head->parent_offset = parent_offset; - break; - } else { - break; - } - } - } while (ctx->enc_count); - ctx->enc_type = 0; - ctx->is_complex = 0; - return 0; -} -static CYTHON_INLINE PyObject * -__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp) -{ - const char *ts = *tsp; - int i = 0, number; - int ndim = ctx->head->field->type->ndim; -; - ++ts; - if (ctx->new_count != 1) { - PyErr_SetString(PyExc_ValueError, - "Cannot handle repeated arrays in format string"); - return NULL; - } - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - while (*ts && *ts != ')') { - switch (*ts) { - case ' ': case '\f': case '\r': case '\n': case '\t': case '\v': continue; - default: break; /* not a 'break' in the loop */ - } - number = __Pyx_BufFmt_ExpectNumber(&ts); - if (number == -1) return NULL; - if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) - return PyErr_Format(PyExc_ValueError, - "Expected a dimension of size %zu, got %d", - ctx->head->field->type->arraysize[i], number); - if (*ts != ',' && *ts != ')') - return PyErr_Format(PyExc_ValueError, - "Expected a comma in format string, got '%c'", *ts); - if (*ts == ',') ts++; - i++; - } - if (i != ndim) - return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", - ctx->head->field->type->ndim, i); - if (!*ts) { - PyErr_SetString(PyExc_ValueError, - "Unexpected end of format string, expected ')'"); - return NULL; - } - ctx->is_valid_array = 1; - ctx->new_count = 1; - *tsp = ++ts; - return Py_None; -} -static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { - int got_Z = 0; - while (1) { - switch(*ts) { - case 0: - if (ctx->enc_type != 0 && ctx->head == NULL) { - __Pyx_BufFmt_RaiseExpected(ctx); - return NULL; - } - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - if (ctx->head != NULL) { - __Pyx_BufFmt_RaiseExpected(ctx); - return NULL; - } - return ts; - case ' ': - case '\r': - case '\n': - ++ts; - break; - case '<': - if (!__Pyx_IsLittleEndian()) { - PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); - return NULL; - } - ctx->new_packmode = '='; - ++ts; - break; - case '>': - case '!': - if (__Pyx_IsLittleEndian()) { - PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); - return NULL; - } - ctx->new_packmode = '='; - ++ts; - break; - case '=': - case '@': - case '^': - ctx->new_packmode = *ts++; - break; - case 'T': /* substruct */ - { - const char* ts_after_sub; - size_t i, struct_count = ctx->new_count; - size_t struct_alignment = ctx->struct_alignment; - ctx->new_count = 1; - ++ts; - if (*ts != '{') { - PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); - return NULL; - } - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - ctx->enc_type = 0; /* Erase processed last struct element */ - ctx->enc_count = 0; - ctx->struct_alignment = 0; - ++ts; - ts_after_sub = ts; - for (i = 0; i != struct_count; ++i) { - ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); - if (!ts_after_sub) return NULL; - } - ts = ts_after_sub; - if (struct_alignment) ctx->struct_alignment = struct_alignment; - } - break; - case '}': /* end of substruct; either repeat or move on */ - { - size_t alignment = ctx->struct_alignment; - ++ts; - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - ctx->enc_type = 0; /* Erase processed last struct element */ - if (alignment && ctx->fmt_offset % alignment) { - ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment); - } - } - return ts; - case 'x': - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - ctx->fmt_offset += ctx->new_count; - ctx->new_count = 1; - ctx->enc_count = 0; - ctx->enc_type = 0; - ctx->enc_packmode = ctx->new_packmode; - ++ts; - break; - case 'Z': - got_Z = 1; - ++ts; - if (*ts != 'f' && *ts != 'd' && *ts != 'g') { - __Pyx_BufFmt_RaiseUnexpectedChar('Z'); - return NULL; - } - case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': - case 'l': case 'L': case 'q': case 'Q': - case 'f': case 'd': case 'g': - case 'O': case 'p': - if (ctx->enc_type == *ts && got_Z == ctx->is_complex && - ctx->enc_packmode == ctx->new_packmode) { - ctx->enc_count += ctx->new_count; - ctx->new_count = 1; - got_Z = 0; - ++ts; - break; - } - case 's': - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - ctx->enc_count = ctx->new_count; - ctx->enc_packmode = ctx->new_packmode; - ctx->enc_type = *ts; - ctx->is_complex = got_Z; - ++ts; - ctx->new_count = 1; - got_Z = 0; - break; - case ':': - ++ts; - while(*ts != ':') ++ts; - ++ts; - break; - case '(': - if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL; - break; - default: - { - int number = __Pyx_BufFmt_ExpectNumber(&ts); - if (number == -1) return NULL; - ctx->new_count = (size_t)number; - } - } - } -} -static CYTHON_INLINE void __Pyx_ZeroBuffer(Py_buffer* buf) { - buf->buf = NULL; - buf->obj = NULL; - buf->strides = __Pyx_zeros; - buf->shape = __Pyx_zeros; - buf->suboffsets = __Pyx_minusones; -} -static CYTHON_INLINE int __Pyx_GetBufferAndValidate( - Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, - int nd, int cast, __Pyx_BufFmt_StackElem* stack) -{ - if (obj == Py_None || obj == NULL) { - __Pyx_ZeroBuffer(buf); - return 0; - } - buf->buf = NULL; - if (__Pyx_GetBuffer(obj, buf, flags) == -1) goto fail; - if (buf->ndim != nd) { - PyErr_Format(PyExc_ValueError, - "Buffer has wrong number of dimensions (expected %d, got %d)", - nd, buf->ndim); - goto fail; - } - if (!cast) { - __Pyx_BufFmt_Context ctx; - __Pyx_BufFmt_Init(&ctx, stack, dtype); - if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; - } - if ((unsigned)buf->itemsize != dtype->size) { - PyErr_Format(PyExc_ValueError, - "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)", - buf->itemsize, (buf->itemsize > 1) ? "s" : "", - dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : ""); - goto fail; - } - if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; - return 0; -fail:; - __Pyx_ZeroBuffer(buf); - return -1; -} -static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) { - if (info->buf == NULL) return; - if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL; - __Pyx_ReleaseBuffer(info); -} - -static int -__Pyx_init_memviewslice(struct __pyx_memoryview_obj *memview, - int ndim, - __Pyx_memviewslice *memviewslice, - int memview_is_new_reference) -{ - __Pyx_RefNannyDeclarations - int i, retval=-1; - Py_buffer *buf = &memview->view; - __Pyx_RefNannySetupContext("init_memviewslice", 0); - if (!buf) { - PyErr_SetString(PyExc_ValueError, - "buf is NULL."); - goto fail; - } else if (memviewslice->memview || memviewslice->data) { - PyErr_SetString(PyExc_ValueError, - "memviewslice is already initialized!"); - goto fail; - } - if (buf->strides) { - for (i = 0; i < ndim; i++) { - memviewslice->strides[i] = buf->strides[i]; - } - } else { - Py_ssize_t stride = buf->itemsize; - for (i = ndim - 1; i >= 0; i--) { - memviewslice->strides[i] = stride; - stride *= buf->shape[i]; - } - } - for (i = 0; i < ndim; i++) { - memviewslice->shape[i] = buf->shape[i]; - if (buf->suboffsets) { - memviewslice->suboffsets[i] = buf->suboffsets[i]; - } else { - memviewslice->suboffsets[i] = -1; - } - } - memviewslice->memview = memview; - memviewslice->data = (char *)buf->buf; - if (__pyx_add_acquisition_count(memview) == 0 && !memview_is_new_reference) { - Py_INCREF(memview); - } - retval = 0; - goto no_fail; -fail: - memviewslice->memview = 0; - memviewslice->data = 0; - retval = -1; -no_fail: - __Pyx_RefNannyFinishContext(); - return retval; -} -static CYTHON_INLINE void __pyx_fatalerror(const char *fmt, ...) { - va_list vargs; - char msg[200]; - va_start(vargs, fmt); -#ifdef HAVE_STDARG_PROTOTYPES - va_start(vargs, fmt); -#else - va_start(vargs); -#endif - vsnprintf(msg, 200, fmt, vargs); - Py_FatalError(msg); - va_end(vargs); -} -static CYTHON_INLINE int -__pyx_add_acquisition_count_locked(__pyx_atomic_int *acquisition_count, - PyThread_type_lock lock) -{ - int result; - PyThread_acquire_lock(lock, 1); - result = (*acquisition_count)++; - PyThread_release_lock(lock); - return result; -} -static CYTHON_INLINE int -__pyx_sub_acquisition_count_locked(__pyx_atomic_int *acquisition_count, - PyThread_type_lock lock) -{ - int result; - PyThread_acquire_lock(lock, 1); - result = (*acquisition_count)--; - PyThread_release_lock(lock); - return result; -} -static CYTHON_INLINE void -__Pyx_INC_MEMVIEW(__Pyx_memviewslice *memslice, int have_gil, int lineno) -{ - int first_time; - struct __pyx_memoryview_obj *memview = memslice->memview; - if (!memview || (PyObject *) memview == Py_None) - return; /* allow uninitialized memoryview assignment */ - if (__pyx_get_slice_count(memview) < 0) - __pyx_fatalerror("Acquisition count is %d (line %d)", - __pyx_get_slice_count(memview), lineno); - first_time = __pyx_add_acquisition_count(memview) == 0; - if (first_time) { - if (have_gil) { - Py_INCREF((PyObject *) memview); - } else { - PyGILState_STATE _gilstate = PyGILState_Ensure(); - Py_INCREF((PyObject *) memview); - PyGILState_Release(_gilstate); - } - } -} -static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *memslice, - int have_gil, int lineno) { - int last_time; - struct __pyx_memoryview_obj *memview = memslice->memview; - if (!memview ) { - return; - } else if ((PyObject *) memview == Py_None) { - memslice->memview = NULL; - return; - } - if (__pyx_get_slice_count(memview) <= 0) - __pyx_fatalerror("Acquisition count is %d (line %d)", - __pyx_get_slice_count(memview), lineno); - last_time = __pyx_sub_acquisition_count(memview) == 1; - memslice->data = NULL; - if (last_time) { - if (have_gil) { - Py_CLEAR(memslice->memview); - } else { - PyGILState_STATE _gilstate = PyGILState_Ensure(); - Py_CLEAR(memslice->memview); - PyGILState_Release(_gilstate); - } - } else { - memslice->memview = NULL; - } -} - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_Restore(type, value, tb); -#endif -} -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(type, value, tb); -#endif -} - -static void __Pyx_RaiseArgumentTypeInvalid(const char* name, PyObject *obj, PyTypeObject *type) { - PyErr_Format(PyExc_TypeError, - "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", - name, type->tp_name, Py_TYPE(obj)->tp_name); -} -static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, - const char *name, int exact) -{ - if (unlikely(!type)) { - PyErr_SetString(PyExc_SystemError, "Missing type object"); - return 0; - } - if (none_allowed && obj == Py_None) return 1; - else if (exact) { - if (likely(Py_TYPE(obj) == type)) return 1; - #if PY_MAJOR_VERSION == 2 - else if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; - #endif - } - else { - if (likely(PyObject_TypeCheck(obj, type))) return 1; - } - __Pyx_RaiseArgumentTypeInvalid(name, obj, type); - return 0; -} - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; -#endif - result = (*call)(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - Py_LeaveRecursiveCall(); -#endif - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -#if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, - CYTHON_UNUSED PyObject *cause) { - Py_XINCREF(type); - if (!value || value == Py_None) - value = NULL; - else - Py_INCREF(value); - if (!tb || tb == Py_None) - tb = NULL; - else { - Py_INCREF(tb); - if (!PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; - } - } - #if PY_VERSION_HEX < 0x02050000 - if (PyClass_Check(type)) { - #else - if (PyType_Check(type)) { - #endif -#if CYTHON_COMPILING_IN_PYPY - if (!value) { - Py_INCREF(Py_None); - value = Py_None; - } -#endif - PyErr_NormalizeException(&type, &value, &tb); - } else { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - value = type; - #if PY_VERSION_HEX < 0x02050000 - if (PyInstance_Check(type)) { - type = (PyObject*) ((PyInstanceObject*)type)->in_class; - Py_INCREF(type); - } else { - type = 0; - PyErr_SetString(PyExc_TypeError, - "raise: exception must be an old-style class or instance"); - goto raise_error; - } - #else - type = (PyObject*) Py_TYPE(type); - Py_INCREF(type); - if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto raise_error; - } - #endif - } - __Pyx_ErrRestore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; -} -#else /* Python 3+ */ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - PyObject* owned_instance = NULL; - if (tb == Py_None) { - tb = 0; - } else if (tb && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto bad; - } - if (value == Py_None) - value = 0; - if (PyExceptionInstance_Check(type)) { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto bad; - } - value = type; - type = (PyObject*) Py_TYPE(value); - } else if (PyExceptionClass_Check(type)) { - PyObject *instance_class = NULL; - if (value && PyExceptionInstance_Check(value)) { - instance_class = (PyObject*) Py_TYPE(value); - if (instance_class != type) { - if (PyObject_IsSubclass(instance_class, type)) { - type = instance_class; - } else { - instance_class = NULL; - } - } - } - if (!instance_class) { - PyObject *args; - if (!value) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; - } else - args = PyTuple_Pack(1, value); - if (!args) - goto bad; - owned_instance = PyObject_Call(type, args, NULL); - Py_DECREF(args); - if (!owned_instance) - goto bad; - value = owned_instance; - if (!PyExceptionInstance_Check(value)) { - PyErr_Format(PyExc_TypeError, - "calling %R should have returned an instance of " - "BaseException, not %R", - type, Py_TYPE(value)); - goto bad; - } - } - } else { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto bad; - } -#if PY_VERSION_HEX >= 0x03030000 - if (cause) { -#else - if (cause && cause != Py_None) { -#endif - PyObject *fixed_cause; - if (cause == Py_None) { - fixed_cause = NULL; - } else if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); - if (fixed_cause == NULL) - goto bad; - } else if (PyExceptionInstance_Check(cause)) { - fixed_cause = cause; - Py_INCREF(fixed_cause); - } else { - PyErr_SetString(PyExc_TypeError, - "exception causes must derive from " - "BaseException"); - goto bad; - } - PyException_SetCause(value, fixed_cause); - } - PyErr_SetObject(type, value); - if (tb) { - PyThreadState *tstate = PyThreadState_GET(); - PyObject* tmp_tb = tstate->curexc_traceback; - if (tb != tmp_tb) { - Py_INCREF(tb); - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_tb); - } - } -bad: - Py_XDECREF(owned_instance); - return; -} -#endif - -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { - PyErr_Format(PyExc_ValueError, - "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); -} - -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { - PyErr_Format(PyExc_ValueError, - "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", - index, (index == 1) ? "" : "s"); -} - -static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); -} - -static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { - if (unlikely(!type)) { - PyErr_SetString(PyExc_SystemError, "Missing type object"); - return 0; - } - if (likely(PyObject_TypeCheck(obj, type))) - return 1; - PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", - Py_TYPE(obj)->tp_name, type->tp_name); - return 0; -} - -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result = memcmp(ps1, ps2, (size_t)length); - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { - return (equals == Py_NE); - } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { - return (equals == Py_NE); - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -#endif -} - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else -#if PY_MAJOR_VERSION < 3 - PyObject* owned_ref = NULL; -#endif - int s1_is_unicode, s2_is_unicode; - if (s1 == s2) { - goto return_eq; - } - s1_is_unicode = PyUnicode_CheckExact(s1); - s2_is_unicode = PyUnicode_CheckExact(s2); -#if PY_MAJOR_VERSION < 3 - if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { - owned_ref = PyUnicode_FromObject(s2); - if (unlikely(!owned_ref)) - return -1; - s2 = owned_ref; - s2_is_unicode = 1; - } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { - owned_ref = PyUnicode_FromObject(s1); - if (unlikely(!owned_ref)) - return -1; - s1 = owned_ref; - s1_is_unicode = 1; - } else if (((!s2_is_unicode) & (!s1_is_unicode))) { - return __Pyx_PyBytes_Equals(s1, s2, equals); - } -#endif - if (s1_is_unicode & s2_is_unicode) { - Py_ssize_t length; - int kind; - void *data1, *data2; - #if CYTHON_PEP393_ENABLED - if (unlikely(PyUnicode_READY(s1) < 0) || unlikely(PyUnicode_READY(s2) < 0)) - return -1; - #endif - length = __Pyx_PyUnicode_GET_LENGTH(s1); - if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { - goto return_ne; - } - kind = __Pyx_PyUnicode_KIND(s1); - if (kind != __Pyx_PyUnicode_KIND(s2)) { - goto return_ne; - } - data1 = __Pyx_PyUnicode_DATA(s1); - data2 = __Pyx_PyUnicode_DATA(s2); - if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { - goto return_ne; - } else if (length == 1) { - goto return_eq; - } else { - int result = memcmp(data1, data2, (size_t)(length * kind)); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & s2_is_unicode) { - goto return_ne; - } else if ((s2 == Py_None) & s1_is_unicode) { - goto return_ne; - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -return_eq: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ); -return_ne: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_NE); -#endif -} - -static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t a, Py_ssize_t b) { - Py_ssize_t q = a / b; - Py_ssize_t r = a - q*b; - q -= ((r != 0) & ((r ^ b) < 0)); - return q; -} - -static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { -#if CYTHON_COMPILING_IN_CPYTHON -#if PY_MAJOR_VERSION >= 3 - if (likely(PyUnicode_Check(n))) -#else - if (likely(PyString_Check(n))) -#endif - return __Pyx_PyObject_GetAttrStr(o, n); -#endif - return PyObject_GetAttr(o, n); -} - -static CYTHON_INLINE PyObject* __Pyx_decode_c_string( - const char* cstring, Py_ssize_t start, Py_ssize_t stop, - const char* encoding, const char* errors, - PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { - Py_ssize_t length; - if (unlikely((start < 0) | (stop < 0))) { - length = strlen(cstring); - if (start < 0) { - start += length; - if (start < 0) - start = 0; - } - if (stop < 0) - stop += length; - } - length = stop - start; - if (unlikely(length <= 0)) - return PyUnicode_FromUnicode(NULL, 0); - cstring += start; - if (decode_func) { - return decode_func(cstring, length, errors); - } else { - return PyUnicode_Decode(cstring, length, encoding, errors); - } -} - -static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->exc_type; - *value = tstate->exc_value; - *tb = tstate->exc_traceback; - Py_XINCREF(*type); - Py_XINCREF(*value); - Py_XINCREF(*tb); -#else - PyErr_GetExcInfo(type, value, tb); -#endif -} -static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = type; - tstate->exc_value = value; - tstate->exc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(type, value, tb); -#endif -} - -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) { - PyObject *local_type, *local_value, *local_tb; -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - local_type = tstate->curexc_type; - local_value = tstate->curexc_value; - local_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(&local_type, &local_value, &local_tb); -#endif - PyErr_NormalizeException(&local_type, &local_value, &local_tb); -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(tstate->curexc_type)) -#else - if (unlikely(PyErr_Occurred())) -#endif - goto bad; - #if PY_MAJOR_VERSION >= 3 - if (local_tb) { - if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) - goto bad; - } - #endif - Py_XINCREF(local_tb); - Py_XINCREF(local_type); - Py_XINCREF(local_value); - *type = local_type; - *value = local_value; - *tb = local_tb; -#if CYTHON_COMPILING_IN_CPYTHON - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = local_type; - tstate->exc_value = local_value; - tstate->exc_traceback = local_tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(local_type, local_value, local_tb); -#endif - return 0; -bad: - *type = 0; - *value = 0; - *tb = 0; - Py_XDECREF(local_type); - Py_XDECREF(local_value); - Py_XDECREF(local_tb); - return -1; -} - -static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = *type; - tstate->exc_value = *value; - tstate->exc_traceback = *tb; -#else - PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); - PyErr_SetExcInfo(*type, *value, *tb); -#endif - *type = tmp_type; - *value = tmp_value; - *tb = tmp_tb; -} - -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { - PyObject *r; - if (!j) return NULL; - r = PyObject_GetItem(o, j); - Py_DECREF(j); - return r; -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck) { -#if CYTHON_COMPILING_IN_CPYTHON - if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o); - if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) { - PyObject *r = PyList_GET_ITEM(o, i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck) { -#if CYTHON_COMPILING_IN_CPYTHON - if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck) { -#if CYTHON_COMPILING_IN_CPYTHON - if (is_list || PyList_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); - if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) { - PyObject *r = PyList_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } - else if (PyTuple_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } else { - PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; - if (likely(m && m->sq_item)) { - if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { - Py_ssize_t l = m->sq_length(o); - if (likely(l >= 0)) { - i += l; - } else { - if (PyErr_ExceptionMatches(PyExc_OverflowError)) - PyErr_Clear(); - else - return NULL; - } - } - return m->sq_item(o, i); - } - } -#else - if (is_list || PySequence_Check(o)) { - return PySequence_GetItem(o, i); - } -#endif - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -} - -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { - PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); -} - -static CYTHON_INLINE long __Pyx_div_long(long a, long b) { - long q = a / b; - long r = a - q*b; - q -= ((r != 0) & ((r ^ b) < 0)); - return q; -} - -static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno, - CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename, - int full_traceback) { - PyObject *old_exc, *old_val, *old_tb; - PyObject *ctx; - __Pyx_ErrFetch(&old_exc, &old_val, &old_tb); - if (full_traceback) { - Py_XINCREF(old_exc); - Py_XINCREF(old_val); - Py_XINCREF(old_tb); - __Pyx_ErrRestore(old_exc, old_val, old_tb); - PyErr_PrintEx(1); - } - #if PY_MAJOR_VERSION < 3 - ctx = PyString_FromString(name); - #else - ctx = PyUnicode_FromString(name); - #endif - __Pyx_ErrRestore(old_exc, old_val, old_tb); - if (!ctx) { - PyErr_WriteUnraisable(Py_None); - } else { - PyErr_WriteUnraisable(ctx); - Py_DECREF(ctx); - } -} - -static int __Pyx_SetVtable(PyObject *dict, void *vtable) { -#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0) - PyObject *ob = PyCapsule_New(vtable, 0, 0); -#else - PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); -#endif - if (!ob) - goto bad; - if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0) - goto bad; - Py_DECREF(ob); - return 0; -bad: - Py_XDECREF(ob); - return -1; -} - -#if PY_MAJOR_VERSION < 3 -static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { - #if PY_VERSION_HEX >= 0x02060000 - if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags); - #endif - if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pw_5numpy_7ndarray_1__getbuffer__(obj, view, flags); - if (PyObject_TypeCheck(obj, __pyx_array_type)) return __pyx_array_getbuffer(obj, view, flags); - if (PyObject_TypeCheck(obj, __pyx_memoryview_type)) return __pyx_memoryview_getbuffer(obj, view, flags); - #if PY_VERSION_HEX < 0x02060000 - if (obj->ob_type->tp_dict) { - PyObject *getbuffer_cobj = PyObject_GetItem( - obj->ob_type->tp_dict, __pyx_n_s_pyx_getbuffer); - if (getbuffer_cobj) { - getbufferproc func = (getbufferproc) PyCObject_AsVoidPtr(getbuffer_cobj); - Py_DECREF(getbuffer_cobj); - if (!func) - goto fail; - return func(obj, view, flags); - } else { - PyErr_Clear(); - } - } - #endif - PyErr_Format(PyExc_TypeError, "'%.200s' does not have the buffer interface", Py_TYPE(obj)->tp_name); -#if PY_VERSION_HEX < 0x02060000 -fail: -#endif - return -1; -} -static void __Pyx_ReleaseBuffer(Py_buffer *view) { - PyObject *obj = view->obj; - if (!obj) return; - #if PY_VERSION_HEX >= 0x02060000 - if (PyObject_CheckBuffer(obj)) { - PyBuffer_Release(view); - return; - } - #endif - if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) { __pyx_pw_5numpy_7ndarray_3__releasebuffer__(obj, view); return; } - #if PY_VERSION_HEX < 0x02060000 - if (obj->ob_type->tp_dict) { - PyObject *releasebuffer_cobj = PyObject_GetItem( - obj->ob_type->tp_dict, __pyx_n_s_pyx_releasebuffer); - if (releasebuffer_cobj) { - releasebufferproc func = (releasebufferproc) PyCObject_AsVoidPtr(releasebuffer_cobj); - Py_DECREF(releasebuffer_cobj); - if (!func) - goto fail; - func(obj, view); - return; - } else { - PyErr_Clear(); - } - } - #endif - goto nofail; -#if PY_VERSION_HEX < 0x02060000 -fail: -#endif - PyErr_WriteUnraisable(obj); -nofail: - Py_DECREF(obj); - view->obj = NULL; -} -#endif /* PY_MAJOR_VERSION < 3 */ - - - static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value) { - const unsigned long neg_one = (unsigned long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(unsigned long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(unsigned long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(unsigned long) <= sizeof(unsigned long long)) { - return PyLong_FromUnsignedLongLong((unsigned long long) value); - } - } else { - if (sizeof(unsigned long) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(unsigned long) <= sizeof(long long)) { - return PyLong_FromLongLong((long long) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(unsigned long), - little, !is_unsigned); - } -} - -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func) \ - { \ - func_type value = func(x); \ - if (sizeof(target_type) < sizeof(func_type)) { \ - if (unlikely(value != (func_type) (target_type) value)) { \ - func_type zero = 0; \ - PyErr_SetString(PyExc_OverflowError, \ - (is_unsigned && unlikely(value < zero)) ? \ - "can't convert negative value to " #target_type : \ - "value too large to convert to " #target_type); \ - return (target_type) -1; \ - } \ - } \ - return (target_type) value; \ - } - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *x) { - const unsigned long neg_one = (unsigned long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(unsigned long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(unsigned long, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned long"); - return (unsigned long) -1; - } - return (unsigned long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(unsigned long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (unsigned long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned long"); - return (unsigned long) -1; - } - if (sizeof(unsigned long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(unsigned long) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(unsigned long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(unsigned long) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(unsigned long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(unsigned long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(unsigned long, long, PyLong_AsLong) - } else if (sizeof(unsigned long) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(unsigned long, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - unsigned long val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (unsigned long) -1; - } - } else { - unsigned long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (unsigned long) -1; - val = __Pyx_PyInt_As_unsigned_long(tmp); - Py_DECREF(tmp); - return val; - } -} - -#if CYTHON_CCOMPLEX - #ifdef __cplusplus - static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { - return ::std::complex< float >(x, y); - } - #else - static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { - return x + y*(__pyx_t_float_complex)_Complex_I; - } - #endif -#else - static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { - __pyx_t_float_complex z; - z.real = x; - z.imag = y; - return z; - } -#endif - -#if CYTHON_CCOMPLEX -#else - static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) { - return (a.real == b.real) && (a.imag == b.imag); - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; - z.real = a.real + b.real; - z.imag = a.imag + b.imag; - return z; - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; - z.real = a.real - b.real; - z.imag = a.imag - b.imag; - return z; - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; - z.real = a.real * b.real - a.imag * b.imag; - z.imag = a.real * b.imag + a.imag * b.real; - return z; - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; - float denom = b.real * b.real + b.imag * b.imag; - z.real = (a.real * b.real + a.imag * b.imag) / denom; - z.imag = (a.imag * b.real - a.real * b.imag) / denom; - return z; - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) { - __pyx_t_float_complex z; - z.real = -a.real; - z.imag = -a.imag; - return z; - } - static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) { - return (a.real == 0) && (a.imag == 0); - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) { - __pyx_t_float_complex z; - z.real = a.real; - z.imag = -a.imag; - return z; - } - #if 1 - static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) { - #if !defined(HAVE_HYPOT) || defined(_MSC_VER) - return sqrtf(z.real*z.real + z.imag*z.imag); - #else - return hypotf(z.real, z.imag); - #endif - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; - float r, lnr, theta, z_r, z_theta; - if (b.imag == 0 && b.real == (int)b.real) { - if (b.real < 0) { - float denom = a.real * a.real + a.imag * a.imag; - a.real = a.real / denom; - a.imag = -a.imag / denom; - b.real = -b.real; - } - switch ((int)b.real) { - case 0: - z.real = 1; - z.imag = 0; - return z; - case 1: - return a; - case 2: - z = __Pyx_c_prodf(a, a); - return __Pyx_c_prodf(a, a); - case 3: - z = __Pyx_c_prodf(a, a); - return __Pyx_c_prodf(z, a); - case 4: - z = __Pyx_c_prodf(a, a); - return __Pyx_c_prodf(z, z); - } - } - if (a.imag == 0) { - if (a.real == 0) { - return a; - } - r = a.real; - theta = 0; - } else { - r = __Pyx_c_absf(a); - theta = atan2f(a.imag, a.real); - } - lnr = logf(r); - z_r = expf(lnr * b.real - theta * b.imag); - z_theta = theta * b.real + lnr * b.imag; - z.real = z_r * cosf(z_theta); - z.imag = z_r * sinf(z_theta); - return z; - } - #endif -#endif - -#if CYTHON_CCOMPLEX - #ifdef __cplusplus - static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { - return ::std::complex< double >(x, y); - } - #else - static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { - return x + y*(__pyx_t_double_complex)_Complex_I; - } - #endif -#else - static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { - __pyx_t_double_complex z; - z.real = x; - z.imag = y; - return z; - } -#endif - -#if CYTHON_CCOMPLEX -#else - static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) { - return (a.real == b.real) && (a.imag == b.imag); - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - z.real = a.real + b.real; - z.imag = a.imag + b.imag; - return z; - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - z.real = a.real - b.real; - z.imag = a.imag - b.imag; - return z; - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - z.real = a.real * b.real - a.imag * b.imag; - z.imag = a.real * b.imag + a.imag * b.real; - return z; - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - double denom = b.real * b.real + b.imag * b.imag; - z.real = (a.real * b.real + a.imag * b.imag) / denom; - z.imag = (a.imag * b.real - a.real * b.imag) / denom; - return z; - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) { - __pyx_t_double_complex z; - z.real = -a.real; - z.imag = -a.imag; - return z; - } - static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) { - return (a.real == 0) && (a.imag == 0); - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) { - __pyx_t_double_complex z; - z.real = a.real; - z.imag = -a.imag; - return z; - } - #if 1 - static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) { - #if !defined(HAVE_HYPOT) || defined(_MSC_VER) - return sqrt(z.real*z.real + z.imag*z.imag); - #else - return hypot(z.real, z.imag); - #endif - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - double r, lnr, theta, z_r, z_theta; - if (b.imag == 0 && b.real == (int)b.real) { - if (b.real < 0) { - double denom = a.real * a.real + a.imag * a.imag; - a.real = a.real / denom; - a.imag = -a.imag / denom; - b.real = -b.real; - } - switch ((int)b.real) { - case 0: - z.real = 1; - z.imag = 0; - return z; - case 1: - return a; - case 2: - z = __Pyx_c_prod(a, a); - return __Pyx_c_prod(a, a); - case 3: - z = __Pyx_c_prod(a, a); - return __Pyx_c_prod(z, a); - case 4: - z = __Pyx_c_prod(a, a); - return __Pyx_c_prod(z, z); - } - } - if (a.imag == 0) { - if (a.real == 0) { - return a; - } - r = a.real; - theta = 0; - } else { - r = __Pyx_c_abs(a); - theta = atan2(a.imag, a.real); - } - lnr = log(r); - z_r = exp(lnr * b.real - theta * b.imag); - z_theta = theta * b.real + lnr * b.imag; - z.real = z_r * cos(z_theta); - z.imag = z_r * sin(z_theta); - return z; - } - #endif -#endif - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { - const int neg_one = (int) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(int) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(int) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(int) <= sizeof(unsigned long long)) { - return PyLong_FromUnsignedLongLong((unsigned long long) value); - } - } else { - if (sizeof(int) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(int) <= sizeof(long long)) { - return PyLong_FromLongLong((long long) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(int), - little, !is_unsigned); - } -} - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(int) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(int) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong) - } else if (sizeof(int) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -} - -static int -__pyx_memviewslice_is_contig(const __Pyx_memviewslice *mvs, - char order, int ndim) -{ - int i, index, step, start; - Py_ssize_t itemsize = mvs->memview->view.itemsize; - if (order == 'F') { - step = 1; - start = 0; - } else { - step = -1; - start = ndim - 1; - } - for (i = 0; i < ndim; i++) { - index = start + step * i; - if (mvs->suboffsets[index] >= 0 || mvs->strides[index] != itemsize) - return 0; - itemsize *= mvs->shape[index]; - } - return 1; -} - -static void -__pyx_get_array_memory_extents(__Pyx_memviewslice *slice, - void **out_start, void **out_end, - int ndim, size_t itemsize) -{ - char *start, *end; - int i; - start = end = slice->data; - for (i = 0; i < ndim; i++) { - Py_ssize_t stride = slice->strides[i]; - Py_ssize_t extent = slice->shape[i]; - if (extent == 0) { - *out_start = *out_end = start; - return; - } else { - if (stride > 0) - end += stride * (extent - 1); - else - start += stride * (extent - 1); - } - } - *out_start = start; - *out_end = end + itemsize; -} -static int -__pyx_slices_overlap(__Pyx_memviewslice *slice1, - __Pyx_memviewslice *slice2, - int ndim, size_t itemsize) -{ - void *start1, *end1, *start2, *end2; - __pyx_get_array_memory_extents(slice1, &start1, &end1, ndim, itemsize); - __pyx_get_array_memory_extents(slice2, &start2, &end2, ndim, itemsize); - return (start1 < end2) && (start2 < end1); -} - -static __Pyx_memviewslice -__pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, - const char *mode, int ndim, - size_t sizeof_dtype, int contig_flag, - int dtype_is_object) -{ - __Pyx_RefNannyDeclarations - int i; - __Pyx_memviewslice new_mvs = { 0, 0, { 0 }, { 0 }, { 0 } }; - struct __pyx_memoryview_obj *from_memview = from_mvs->memview; - Py_buffer *buf = &from_memview->view; - PyObject *shape_tuple = NULL; - PyObject *temp_int = NULL; - struct __pyx_array_obj *array_obj = NULL; - struct __pyx_memoryview_obj *memview_obj = NULL; - __Pyx_RefNannySetupContext("__pyx_memoryview_copy_new_contig", 0); - for (i = 0; i < ndim; i++) { - if (from_mvs->suboffsets[i] >= 0) { - PyErr_Format(PyExc_ValueError, "Cannot copy memoryview slice with " - "indirect dimensions (axis %d)", i); - goto fail; - } - } - shape_tuple = PyTuple_New(ndim); - if (unlikely(!shape_tuple)) { - goto fail; - } - __Pyx_GOTREF(shape_tuple); - for(i = 0; i < ndim; i++) { - temp_int = PyInt_FromSsize_t(from_mvs->shape[i]); - if(unlikely(!temp_int)) { - goto fail; - } else { - PyTuple_SET_ITEM(shape_tuple, i, temp_int); - temp_int = NULL; - } - } - array_obj = __pyx_array_new(shape_tuple, sizeof_dtype, buf->format, (char *) mode, NULL); - if (unlikely(!array_obj)) { - goto fail; - } - __Pyx_GOTREF(array_obj); - memview_obj = (struct __pyx_memoryview_obj *) __pyx_memoryview_new( - (PyObject *) array_obj, contig_flag, - dtype_is_object, - from_mvs->memview->typeinfo); - if (unlikely(!memview_obj)) - goto fail; - if (unlikely(__Pyx_init_memviewslice(memview_obj, ndim, &new_mvs, 1) < 0)) - goto fail; - if (unlikely(__pyx_memoryview_copy_contents(*from_mvs, new_mvs, ndim, ndim, - dtype_is_object) < 0)) - goto fail; - goto no_fail; -fail: - __Pyx_XDECREF(new_mvs.memview); - new_mvs.memview = NULL; - new_mvs.data = NULL; -no_fail: - __Pyx_XDECREF(shape_tuple); - __Pyx_XDECREF(temp_int); - __Pyx_XDECREF(array_obj); - __Pyx_RefNannyFinishContext(); - return new_mvs; -} - -static CYTHON_INLINE PyObject * -__pyx_capsule_create(void *p, CYTHON_UNUSED const char *sig) -{ - PyObject *cobj; -#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION == 0) - cobj = PyCapsule_New(p, sig, NULL); -#else - cobj = PyCObject_FromVoidPtr(p, NULL); -#endif - return cobj; -} - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - #if PY_VERSION_HEX >= 0x02050000 - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if (strchr(__Pyx_MODULE_NAME, '.')) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(1); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - #endif - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; /* try absolute import on failure */ - } - #endif - if (!module) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } - #else - if (level>0) { - PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); - goto bad; - } - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, NULL); - #endif -bad: - #if PY_VERSION_HEX < 0x03030000 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(long) <= sizeof(unsigned long long)) { - return PyLong_FromUnsignedLongLong((unsigned long long) value); - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(long long)) { - return PyLong_FromLongLong((long long) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *x) { - const char neg_one = (char) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(char) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(char, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to char"); - return (char) -1; - } - return (char) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(char)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (char) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to char"); - return (char) -1; - } - if (sizeof(char) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(char, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(char) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(char, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(char)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(char) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(char) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(char) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(char, long, PyLong_AsLong) - } else if (sizeof(char) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(char, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - char val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (char) -1; - } - } else { - char val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (char) -1; - val = __Pyx_PyInt_As_char(tmp); - Py_DECREF(tmp); - return val; - } -} - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(long) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong) - } else if (sizeof(long) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -} - -static int -__pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b) -{ - int i; - if (!a || !b) - return 0; - if (a == b) - return 1; - if (a->size != b->size || a->typegroup != b->typegroup || - a->is_unsigned != b->is_unsigned || a->ndim != b->ndim) { - if (a->typegroup == 'H' || b->typegroup == 'H') { - return a->size == b->size; - } else { - return 0; - } - } - if (a->ndim) { - for (i = 0; i < a->ndim; i++) - if (a->arraysize[i] != b->arraysize[i]) - return 0; - } - if (a->typegroup == 'S') { - if (a->flags != b->flags) - return 0; - if (a->fields || b->fields) { - if (!(a->fields && b->fields)) - return 0; - for (i = 0; a->fields[i].type && b->fields[i].type; i++) { - __Pyx_StructField *field_a = a->fields + i; - __Pyx_StructField *field_b = b->fields + i; - if (field_a->offset != field_b->offset || - !__pyx_typeinfo_cmp(field_a->type, field_b->type)) - return 0; - } - return !a->fields[i].type && !b->fields[i].type; - } - } - return 1; -} - -static int -__pyx_check_strides(Py_buffer *buf, int dim, int ndim, int spec) -{ - if (buf->shape[dim] <= 1) - return 1; - if (buf->strides) { - if (spec & __Pyx_MEMVIEW_CONTIG) { - if (spec & (__Pyx_MEMVIEW_PTR|__Pyx_MEMVIEW_FULL)) { - if (buf->strides[dim] != sizeof(void *)) { - PyErr_Format(PyExc_ValueError, - "Buffer is not indirectly contiguous " - "in dimension %d.", dim); - goto fail; - } - } else if (buf->strides[dim] != buf->itemsize) { - PyErr_SetString(PyExc_ValueError, - "Buffer and memoryview are not contiguous " - "in the same dimension."); - goto fail; - } - } - if (spec & __Pyx_MEMVIEW_FOLLOW) { - Py_ssize_t stride = buf->strides[dim]; - if (stride < 0) - stride = -stride; - if (stride < buf->itemsize) { - PyErr_SetString(PyExc_ValueError, - "Buffer and memoryview are not contiguous " - "in the same dimension."); - goto fail; - } - } - } else { - if (spec & __Pyx_MEMVIEW_CONTIG && dim != ndim - 1) { - PyErr_Format(PyExc_ValueError, - "C-contiguous buffer is not contiguous in " - "dimension %d", dim); - goto fail; - } else if (spec & (__Pyx_MEMVIEW_PTR)) { - PyErr_Format(PyExc_ValueError, - "C-contiguous buffer is not indirect in " - "dimension %d", dim); - goto fail; - } else if (buf->suboffsets) { - PyErr_SetString(PyExc_ValueError, - "Buffer exposes suboffsets but no strides"); - goto fail; - } - } - return 1; -fail: - return 0; -} -static int -__pyx_check_suboffsets(Py_buffer *buf, int dim, CYTHON_UNUSED int ndim, int spec) -{ - if (spec & __Pyx_MEMVIEW_DIRECT) { - if (buf->suboffsets && buf->suboffsets[dim] >= 0) { - PyErr_Format(PyExc_ValueError, - "Buffer not compatible with direct access " - "in dimension %d.", dim); - goto fail; - } - } - if (spec & __Pyx_MEMVIEW_PTR) { - if (!buf->suboffsets || (buf->suboffsets && buf->suboffsets[dim] < 0)) { - PyErr_Format(PyExc_ValueError, - "Buffer is not indirectly accessible " - "in dimension %d.", dim); - goto fail; - } - } - return 1; -fail: - return 0; -} -static int -__pyx_verify_contig(Py_buffer *buf, int ndim, int c_or_f_flag) -{ - int i; - if (c_or_f_flag & __Pyx_IS_F_CONTIG) { - Py_ssize_t stride = 1; - for (i = 0; i < ndim; i++) { - if (stride * buf->itemsize != buf->strides[i] && - buf->shape[i] > 1) - { - PyErr_SetString(PyExc_ValueError, - "Buffer not fortran contiguous."); - goto fail; - } - stride = stride * buf->shape[i]; - } - } else if (c_or_f_flag & __Pyx_IS_C_CONTIG) { - Py_ssize_t stride = 1; - for (i = ndim - 1; i >- 1; i--) { - if (stride * buf->itemsize != buf->strides[i] && - buf->shape[i] > 1) { - PyErr_SetString(PyExc_ValueError, - "Buffer not C contiguous."); - goto fail; - } - stride = stride * buf->shape[i]; - } - } - return 1; -fail: - return 0; -} -static int __Pyx_ValidateAndInit_memviewslice( - int *axes_specs, - int c_or_f_flag, - int buf_flags, - int ndim, - __Pyx_TypeInfo *dtype, - __Pyx_BufFmt_StackElem stack[], - __Pyx_memviewslice *memviewslice, - PyObject *original_obj) -{ - struct __pyx_memoryview_obj *memview, *new_memview; - __Pyx_RefNannyDeclarations - Py_buffer *buf; - int i, spec = 0, retval = -1; - __Pyx_BufFmt_Context ctx; - int from_memoryview = __pyx_memoryview_check(original_obj); - __Pyx_RefNannySetupContext("ValidateAndInit_memviewslice", 0); - if (from_memoryview && __pyx_typeinfo_cmp(dtype, ((struct __pyx_memoryview_obj *) - original_obj)->typeinfo)) { - memview = (struct __pyx_memoryview_obj *) original_obj; - new_memview = NULL; - } else { - memview = (struct __pyx_memoryview_obj *) __pyx_memoryview_new( - original_obj, buf_flags, 0, dtype); - new_memview = memview; - if (unlikely(!memview)) - goto fail; - } - buf = &memview->view; - if (buf->ndim != ndim) { - PyErr_Format(PyExc_ValueError, - "Buffer has wrong number of dimensions (expected %d, got %d)", - ndim, buf->ndim); - goto fail; - } - if (new_memview) { - __Pyx_BufFmt_Init(&ctx, stack, dtype); - if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; - } - if ((unsigned) buf->itemsize != dtype->size) { - PyErr_Format(PyExc_ValueError, - "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "u byte%s) " - "does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "u byte%s)", - buf->itemsize, - (buf->itemsize > 1) ? "s" : "", - dtype->name, - dtype->size, - (dtype->size > 1) ? "s" : ""); - goto fail; - } - for (i = 0; i < ndim; i++) { - spec = axes_specs[i]; - if (!__pyx_check_strides(buf, i, ndim, spec)) - goto fail; - if (!__pyx_check_suboffsets(buf, i, ndim, spec)) - goto fail; - } - if (buf->strides && !__pyx_verify_contig(buf, ndim, c_or_f_flag)) - goto fail; - if (unlikely(__Pyx_init_memviewslice(memview, ndim, memviewslice, - new_memview != NULL) == -1)) { - goto fail; - } - retval = 0; - goto no_fail; -fail: - Py_XDECREF(new_memview); - retval = -1; -no_fail: - __Pyx_RefNannyFinishContext(); - return retval; -} - -static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_long(PyObject *obj) { - __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_BufFmt_StackElem stack[1]; - int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; - int retcode; - if (obj == Py_None) { - result.memview = (struct __pyx_memoryview_obj *) Py_None; - return result; - } - retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, - PyBUF_RECORDS, 1, - &__Pyx_TypeInfo_long, stack, - &result, obj); - if (unlikely(retcode == -1)) - goto __pyx_fail; - return result; -__pyx_fail: - result.memview = NULL; - result.data = NULL; - return result; -} - -static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { - char message[200]; - PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); - #if PY_VERSION_HEX < 0x02050000 - return PyErr_Warn(NULL, message); - #else - return PyErr_WarnEx(NULL, message, 1); - #endif - } - return 0; -} - -#ifndef __PYX_HAVE_RT_ImportModule -#define __PYX_HAVE_RT_ImportModule -static PyObject *__Pyx_ImportModule(const char *name) { - PyObject *py_name = 0; - PyObject *py_module = 0; - py_name = __Pyx_PyIdentifier_FromString(name); - if (!py_name) - goto bad; - py_module = PyImport_Import(py_name); - Py_DECREF(py_name); - return py_module; -bad: - Py_XDECREF(py_name); - return 0; -} -#endif - -#ifndef __PYX_HAVE_RT_ImportType -#define __PYX_HAVE_RT_ImportType -static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, - size_t size, int strict) -{ - PyObject *py_module = 0; - PyObject *result = 0; - PyObject *py_name = 0; - char warning[200]; - Py_ssize_t basicsize; -#ifdef Py_LIMITED_API - PyObject *py_basicsize; -#endif - py_module = __Pyx_ImportModule(module_name); - if (!py_module) - goto bad; - py_name = __Pyx_PyIdentifier_FromString(class_name); - if (!py_name) - goto bad; - result = PyObject_GetAttr(py_module, py_name); - Py_DECREF(py_name); - py_name = 0; - Py_DECREF(py_module); - py_module = 0; - if (!result) - goto bad; - if (!PyType_Check(result)) { - PyErr_Format(PyExc_TypeError, - "%.200s.%.200s is not a type object", - module_name, class_name); - goto bad; - } -#ifndef Py_LIMITED_API - basicsize = ((PyTypeObject *)result)->tp_basicsize; -#else - py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); - if (!py_basicsize) - goto bad; - basicsize = PyLong_AsSsize_t(py_basicsize); - Py_DECREF(py_basicsize); - py_basicsize = 0; - if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) - goto bad; -#endif - if (!strict && (size_t)basicsize > size) { - PyOS_snprintf(warning, sizeof(warning), - "%s.%s size changed, may indicate binary incompatibility", - module_name, class_name); - #if PY_VERSION_HEX < 0x02050000 - if (PyErr_Warn(NULL, warning) < 0) goto bad; - #else - if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; - #endif - } - else if ((size_t)basicsize != size) { - PyErr_Format(PyExc_ValueError, - "%.200s.%.200s has the wrong size, try recompiling", - module_name, class_name); - goto bad; - } - return (PyTypeObject *)result; -bad: - Py_XDECREF(py_module); - Py_XDECREF(result); - return NULL; -} -#endif - -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = (start + end) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, /*int argcount,*/ - 0, /*int kwonlyargcount,*/ - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, /*int firstlineno,*/ - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_globals = 0; - PyFrameObject *py_frame = 0; - py_code = __pyx_find_code_object(c_line ? c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? c_line : py_line, py_code); - } - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - py_frame = PyFrame_New( - PyThreadState_GET(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = py_line; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else /* Python 3+ has unicode identifiers */ - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { -#if PY_VERSION_HEX < 0x03030000 - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -#else /* PY_VERSION_HEX < 0x03030000 */ - if (PyUnicode_READY(o) == -1) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (PyUnicode_IS_ASCII(o)) { - *length = PyUnicode_GET_LENGTH(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ - return PyUnicode_AsUTF8AndSize(o, length); -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ -#endif /* PY_VERSION_HEX < 0x03030000 */ - } else -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ -#if !CYTHON_COMPILING_IN_PYPY -#if PY_VERSION_HEX >= 0x02060000 - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { - PyNumberMethods *m; - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (PyInt_Check(x) || PyLong_Check(x)) -#else - if (PyLong_Check(x)) -#endif - return Py_INCREF(x), x; - m = Py_TYPE(x)->tp_as_number; -#if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = PyNumber_Long(x); - } -#else - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Long(x); - } -#endif - if (res) { -#if PY_MAJOR_VERSION < 3 - if (!PyInt_Check(res) && !PyLong_Check(res)) { -#else - if (!PyLong_Check(res)) { -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - name, name, Py_TYPE(res)->tp_name); - Py_DECREF(res); - return NULL; - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) - return PyInt_AS_LONG(b); -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - switch (Py_SIZE(b)) { - case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0]; - case 0: return 0; - case 1: return ((PyLongObject*)b)->ob_digit[0]; - } - #endif - #endif - #if PY_VERSION_HEX < 0x02060000 - return PyInt_AsSsize_t(b); - #else - return PyLong_AsSsize_t(b); - #endif - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { -#if PY_VERSION_HEX < 0x02050000 - if (ival <= LONG_MAX) - return PyInt_FromLong((long)ival); - else { - unsigned char *bytes = (unsigned char *) &ival; - int one = 1; int little = (int)*(unsigned char*)&one; - return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); - } -#else - return PyInt_FromSize_t(ival); -#endif -} - - -#endif /* Py_PYTHON_H */ diff --git a/tutorials/cython_bubblesort_nomagic.pyx b/tutorials/cython_bubblesort_nomagic.pyx deleted file mode 100644 index 0d35766..0000000 --- a/tutorials/cython_bubblesort_nomagic.pyx +++ /dev/null @@ -1,21 +0,0 @@ - -cimport numpy as np -cimport cython -@cython.boundscheck(False) -@cython.wraparound(False) -cpdef cython_bubblesort_nomagic(np.ndarray[long, ndim=1] inp_ary): - """ The Cython implementation of Bubblesort with NumPy memoryview.""" - cdef unsigned long length, i, swapped, ele, temp - cdef long[:] np_ary = inp_ary - length = np_ary.shape[0] - swapped = 1 - for i in xrange(0, length): - if swapped: - swapped = 0 - for ele in xrange(0, length-i-1): - if np_ary[ele] > np_ary[ele + 1]: - temp = np_ary[ele + 1] - np_ary[ele + 1] = np_ary[ele] - np_ary[ele] = temp - swapped = 1 - return inp_ary \ No newline at end of file diff --git a/tutorials/example.csv b/tutorials/example.csv deleted file mode 100644 index 65329b8..0000000 --- a/tutorials/example.csv +++ /dev/null @@ -1,3 +0,0 @@ -1,2,3,4 -5,6,,8 -10,11,12, \ No newline at end of file diff --git a/tutorials/hello_world.py b/tutorials/hello_world.py deleted file mode 100644 index 498b2df..0000000 --- a/tutorials/hello_world.py +++ /dev/null @@ -1,3 +0,0 @@ -def hello_world(): - """This is a hello world example function.""" - print('Hello, World!') \ No newline at end of file diff --git a/tutorials/setup.py b/tutorials/setup.py deleted file mode 100644 index c92789a..0000000 --- a/tutorials/setup.py +++ /dev/null @@ -1,14 +0,0 @@ - -import numpy as np -from distutils.core import setup -from distutils.extension import Extension -from Cython.Distutils import build_ext - -setup( - cmdclass = {'build_ext': build_ext}, - ext_modules = [ - Extension("cython_bubblesort_nomagic", - ["cython_bubblesort_nomagic.pyx"], - include_dirs=[np.get_include()]) - ] -) \ No newline at end of file diff --git a/tutorials/standardized_data.pkl b/tutorials/standardized_data.pkl deleted file mode 100644 index b81fb23611e60d8c1b95cd9bd42f541a726a2887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20263 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[More information](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/ipython_magic/watermark.ipynb) about the `watermark` magic command extension." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Things in Pandas I Wish I'd Had Known Earlier" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is just a small but growing collection of pandas snippets that I find occasionally and particularly useful -- consider it as my personal notebook. Suggestions, tips, and contributions are very, very welcome!" + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Sections" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- [Loading Some Example Data](#Loading-Some-Example-Data)\n", + "- [Renaming Columns](#Renaming-Columns)\n", + "- [Applying Computations Rows-wise](#Applying-Computations-Rows-wise)\n", + "- [Missing Values aka NaNs](#Missing-Values-aka-NaNs)\n", + " - [Selecting NaN Rows](#Selecting-NaN-Rows)\n", + " - [Dropping NaN Rows](#Dropping-NaN-Rows)\n", + "- [Appending Rows to a DataFrame](#Appending-Rows-to-a-DataFrame)\n", + "- [Sorting and Reindexing DataFrames](#Sorting-and-Reindexing-DataFrames)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Loading Some Example Data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I am heavily into sports prediction (via a machine learning approach) these days. So, let us use a (very) small subset of the soccer data that I am just working with." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import pandas as pd\n", + "\n", + "df = pd.read_csv('https://raw.githubusercontent.com/rasbt/python_reference/master/Data/some_soccer_data.csv')\n", + "df" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    PLAYERSALARYGPGASOTPPGP
    0 Sergio Ag\u00fcero\\n Forward \u2014 Manchester City $19.2m 16 14 3 34 13.12 209.98
    1 Eden Hazard\\n Midfield \u2014 Chelsea $18.9m 21 8 4 17 13.05 274.04
    2 Alexis S\u00e1nchez\\n Forward \u2014 Arsenal $17.6mNaN 12 7 29 11.19 223.86
    3 Yaya Tour\u00e9\\n Midfield \u2014 Manchester City $16.6m 18 7 1 19 10.99 197.91
    4 \u00c1ngel Di Mar\u00eda\\n Midfield \u2014 Manchester United $15.0m 13 3NaN 13 10.17 132.23
    5 Santiago Cazorla\\n Midfield \u2014 Arsenal $14.8m 20 4NaN 20 9.97 NaN
    6 David Silva\\n Midfield \u2014 Manchester City $14.3m 15 6 2 11 10.35 155.26
    7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 10 10.47 209.49
    8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 20 7.02 147.43
    9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 11 7.50 150.01
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 2, + "text": [ + " PLAYER SALARY GP G A SOT \\\n", + "0 Sergio Ag\u00fcero\\n Forward \u2014 Manchester City $19.2m 16 14 3 34 \n", + "1 Eden Hazard\\n Midfield \u2014 Chelsea $18.9m 21 8 4 17 \n", + "2 Alexis S\u00e1nchez\\n Forward \u2014 Arsenal $17.6m NaN 12 7 29 \n", + "3 Yaya Tour\u00e9\\n Midfield \u2014 Manchester City $16.6m 18 7 1 19 \n", + "4 \u00c1ngel Di Mar\u00eda\\n Midfield \u2014 Manchester United $15.0m 13 3 NaN 13 \n", + "5 Santiago Cazorla\\n Midfield \u2014 Arsenal $14.8m 20 4 NaN 20 \n", + "6 David Silva\\n Midfield \u2014 Manchester City $14.3m 15 6 2 11 \n", + "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 10 \n", + "8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 20 \n", + "9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 11 \n", + "\n", + " PPG P \n", + "0 13.12 209.98 \n", + "1 13.05 274.04 \n", + "2 11.19 223.86 \n", + "3 10.99 197.91 \n", + "4 10.17 132.23 \n", + "5 9.97 NaN \n", + "6 10.35 155.26 \n", + "7 10.47 209.49 \n", + "8 7.02 147.43 \n", + "9 7.50 150.01 " + ] + } + ], + "prompt_number": 2 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Renaming Columns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Converting column names to lowercase\n", + "\n", + "df.columns = [c.lower() for c in df.columns]\n", + "df.tail()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygpgasotppgp
    5 Santiago Cazorla\\n Midfield \u2014 Arsenal $14.8m 20 4NaN 20 9.97 NaN
    6 David Silva\\n Midfield \u2014 Manchester City $14.3m 15 6 2 11 10.35 155.26
    7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 10 10.47 209.49
    8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 20 7.02 147.43
    9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 11 7.50 150.01
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 3, + "text": [ + " player salary gp g a sot ppg \\\n", + "5 Santiago Cazorla\\n Midfield \u2014 Arsenal $14.8m 20 4 NaN 20 9.97 \n", + "6 David Silva\\n Midfield \u2014 Manchester City $14.3m 15 6 2 11 10.35 \n", + "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 10 10.47 \n", + "8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 20 7.02 \n", + "9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 11 7.50 \n", + "\n", + " p \n", + "5 NaN \n", + "6 155.26 \n", + "7 209.49 \n", + "8 147.43 \n", + "9 150.01 " + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Renaming particular columns\n", + "\n", + "df = df.rename(columns={'p': 'points', \n", + " 'gp': 'games',\n", + " 'sot': 'shots_on_target',\n", + " 'g': 'goals',\n", + " 'ppg': 'points_per_game',\n", + " 'a': 'assists',})\n", + "\n", + "df.tail()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepoints
    5 Santiago Cazorla\\n Midfield \u2014 Arsenal $14.8m 20 4NaN 20 9.97 NaN
    6 David Silva\\n Midfield \u2014 Manchester City $14.3m 15 6 2 11 10.35 155.26
    7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 10 10.47 209.49
    8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 20 7.02 147.43
    9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 11 7.50 150.01
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 4, + "text": [ + " player salary games goals assists \\\n", + "5 Santiago Cazorla\\n Midfield \u2014 Arsenal $14.8m 20 4 NaN \n", + "6 David Silva\\n Midfield \u2014 Manchester City $14.3m 15 6 2 \n", + "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 \n", + "8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 \n", + "9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 \n", + "\n", + " shots_on_target points_per_game points \n", + "5 20 9.97 NaN \n", + "6 11 10.35 155.26 \n", + "7 10 10.47 209.49 \n", + "8 20 7.02 147.43 \n", + "9 11 7.50 150.01 " + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Applying Computations Rows-wise" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Create a new column\n", + "df['team'] = pd.Series('', index=df.index)\n", + "df.tail(3)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointsteam
    7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 10 10.47 209.49
    8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 20 7.02 147.43
    9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 11 7.50 150.01
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 5, + "text": [ + " player salary games goals assists \\\n", + "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 \n", + "8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 \n", + "9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 \n", + "\n", + " shots_on_target points_per_game points team \n", + "7 10 10.47 209.49 \n", + "8 20 7.02 147.43 \n", + "9 11 7.50 150.01 " + ] + } + ], + "prompt_number": 5 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# process salary column\n", + "\n", + "df['salary'] = df['salary'].apply(lambda x: x.strip('$m'))\n", + "df.tail()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointsteam
    5 Santiago Cazorla\\n Midfield \u2014 Arsenal 14.8 20 4NaN 20 9.97 NaN
    6 David Silva\\n Midfield \u2014 Manchester City 14.3 15 6 2 11 10.35 155.26
    7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea 14.0 20 2 14 10 10.47 209.49
    8 Saido Berahino\\n Forward \u2014 West Brom 13.8 21 9 0 20 7.02 147.43
    9 Steven Gerrard\\n Midfield \u2014 Liverpool 13.8 20 5 1 11 7.50 150.01
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 6, + "text": [ + " player salary games goals assists \\\n", + "5 Santiago Cazorla\\n Midfield \u2014 Arsenal 14.8 20 4 NaN \n", + "6 David Silva\\n Midfield \u2014 Manchester City 14.3 15 6 2 \n", + "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea 14.0 20 2 14 \n", + "8 Saido Berahino\\n Forward \u2014 West Brom 13.8 21 9 0 \n", + "9 Steven Gerrard\\n Midfield \u2014 Liverpool 13.8 20 5 1 \n", + "\n", + " shots_on_target points_per_game points team \n", + "5 20 9.97 NaN \n", + "6 11 10.35 155.26 \n", + "7 10 10.47 209.49 \n", + "8 20 7.02 147.43 \n", + "9 11 7.50 150.01 " + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# process `player` column\n", + "\n", + "def process_player_col(text):\n", + " name, rest = text.split('\\n')\n", + " position, team = rest.split(' \u2014 ')\n", + " return name, position, team\n", + "\n", + "for idx,row in df.iterrows():\n", + " name, position, team = process_player_col(row['player'])\n", + " df.ix[idx, 'player'], df.ix[idx, 'position'], df.ix[idx, 'team'] = name, position, team\n", + " \n", + "df.tail()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointsteamposition
    5 Santiago Cazorla 14.8 20 4NaN 20 9.97 NaN Arsenal Midfield
    6 David Silva 14.3 15 6 2 11 10.35 155.26 Manchester City Midfield
    7 Cesc F\u00e0bregas 14.0 20 2 14 10 10.47 209.49 Chelsea Midfield
    8 Saido Berahino 13.8 21 9 0 20 7.02 147.43 West Brom Forward
    9 Steven Gerrard 13.8 20 5 1 11 7.50 150.01 Liverpool Midfield
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 7, + "text": [ + " player salary games goals assists shots_on_target \\\n", + "5 Santiago Cazorla 14.8 20 4 NaN 20 \n", + "6 David Silva 14.3 15 6 2 11 \n", + "7 Cesc F\u00e0bregas 14.0 20 2 14 10 \n", + "8 Saido Berahino 13.8 21 9 0 20 \n", + "9 Steven Gerrard 13.8 20 5 1 11 \n", + "\n", + " points_per_game points team position \n", + "5 9.97 NaN Arsenal Midfield \n", + "6 10.35 155.26 Manchester City Midfield \n", + "7 10.47 209.49 Chelsea Midfield \n", + "8 7.02 147.43 West Brom Forward \n", + "9 7.50 150.01 Liverpool Midfield " + ] + } + ], + "prompt_number": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Missing Values aka NaNs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Selecting NaN Rows" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Selecting all rows that have NaNs in the `assists` column\n", + "df[~df['assists'].notnull()]" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointsteamposition
    4 \u00c1ngel Di Mar\u00eda 15.0 13 3NaN 13 10.17 132.23 Manchester United Midfield
    5 Santiago Cazorla 14.8 20 4NaN 20 9.97 NaN Arsenal Midfield
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 8, + "text": [ + " player salary games goals assists shots_on_target \\\n", + "4 \u00c1ngel Di Mar\u00eda 15.0 13 3 NaN 13 \n", + "5 Santiago Cazorla 14.8 20 4 NaN 20 \n", + "\n", + " points_per_game points team position \n", + "4 10.17 132.23 Manchester United Midfield \n", + "5 9.97 NaN Arsenal Midfield " + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Dropping NaN Rows" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Dropping all rows that have NaNs in the `assists` column\n", + "\n", + "df[df['assists'].notnull()]" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointsteamposition
    0 Sergio Ag\u00fcero 19.2 16 14 3 34 13.12 209.98 Manchester City Forward
    1 Eden Hazard 18.9 21 8 4 17 13.05 274.04 Chelsea Midfield
    2 Alexis S\u00e1nchez 17.6NaN 12 7 29 11.19 223.86 Arsenal Forward
    3 Yaya Tour\u00e9 16.6 18 7 1 19 10.99 197.91 Manchester City Midfield
    6 David Silva 14.3 15 6 2 11 10.35 155.26 Manchester City Midfield
    7 Cesc F\u00e0bregas 14.0 20 2 14 10 10.47 209.49 Chelsea Midfield
    8 Saido Berahino 13.8 21 9 0 20 7.02 147.43 West Brom Forward
    9 Steven Gerrard 13.8 20 5 1 11 7.50 150.01 Liverpool Midfield
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 9, + "text": [ + " player salary games goals assists shots_on_target \\\n", + "0 Sergio Ag\u00fcero 19.2 16 14 3 34 \n", + "1 Eden Hazard 18.9 21 8 4 17 \n", + "2 Alexis S\u00e1nchez 17.6 NaN 12 7 29 \n", + "3 Yaya Tour\u00e9 16.6 18 7 1 19 \n", + "6 David Silva 14.3 15 6 2 11 \n", + "7 Cesc F\u00e0bregas 14.0 20 2 14 10 \n", + "8 Saido Berahino 13.8 21 9 0 20 \n", + "9 Steven Gerrard 13.8 20 5 1 11 \n", + "\n", + " points_per_game points team position \n", + "0 13.12 209.98 Manchester City Forward \n", + "1 13.05 274.04 Chelsea Midfield \n", + "2 11.19 223.86 Arsenal Forward \n", + "3 10.99 197.91 Manchester City Midfield \n", + "6 10.35 155.26 Manchester City Midfield \n", + "7 10.47 209.49 Chelsea Midfield \n", + "8 7.02 147.43 West Brom Forward \n", + "9 7.50 150.01 Liverpool Midfield " + ] + } + ], + "prompt_number": 9 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Appending Rows to a DataFrame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Adding an \"empty\" row to the DataFrame\n", + "\n", + "df = df.append(pd.Series(\n", + " [None]*len(df.columns), # Fill cells with NaNs\n", + " index=df.columns), \n", + " ignore_index=True)\n", + "\n", + "df.tail()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointsteamposition
    6 David Silva 14.3 15 6 2 11 10.35 155.26 Manchester City Midfield
    7 Cesc F\u00e0bregas 14.0 20 2 14 10 10.47 209.49 Chelsea Midfield
    8 Saido Berahino 13.8 21 9 0 20 7.02 147.43 West Brom Forward
    9 Steven Gerrard 13.8 20 5 1 11 7.50 150.01 Liverpool Midfield
    10 NaN NaNNaNNaNNaNNaN NaN NaN NaN NaN
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 10, + "text": [ + " player salary games goals assists shots_on_target \\\n", + "6 David Silva 14.3 15 6 2 11 \n", + "7 Cesc F\u00e0bregas 14.0 20 2 14 10 \n", + "8 Saido Berahino 13.8 21 9 0 20 \n", + "9 Steven Gerrard 13.8 20 5 1 11 \n", + "10 NaN NaN NaN NaN NaN NaN \n", + "\n", + " points_per_game points team position \n", + "6 10.35 155.26 Manchester City Midfield \n", + "7 10.47 209.49 Chelsea Midfield \n", + "8 7.02 147.43 West Brom Forward \n", + "9 7.50 150.01 Liverpool Midfield \n", + "10 NaN NaN NaN NaN " + ] + } + ], + "prompt_number": 10 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Filling cells with data\n", + "\n", + "df.loc[df.index[-1], 'player'] = 'New Player'\n", + "df.loc[df.index[-1], 'salary'] = 12.3\n", + "df.tail()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointsteamposition
    6 David Silva 14.3 15 6 2 11 10.35 155.26 Manchester City Midfield
    7 Cesc F\u00e0bregas 14.0 20 2 14 10 10.47 209.49 Chelsea Midfield
    8 Saido Berahino 13.8 21 9 0 20 7.02 147.43 West Brom Forward
    9 Steven Gerrard 13.8 20 5 1 11 7.50 150.01 Liverpool Midfield
    10 New Player 12.3NaNNaNNaNNaN NaN NaN NaN NaN
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 11, + "text": [ + " player salary games goals assists shots_on_target \\\n", + "6 David Silva 14.3 15 6 2 11 \n", + "7 Cesc F\u00e0bregas 14.0 20 2 14 10 \n", + "8 Saido Berahino 13.8 21 9 0 20 \n", + "9 Steven Gerrard 13.8 20 5 1 11 \n", + "10 New Player 12.3 NaN NaN NaN NaN \n", + "\n", + " points_per_game points team position \n", + "6 10.35 155.26 Manchester City Midfield \n", + "7 10.47 209.49 Chelsea Midfield \n", + "8 7.02 147.43 West Brom Forward \n", + "9 7.50 150.01 Liverpool Midfield \n", + "10 NaN NaN NaN NaN " + ] + } + ], + "prompt_number": 11 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Sorting and Reindexing DataFrames" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Sorting the DataFrame by a certain column (from highest to lowest)\n", + "\n", + "df = df.sort('goals', ascending=False)\n", + "df.head()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointsteamposition
    0 Sergio Ag\u00fcero 19.2 16 14 3 34 13.12 209.98 Manchester City Forward
    2 Alexis S\u00e1nchez 17.6NaN 12 7 29 11.19 223.86 Arsenal Forward
    8 Saido Berahino 13.8 21 9 0 20 7.02 147.43 West Brom Forward
    1 Eden Hazard 18.9 21 8 4 17 13.05 274.04 Chelsea Midfield
    3 Yaya Tour\u00e9 16.6 18 7 1 19 10.99 197.91 Manchester City Midfield
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 12, + "text": [ + " player salary games goals assists shots_on_target \\\n", + "0 Sergio Ag\u00fcero 19.2 16 14 3 34 \n", + "2 Alexis S\u00e1nchez 17.6 NaN 12 7 29 \n", + "8 Saido Berahino 13.8 21 9 0 20 \n", + "1 Eden Hazard 18.9 21 8 4 17 \n", + "3 Yaya Tour\u00e9 16.6 18 7 1 19 \n", + "\n", + " points_per_game points team position \n", + "0 13.12 209.98 Manchester City Forward \n", + "2 11.19 223.86 Arsenal Forward \n", + "8 7.02 147.43 West Brom Forward \n", + "1 13.05 274.04 Chelsea Midfield \n", + "3 10.99 197.91 Manchester City Midfield " + ] + } + ], + "prompt_number": 12 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Reindexing the DataFrame after sorting\n", + "\n", + "df.index = range(1,len(df.index)+1)\n", + "df.head()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointsteamposition
    1 Sergio Ag\u00fcero 19.2 16 14 3 34 13.12 209.98 Manchester City Forward
    2 Alexis S\u00e1nchez 17.6NaN 12 7 29 11.19 223.86 Arsenal Forward
    3 Saido Berahino 13.8 21 9 0 20 7.02 147.43 West Brom Forward
    4 Eden Hazard 18.9 21 8 4 17 13.05 274.04 Chelsea Midfield
    5 Yaya Tour\u00e9 16.6 18 7 1 19 10.99 197.91 Manchester City Midfield
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 13, + "text": [ + " player salary games goals assists shots_on_target \\\n", + "1 Sergio Ag\u00fcero 19.2 16 14 3 34 \n", + "2 Alexis S\u00e1nchez 17.6 NaN 12 7 29 \n", + "3 Saido Berahino 13.8 21 9 0 20 \n", + "4 Eden Hazard 18.9 21 8 4 17 \n", + "5 Yaya Tour\u00e9 16.6 18 7 1 19 \n", + "\n", + " points_per_game points team position \n", + "1 13.12 209.98 Manchester City Forward \n", + "2 11.19 223.86 Arsenal Forward \n", + "3 7.02 147.43 West Brom Forward \n", + "4 13.05 274.04 Chelsea Midfield \n", + "5 10.99 197.91 Manchester City Midfield " + ] + } + ], + "prompt_number": 13 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/tutorials/training_set.csv b/tutorials/training_set.csv deleted file mode 100644 index 80c551d..0000000 --- a/tutorials/training_set.csv +++ /dev/null @@ -1,124 +0,0 @@ -1.000000000000000000e+00,9.643797661038555624e-01,-4.458250028745581739e-01,3.254520589443019585e-01,-1.623345832137024658e+00,8.000025927956255778e-01,2.399975129984130984e+00,1.699709801272862641e+00,-2.136629015502882756e-01,4.166076721866525667e-01,9.174729085534980566e-01,1.903010272312230799e-01,8.547495436698466786e-01,1.323289114254158960e+00 -2.000000000000000000e+00,7.786340516010937796e-01,-9.035357195200717229e-01,-1.515608858441348072e+00,-3.379378935355480951e-01,-3.926462513438215840e-01,-3.630256560063624960e-01,-3.675394816997145098e-01,-2.136629015502882756e-01,-1.670269030162930157e+00,-5.258153290285596526e-01,1.167232156863844406e+00,-2.879883907243386276e-01,-3.851648430538042178e-01 -2.000000000000000000e+00,-1.202653569761693353e+00,-7.050221522523687778e-02,-5.950783997485230570e-01,6.261180604155592855e-01,-1.024048580594117075e+00,4.130981602831020894e-01,5.441704584830628910e-01,2.016066876697071852e-01,-5.353009990605254176e-01,-9.876675650548181196e-01,-4.757883793364734437e-01,8.833179920297012933e-01,-1.153969123842387701e+00 -2.000000000000000000e+00,-8.311621407561718966e-01,-1.013386291514995152e+00,-6.318996180962351827e-01,-1.658590888517895781e-02,-8.837369518718292127e-01,1.810121029604138121e+00,1.021227985322888498e+00,-1.293363833522276796e+00,4.166076721866525667e-01,-2.371576815121479997e-01,1.122826196425997791e+00,2.976648006526816381e-01,-1.025835077044290333e+00 -1.000000000000000000e+00,1.261572909308273926e+00,-7.965642955814736248e-02,1.025055207550848779e+00,-4.664786873956953128e-01,1.501560736407065111e+00,4.130981602831020894e-01,3.957525612440059848e-01,-2.967168193942874566e-01,-7.183603589157521174e-01,2.929553157992404247e-02,4.123308294204554025e-01,1.311844717427521179e+00,1.643624231249402046e+00 -1.000000000000000000e+00,8.529323374021988702e-01,-6.746803611973148929e-01,1.356446172680266793e+00,1.108146037391112948e+00,9.844444918418605861e-02,1.033997213314673536e+00,1.180247160936163553e+00,-4.628246550822858185e-01,1.350210407448307448e+00,3.179531790963357474e-01,9.896083151124585031e-01,6.911721377384434650e-02,1.613116124868902768e+00 -1.000000000000000000e+00,2.461630033598449785e-01,3.231290010899045551e-01,1.982406884591387586e+00,6.261180604155592855e-01,1.291093293323633207e+00,7.235476867988874794e-01,5.865755719799363721e-01,3.677145233577055472e-01,3.250779922590392168e-01,-2.948892110154302526e-01,3.235189085447624513e-01,3.833701457322456485e-01,-6.482972605856110460e-02 -1.000000000000000000e+00,7.414849087005422890e-01,7.899939320683285748e-01,8.409491158122843757e-01,-1.237723450556581950e+00,1.150781664601345344e+00,5.683229235409951174e-01,9.470190367033598511e-01,-1.459471669210274936e+00,3.218301649067650816e-02,5.149996600426331311e-02,-3.172877495800926345e-02,9.975917854691199738e-01,2.707594441269316476e-01 -2.000000000000000000e+00,-6.577994738869272773e-01,-4.641334315403787270e-01,-1.294681548355069767e+00,4.654420680903747498e-01,-1.024048580594117075e+00,-2.078008927484694124e-01,-2.297228628348761681e-01,-2.136629015502882756e-01,-2.973238312487311297e-01,-9.077316011271964191e-01,3.235189085447624513e-01,1.297560493247593483e+00,-2.570307962557069614e-01 -1.000000000000000000e+00,1.212040718774203052e+00,-5.099045032049300818e-01,-4.477935263576708902e-01,-9.806418628362864043e-01,-2.523346226215336663e-01,4.907105419120482703e-01,2.049295505080760971e-01,-7.119864086142828619e-01,6.179729680274015369e-01,-1.261355093904512337e-01,3.235189085447624513e-01,1.326128941607448208e+00,8.504134653564191515e-01 -1.000000000000000000e+00,5.433561465642633426e-01,-3.908997168770964592e-01,2.886308405965897217e-01,4.654420680903747498e-01,2.828863482304210669e-02,5.683229235409951174e-01,8.940126448322682773e-01,-7.119864086142828619e-01,3.983017362011299078e-01,5.149996600426331311e-02,3.235189085447624513e-01,1.154718251448320965e+00,4.995702419806767325e-01 -1.000000000000000000e+00,1.472084719078069925e+00,-4.824418602061992800e-01,3.622732772920158051e-01,-1.109182656696434011e+00,1.922495622573928697e+00,7.235476867988874794e-01,9.788228718260151284e-01,-5.458785729262844999e-01,1.185456983578603740e+00,2.913078577871283104e-01,3.235189085447624513e-01,1.797508339545049960e+00,9.419377844979172076e-01 -3.000000000000000000e+00,4.442917654961238694e-01,1.531485293034060557e+00,5.463793690305801531e-01,1.268822029716297539e+00,1.686002635453300036e-01,-8.286999457800412472e-01,-1.470072432618422242e+00,6.999301947337017715e-01,-4.254653831473897974e-01,1.028495080675194684e+00,-1.186283746342016387e+00,-1.573568566917797229e+00,-1.906756648781209040e-02 -1.000000000000000000e+00,1.447318623811035598e+00,1.650490079361894180e+00,3.990944956397280419e-01,-4.872110735021632777e-02,8.000025927956255778e-01,8.011600684278343820e-01,5.441704584830628910e-01,-3.797707372382866375e-01,-7.183603589157521174e-01,1.136723823924137428e-01,-4.313824188986269959e-01,9.547391129293382184e-01,9.876999440686662357e-01 -2.000000000000000000e+00,-1.586528046400733860e+00,4.055169300860972381e-01,2.166512976329951989e+00,3.047660757651901586e-01,2.387560779064739624e-01,-9.063123274089878167e-01,-1.131088007184745114e-01,2.111846798081686405e+00,-1.084479078626205073e+00,-5.258153290285596526e-01,1.167232156863844406e+00,-2.308514940046293151e-01,-4.553334877289527127e-01 -1.000000000000000000e+00,6.424205276324028713e-01,-4.824418602061992800e-01,-7.958134288054057037e-02,-9.163714659062127676e-01,1.220937478962489164e+00,1.266834358201512911e+00,1.222652274433037034e+00,-4.755506586228989974e-02,1.276986663506216813e+00,5.089113151456540196e-01,-7.613473539585573213e-02,1.026160233828974588e+00,1.182189122244349522e-01 -2.000000000000000000e+00,-8.311621407561718966e-01,-1.187316363840290157e+00,-3.577597085913275077e+00,-2.715942579948279700e+00,-8.135811375106852816e-01,-5.492953719158341075e-01,-1.660895443354352574e+00,-5.458785729262844999e-01,-2.237753045714132583e+00,-1.347379402729115494e+00,3.679248689826089547e-01,-1.202178738239686906e+00,-7.207540132392969978e-01 -3.000000000000000000e+00,-2.243928067138180049e-01,-8.119935761909689020e-01,-4.276012453282835440e-02,-3.379378935355480951e-01,1.571716550768208931e+00,-1.278851759227930707e+00,-9.400085139075050611e-01,-1.127255997834278656e+00,-1.285844374466954321e+00,-3.925887224825236888e-01,-9.198479837149375893e-01,-1.959242619775834804e+00,-3.851648430538042178e-01 -1.000000000000000000e+00,1.657830433580831819e+00,1.238550434380931708e+00,-1.900449979236804865e-01,-9.806418628362864043e-01,1.686002635453300036e-01,1.422059121459405828e+00,1.095436933942416813e+00,-6.289324907702836809e-01,1.002397623723377151e+00,-3.731777169309376946e-02,3.235189085447624513e-01,1.111865578908538543e+00,9.419377844979172076e-01 -1.000000000000000000e+00,1.434935576177516214e+00,-4.366707885416478696e-01,4.359157139874418885e-01,-1.237723450556581950e+00,8.701584071567695089e-01,1.453104074110984412e+00,1.328665058175220626e+00,-4.755506586228989974e-02,5.996670320418788780e-01,7.842463020074620372e-01,3.679248689826089547e-01,2.690963522928269680e-01,2.116499880147141965e+00 -1.000000000000000000e+00,1.558766052512692291e+00,-2.902033592150836117e-01,1.430088609375692821e+00,3.047660757651901586e-01,1.431404922045921069e+00,7.235476867988874794e-01,1.063633098819761980e+00,-1.306089837062890946e-01,5.996670320418788780e-01,5.399975233397292795e-01,4.567367898583018504e-01,-1.658813130571964653e-02,1.597862071678653129e+00 -3.000000000000000000e+00,4.803424122356605291e-02,1.522331078701150142e+00,1.045247488580237777e-01,7.867940527407438767e-01,9.403142215179134400e-01,-1.434076522485823846e+00,-7.915906166684484324e-01,-4.755506586228989974e-02,-9.197256547565014762e-01,1.961081326497447597e+00,-1.763561232034019932e+00,-1.902105723056125575e+00,-6.292296940977989417e-01 -2.000000000000000000e+00,-8.311621407561718966e-01,-9.401525768517128290e-01,8.409491158122843757e-01,-3.058026950705107216e-01,-1.120229938992457902e-01,1.336935864188945888e-01,5.441704584830628910e-01,2.016066876697071852e-01,8.010323278826282367e-01,-1.705443782391301843e-01,9.896083151124585031e-01,-5.165359776031759331e-01,-2.387259324274073613e-01 -2.000000000000000000e+00,-1.338867093730384150e+00,-1.050003148846635925e+00,-1.164025612282544170e-01,6.261180604155592855e-01,9.844444918418605861e-02,1.623851313694666398e+00,3.505261397927611402e-03,-1.791687340586271437e+00,1.387708050515384234e-02,-7.878276552357639240e-01,1.014891063555301426e-01,6.690546293307916281e-01,3.958426802869789984e-01 -2.000000000000000000e+00,-4.968198546511998770e-01,-8.028393618580585978e-01,-1.147396674964217711e+00,-7.235602751159908586e-01,2.828863482304210669e-02,-4.872054666126768852e-01,-7.703880599200116919e-01,1.530469373173693137e+00,-1.871634326003678961e+00,3.401576135206750284e-01,5.708314591768366697e-02,-1.530715894378015252e+00,-9.343107579027923881e-01 -3.000000000000000000e+00,8.281662421351645431e-01,3.124318586960447952e+00,4.359157139874418885e-01,4.654420680903747498e-01,-3.224904369826776529e-01,-1.014969661689512970e+00,-1.618490329857479315e+00,1.447415455329694067e+00,-1.066173142640682414e+00,1.206130556069909820e+00,-1.452719508969094742e+00,-1.316452531679105586e+00,-4.957567286831143089e-02 -1.000000000000000000e+00,3.565119359004889632e-02,-6.746803611973148929e-01,-8.528269281825133774e-01,-1.141317855161470884e+00,-1.120229938992457902e-01,1.026486337673159777e-01,5.335691801088447983e-01,-5.458785729262844999e-01,-4.986891270894800443e-01,-5.702241978772382147e-01,9.452023546746119997e-01,4.054876541398967638e-02,8.046513057856702344e-01 -1.000000000000000000e+00,3.204612891609501246e-01,-4.732876458732889757e-01,-7.055420547916613216e-01,-6.592898781859172219e-01,-3.926462513438215840e-01,1.026486337673159777e-01,5.651165326901914226e-02,-6.289324907702836809e-01,-5.353009990605254176e-01,-4.592020257555414764e-01,2.347069876690695278e-01,1.548225588534083430e-01,1.613116124868902768e+00 -2.000000000000000000e+00,-1.289334903196315496e+00,1.092083005054367728e+00,-1.221039111659643739e+00,-1.658590888517895781e-02,-8.837369518718292127e-01,-5.182504192642555241e-01,-5.265586573129897863e-01,2.016066876697071852e-01,4.166076721866525667e-01,-1.644918824015262793e+00,-1.649466562715481699e-01,5.547808358913729476e-01,-5.865183451650999302e-01 -2.000000000000000000e+00,-3.977554735830604038e-01,-4.458250028745581739e-01,-1.900449979236804865e-01,1.108146037391112948e+00,-1.094204394955261117e+00,-1.480643951463191721e+00,-3.993433168223695651e-01,1.115199783953697343e+00,-2.273479146589149624e-02,-7.478596732719532403e-01,-3.869764584607804925e-01,-3.451252874440479679e-01,-8.183799536568948652e-01 -2.000000000000000000e+00,-1.239802712662246842e+00,1.888499652017560981e+00,1.781671855534498472e-01,9.474700450659284678e-01,-1.374827652399836841e+00,-3.630256560063624960e-01,-4.099445951965879353e-01,6.168762768897025905e-01,-5.353009990605254176e-01,-1.058721755212703952e+00,-7.866301024013981902e-01,-1.308619247451383028e-01,-5.377053749563008855e-01 -3.000000000000000000e+00,-8.435451883896890601e-01,1.458251578370778345e+00,1.781671855534498472e-01,6.261180604155592855e-01,-8.135811375106852816e-01,-5.257612949057706431e-02,-1.289850700256710558e+00,1.281307619641695705e+00,-1.102785014611727732e+00,1.183926121645570539e+00,-1.807967192471865880e+00,-1.545000118557942503e+00,-7.207540132392969978e-01 -3.000000000000000000e+00,-1.041673950525968007e+00,7.259144317379564448e-01,-4.276012453282835440e-02,-1.658590888517895781e-02,-2.523346226215336663e-01,-1.682436143698452291e+00,-1.745705670348099314e+00,4.507684412017047282e-01,-1.670269030162930157e+00,2.291354413989782624e-01,-1.363907588093401735e+00,-1.187894514059759654e+00,-7.512621196197962758e-01 -1.000000000000000000e+00,1.013911956637924217e+00,-8.119935761909689020e-01,-2.268662162713926955e-01,-9.806418628362864043e-01,-1.120229938992457902e-01,1.002952260663094952e+00,1.074234377193980183e+00,-1.044202079990279364e+00,3.799958002156071935e-01,9.929679855962517676e-01,1.903010272312230799e-01,1.268992044887738979e+00,8.809215717369185406e-01 -3.000000000000000000e+00,1.470986222917055053e-01,1.220242005715111100e+00,-6.687208364439490849e-01,6.261180604155592855e-01,1.686002635453300036e-01,-1.294374235553719998e+00,-1.682098000102789204e+00,6.999301947337017715e-01,-6.268306789881387120e-01,-4.369975913312021953e-01,-1.630343350720480533e+00,-1.402157876758669541e+00,2.249972845561826473e-01 -3.000000000000000000e+00,1.038678051904960764e+00,2.565911512652921278e+00,-3.741510896622448068e-01,3.047660757651901586e-01,-1.374827652399836841e+00,-2.101543004494763167e+00,-1.904724845961374369e+00,4.507684412017047282e-01,-1.761798710090543230e+00,-3.731777169309376946e-02,-1.719155271596173540e+00,-1.902105723056125575e+00,-1.041089130234540194e+00 -3.000000000000000000e+00,-1.377114732791957230e-01,5.245217164139306387e-01,1.356446172680266793e+00,6.261180604155592855e-01,-2.523346226215336663e-01,-1.232284330250562832e+00,-1.735104391973880889e+00,1.530469373173693137e+00,-1.633657158191884617e+00,-1.705443782391301843e-01,-8.754420232770911969e-01,-5.022517534232482372e-01,-4.766891621953022184e-01 -3.000000000000000000e+00,1.608298243046760945e+00,-5.099045032049300818e-01,1.356446172680266793e+00,1.911525999017035904e+00,-1.120229938992457902e-01,7.235476867988874794e-01,-8.764008436621949505e-01,1.530469373173693137e+00,1.936000358985032754e+00,3.559800605049880495e+00,-1.763561232034019932e+00,-1.002199599720704493e+00,-2.936405239123061617e-01 -2.000000000000000000e+00,-1.190270522128176189e+00,-8.303020048567895106e-01,-1.164025612282544170e-01,1.461633220506519448e+00,-2.076385796011276152e+00,-2.078008927484694124e-01,-5.795650491840813601e-01,6.168762768897025905e-01,-4.803831911039578295e-01,-1.440638027311340608e+00,4.567367898583018504e-01,7.833284227702103086e-01,-4.004188962440538568e-01 -1.000000000000000000e+00,-1.377114732791957230e-01,1.430788935372047321e+00,1.172340080941700835e+00,-1.451267027453261582e-01,1.686002635453300036e-01,1.181711100931056302e-01,2.897397775018228927e-01,-7.950403264582820428e-01,6.179729680274015369e-01,-2.149532470878087187e-01,2.791129481069160034e-01,1.226139372347957224e+00,4.194864627318659750e-02 -1.000000000000000000e+00,1.335871195109376908e+00,-6.929887898631355014e-01,-4.276012453282835440e-02,-7.235602751159908586e-01,-3.224904369826776529e-01,-2.078008927484694124e-01,3.109423342502596332e-01,-7.119864086142828619e-01,-1.325704073790270887e-01,7.091097155584770960e-03,9.007963942367656074e-01,2.262436797530446575e-01,1.597862071678653129e+00 -2.000000000000000000e+00,-8.311621407561718966e-01,-9.767694341833539351e-01,-1.515608858441348072e+00,1.762252819050429686e-01,-1.515139281122124704e+00,-3.475031796805735373e-01,-1.449126358411293447e-01,-6.289324907702836809e-01,-1.102785014611727732e+00,-1.350172831601871848e-01,6.787665920475342007e-01,1.169002475628247995e+00,-7.512621196197962758e-01 -1.000000000000000000e+00,1.645447385947312435e+00,-2.627407162163527543e-01,6.200218057260061810e-01,-7.235602751159908586e-01,9.403142215179134400e-01,2.353407701006763553e+00,1.434677841917403995e+00,-8.780942443022812238e-01,9.840916877378549366e-01,1.250539424918588161e+00,-4.757883793364734437e-01,1.126149803088466239e+00,2.208024199288639799e+00 -2.000000000000000000e+00,-1.091206141060036661e+00,-5.739840035353018788e-01,-7.958134288054057037e-02,1.204551632786224014e+00,-6.732695087883974194e-01,-8.597448984316198306e-01,-4.735522654418980459e-01,6.999301947337017715e-01,-1.508763433645497753e-01,-1.125335058485722017e+00,1.611291761242308995e+00,-5.736728743228852734e-01,-7.970242791905453039e-01 -2.000000000000000000e+00,-1.016907855258931459e+00,-8.669188621884306167e-01,-1.441966421745921823e+00,-1.658590888517895781e-02,-5.329578800661094462e-01,4.055872846415876226e-02,-1.025075223442559191e-01,3.677145233577055472e-01,8.010323278826282367e-01,-1.014312886364025168e+00,-4.757883793364734437e-01,5.119281633515913033e-01,-1.355322625953683247e+00 -2.000000000000000000e+00,-1.289334903196315496e+00,-6.655261468644046996e-01,3.254520589443019585e-01,9.474700450659284678e-01,-9.538927662329731438e-01,-1.371986617182666679e+00,-9.400085139075050611e-01,1.281307619641695705e+00,-2.273479146589149624e-02,-6.146330667259169989e-01,3.679248689826089547e-01,-1.658813130571964653e-02,-9.343107579027923881e-01 -2.000000000000000000e+00,-8.311621407561718966e-01,-5.556755748694814923e-01,-1.164025612282544170e-01,1.750850006691851313e+00,-8.135811375106852816e-01,-1.767559400968908290e-01,3.321448909986963183e-01,4.507684412017047282e-01,4.715254801432201548e-01,-1.271884325686361672e+00,-3.425704980229340446e-01,1.691067830333353450e-01,-1.263798306812185190e+00 -1.000000000000000000e+00,1.311105099842342581e+00,-1.986612158859807908e-01,2.518096222488758751e-01,-8.085630581525254934e-02,2.387560779064739624e-01,6.459353051699413539e-01,8.304049745869581667e-01,-2.136629015502882756e-01,1.350210407448307448e+00,5.399975233397292795e-01,4.567367898583018504e-01,1.262541104935536729e-01,9.266837313076675686e-01 -1.000000000000000000e+00,1.088509832301457966e-02,-4.275165742087375653e-01,-8.528269281825133774e-01,-6.592898781859172219e-01,5.193793353510497424e-01,1.033997213314673536e+00,9.152152015807050178e-01,-5.458785729262844999e-01,7.095026479550144982e-01,2.485464469505626467e-02,-3.869764584607804925e-01,9.833075612891929440e-01,3.927918696489290373e-01 -1.000000000000000000e+00,9.767628137373727260e-01,-5.373671462036609947e-01,9.882339892031365425e-01,-5.950194812558435853e-01,-3.926462513438215840e-01,1.802610153962628525e-01,9.046139232064869251e-01,-1.044202079990279364e+00,1.185456983578603740e+00,2.735443102476567967e-01,1.211638117301690798e+00,1.011876009649047559e+00,1.552099912107903990e+00 -2.000000000000000000e+00,-7.692469025885839695e-01,-5.739840035353018788e-01,-5.214359630530969181e-01,1.108146037391112948e+00,5.895351497121936735e-01,-5.182504192642555241e-01,-4.950113047316438697e-02,-4.755506586228989974e-02,-5.934666343693642543e-02,-1.298529646995568942e+00,4.123308294204554025e-01,4.262228182720272929e-01,-1.254645874898035585e+00 -2.000000000000000000e+00,-3.977554735830604038e-01,-3.908997168770964592e-01,-4.846147447053830715e-01,-8.085630581525254934e-02,-9.538927662329731438e-01,-2.078008927484694124e-01,4.169551179924426698e-01,-7.119864086142828619e-01,2.335483123314258669e-01,-4.814064601798809795e-01,8.563904337989191040e-01,6.833388535107193240e-01,-1.288967494576097328e-01 -1.000000000000000000e+00,1.422552528543999051e+00,-5.922924322011223763e-01,5.463793690305801531e-01,-8.199658705111018131e-01,5.895351497121936735e-01,1.499671503088352065e+00,1.901134090383011177e+00,-2.136629015502882756e-01,3.983017362011299078e-01,1.650219244556696330e+00,1.167232156863844406e+00,2.262436797530446575e-01,2.818186326898626692e+00 -1.000000000000000000e+00,8.776984326692331972e-01,-4.641334315403787270e-01,2.886308405965897217e-01,-9.806418628362864043e-01,-7.434253231495413505e-01,4.130981602831020894e-01,6.607845205994645754e-01,-4.628246550822858185e-01,3.067720562735165579e-01,2.735443102476567967e-01,8.119844733610726006e-01,3.405174731924633380e-01,1.719894497200650463e+00 -3.000000000000000000e+00,9.891458613708897785e-01,1.723723794025176392e+00,1.781671855534498472e-01,1.440900834400055952e-01,-7.434253231495413505e-01,-8.286999457800412472e-01,-1.385262205624675502e+00,1.115199783953697343e+00,-1.508763433645497753e-01,1.787886737987600450e+00,-1.763561232034019932e+00,-1.459294773478378771e+00,-8.427864387612943320e-01 -1.000000000000000000e+00,1.459701671444552762e+00,-4.915960745391095288e-01,-1.164025612282544170e-01,-8.842362674411753387e-01,1.291093293323633207e+00,1.344446739830459592e+00,9.152152015807050178e-01,-7.119864086142828619e-01,7.095026479550144982e-01,6.199334872673507579e-01,-1.205406958337021939e-01,9.261706645694836038e-01,6.521107738831735112e-01 -3.000000000000000000e+00,5.681222418312976696e-01,8.083023607341491834e-01,1.061876425898562681e+00,1.590174014366666722e+00,1.641872365129352973e+00,-1.449598998811613138e+00,-6.007676059325179896e-01,-1.044202079990279364e+00,-7.183603589157521174e-01,1.605810375708017768e+00,-1.674749311158327147e+00,-1.944958395595907552e+00,-7.817702260002956649e-01 -1.000000000000000000e+00,1.088509832301457966e-02,-4.641334315403787270e-01,-1.073754238268791683e+00,-2.137509007577615083e+00,-5.329578800661094462e-01,5.993678761925737009e-01,1.201449717684600405e+00,-1.459471669210274936e+00,2.320425014681008591e+00,9.840862118265162328e-01,6.787665920475342007e-01,3.548016973723909784e-01,1.201256688732161626e+00 -1.000000000000000000e+00,1.088509832301457966e-02,-1.711985728872501555e-01,3.271149526761342852e+00,1.911525999017035904e+00,1.712028179490496793e+00,4.596655892604696314e-01,5.759742936057181684e-01,1.032145866109698051e+00,5.081373521142654726e-01,-6.235148404956527557e-01,7.231725524853797049e-01,7.690441985902832789e-01,2.249972845561826473e-01 -3.000000000000000000e+00,1.594816699252226688e-01,2.703224727646575509e+00,-4.276012453282835440e-02,9.474700450659284678e-01,-4.628020657049655151e-01,-9.218348037347771085e-01,-1.597287773109042464e+00,2.194900715925685919e+00,-1.691822793500724342e-01,1.294948293767267167e+00,-1.630343350720480533e+00,-1.687842360357215910e+00,-9.533783243906045202e-02 -2.000000000000000000e+00,-5.463520451852706961e-01,-8.211477905238792063e-01,-1.589251295136774100e+00,-1.772619012103635316e-01,-8.135811375106852816e-01,-1.371986617182666679e+00,-8.233944517911032657e-01,-4.628246550822858185e-01,-5.353009990605254176e-01,-1.125335058485722017e+00,3.235189085447624513e-01,1.548225588534083430e-01,-5.926199664411997414e-01 -3.000000000000000000e+00,-2.863080448814038226e-01,6.681099976841710364e-02,2.518096222488758751e-01,1.590174014366666722e+00,-1.120229938992457902e-01,-1.837660906956345430e+00,-1.109628967894998430e+00,-6.289324907702836809e-01,-1.487209670307703568e+00,3.179531790963357474e-01,-1.363907588093401735e+00,-1.859253050516343597e+00,-5.987215877172996636e-01 -1.000000000000000000e+00,2.461630033598449785e-01,1.595564793364432354e+00,-1.532237795759666399e-01,-4.986138858607326307e-01,2.387560779064739624e-01,4.751880655862593117e-01,5.229679017346261505e-01,-2.136629015502882756e-01,3.218301649067650816e-02,-2.771256634759587389e-01,-6.534122210878593462e-01,4.833597149917366331e-01,-2.326243111513074946e-01 -1.000000000000000000e+00,1.966308128257741317e-01,-4.183623598758273165e-01,-7.055420547916613216e-01,-2.523131389158058457e+00,2.828863482304210669e-02,4.907105419120482703e-01,6.607845205994645754e-01,-7.119864086142828619e-01,-6.634425509591841408e-01,-2.682438897062232042e-01,3.679248689826089547e-01,1.054728682188829314e+00,8.961756249271681796e-01 -2.000000000000000000e+00,1.013911956637924217e+00,-6.655261468644046996e-01,1.245982517637126863e+00,1.911525999017035904e+00,-9.538927662329731438e-01,9.563848316857274101e-01,7.667973043416480561e-01,-1.127255997834278656e+00,4.166076721866525667e-01,-7.123325781930102130e-01,1.744509642555848394e+00,7.119073018705739386e-01,-1.056343183424789833e+00 -1.000000000000000000e+00,8.653153850357160337e-01,-5.190587175378403861e-01,-3.005086529668187789e-01,-8.521010689761391310e-01,1.291093293323633207e+00,4.130981602831020894e-01,8.092024178385215372e-01,-1.127255997834278656e+00,-4.104072745141375961e-02,3.845664823693535350e-01,-2.093526167093946455e-01,7.690441985902832789e-01,9.266837313076675686e-01 -3.000000000000000000e+00,-4.225215688500969513e-01,1.201933577049290491e+00,1.045247488580237777e-01,7.867940527407438767e-01,4.492235209899058113e-01,-9.839247090379342753e-01,-9.930149057785968569e-01,-1.459471669210274936e+00,-1.468903734322180910e+00,7.091097155584770960e-03,-8.310360628392446936e-01,-1.959242619775834804e+00,-4.766891621953022184e-01 -2.000000000000000000e+00,-1.512229760599628881e+00,-4.732876458732889757e-01,-1.662893731832200128e+00,1.440900834400055952e-01,-9.538927662329731438e-01,2.578733970252090058e-01,-5.265586573129897863e-01,2.016066876697071852e-01,-4.071594471618671385e-01,-1.298529646995568942e+00,-1.205406958337021939e-01,-3.165568390841932978e-01,-1.041089130234540194e+00 -2.000000000000000000e+00,-1.512229760599628881e+00,-7.021430041960458057e-01,-1.257860330007356753e+00,5.618476634854857599e-01,-9.538927662329731438e-01,-5.492953719158341075e-01,-5.689637708098629343e-01,-3.797707372382866375e-01,-2.057941513211177798e-01,-1.347379402729115494e+00,-7.613473539585573213e-02,9.547391129293382184e-01,-7.970242791905453039e-01 -1.000000000000000000e+00,1.657830433580831819e+00,-3.359744308796348000e-01,1.781671855534498472e-01,-2.266049801437763023e+00,1.686002635453300036e-01,1.499671503088352065e+00,1.593697017530679050e+00,-4.628246550822858185e-01,2.411954694608621441e+00,1.117312818372552252e+00,1.034014275550305006e+00,4.833597149917366331e-01,2.412428512037985584e+00 -1.000000000000000000e+00,1.670213481214348983e+00,-3.359744308796348000e-01,4.359157139874418885e-01,-1.430534641346803193e+00,-2.523346226215336663e-01,2.578733970252090058e-01,4.063538396182245771e-01,-3.797707372382866375e-01,6.179729680274015369e-01,1.181132692772815240e-01,2.347069876690695278e-01,1.311844717427521179e+00,1.628370178059152407e+00 -2.000000000000000000e+00,-1.289334903196315496e+00,-1.205624792506110765e+00,-1.221039111659643739e+00,-1.658590888517895781e-02,-9.538927662329731438e-01,1.336935864188945888e-01,1.307206018885473664e-01,-3.797707372382866375e-01,-3.888535111763444796e-01,-1.103130624061382736e+00,1.833321563431540291e+00,6.547704051508645984e-01,-1.459050187647381147e+00 -1.000000000000000000e+00,4.319087178626067614e-01,-4.275165742087375653e-01,1.061876425898562681e+00,-9.485066643712489753e-01,-4.628020657049655151e-01,8.011600684278343820e-01,8.516075313353949072e-01,-4.755506586228989974e-02,-3.522416392052991063e-01,-8.172664054177269932e-02,-2.093526167093946455e-01,7.976126469501378935e-01,1.338543167444408599e+00 -2.000000000000000000e+00,-2.490490523647506116e+00,-6.655261468644046996e-01,-4.846147447053830715e-01,7.867940527407438767e-01,-1.024048580594117075e+00,1.957834917220518112e-01,3.530909652058243642e-02,1.447415455329694067e+00,6.728907759839690694e-01,-1.369583837153454997e+00,3.298718257880472571e+00,2.976648006526816381e-01,-1.065495615338939661e+00 -3.000000000000000000e+00,1.348254242742896292e+00,1.705415365359355340e+00,1.503731046071119071e+00,1.750850006691851313e+00,-2.523346226215336663e-01,-4.406380376353093431e-01,-1.459471154244204039e+00,1.779631126705690791e+00,-5.353009990605254176e-01,1.872263588800089806e+00,-1.585937390282634141e+00,-1.516431670198087778e+00,-5.987215877172996636e-01 -2.000000000000000000e+00,-9.302265218243114253e-01,-5.739840035353018788e-01,-4.477935263576708902e-01,4.333068696253373764e-01,2.387560779064739624e-01,-1.915273288585291667e+00,-1.183837916514526967e+00,2.016066876697071852e-01,-3.339357032197764474e-01,-8.588818453936499786e-01,-2.715209613223796836e-01,-1.202178738239686906e+00,3.470297100781800093e-01 -1.000000000000000000e+00,7.291018610670251254e-01,-3.908997168770964592e-01,1.356446172680266793e+00,-5.950194812558435853e-01,8.701584071567695089e-01,8.011600684278343820e-01,8.198036962127400740e-01,-3.797707372382866375e-01,-3.339357032197764474e-01,1.028495080675194684e+00,1.389261959053076589e+00,3.119490248326086679e-01,1.689386390820151185e+00 -1.000000000000000000e+00,8.281662421351645431e-01,-3.451286452125450488e-01,1.045247488580237777e-01,-7.878306720460643842e-01,9.844444918418605861e-02,4.286206366088910480e-01,7.879998610900847966e-01,-6.289324907702836809e-01,8.710082444724451256e-02,-5.258153290285596526e-01,6.343606316096876974e-01,1.911782132984468419e+00,8.504134653564191515e-01 -1.000000000000000000e+00,8.405492897686817066e-01,-7.387598615276869118e-01,6.200218057260061810e-01,-7.556954735810281765e-01,5.895351497121936735e-01,1.654896266346244982e+00,1.625500852653333883e+00,-1.293363833522276796e+00,7.278085839405374902e-01,8.064507364318013183e-01,-3.425704980229340446e-01,2.976648006526816381e-01,1.613116124868902768e+00 -2.000000000000000000e+00,-1.710358522735907716e+00,-3.268202165467247178e-01,-1.515608858441348072e+00,-9.806418628362864043e-01,-1.821788082603897352e-01,-1.123626995970037790e+00,-6.007676059325179896e-01,-4.755506586228989974e-02,-9.014197187709788173e-01,-5.258153290285596526e-01,1.167232156863844406e+00,-7.450835644820126280e-01,-1.001428591939890866e+00 -2.000000000000000000e+00,-1.078823093426519497e+00,-7.204514328618663033e-01,7.304854607691444457e-01,-1.658590888517895781e-02,3.089118922676178935e-01,-6.889976588479378439e-01,-4.099445951965879353e-01,8.660380304217001335e-01,-1.121090950597250391e+00,-9.032907142423284297e-01,2.144163286496465481e+00,-6.165255468626669177e-01,-1.224137768517536085e+00 -2.000000000000000000e+00,-1.029290902892448623e+00,-9.584610055175334375e-01,-2.141569570352468865e+00,-7.235602751159908586e-01,3.606235167241383266e+00,-7.510875641510947887e-01,-9.082046787848500058e-01,-1.708633422742272145e+00,1.569881639274579577e+00,-9.476995830910072138e-01,1.389261959053076589e+00,5.833492842512276733e-01,-1.166935069054099855e-01 -3.000000000000000000e+00,-3.358402354154746416e-01,1.400447144316993575e-01,-1.900449979236804865e-01,1.440900834400055952e-01,-9.538927662329731438e-01,-1.465121475137402429e+00,-1.724503113599662463e+00,1.115199783953697343e+00,-1.835022454032633643e+00,2.183125226652152140e+00,-1.763561232034019932e+00,-1.473578997658306244e+00,-8.732945451417937210e-01 -3.000000000000000000e+00,-1.996267114467815129e-01,6.892975744063156718e-01,2.518096222488758751e-01,3.047660757651901586e-01,3.089118922676178935e-01,-1.604823762069505833e+00,-9.718123490301601164e-01,-8.780942443022812238e-01,-1.487209670307703568e+00,1.847265725502997280e-01,-1.008659904590630596e+00,-1.773547705436779864e+00,-6.902459068587976088e-01 -2.000000000000000000e+00,-1.388099694402193489e-02,-1.223933221171931374e+00,-2.288854443743320921e+00,-9.806418628362864043e-01,-9.538927662329731438e-01,-5.958628008932020936e-01,-1.131088007184745114e-01,-8.780942443022812238e-01,-3.339357032197764474e-01,-1.705443782391301843e-01,9.896083151124585031e-01,-2.594199423644839575e-01,-1.111257774909688578e+00 -1.000000000000000000e+00,5.805052894648148332e-01,-4.000539312100067635e-01,1.172340080941700835e+00,-1.658590888517895781e-02,7.298467784344815357e-01,2.503625213836980362e-02,4.169551179924426698e-01,-4.628246550822858185e-01,-1.874882153355951209e-01,-3.481798536338447381e-01,5.899546711718413050e-01,2.976648006526816381e-01,1.033462103639415153e+00 -2.000000000000000000e+00,-1.759890713269978590e+00,-2.261238588847116482e-01,-1.900449979236804865e-01,-3.379378935355480951e-01,-1.120229938992457902e-01,1.065042165966252119e+00,1.307206018885473664e-01,-1.459471669210274936e+00,-5.353009990605254176e-01,-7.700641076962924103e-01,8.563904337989191040e-01,4.262228182720272929e-01,-1.254645874898035585e+00 -2.000000000000000000e+00,-3.358402354154746416e-01,1.092083005054367728e+00,-1.294681548355069767e+00,-9.806418628362864043e-01,-1.374827652399836841e+00,-1.092582043318459428e+00,-9.400085139075050611e-01,6.999301947337017715e-01,-1.487209670307703568e+00,-7.034508044232744561e-01,-1.186283746342016387e+00,-7.736520128418672426e-01,-1.172273987670687356e+00 -2.000000000000000000e+00,-9.302265218243114253e-01,-7.570682901935074094e-01,-1.294681548355069767e+00,-9.806418628362864043e-01,-1.024048580594117075e+00,3.354857786541551867e-01,3.851512828697878366e-01,-4.628246550822858185e-01,2.335483123314258669e-01,-9.254951486666679328e-01,1.167232156863844406e+00,1.119698863136266570e-01,-1.001428591939890866e+00 -2.000000000000000000e+00,-8.683112836567233872e-01,1.949700004291610167e-01,4.727369323351540698e-01,6.261180604155592855e-01,-1.120229938992457902e-01,3.510082549799448670e-01,-2.829857372472768459e-02,-4.755506586228989974e-02,-6.085247430026160531e-01,-9.699040175153467169e-01,-7.422241419635517978e-01,1.026160233828974588e+00,-9.709204855593915884e-01 -2.000000000000000000e+00,-4.349046164836141148e-01,-6.472177181985840910e-01,-2.636874346191065421e-01,5.297124650204483309e-01,-1.374827652399836841e+00,-1.480643951463191721e+00,-7.173816680489198960e-01,1.945738962393688265e+00,-4.104072745141375961e-02,-8.588818453936499786e-01,-3.172877495800926345e-02,-8.593573579214313085e-01,-7.970242791905453039e-01 -2.000000000000000000e+00,-1.450314522432043063e+00,1.897653866350470953e+00,2.149884039011636938e-01,6.261180604155592855e-01,-1.234516023677548979e+00,8.166825447536233407e-01,9.470190367033598511e-01,-1.127255997834278656e+00,2.320425014681008591e+00,-9.699040175153467169e-01,-9.642539441527840927e-01,1.397550062507085133e+00,-1.147867502566287889e+00 -2.000000000000000000e+00,-9.302265218243114253e-01,8.540734323987003718e-01,-4.477935263576708902e-01,-3.379378935355480951e-01,-8.135811375106852816e-01,8.011600684278343820e-01,9.046139232064869251e-01,8.660380304217001335e-01,2.137365654825782002e+00,-1.191948361758740083e+00,2.010945405182926304e+00,2.405279039329723256e-01,-1.068546425976989456e+00 -2.000000000000000000e+00,-7.692469025885839695e-01,2.865121437582633934e-01,-2.268662162713926955e-01,9.474700450659284678e-01,-6.732695087883974194e-01,-1.014969661689512970e+00,-3.145330898286227694e-01,2.610170305145681713e+00,-4.071594471618671385e-01,-1.014312886364025168e+00,-4.757883793364734437e-01,9.118864403895559079e-01,-1.346170194039533419e+00 -3.000000000000000000e+00,-5.463520451852706961e-01,2.041242147620710989e-01,-4.846147447053830715e-01,-1.772619012103635316e-01,-3.926462513438215840e-01,-1.108104519644248498e+00,-1.565483937986387186e+00,2.361008551613684059e+00,-1.285844374466954321e+00,9.396773429778373377e-01,-1.053065865028476988e+00,-1.545000118557942503e+00,-1.868621515805584665e-01 -3.000000000000000000e+00,8.529323374021988702e-01,1.943424938015023029e+00,-2.636874346191065421e-01,1.108146037391112948e+00,-8.135811375106852816e-01,-1.635868714721084416e+00,-1.766908227096535944e+00,1.447415455329694067e+00,-9.014197187709788173e-01,7.265147725041797289e-01,-8.310360628392446936e-01,-1.302168307499178113e+00,-7.207540132392969978e-01 -3.000000000000000000e+00,8.034001468681281066e-01,9.364613613948926663e-01,7.673066791168583478e-01,3.047660757651901586e-01,5.193793353510497424e-01,-7.821325168026733721e-01,-1.671496721728570778e+00,1.281307619641695705e+00,-1.542127478264271323e+00,3.978891430239572813e-01,-3.172877495800926345e-02,-1.202178738239686906e+00,-2.326243111513074946e-01 -3.000000000000000000e+00,2.833121462603964691e-01,1.870191223351740817e+00,-2.636874346191065421e-01,3.047660757651901586e-01,1.431404922045921069e+00,-1.154671948621616373e+00,-1.533680102863732353e+00,6.999301947337017715e-01,-5.353009990605254176e-01,2.316352277286876760e+00,-1.674749311158327147e+00,-1.573568566917797229e+00,2.402513377464323419e-01 -1.000000000000000000e+00,1.459701671444552762e+00,1.604719007697342770e+00,6.568430240737184178e-01,-1.880427419857320093e+00,1.992651436935072740e+00,1.033997213314673536e+00,9.576203150775784989e-01,-1.210309915678277504e+00,8.010323278826282367e-01,5.149996600426331311e-02,-3.425704980229340446e-01,1.240423596527884254e+00,1.144053989268725355e-02 -2.000000000000000000e+00,-1.487463665332594553e+00,-1.233087435504841345e+00,9.145915525077105146e-01,-3.379378935355480951e-01,-3.926462513438215840e-01,-2.078008927484694124e-01,7.771421001745584811e-02,-1.044202079990279364e+00,1.295292599491739916e+00,-8.588818453936499786e-01,-7.866301024013981902e-01,5.976335084311552581e-01,-7.207540132392969978e-01 -1.000000000000000000e+00,1.470986222917055053e-01,1.125820714329683059e-01,1.245982517637126863e+00,-1.451267027453261582e-01,9.844444918418605861e-02,7.235476867988874794e-01,1.169645882561945571e+00,-3.797707372382866375e-01,2.137365654825782002e+00,3.090714053265997685e-01,2.791129481069160034e-01,7.261915260505009684e-01,1.308035061063909321e+00 -1.000000000000000000e+00,6.424205276324028713e-01,-4.641334315403787270e-01,4.727369323351540698e-01,4.654420680903747498e-01,1.150781664601345344e+00,9.719073080115163688e-01,6.819870773479013160e-01,-1.210309915678277504e+00,1.478351959346966504e+00,5.622019577640684496e-01,5.708314591768366697e-02,5.262123875315183330e-01,1.109732369590663570e+00 -1.000000000000000000e+00,1.112976337706063523e+00,-4.641334315403787270e-01,-2.268662162713926955e-01,-5.307490843257700597e-01,5.895351497121936735e-01,8.477274974052019241e-01,1.487684233788495680e+00,-2.136629015502882756e-01,8.010323278826282367e-01,1.739036982254054120e+00,6.787665920475342007e-01,6.262019567910099838e-01,1.536845858917654351e+00 -2.000000000000000000e+00,3.699934796950187232e-01,-1.187316363840290157e+00,1.045247488580237777e-01,-6.592898781859172219e-01,7.298467784344815357e-01,3.044408260025766033e-01,-8.870021220364133763e-01,1.696577208861691499e+00,-2.237753045714132583e+00,-8.055912027752354376e-01,2.347069876690695278e-01,-1.045052272260486470e+00,-1.906756648781209040e-02 -3.000000000000000000e+00,6.671866228994370873e-01,3.139747867569944728e-01,1.319624954332552891e+00,1.750850006691851313e+00,3.790677066287618246e-01,-1.216761853924773540e+00,-1.374660927250457298e+00,3.677145233577055472e-01,-1.874882153355951209e-01,1.632455697017225260e+00,-1.008659904590630596e+00,-1.230747186599541632e+00,-1.906756648781209040e-02 -2.000000000000000000e+00,-8.806943312902405507e-01,-1.141545292175738746e+00,-1.405145203398208809e+00,-1.366264244416729001e+00,2.553897951824224410e+00,-6.734751825221485522e-01,-3.039318114544043992e-01,3.549885198170882328e-02,2.045835974898168264e+00,-7.034508044232744561e-01,4.123308294204554025e-01,-5.022517534232482372e-01,-1.906756648781209040e-02 -3.000000000000000000e+00,1.385403385643447782e+00,2.498952864266222873e-01,5.463793690305801531e-01,3.047660757651901586e-01,-6.031136944272533773e-01,-1.014969661689512970e+00,-1.523078824489514149e+00,7.829841125777009525e-01,-7.366662949012747763e-01,2.094307933043483505e+00,-1.541531429844787748e+00,-1.359305204218887564e+00,-2.936405239123061617e-01 -3.000000000000000000e+00,2.337799557263278150e-01,9.730782187265337724e-01,-1.900449979236804865e-01,-1.772619012103635316e-01,-1.120229938992457902e-01,-8.286999457800412472e-01,-1.385262205624675502e+00,2.194900715925685919e+00,4.166076721866525667e-01,2.458460657602648869e+00,-1.807967192471865880e+00,-1.644989687817433932e+00,-2.478783643415571614e-01 -2.000000000000000000e+00,-6.454164262534102248e-01,1.766615717633404636e-01,-5.950783997485230570e-01,6.261180604155592855e-01,-8.135811375106852816e-01,3.354857786541551867e-01,1.413218802627659587e-01,-7.119864086142828619e-01,-7.732781668723200941e-01,-1.325174968304776213e+00,-2.981645375850875967e-01,1.691067830333353450e-01,-1.315662087659034141e+00 -1.000000000000000000e+00,7.910170992346109431e-01,-3.725912882112759061e-01,1.045247488580237777e-01,-5.950194812558435853e-01,3.089118922676178935e-01,1.336935864188945888e-01,5.865755719799363721e-01,6.168762768897025905e-01,5.996670320418788780e-01,-5.080517814890882500e-01,1.167232156863844406e+00,2.976648006526816381e-01,7.131269866441721783e-01 -2.000000000000000000e+00,-6.341318747809056300e-02,-5.190587175378403861e-01,9.882339892031365425e-01,3.518285922268881372e+00,2.764365394907656093e+00,1.499671503088352065e+00,7.986011394643033334e-01,-1.127255997834278656e+00,5.813610960563562191e-01,-7.256552388476137372e-01,1.522479840366615989e+00,1.197570923988102498e+00,6.978729334539224283e-01 -1.000000000000000000e+00,1.063444147171994869e+00,-5.099045032049300818e-01,-7.791844914870873495e-01,-9.806418628362864043e-01,9.844444918418605861e-02,1.189221976572566675e+00,1.328665058175220626e+00,-1.127255997834278656e+00,9.108679437957641900e-01,4.955886544910502733e-01,-2.537585771472410934e-01,9.547391129293382184e-01,6.978729334539224283e-01 -3.000000000000000000e+00,1.594816699252226688e-01,3.231290010899045551e-01,1.413459672057376104e-01,3.047660757651901586e-01,1.431404922045921069e+00,-1.061537090666880845e+00,-1.544281381237950557e+00,1.530469373173693137e+00,-3.339357032197764474e-01,1.916672457648769035e+00,-1.630343350720480533e+00,-1.487863221838233274e+00,2.555053909366820086e-01 -2.000000000000000000e+00,-2.019934713573843243e+00,-1.370400650498495576e+00,6.200218057260061810e-01,6.261180604155592855e-01,-8.135811375106852816e-01,2.268284443736304223e-01,-1.343113574669112242e-01,6.168762768897025905e-01,-3.705475751908218207e-01,-8.455591847390462323e-01,5.899546711718413050e-01,-5.022517534232482372e-01,-9.831237281115913218e-01 -2.000000000000000000e+00,-1.524612808233146044e+00,-1.071190725568779978e-01,1.503731046071119071e+00,7.867940527407438767e-01,2.413586323101936326e+00,-1.139149472295827081e+00,-1.215641751637182022e+00,-1.708633422742272145e+00,-1.508763433645497753e-01,-1.103130624061382736e+00,-7.613473539585573213e-02,-5.736728743228852734e-01,-4.004188962440538568e-01 -1.000000000000000000e+00,3.080782415274307406e-01,-2.444322875505322012e-01,1.282803735984840765e+00,-7.235602751159908586e-01,1.686002635453300036e-01,1.033997213314673536e+00,1.159044604187726923e+00,-2.967168193942874566e-01,3.218301649067650816e-02,4.511797856423717668e-01,4.567367898583018504e-01,2.548121281128993276e-01,1.567353965298153851e+00 -2.000000000000000000e+00,1.088509832301457966e-02,3.261631801954101739e+00,-7.423632731393751127e-01,7.867940527407438767e-01,-9.538927662329731438e-01,4.441431129346806728e-01,5.441704584830628910e-01,-3.797707372382866375e-01,6.728907759839690694e-01,-1.058721755212703952e+00,-1.053065865028476988e+00,6.262019567910099838e-01,-1.147867502566287889e+00 -2.000000000000000000e+00,-9.797587123583800794e-01,-4.641334315403787270e-01,-7.791844914870873495e-01,-1.658590888517895781e-02,-1.374827652399836841e+00,-1.061537090666880845e+00,-1.131088007184745114e-01,2.016066876697071852e-01,-2.273479146589149624e-02,-7.034508044232744561e-01,1.458950667933766043e-01,7.261915260505009684e-01,-7.512621196197962758e-01 -2.000000000000000000e+00,1.088509832301457966e-02,1.485714221369509147e+00,-4.276012453282835440e-02,1.108146037391112948e+00,-1.024048580594117075e+00,-1.061537090666880845e+00,-5.795650491840813601e-01,2.194900715925685919e+00,-4.104072745141375961e-02,-8.172664054177269932e-02,-5.646003002121663394e-01,-9.307784788210682336e-01,-7.360080664295466368e-01 -1.000000000000000000e+00,9.767628137373727260e-01,-6.106008608669429849e-01,1.061876425898562681e+00,3.047660757651901586e-01,1.080625850240201302e+00,9.563848316857274101e-01,1.339266336549438607e+00,4.507684412017047282e-01,1.420186324038125170e-01,7.176329987344437500e-01,7.231725524853797049e-01,-1.308619247451383028e-01,1.140240475971162848e+00 -2.000000000000000000e+00,-8.311621407561718966e-01,-1.068311577512456534e+00,-8.528269281825133774e-01,-1.772619012103635316e-01,-8.135811375106852816e-01,1.841165982255716704e+00,1.710311079647080845e+00,-8.780942443022812238e-01,5.630551600708334492e-01,-2.149532470878087187e-01,3.235189085447624513e-01,1.548225588534083430e-01,-2.936405239123061617e-01 -2.000000000000000000e+00,8.518338412411752270e-02,-1.123236863509918138e+00,-2.325675662091033935e+00,-1.301993847486655476e+00,-1.515139281122124704e+00,1.002952260663094952e+00,1.106038212316635461e+00,-7.119864086142828619e-01,1.167151047593080859e+00,1.403177037016207773e-01,6.787665920475342007e-01,7.404757502304285532e-01,-7.756686047241958537e-01 -2.000000000000000000e+00,-7.568638549550668060e-01,-6.472177181985840910e-01,-1.532237795759666399e-01,7.867940527407438767e-01,-9.538927662329731438e-01,6.304128288441523953e-01,1.074234377193980183e+00,3.677145233577055472e-01,2.335483123314258669e-01,-4.636429126404094658e-01,-1.230689706779862780e+00,2.548121281128993276e-01,-1.233290200431685912e+00 -2.000000000000000000e+00,-1.772273760903495754e+00,-8.119935761909689020e-01,1.356446172680266793e+00,3.047660757651901586e-01,-3.926462513438215840e-01,6.304128288441523953e-01,8.304049745869581667e-01,-4.628246550822858185e-01,1.551575703289057140e+00,-1.036517320788364671e+00,-3.172877495800926345e-02,8.547495436698466786e-01,-2.326243111513074946e-01 diff --git a/tutorials/wine_data.csv b/tutorials/wine_data.csv deleted file mode 100644 index a0b3962..0000000 --- a/tutorials/wine_data.csv +++ /dev/null @@ -1,178 +0,0 @@ -1,14.23,1.71,2.43,15.6,127,2.8,3.06,.28,2.29,5.64,1.04,3.92,1065 -1,13.2,1.78,2.14,11.2,100,2.65,2.76,.26,1.28,4.38,1.05,3.4,1050 -1,13.16,2.36,2.67,18.6,101,2.8,3.24,.3,2.81,5.68,1.03,3.17,1185 -1,14.37,1.95,2.5,16.8,113,3.85,3.49,.24,2.18,7.8,.86,3.45,1480 -1,13.24,2.59,2.87,21,118,2.8,2.69,.39,1.82,4.32,1.04,2.93,735 -1,14.2,1.76,2.45,15.2,112,3.27,3.39,.34,1.97,6.75,1.05,2.85,1450 -1,14.39,1.87,2.45,14.6,96,2.5,2.52,.3,1.98,5.25,1.02,3.58,1290 -1,14.06,2.15,2.61,17.6,121,2.6,2.51,.31,1.25,5.05,1.06,3.58,1295 -1,14.83,1.64,2.17,14,97,2.8,2.98,.29,1.98,5.2,1.08,2.85,1045 -1,13.86,1.35,2.27,16,98,2.98,3.15,.22,1.85,7.22,1.01,3.55,1045 -1,14.1,2.16,2.3,18,105,2.95,3.32,.22,2.38,5.75,1.25,3.17,1510 -1,14.12,1.48,2.32,16.8,95,2.2,2.43,.26,1.57,5,1.17,2.82,1280 -1,13.75,1.73,2.41,16,89,2.6,2.76,.29,1.81,5.6,1.15,2.9,1320 -1,14.75,1.73,2.39,11.4,91,3.1,3.69,.43,2.81,5.4,1.25,2.73,1150 -1,14.38,1.87,2.38,12,102,3.3,3.64,.29,2.96,7.5,1.2,3,1547 -1,13.63,1.81,2.7,17.2,112,2.85,2.91,.3,1.46,7.3,1.28,2.88,1310 -1,14.3,1.92,2.72,20,120,2.8,3.14,.33,1.97,6.2,1.07,2.65,1280 -1,13.83,1.57,2.62,20,115,2.95,3.4,.4,1.72,6.6,1.13,2.57,1130 -1,14.19,1.59,2.48,16.5,108,3.3,3.93,.32,1.86,8.7,1.23,2.82,1680 -1,13.64,3.1,2.56,15.2,116,2.7,3.03,.17,1.66,5.1,.96,3.36,845 -1,14.06,1.63,2.28,16,126,3,3.17,.24,2.1,5.65,1.09,3.71,780 -1,12.93,3.8,2.65,18.6,102,2.41,2.41,.25,1.98,4.5,1.03,3.52,770 -1,13.71,1.86,2.36,16.6,101,2.61,2.88,.27,1.69,3.8,1.11,4,1035 -1,12.85,1.6,2.52,17.8,95,2.48,2.37,.26,1.46,3.93,1.09,3.63,1015 -1,13.5,1.81,2.61,20,96,2.53,2.61,.28,1.66,3.52,1.12,3.82,845 -1,13.05,2.05,3.22,25,124,2.63,2.68,.47,1.92,3.58,1.13,3.2,830 -1,13.39,1.77,2.62,16.1,93,2.85,2.94,.34,1.45,4.8,.92,3.22,1195 -1,13.3,1.72,2.14,17,94,2.4,2.19,.27,1.35,3.95,1.02,2.77,1285 -1,13.87,1.9,2.8,19.4,107,2.95,2.97,.37,1.76,4.5,1.25,3.4,915 -1,14.02,1.68,2.21,16,96,2.65,2.33,.26,1.98,4.7,1.04,3.59,1035 -1,13.73,1.5,2.7,22.5,101,3,3.25,.29,2.38,5.7,1.19,2.71,1285 -1,13.58,1.66,2.36,19.1,106,2.86,3.19,.22,1.95,6.9,1.09,2.88,1515 -1,13.68,1.83,2.36,17.2,104,2.42,2.69,.42,1.97,3.84,1.23,2.87,990 -1,13.76,1.53,2.7,19.5,132,2.95,2.74,.5,1.35,5.4,1.25,3,1235 -1,13.51,1.8,2.65,19,110,2.35,2.53,.29,1.54,4.2,1.1,2.87,1095 -1,13.48,1.81,2.41,20.5,100,2.7,2.98,.26,1.86,5.1,1.04,3.47,920 -1,13.28,1.64,2.84,15.5,110,2.6,2.68,.34,1.36,4.6,1.09,2.78,880 -1,13.05,1.65,2.55,18,98,2.45,2.43,.29,1.44,4.25,1.12,2.51,1105 -1,13.07,1.5,2.1,15.5,98,2.4,2.64,.28,1.37,3.7,1.18,2.69,1020 -1,14.22,3.99,2.51,13.2,128,3,3.04,.2,2.08,5.1,.89,3.53,760 -1,13.56,1.71,2.31,16.2,117,3.15,3.29,.34,2.34,6.13,.95,3.38,795 -1,13.41,3.84,2.12,18.8,90,2.45,2.68,.27,1.48,4.28,.91,3,1035 -1,13.88,1.89,2.59,15,101,3.25,3.56,.17,1.7,5.43,.88,3.56,1095 -1,13.24,3.98,2.29,17.5,103,2.64,2.63,.32,1.66,4.36,.82,3,680 -1,13.05,1.77,2.1,17,107,3,3,.28,2.03,5.04,.88,3.35,885 -1,14.21,4.04,2.44,18.9,111,2.85,2.65,.3,1.25,5.24,.87,3.33,1080 -1,14.38,3.59,2.28,16,102,3.25,3.17,.27,2.19,4.9,1.04,3.44,1065 -1,13.9,1.68,2.12,16,101,3.1,3.39,.21,2.14,6.1,.91,3.33,985 -1,14.1,2.02,2.4,18.8,103,2.75,2.92,.32,2.38,6.2,1.07,2.75,1060 -1,13.94,1.73,2.27,17.4,108,2.88,3.54,.32,2.08,8.90,1.12,3.1,1260 -1,13.05,1.73,2.04,12.4,92,2.72,3.27,.17,2.91,7.2,1.12,2.91,1150 -1,13.83,1.65,2.6,17.2,94,2.45,2.99,.22,2.29,5.6,1.24,3.37,1265 -1,13.82,1.75,2.42,14,111,3.88,3.74,.32,1.87,7.05,1.01,3.26,1190 -1,13.77,1.9,2.68,17.1,115,3,2.79,.39,1.68,6.3,1.13,2.93,1375 -1,13.74,1.67,2.25,16.4,118,2.6,2.9,.21,1.62,5.85,.92,3.2,1060 -1,13.56,1.73,2.46,20.5,116,2.96,2.78,.2,2.45,6.25,.98,3.03,1120 -1,14.22,1.7,2.3,16.3,118,3.2,3,.26,2.03,6.38,.94,3.31,970 -1,13.29,1.97,2.68,16.8,102,3,3.23,.31,1.66,6,1.07,2.84,1270 -1,13.72,1.43,2.5,16.7,108,3.4,3.67,.19,2.04,6.8,.89,2.87,1285 -2,12.37,.94,1.36,10.6,88,1.98,.57,.28,.42,1.95,1.05,1.82,520 -2,12.33,1.1,2.28,16,101,2.05,1.09,.63,.41,3.27,1.25,1.67,680 -2,12.64,1.36,2.02,16.8,100,2.02,1.41,.53,.62,5.75,.98,1.59,450 -2,13.67,1.25,1.92,18,94,2.1,1.79,.32,.73,3.8,1.23,2.46,630 -2,12.37,1.13,2.16,19,87,3.5,3.1,.19,1.87,4.45,1.22,2.87,420 -2,12.17,1.45,2.53,19,104,1.89,1.75,.45,1.03,2.95,1.45,2.23,355 -2,12.37,1.21,2.56,18.1,98,2.42,2.65,.37,2.08,4.6,1.19,2.3,678 -2,13.11,1.01,1.7,15,78,2.98,3.18,.26,2.28,5.3,1.12,3.18,502 -2,12.37,1.17,1.92,19.6,78,2.11,2,.27,1.04,4.68,1.12,3.48,510 -2,13.34,.94,2.36,17,110,2.53,1.3,.55,.42,3.17,1.02,1.93,750 -2,12.21,1.19,1.75,16.8,151,1.85,1.28,.14,2.5,2.85,1.28,3.07,718 -2,12.29,1.61,2.21,20.4,103,1.1,1.02,.37,1.46,3.05,.906,1.82,870 -2,13.86,1.51,2.67,25,86,2.95,2.86,.21,1.87,3.38,1.36,3.16,410 -2,13.49,1.66,2.24,24,87,1.88,1.84,.27,1.03,3.74,.98,2.78,472 -2,12.99,1.67,2.6,30,139,3.3,2.89,.21,1.96,3.35,1.31,3.5,985 -2,11.96,1.09,2.3,21,101,3.38,2.14,.13,1.65,3.21,.99,3.13,886 -2,11.66,1.88,1.92,16,97,1.61,1.57,.34,1.15,3.8,1.23,2.14,428 -2,13.03,.9,1.71,16,86,1.95,2.03,.24,1.46,4.6,1.19,2.48,392 -2,11.84,2.89,2.23,18,112,1.72,1.32,.43,.95,2.65,.96,2.52,500 -2,12.33,.99,1.95,14.8,136,1.9,1.85,.35,2.76,3.4,1.06,2.31,750 -2,12.7,3.87,2.4,23,101,2.83,2.55,.43,1.95,2.57,1.19,3.13,463 -2,12,.92,2,19,86,2.42,2.26,.3,1.43,2.5,1.38,3.12,278 -2,12.72,1.81,2.2,18.8,86,2.2,2.53,.26,1.77,3.9,1.16,3.14,714 -2,12.08,1.13,2.51,24,78,2,1.58,.4,1.4,2.2,1.31,2.72,630 -2,13.05,3.86,2.32,22.5,85,1.65,1.59,.61,1.62,4.8,.84,2.01,515 -2,11.84,.89,2.58,18,94,2.2,2.21,.22,2.35,3.05,.79,3.08,520 -2,12.67,.98,2.24,18,99,2.2,1.94,.3,1.46,2.62,1.23,3.16,450 -2,12.16,1.61,2.31,22.8,90,1.78,1.69,.43,1.56,2.45,1.33,2.26,495 -2,11.65,1.67,2.62,26,88,1.92,1.61,.4,1.34,2.6,1.36,3.21,562 -2,11.64,2.06,2.46,21.6,84,1.95,1.69,.48,1.35,2.8,1,2.75,680 -2,12.08,1.33,2.3,23.6,70,2.2,1.59,.42,1.38,1.74,1.07,3.21,625 -2,12.08,1.83,2.32,18.5,81,1.6,1.5,.52,1.64,2.4,1.08,2.27,480 -2,12,1.51,2.42,22,86,1.45,1.25,.5,1.63,3.6,1.05,2.65,450 -2,12.69,1.53,2.26,20.7,80,1.38,1.46,.58,1.62,3.05,.96,2.06,495 -2,12.29,2.83,2.22,18,88,2.45,2.25,.25,1.99,2.15,1.15,3.3,290 -2,11.62,1.99,2.28,18,98,3.02,2.26,.17,1.35,3.25,1.16,2.96,345 -2,12.47,1.52,2.2,19,162,2.5,2.27,.32,3.28,2.6,1.16,2.63,937 -2,11.81,2.12,2.74,21.5,134,1.6,.99,.14,1.56,2.5,.95,2.26,625 -2,12.29,1.41,1.98,16,85,2.55,2.5,.29,1.77,2.9,1.23,2.74,428 -2,12.37,1.07,2.1,18.5,88,3.52,3.75,.24,1.95,4.5,1.04,2.77,660 -2,12.29,3.17,2.21,18,88,2.85,2.99,.45,2.81,2.3,1.42,2.83,406 -2,12.08,2.08,1.7,17.5,97,2.23,2.17,.26,1.4,3.3,1.27,2.96,710 -2,12.6,1.34,1.9,18.5,88,1.45,1.36,.29,1.35,2.45,1.04,2.77,562 -2,12.34,2.45,2.46,21,98,2.56,2.11,.34,1.31,2.8,.8,3.38,438 -2,11.82,1.72,1.88,19.5,86,2.5,1.64,.37,1.42,2.06,.94,2.44,415 -2,12.51,1.73,1.98,20.5,85,2.2,1.92,.32,1.48,2.94,1.04,3.57,672 -2,12.42,2.55,2.27,22,90,1.68,1.84,.66,1.42,2.7,.86,3.3,315 -2,12.25,1.73,2.12,19,80,1.65,2.03,.37,1.63,3.4,1,3.17,510 -2,12.72,1.75,2.28,22.5,84,1.38,1.76,.48,1.63,3.3,.88,2.42,488 -2,12.22,1.29,1.94,19,92,2.36,2.04,.39,2.08,2.7,.86,3.02,312 -2,11.61,1.35,2.7,20,94,2.74,2.92,.29,2.49,2.65,.96,3.26,680 -2,11.46,3.74,1.82,19.5,107,3.18,2.58,.24,3.58,2.9,.75,2.81,562 -2,12.52,2.43,2.17,21,88,2.55,2.27,.26,1.22,2,.9,2.78,325 -2,11.76,2.68,2.92,20,103,1.75,2.03,.6,1.05,3.8,1.23,2.5,607 -2,11.41,.74,2.5,21,88,2.48,2.01,.42,1.44,3.08,1.1,2.31,434 -2,12.08,1.39,2.5,22.5,84,2.56,2.29,.43,1.04,2.9,.93,3.19,385 -2,11.03,1.51,2.2,21.5,85,2.46,2.17,.52,2.01,1.9,1.71,2.87,407 -2,11.82,1.47,1.99,20.8,86,1.98,1.6,.3,1.53,1.95,.95,3.33,495 -2,12.42,1.61,2.19,22.5,108,2,2.09,.34,1.61,2.06,1.06,2.96,345 -2,12.77,3.43,1.98,16,80,1.63,1.25,.43,.83,3.4,.7,2.12,372 -2,12,3.43,2,19,87,2,1.64,.37,1.87,1.28,.93,3.05,564 -2,11.45,2.4,2.42,20,96,2.9,2.79,.32,1.83,3.25,.8,3.39,625 -2,11.56,2.05,3.23,28.5,119,3.18,5.08,.47,1.87,6,.93,3.69,465 -2,12.42,4.43,2.73,26.5,102,2.2,2.13,.43,1.71,2.08,.92,3.12,365 -2,13.05,5.8,2.13,21.5,86,2.62,2.65,.3,2.01,2.6,.73,3.1,380 -2,11.87,4.31,2.39,21,82,2.86,3.03,.21,2.91,2.8,.75,3.64,380 -2,12.07,2.16,2.17,21,85,2.6,2.65,.37,1.35,2.76,.86,3.28,378 -2,12.43,1.53,2.29,21.5,86,2.74,3.15,.39,1.77,3.94,.69,2.84,352 -2,11.79,2.13,2.78,28.5,92,2.13,2.24,.58,1.76,3,.97,2.44,466 -2,12.37,1.63,2.3,24.5,88,2.22,2.45,.4,1.9,2.12,.89,2.78,342 -2,12.04,4.3,2.38,22,80,2.1,1.75,.42,1.35,2.6,.79,2.57,580 -3,12.86,1.35,2.32,18,122,1.51,1.25,.21,.94,4.1,.76,1.29,630 -3,12.88,2.99,2.4,20,104,1.3,1.22,.24,.83,5.4,.74,1.42,530 -3,12.81,2.31,2.4,24,98,1.15,1.09,.27,.83,5.7,.66,1.36,560 -3,12.7,3.55,2.36,21.5,106,1.7,1.2,.17,.84,5,.78,1.29,600 -3,12.51,1.24,2.25,17.5,85,2,.58,.6,1.25,5.45,.75,1.51,650 -3,12.6,2.46,2.2,18.5,94,1.62,.66,.63,.94,7.1,.73,1.58,695 -3,12.25,4.72,2.54,21,89,1.38,.47,.53,.8,3.85,.75,1.27,720 -3,12.53,5.51,2.64,25,96,1.79,.6,.63,1.1,5,.82,1.69,515 -3,13.49,3.59,2.19,19.5,88,1.62,.48,.58,.88,5.7,.81,1.82,580 -3,12.84,2.96,2.61,24,101,2.32,.6,.53,.81,4.92,.89,2.15,590 -3,12.93,2.81,2.7,21,96,1.54,.5,.53,.75,4.6,.77,2.31,600 -3,13.36,2.56,2.35,20,89,1.4,.5,.37,.64,5.6,.7,2.47,780 -3,13.52,3.17,2.72,23.5,97,1.55,.52,.5,.55,4.35,.89,2.06,520 -3,13.62,4.95,2.35,20,92,2,.8,.47,1.02,4.4,.91,2.05,550 -3,12.25,3.88,2.2,18.5,112,1.38,.78,.29,1.14,8.21,.65,2,855 -3,13.16,3.57,2.15,21,102,1.5,.55,.43,1.3,4,.6,1.68,830 -3,13.88,5.04,2.23,20,80,.98,.34,.4,.68,4.9,.58,1.33,415 -3,12.87,4.61,2.48,21.5,86,1.7,.65,.47,.86,7.65,.54,1.86,625 -3,13.32,3.24,2.38,21.5,92,1.93,.76,.45,1.25,8.42,.55,1.62,650 -3,13.08,3.9,2.36,21.5,113,1.41,1.39,.34,1.14,9.40,.57,1.33,550 -3,13.5,3.12,2.62,24,123,1.4,1.57,.22,1.25,8.60,.59,1.3,500 -3,12.79,2.67,2.48,22,112,1.48,1.36,.24,1.26,10.8,.48,1.47,480 -3,13.11,1.9,2.75,25.5,116,2.2,1.28,.26,1.56,7.1,.61,1.33,425 -3,13.23,3.3,2.28,18.5,98,1.8,.83,.61,1.87,10.52,.56,1.51,675 -3,12.58,1.29,2.1,20,103,1.48,.58,.53,1.4,7.6,.58,1.55,640 -3,13.17,5.19,2.32,22,93,1.74,.63,.61,1.55,7.9,.6,1.48,725 -3,13.84,4.12,2.38,19.5,89,1.8,.83,.48,1.56,9.01,.57,1.64,480 -3,12.45,3.03,2.64,27,97,1.9,.58,.63,1.14,7.5,.67,1.73,880 -3,14.34,1.68,2.7,25,98,2.8,1.31,.53,2.7,13,.57,1.96,660 -3,13.48,1.67,2.64,22.5,89,2.6,1.1,.52,2.29,11.75,.57,1.78,620 -3,12.36,3.83,2.38,21,88,2.3,.92,.5,1.04,7.65,.56,1.58,520 -3,13.69,3.26,2.54,20,107,1.83,.56,.5,.8,5.88,.96,1.82,680 -3,12.85,3.27,2.58,22,106,1.65,.6,.6,.96,5.58,.87,2.11,570 -3,12.96,3.45,2.35,18.5,106,1.39,.7,.4,.94,5.28,.68,1.75,675 -3,13.78,2.76,2.3,22,90,1.35,.68,.41,1.03,9.58,.7,1.68,615 -3,13.73,4.36,2.26,22.5,88,1.28,.47,.52,1.15,6.62,.78,1.75,520 -3,13.45,3.7,2.6,23,111,1.7,.92,.43,1.46,10.68,.85,1.56,695 -3,12.82,3.37,2.3,19.5,88,1.48,.66,.4,.97,10.26,.72,1.75,685 -3,13.58,2.58,2.69,24.5,105,1.55,.84,.39,1.54,8.66,.74,1.8,750 -3,13.4,4.6,2.86,25,112,1.98,.96,.27,1.11,8.5,.67,1.92,630 -3,12.2,3.03,2.32,19,96,1.25,.49,.4,.73,5.5,.66,1.83,510 -3,12.77,2.39,2.28,19.5,86,1.39,.51,.48,.64,9.899999,.57,1.63,470 -3,14.16,2.51,2.48,20,91,1.68,.7,.44,1.24,9.7,.62,1.71,660 -3,13.71,5.65,2.45,20.5,95,1.68,.61,.52,1.06,7.7,.64,1.74,740 -3,13.4,3.91,2.48,23,102,1.8,.75,.43,1.41,7.3,.7,1.56,750 -3,13.27,4.28,2.26,20,120,1.59,.69,.43,1.35,10.2,.59,1.56,835 -3,13.17,2.59,2.37,20,120,1.65,.68,.53,1.46,9.3,.6,1.62,840 -3,14.13,4.1,2.74,24.5,96,2.05,.76,.56,1.35,9.2,.61,1.6,560 From 3fccde15b115edf37b3d6034ba5d10f4d325b2dd Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 24 Jan 2015 00:17:53 -0500 Subject: [PATCH 206/248] comments --- tutorials/things_in_pandas.ipynb | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tutorials/things_in_pandas.ipynb b/tutorials/things_in_pandas.ipynb index b70b3d9..db9d0b4 100644 --- a/tutorials/things_in_pandas.ipynb +++ b/tutorials/things_in_pandas.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:5455ed1ab796c2d7a01bee46d8f4d18de1bbc93ba0257248aff18e7b73a05e0a" + "signature": "sha256:01adffebfb99d8e7a86af443b9d14ca7695efc917465ea85868cc42681d6e96b" }, "nbformat": 3, "nbformat_minor": 0, @@ -576,7 +576,8 @@ "cell_type": "code", "collapsed": false, "input": [ - "# Create a new column\n", + "# Creating a new column\n", + "\n", "df['team'] = pd.Series('', index=df.index)\n", "df.tail(3)" ], @@ -664,7 +665,7 @@ "cell_type": "code", "collapsed": false, "input": [ - "# process salary column\n", + "# Processing `salary` column\n", "\n", "df['salary'] = df['salary'].apply(lambda x: x.strip('$m'))\n", "df.tail()" @@ -781,7 +782,7 @@ "cell_type": "code", "collapsed": false, "input": [ - "# process `player` column\n", + "# Processing `player` column\n", "\n", "def process_player_col(text):\n", " name, rest = text.split('\\n')\n", From bd089d2b1eb545a8fdc6cadedd36e5b54121ea92 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 24 Jan 2015 00:20:58 -0500 Subject: [PATCH 207/248] comments --- pandas_sum_tricks.ipynb | 450 ---------------------------------------- 1 file changed, 450 deletions(-) delete mode 100644 pandas_sum_tricks.ipynb diff --git a/pandas_sum_tricks.ipynb b/pandas_sum_tricks.ipynb deleted file mode 100644 index ccf454e..0000000 --- a/pandas_sum_tricks.ipynb +++ /dev/null @@ -1,450 +0,0 @@ -{ - "metadata": { - "name": "", - "signature": "sha256:8222de4af96dc6569eddec8d75df6855e8bac273e12e8739fffc42aafd712ba2" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ - { - "cells": [ - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%load_ext watermark \n", - "%watermark -d -v -a 'Sebastian Raschka' -p numpy,pandas" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Sebastian Raschka 23/12/2014 \n", - "\n", - "CPython 3.4.2\n", - "IPython 2.3.1\n", - "\n", - "numpy 1.9.1\n", - "pandas 0.15.2\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "4 Simple Tricks To Speed up the Sum Calculation in Pandas" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "I wanted to improve the performance of some passages in my code a little bit and found that some simple tweaks can speed up the `pandas` section significantly. I thought that it might be one useful thing to share -- and no Cython or just-in-time compilation is required! " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In my case, I had a large dataframe where I wanted to calculate the sum of specific columns for different combinations of rows (approx. 100,000,000 of them, that's why I was looking for ways to speed it up). Anyway, below is a simple toy DataFrame to explore the `.sum()` method a little bit." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import pandas as pd\n", - "import numpy as np\n", - "\n", - "df = pd.DataFrame()\n", - "\n", - "for col in ('a', 'b', 'c', 'd'):\n", - " df[col] = pd.Series(range(1000), index=range(1000))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 2 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "df.tail()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    abcd
    995 995 995 995 995
    996 996 996 996 996
    997 997 997 997 997
    998 998 998 998 998
    999 999 999 999 999
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 3, - "text": [ - " a b c d\n", - "995 995 995 995 995\n", - "996 996 996 996 996\n", - "997 997 997 997 997\n", - "998 998 998 998 998\n", - "999 999 999 999 999" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's assume we are interested in calculating the sum of column `a`, `c`, and `d`, which would look like this:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "df.loc[:, ['a', 'c', 'd']].sum(axis=0)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 4, - "text": [ - "a 499500\n", - "c 499500\n", - "d 499500\n", - "dtype: int64" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, the `.loc` method is probably the most \"costliest\" one for this kind of operation. Since we are only intersted in the resulting numbers (i.e., the column sums), there is no need to make a copy of the array. Anyway, let's use the method above as a reference for comparison:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# 1\n", - "%timeit -n 1000 -r 5 df.loc[:, ['a', 'c', 'd']].sum(axis=0)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1000 loops, best of 5: 1.28 ms per loop\n" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Although this is a rather small DataFrame (1000 x 4), let's see by how much we can speed it up using a different slicing method:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# 2\n", - "%timeit -n 1000 -r 5 df[['a', 'c', 'd']].sum(axis=0)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1000 loops, best of 5: 1.03 ms per loop\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next, let us use the Numpy representation of the `NDFrame` via the `.values` attribue:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# 3\n", - "%timeit -n 1000 -r 5 df[['a', 'c', 'd']].values.sum(axis=0)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1000 loops, best of 5: 721 \u00b5s per loop\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "While the speed improvements in #2 and #3 were not really a surprise, the next \"trick\" surprised me a little bit. Here, we are calculating the sum of each column separately rather than slicing the array." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "[df[col].values.sum(axis=0) for col in ('a', 'c', 'd')]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 8, - "text": [ - "[499500, 499500, 499500]" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# 4\n", - "%timeit -n 1000 -r 5 [df[col].values.sum(axis=0) for col in ('a', 'c', 'd')]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1000 loops, best of 5: 64.8 \u00b5s per loop\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this case, this is an almost 10x improvement!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "One more thing: Let's try the Einstein summation convention [`einsum`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.einsum.html)." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from numpy import einsum\n", - "[einsum('i->', df[col].values) for col in ('a', 'c', 'd')]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 10, - "text": [ - "[499500, 499500, 499500]" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# 5\n", - "%timeit -n 1000 -r 5 [einsum('i->', df[col].values) for col in ('a', 'c', 'd')]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1000 loops, best of 5: 57.2 \u00b5s per loop\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Conclusion:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Using some simple tricks, the column sum calculation improved from 1280 to 57.2 \u00b5s per loop (approx. 22x faster!)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - } - ], - "metadata": {} - } - ] -} \ No newline at end of file From f681bd6e5d418d6d6d90e3141dd164db05a665e8 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 24 Jan 2015 11:02:44 -0500 Subject: [PATCH 208/248] added comments --- README.md | 1 - tutorials/things_in_pandas.ipynb | 372 +++++++++++++++++++++++++------ 2 files changed, 299 insertions(+), 74 deletions(-) diff --git a/README.md b/README.md index 2ec57f6..8b1340d 100644 --- a/README.md +++ b/README.md @@ -220,4 +220,3 @@ - [scikit-learn](http://scikit-learn.org/stable/) - A powerful machine learning library for Python and tools for efficient data mining and analysis. - diff --git a/tutorials/things_in_pandas.ipynb b/tutorials/things_in_pandas.ipynb index db9d0b4..a5d8a1e 100644 --- a/tutorials/things_in_pandas.ipynb +++ b/tutorials/things_in_pandas.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:01adffebfb99d8e7a86af443b9d14ca7695efc917465ea85868cc42681d6e96b" + "signature": "sha256:1ba931b3466a0506e031f8b9bdffcb2ba39138b42f3676b74376988bf095be97" }, "nbformat": 3, "nbformat_minor": 0, @@ -88,6 +88,7 @@ "- [Missing Values aka NaNs](#Missing-Values-aka-NaNs)\n", " - [Selecting NaN Rows](#Selecting-NaN-Rows)\n", " - [Dropping NaN Rows](#Dropping-NaN-Rows)\n", + " - [Filling NaN Rows](#Filling-NaN-Rows)\n", "- [Appending Rows to a DataFrame](#Appending-Rows-to-a-DataFrame)\n", "- [Sorting and Reindexing DataFrames](#Sorting-and-Reindexing-DataFrames)" ] @@ -328,6 +329,10 @@ "# Converting column names to lowercase\n", "\n", "df.columns = [c.lower() for c in df.columns]\n", + "\n", + "# or\n", + "# df.rename(columns=lambda x : x.lower())\n", + "\n", "df.tail()" ], "language": "python", @@ -576,10 +581,10 @@ "cell_type": "code", "collapsed": false, "input": [ - "# Creating a new column\n", + "# Processing `salary` column\n", "\n", - "df['team'] = pd.Series('', index=df.index)\n", - "df.tail(3)" + "df['salary'] = df['salary'].apply(lambda x: x.strip('$m'))\n", + "df.tail()" ], "language": "python", "metadata": {}, @@ -599,45 +604,63 @@ "
    shots_on_targetpoints_per_gamepointsteam
    5 Santiago Cazorla\\n Midfield \u2014 Arsenal 14.8 20 4NaN 20 9.97 NaN
    6 David Silva\\n Midfield \u2014 Manchester City 14.3 15 6 2 11 10.35 155.26
    7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea 14.0 20 2 14 10 10.47 209.49
    8 Saido Berahino\\n Forward \u2014 West Brom $13.8m Saido Berahino\\n Forward \u2014 West Brom 13.8 21 9 0 20 7.02 147.43
    9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m Steven Gerrard\\n Midfield \u2014 Liverpool 13.8 20 5 1 11 7.50 150.01
    \n", @@ -647,15 +670,19 @@ "output_type": "pyout", "prompt_number": 5, "text": [ - " player salary games goals assists \\\n", - "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 \n", - "8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 \n", - "9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 \n", + " player salary games goals assists \\\n", + "5 Santiago Cazorla\\n Midfield \u2014 Arsenal 14.8 20 4 NaN \n", + "6 David Silva\\n Midfield \u2014 Manchester City 14.3 15 6 2 \n", + "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea 14.0 20 2 14 \n", + "8 Saido Berahino\\n Forward \u2014 West Brom 13.8 21 9 0 \n", + "9 Steven Gerrard\\n Midfield \u2014 Liverpool 13.8 20 5 1 \n", "\n", - " shots_on_target points_per_game points team \n", - "7 10 10.47 209.49 \n", - "8 20 7.02 147.43 \n", - "9 11 7.50 150.01 " + " shots_on_target points_per_game points \n", + "5 20 9.97 NaN \n", + "6 11 10.35 155.26 \n", + "7 10 10.47 209.49 \n", + "8 20 7.02 147.43 \n", + "9 11 7.50 150.01 " ] } ], @@ -665,10 +692,14 @@ "cell_type": "code", "collapsed": false, "input": [ - "# Processing `salary` column\n", + "# Creating a new column\n", "\n", - "df['salary'] = df['salary'].apply(lambda x: x.strip('$m'))\n", - "df.tail()" + "df['team'] = pd.Series('', index=df.index)\n", + "\n", + "# or\n", + "# df.insert(loc=9, column='team', value='') \n", + "\n", + "df.tail(3)" ], "language": "python", "metadata": {}, @@ -693,32 +724,8 @@ " \n", " \n", " \n", - " 5\n", - " Santiago Cazorla\\n Midfield \u2014 Arsenal\n", - " 14.8\n", - " 20\n", - " 4\n", - " NaN\n", - " 20\n", - " 9.97\n", - " NaN\n", - " \n", - " \n", - " \n", - " 6\n", - " David Silva\\n Midfield \u2014 Manchester City\n", - " 14.3\n", - " 15\n", - " 6\n", - " 2\n", - " 11\n", - " 10.35\n", - " 155.26\n", - " \n", - " \n", - " \n", " 7\n", - " Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea\n", + " Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea\n", " 14.0\n", " 20\n", " 2\n", @@ -730,7 +737,7 @@ " \n", " \n", " 8\n", - " Saido Berahino\\n Forward \u2014 West Brom\n", + " Saido Berahino\\n Forward \u2014 West Brom\n", " 13.8\n", " 21\n", " 9\n", @@ -742,7 +749,7 @@ " \n", " \n", " 9\n", - " Steven Gerrard\\n Midfield \u2014 Liverpool\n", + " Steven Gerrard\\n Midfield \u2014 Liverpool\n", " 13.8\n", " 20\n", " 5\n", @@ -760,16 +767,12 @@ "output_type": "pyout", "prompt_number": 6, "text": [ - " player salary games goals assists \\\n", - "5 Santiago Cazorla\\n Midfield \u2014 Arsenal 14.8 20 4 NaN \n", - "6 David Silva\\n Midfield \u2014 Manchester City 14.3 15 6 2 \n", - "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea 14.0 20 2 14 \n", - "8 Saido Berahino\\n Forward \u2014 West Brom 13.8 21 9 0 \n", - "9 Steven Gerrard\\n Midfield \u2014 Liverpool 13.8 20 5 1 \n", + " player salary games goals assists \\\n", + "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea 14.0 20 2 14 \n", + "8 Saido Berahino\\n Forward \u2014 West Brom 13.8 21 9 0 \n", + "9 Steven Gerrard\\n Midfield \u2014 Liverpool 13.8 20 5 1 \n", "\n", " shots_on_target points_per_game points team \n", - "5 20 9.97 NaN \n", - "6 11 10.35 155.26 \n", "7 10 10.47 209.49 \n", "8 20 7.02 147.43 \n", "9 11 7.50 150.01 " @@ -1229,6 +1232,227 @@ "
    " ] }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Filling NaN Rows" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Filling NaN cells with default value 0\n", + "\n", + "df = df.fillna(value=0)\n", + "df" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointsteamposition
    0 Sergio Ag\u00fcero 19.2 16 14 3 34 13.12 209.98 Manchester City Forward
    1 Eden Hazard 18.9 21 8 4 17 13.05 274.04 Chelsea Midfield
    2 Alexis S\u00e1nchez 17.6 0 12 7 29 11.19 223.86 Arsenal Forward
    3 Yaya Tour\u00e9 16.6 18 7 1 19 10.99 197.91 Manchester City Midfield
    4 \u00c1ngel Di Mar\u00eda 15.0 13 3 0 13 10.17 132.23 Manchester United Midfield
    5 Santiago Cazorla 14.8 20 4 0 20 9.97 0.00 Arsenal Midfield
    6 David Silva 14.3 15 6 2 11 10.35 155.26 Manchester City Midfield
    7 Cesc F\u00e0bregas 14.0 20 2 14 10 10.47 209.49 Chelsea Midfield
    8 Saido Berahino 13.8 21 9 0 20 7.02 147.43 West Brom Forward
    9 Steven Gerrard 13.8 20 5 1 11 7.50 150.01 Liverpool Midfield
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 10, + "text": [ + " player salary games goals assists shots_on_target \\\n", + "0 Sergio Ag\u00fcero 19.2 16 14 3 34 \n", + "1 Eden Hazard 18.9 21 8 4 17 \n", + "2 Alexis S\u00e1nchez 17.6 0 12 7 29 \n", + "3 Yaya Tour\u00e9 16.6 18 7 1 19 \n", + "4 \u00c1ngel Di Mar\u00eda 15.0 13 3 0 13 \n", + "5 Santiago Cazorla 14.8 20 4 0 20 \n", + "6 David Silva 14.3 15 6 2 11 \n", + "7 Cesc F\u00e0bregas 14.0 20 2 14 10 \n", + "8 Saido Berahino 13.8 21 9 0 20 \n", + "9 Steven Gerrard 13.8 20 5 1 11 \n", + "\n", + " points_per_game points team position \n", + "0 13.12 209.98 Manchester City Forward \n", + "1 13.05 274.04 Chelsea Midfield \n", + "2 11.19 223.86 Arsenal Forward \n", + "3 10.99 197.91 Manchester City Midfield \n", + "4 10.17 132.23 Manchester United Midfield \n", + "5 9.97 0.00 Arsenal Midfield \n", + "6 10.35 155.26 Manchester City Midfield \n", + "7 10.47 209.49 Chelsea Midfield \n", + "8 7.02 147.43 West Brom Forward \n", + "9 7.50 150.01 Liverpool Midfield " + ] + } + ], + "prompt_number": 10 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, { "cell_type": "heading", "level": 1, @@ -1250,8 +1474,10 @@ "input": [ "# Adding an \"empty\" row to the DataFrame\n", "\n", + "import numpy as np\n", + "\n", "df = df.append(pd.Series(\n", - " [None]*len(df.columns), # Fill cells with NaNs\n", + " [np.nan]*len(df.columns), # Fill cells with NaNs\n", " index=df.columns), \n", " ignore_index=True)\n", "\n", @@ -1351,7 +1577,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 10, + "prompt_number": 11, "text": [ " player salary games goals assists shots_on_target \\\n", "6 David Silva 14.3 15 6 2 11 \n", @@ -1369,7 +1595,7 @@ ] } ], - "prompt_number": 10 + "prompt_number": 11 }, { "cell_type": "code", @@ -1475,7 +1701,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 11, + "prompt_number": 12, "text": [ " player salary games goals assists shots_on_target \\\n", "6 David Silva 14.3 15 6 2 11 \n", @@ -1493,7 +1719,7 @@ ] } ], - "prompt_number": 11 + "prompt_number": 12 }, { "cell_type": "markdown", @@ -1567,7 +1793,7 @@ " 2\n", " Alexis S\u00e1nchez\n", " 17.6\n", - " NaN\n", + " 0\n", " 12\n", " 7\n", " 29\n", @@ -1621,11 +1847,11 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 12, + "prompt_number": 13, "text": [ " player salary games goals assists shots_on_target \\\n", "0 Sergio Ag\u00fcero 19.2 16 14 3 34 \n", - "2 Alexis S\u00e1nchez 17.6 NaN 12 7 29 \n", + "2 Alexis S\u00e1nchez 17.6 0 12 7 29 \n", "8 Saido Berahino 13.8 21 9 0 20 \n", "1 Eden Hazard 18.9 21 8 4 17 \n", "3 Yaya Tour\u00e9 16.6 18 7 1 19 \n", @@ -1639,7 +1865,7 @@ ] } ], - "prompt_number": 12 + "prompt_number": 13 }, { "cell_type": "code", @@ -1690,7 +1916,7 @@ " 2\n", " Alexis S\u00e1nchez\n", " 17.6\n", - " NaN\n", + " 0\n", " 12\n", " 7\n", " 29\n", @@ -1744,11 +1970,11 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 13, + "prompt_number": 14, "text": [ " player salary games goals assists shots_on_target \\\n", "1 Sergio Ag\u00fcero 19.2 16 14 3 34 \n", - "2 Alexis S\u00e1nchez 17.6 NaN 12 7 29 \n", + "2 Alexis S\u00e1nchez 17.6 0 12 7 29 \n", "3 Saido Berahino 13.8 21 9 0 20 \n", "4 Eden Hazard 18.9 21 8 4 17 \n", "5 Yaya Tour\u00e9 16.6 18 7 1 19 \n", @@ -1762,7 +1988,7 @@ ] } ], - "prompt_number": 13 + "prompt_number": 14 } ], "metadata": {} From c68623a5aa90af29edc7c4e1315298edb5b54c86 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 24 Jan 2015 15:18:17 -0500 Subject: [PATCH 209/248] Updating Columns update --- tutorials/things_in_pandas.ipynb | 831 ++++++++++++++++++++++--------- 1 file changed, 591 insertions(+), 240 deletions(-) diff --git a/tutorials/things_in_pandas.ipynb b/tutorials/things_in_pandas.ipynb index a5d8a1e..972f395 100644 --- a/tutorials/things_in_pandas.ipynb +++ b/tutorials/things_in_pandas.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:1ba931b3466a0506e031f8b9bdffcb2ba39138b42f3676b74376988bf095be97" + "signature": "sha256:d1e515a46e85e308d5673229e5a6f87c3db1d616a30cee44a09e0af3e088e19c" }, "nbformat": 3, "nbformat_minor": 0, @@ -84,13 +84,18 @@ "source": [ "- [Loading Some Example Data](#Loading-Some-Example-Data)\n", "- [Renaming Columns](#Renaming-Columns)\n", + " - [Converting Column Names to Lowercase](#Converting-Column-Names-to-Lowercase)\n", + " - [Renaming Particular Columns](#Renaming-Particular-Columns)\n", "- [Applying Computations Rows-wise](#Applying-Computations-Rows-wise)\n", + " - [Changing Values in a Column](#Changing-Values-in-a-Column)\n", + " - [Adding a New Column](#Adding-a-New-Column)\n", "- [Missing Values aka NaNs](#Missing-Values-aka-NaNs)\n", " - [Selecting NaN Rows](#Selecting-NaN-Rows)\n", - " - [Dropping NaN Rows](#Dropping-NaN-Rows)\n", + " - [Selecting non-NaN Rows](#Selecting-non-NaN-Rows)\n", " - [Filling NaN Rows](#Filling-NaN-Rows)\n", "- [Appending Rows to a DataFrame](#Appending-Rows-to-a-DataFrame)\n", - "- [Sorting and Reindexing DataFrames](#Sorting-and-Reindexing-DataFrames)" + "- [Sorting and Reindexing DataFrames](#Sorting-and-Reindexing-DataFrames)\n", + "- [Updating Columns](#Updating-Columns)" ] }, { @@ -322,6 +327,22 @@ "[[back to section overview](#Sections)]" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Converting Column Names to Lowercase" + ] + }, { "cell_type": "code", "collapsed": false, @@ -333,7 +354,7 @@ "# or\n", "# df.rename(columns=lambda x : x.lower())\n", "\n", - "df.tail()" + "df.tail(3)" ], "language": "python", "metadata": {}, @@ -357,30 +378,8 @@ " \n", " \n", " \n", - " 5\n", - " Santiago Cazorla\\n Midfield \u2014 Arsenal\n", - " $14.8m\n", - " 20\n", - " 4\n", - " NaN\n", - " 20\n", - " 9.97\n", - " NaN\n", - " \n", - " \n", - " 6\n", - " David Silva\\n Midfield \u2014 Manchester City\n", - " $14.3m\n", - " 15\n", - " 6\n", - " 2\n", - " 11\n", - " 10.35\n", - " 155.26\n", - " \n", - " \n", " 7\n", - " Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea\n", + " Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea\n", " $14.0m\n", " 20\n", " 2\n", @@ -391,7 +390,7 @@ " \n", " \n", " 8\n", - " Saido Berahino\\n Forward \u2014 West Brom\n", + " Saido Berahino\\n Forward \u2014 West Brom\n", " $13.8m\n", " 21\n", " 9\n", @@ -402,7 +401,7 @@ " \n", " \n", " 9\n", - " Steven Gerrard\\n Midfield \u2014 Liverpool\n", + " Steven Gerrard\\n Midfield \u2014 Liverpool\n", " $13.8m\n", " 20\n", " 5\n", @@ -419,16 +418,12 @@ "output_type": "pyout", "prompt_number": 3, "text": [ - " player salary gp g a sot ppg \\\n", - "5 Santiago Cazorla\\n Midfield \u2014 Arsenal $14.8m 20 4 NaN 20 9.97 \n", - "6 David Silva\\n Midfield \u2014 Manchester City $14.3m 15 6 2 11 10.35 \n", - "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 10 10.47 \n", - "8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 20 7.02 \n", - "9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 11 7.50 \n", + " player salary gp g a sot ppg \\\n", + "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 10 10.47 \n", + "8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 20 7.02 \n", + "9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 11 7.50 \n", "\n", " p \n", - "5 NaN \n", - "6 155.26 \n", "7 209.49 \n", "8 147.43 \n", "9 150.01 " @@ -437,12 +432,26 @@ ], "prompt_number": 3 }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Renaming Particular Columns" + ] + }, { "cell_type": "code", "collapsed": false, "input": [ - "# Renaming particular columns\n", - "\n", "df = df.rename(columns={'p': 'points', \n", " 'gp': 'games',\n", " 'sot': 'shots_on_target',\n", @@ -450,7 +459,7 @@ " 'ppg': 'points_per_game',\n", " 'a': 'assists',})\n", "\n", - "df.tail()" + "df.tail(3)" ], "language": "python", "metadata": {}, @@ -474,30 +483,8 @@ " \n", " \n", " \n", - " 5\n", - " Santiago Cazorla\\n Midfield \u2014 Arsenal\n", - " $14.8m\n", - " 20\n", - " 4\n", - " NaN\n", - " 20\n", - " 9.97\n", - " NaN\n", - " \n", - " \n", - " 6\n", - " David Silva\\n Midfield \u2014 Manchester City\n", - " $14.3m\n", - " 15\n", - " 6\n", - " 2\n", - " 11\n", - " 10.35\n", - " 155.26\n", - " \n", - " \n", " 7\n", - " Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea\n", + " Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea\n", " $14.0m\n", " 20\n", " 2\n", @@ -508,7 +495,7 @@ " \n", " \n", " 8\n", - " Saido Berahino\\n Forward \u2014 West Brom\n", + " Saido Berahino\\n Forward \u2014 West Brom\n", " $13.8m\n", " 21\n", " 9\n", @@ -519,7 +506,7 @@ " \n", " \n", " 9\n", - " Steven Gerrard\\n Midfield \u2014 Liverpool\n", + " Steven Gerrard\\n Midfield \u2014 Liverpool\n", " $13.8m\n", " 20\n", " 5\n", @@ -536,16 +523,12 @@ "output_type": "pyout", "prompt_number": 4, "text": [ - " player salary games goals assists \\\n", - "5 Santiago Cazorla\\n Midfield \u2014 Arsenal $14.8m 20 4 NaN \n", - "6 David Silva\\n Midfield \u2014 Manchester City $14.3m 15 6 2 \n", - "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 \n", - "8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 \n", - "9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 \n", + " player salary games goals assists \\\n", + "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 \n", + "8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 \n", + "9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 \n", "\n", " shots_on_target points_per_game points \n", - "5 20 9.97 NaN \n", - "6 11 10.35 155.26 \n", "7 10 10.47 209.49 \n", "8 20 7.02 147.43 \n", "9 11 7.50 150.01 " @@ -577,6 +560,22 @@ "[[back to section overview](#Sections)]" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Changing Values in a Column" + ] + }, { "cell_type": "code", "collapsed": false, @@ -688,12 +687,26 @@ ], "prompt_number": 5 }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Adding a New Column" + ] + }, { "cell_type": "code", "collapsed": false, "input": [ - "# Creating a new column\n", - "\n", "df['team'] = pd.Series('', index=df.index)\n", "\n", "# or\n", @@ -794,9 +807,10 @@ "\n", "for idx,row in df.iterrows():\n", " name, position, team = process_player_col(row['player'])\n", + "\n", " df.ix[idx, 'player'], df.ix[idx, 'position'], df.ix[idx, 'team'] = name, position, team\n", " \n", - "df.tail()" + "df.tail(3)" ], "language": "python", "metadata": {}, @@ -822,34 +836,8 @@ " \n", " \n", " \n", - " 5\n", - " Santiago Cazorla\n", - " 14.8\n", - " 20\n", - " 4\n", - " NaN\n", - " 20\n", - " 9.97\n", - " NaN\n", - " Arsenal\n", - " Midfield\n", - " \n", - " \n", - " 6\n", - " David Silva\n", - " 14.3\n", - " 15\n", - " 6\n", - " 2\n", - " 11\n", - " 10.35\n", - " 155.26\n", - " Manchester City\n", - " Midfield\n", - " \n", - " \n", " 7\n", - " Cesc F\u00e0bregas\n", + " Cesc F\u00e0bregas\n", " 14.0\n", " 20\n", " 2\n", @@ -857,12 +845,12 @@ " 10\n", " 10.47\n", " 209.49\n", - " Chelsea\n", + " Chelsea\n", " Midfield\n", " \n", " \n", " 8\n", - " Saido Berahino\n", + " Saido Berahino\n", " 13.8\n", " 21\n", " 9\n", @@ -870,12 +858,12 @@ " 20\n", " 7.02\n", " 147.43\n", - " West Brom\n", + " West Brom\n", " Forward\n", " \n", " \n", " 9\n", - " Steven Gerrard\n", + " Steven Gerrard\n", " 13.8\n", " 20\n", " 5\n", @@ -883,7 +871,7 @@ " 11\n", " 7.50\n", " 150.01\n", - " Liverpool\n", + " Liverpool\n", " Midfield\n", " \n", " \n", @@ -894,19 +882,15 @@ "output_type": "pyout", "prompt_number": 7, "text": [ - " player salary games goals assists shots_on_target \\\n", - "5 Santiago Cazorla 14.8 20 4 NaN 20 \n", - "6 David Silva 14.3 15 6 2 11 \n", - "7 Cesc F\u00e0bregas 14.0 20 2 14 10 \n", - "8 Saido Berahino 13.8 21 9 0 20 \n", - "9 Steven Gerrard 13.8 20 5 1 11 \n", + " player salary games goals assists shots_on_target \\\n", + "7 Cesc F\u00e0bregas 14.0 20 2 14 10 \n", + "8 Saido Berahino 13.8 21 9 0 20 \n", + "9 Steven Gerrard 13.8 20 5 1 11 \n", "\n", - " points_per_game points team position \n", - "5 9.97 NaN Arsenal Midfield \n", - "6 10.35 155.26 Manchester City Midfield \n", - "7 10.47 209.49 Chelsea Midfield \n", - "8 7.02 147.43 West Brom Forward \n", - "9 7.50 150.01 Liverpool Midfield " + " points_per_game points team position \n", + "7 10.47 209.49 Chelsea Midfield \n", + "8 7.02 147.43 West Brom Forward \n", + "9 7.50 150.01 Liverpool Midfield " ] } ], @@ -945,25 +929,19 @@ }, { "cell_type": "heading", - "level": 2, + "level": 3, "metadata": {}, "source": [ "Selecting NaN Rows" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to section overview](#Sections)]" - ] - }, { "cell_type": "code", "collapsed": false, "input": [ "# Selecting all rows that have NaNs in the `assists` column\n", - "df[~df['assists'].notnull()]" + "\n", + "df[df['assists'].isnull()]" ], "language": "python", "metadata": {}, @@ -1044,25 +1022,16 @@ }, { "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Dropping NaN Rows" - ] - }, - { - "cell_type": "markdown", + "level": 3, "metadata": {}, "source": [ - "[[back to section overview](#Sections)]" + "Selecting non-NaN Rows" ] }, { "cell_type": "code", "collapsed": false, "input": [ - "# Dropping all rows that have NaNs in the `assists` column\n", - "\n", "df[df['assists'].notnull()]" ], "language": "python", @@ -1234,19 +1203,12 @@ }, { "cell_type": "heading", - "level": 2, + "level": 3, "metadata": {}, "source": [ "Filling NaN Rows" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to section overview](#Sections)]" - ] - }, { "cell_type": "code", "collapsed": false, @@ -1481,7 +1443,7 @@ " index=df.columns), \n", " ignore_index=True)\n", "\n", - "df.tail()" + "df.tail(3)" ], "language": "python", "metadata": {}, @@ -1507,32 +1469,6 @@ " \n", " \n", " \n", - " 6 \n", - " David Silva\n", - " 14.3\n", - " 15\n", - " 6\n", - " 2\n", - " 11\n", - " 10.35\n", - " 155.26\n", - " Manchester City\n", - " Midfield\n", - " \n", - " \n", - " 7 \n", - " Cesc F\u00e0bregas\n", - " 14.0\n", - " 20\n", - " 2\n", - " 14\n", - " 10\n", - " 10.47\n", - " 209.49\n", - " Chelsea\n", - " Midfield\n", - " \n", - " \n", " 8 \n", " Saido Berahino\n", " 13.8\n", @@ -1540,9 +1476,9 @@ " 9\n", " 0\n", " 20\n", - " 7.02\n", + " 7.02\n", " 147.43\n", - " West Brom\n", + " West Brom\n", " Forward\n", " \n", " \n", @@ -1553,9 +1489,9 @@ " 5\n", " 1\n", " 11\n", - " 7.50\n", + " 7.50\n", " 150.01\n", - " Liverpool\n", + " Liverpool\n", " Midfield\n", " \n", " \n", @@ -1566,9 +1502,9 @@ " NaN\n", " NaN\n", " NaN\n", - " NaN\n", + " NaN\n", " NaN\n", - " NaN\n", + " NaN\n", " NaN\n", " \n", " \n", @@ -1580,18 +1516,14 @@ "prompt_number": 11, "text": [ " player salary games goals assists shots_on_target \\\n", - "6 David Silva 14.3 15 6 2 11 \n", - "7 Cesc F\u00e0bregas 14.0 20 2 14 10 \n", "8 Saido Berahino 13.8 21 9 0 20 \n", "9 Steven Gerrard 13.8 20 5 1 11 \n", "10 NaN NaN NaN NaN NaN NaN \n", "\n", - " points_per_game points team position \n", - "6 10.35 155.26 Manchester City Midfield \n", - "7 10.47 209.49 Chelsea Midfield \n", - "8 7.02 147.43 West Brom Forward \n", - "9 7.50 150.01 Liverpool Midfield \n", - "10 NaN NaN NaN NaN " + " points_per_game points team position \n", + "8 7.02 147.43 West Brom Forward \n", + "9 7.50 150.01 Liverpool Midfield \n", + "10 NaN NaN NaN NaN " ] } ], @@ -1605,7 +1537,7 @@ "\n", "df.loc[df.index[-1], 'player'] = 'New Player'\n", "df.loc[df.index[-1], 'salary'] = 12.3\n", - "df.tail()" + "df.tail(3)" ], "language": "python", "metadata": {}, @@ -1631,43 +1563,17 @@ " \n", " \n", " \n", - " 6 \n", - " David Silva\n", - " 14.3\n", - " 15\n", - " 6\n", - " 2\n", - " 11\n", - " 10.35\n", - " 155.26\n", - " Manchester City\n", - " Midfield\n", - " \n", - " \n", - " 7 \n", - " Cesc F\u00e0bregas\n", - " 14.0\n", - " 20\n", - " 2\n", - " 14\n", - " 10\n", - " 10.47\n", - " 209.49\n", - " Chelsea\n", - " Midfield\n", - " \n", - " \n", - " 8 \n", - " Saido Berahino\n", - " 13.8\n", - " 21\n", - " 9\n", - " 0\n", - " 20\n", - " 7.02\n", - " 147.43\n", - " West Brom\n", - " Forward\n", + " 8 \n", + " Saido Berahino\n", + " 13.8\n", + " 21\n", + " 9\n", + " 0\n", + " 20\n", + " 7.02\n", + " 147.43\n", + " West Brom\n", + " Forward\n", " \n", " \n", " 9 \n", @@ -1677,9 +1583,9 @@ " 5\n", " 1\n", " 11\n", - " 7.50\n", + " 7.50\n", " 150.01\n", - " Liverpool\n", + " Liverpool\n", " Midfield\n", " \n", " \n", @@ -1690,9 +1596,9 @@ " NaN\n", " NaN\n", " NaN\n", - " NaN\n", + " NaN\n", " NaN\n", - " NaN\n", + " NaN\n", " NaN\n", " \n", " \n", @@ -1704,18 +1610,14 @@ "prompt_number": 12, "text": [ " player salary games goals assists shots_on_target \\\n", - "6 David Silva 14.3 15 6 2 11 \n", - "7 Cesc F\u00e0bregas 14.0 20 2 14 10 \n", "8 Saido Berahino 13.8 21 9 0 20 \n", "9 Steven Gerrard 13.8 20 5 1 11 \n", "10 New Player 12.3 NaN NaN NaN NaN \n", "\n", - " points_per_game points team position \n", - "6 10.35 155.26 Manchester City Midfield \n", - "7 10.47 209.49 Chelsea Midfield \n", - "8 7.02 147.43 West Brom Forward \n", - "9 7.50 150.01 Liverpool Midfield \n", - "10 NaN NaN NaN NaN " + " points_per_game points team position \n", + "8 7.02 147.43 West Brom Forward \n", + "9 7.50 150.01 Liverpool Midfield \n", + "10 NaN NaN NaN NaN " ] } ], @@ -1871,7 +1773,7 @@ "cell_type": "code", "collapsed": false, "input": [ - "# Reindexing the DataFrame after sorting\n", + "# Optional reindexing of the DataFrame after sorting\n", "\n", "df.index = range(1,len(df.index)+1)\n", "df.head()" @@ -1989,6 +1891,455 @@ } ], "prompt_number": 14 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Updating Columns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Creating a dummy DataFrame with changes in the `salary` column\n", + "\n", + "df_2 = df.copy()\n", + "df_2.loc[0:2, 'salary'] = [20.0, 15.0]\n", + "df_2.head(3)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointsteamposition
    1 Sergio Ag\u00fcero 20 16 14 3 34 13.12 209.98 Manchester City Forward
    2 Alexis S\u00e1nchez 15 0 12 7 29 11.19 223.86 Arsenal Forward
    3 Saido Berahino 13.8 21 9 0 20 7.02 147.43 West Brom Forward
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 15, + "text": [ + " player salary games goals assists shots_on_target \\\n", + "1 Sergio Ag\u00fcero 20 16 14 3 34 \n", + "2 Alexis S\u00e1nchez 15 0 12 7 29 \n", + "3 Saido Berahino 13.8 21 9 0 20 \n", + "\n", + " points_per_game points team position \n", + "1 13.12 209.98 Manchester City Forward \n", + "2 11.19 223.86 Arsenal Forward \n", + "3 7.02 147.43 West Brom Forward " + ] + } + ], + "prompt_number": 15 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Temporarily use the `player` columns as indices to \n", + "# apply the update functions\n", + "\n", + "df.set_index('player', inplace=True)\n", + "df_2.set_index('player', inplace=True)\n", + "df.head(3)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    salarygamesgoalsassistsshots_on_targetpoints_per_gamepointsteamposition
    player
    Sergio Ag\u00fcero 19.2 16 14 3 34 13.12 209.98 Manchester City Forward
    Alexis S\u00e1nchez 17.6 0 12 7 29 11.19 223.86 Arsenal Forward
    Saido Berahino 13.8 21 9 0 20 7.02 147.43 West Brom Forward
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 16, + "text": [ + " salary games goals assists shots_on_target \\\n", + "player \n", + "Sergio Ag\u00fcero 19.2 16 14 3 34 \n", + "Alexis S\u00e1nchez 17.6 0 12 7 29 \n", + "Saido Berahino 13.8 21 9 0 20 \n", + "\n", + " points_per_game points team position \n", + "player \n", + "Sergio Ag\u00fcero 13.12 209.98 Manchester City Forward \n", + "Alexis S\u00e1nchez 11.19 223.86 Arsenal Forward \n", + "Saido Berahino 7.02 147.43 West Brom Forward " + ] + } + ], + "prompt_number": 16 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Update the `salary` column\n", + "df.update(other=df_2['salary'], overwrite=True)\n", + "df.head(3)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    salarygamesgoalsassistsshots_on_targetpoints_per_gamepointsteamposition
    player
    Sergio Ag\u00fcero 20 16 14 3 34 13.12 209.98 Manchester City Forward
    Alexis S\u00e1nchez 15 0 12 7 29 11.19 223.86 Arsenal Forward
    Saido Berahino 13.8 21 9 0 20 7.02 147.43 West Brom Forward
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 17, + "text": [ + " salary games goals assists shots_on_target \\\n", + "player \n", + "Sergio Ag\u00fcero 20 16 14 3 34 \n", + "Alexis S\u00e1nchez 15 0 12 7 29 \n", + "Saido Berahino 13.8 21 9 0 20 \n", + "\n", + " points_per_game points team position \n", + "player \n", + "Sergio Ag\u00fcero 13.12 209.98 Manchester City Forward \n", + "Alexis S\u00e1nchez 11.19 223.86 Arsenal Forward \n", + "Saido Berahino 7.02 147.43 West Brom Forward " + ] + } + ], + "prompt_number": 17 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Reset the indices\n", + "df.reset_index(inplace=True)\n", + "df.head(3)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointsteamposition
    0 Sergio Ag\u00fcero 20 16 14 3 34 13.12 209.98 Manchester City Forward
    1 Alexis S\u00e1nchez 15 0 12 7 29 11.19 223.86 Arsenal Forward
    2 Saido Berahino 13.8 21 9 0 20 7.02 147.43 West Brom Forward
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 18, + "text": [ + " player salary games goals assists shots_on_target \\\n", + "0 Sergio Ag\u00fcero 20 16 14 3 34 \n", + "1 Alexis S\u00e1nchez 15 0 12 7 29 \n", + "2 Saido Berahino 13.8 21 9 0 20 \n", + "\n", + " points_per_game points team position \n", + "0 13.12 209.98 Manchester City Forward \n", + "1 11.19 223.86 Arsenal Forward \n", + "2 7.02 147.43 West Brom Forward " + ] + } + ], + "prompt_number": 18 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 18 } ], "metadata": {} From 598bde5c8a2579a5b9b2624688a3fcc9fa99ee11 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 24 Jan 2015 15:41:36 -0500 Subject: [PATCH 210/248] insert fix --- tutorials/things_in_pandas.ipynb | 260 ++++++++++++++++--------------- 1 file changed, 132 insertions(+), 128 deletions(-) diff --git a/tutorials/things_in_pandas.ipynb b/tutorials/things_in_pandas.ipynb index 972f395..9fdc9e7 100644 --- a/tutorials/things_in_pandas.ipynb +++ b/tutorials/things_in_pandas.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:d1e515a46e85e308d5673229e5a6f87c3db1d616a30cee44a09e0af3e088e19c" + "signature": "sha256:3075a6608bb9a788ad29d1daaeb2421c2db561abd63a3ce811c1fe8e6e482d9f" }, "nbformat": 3, "nbformat_minor": 0, @@ -710,7 +710,7 @@ "df['team'] = pd.Series('', index=df.index)\n", "\n", "# or\n", - "# df.insert(loc=9, column='team', value='') \n", + "df.insert(loc=8, column='position', value='') \n", "\n", "df.tail(3)" ], @@ -732,6 +732,7 @@ " shots_on_target\n", " points_per_game\n", " points\n", + " position\n", " team\n", " \n", " \n", @@ -747,6 +748,7 @@ " 10.47\n", " 209.49\n", " \n", + " \n", " \n", " \n", " 8\n", @@ -759,6 +761,7 @@ " 7.02\n", " 147.43\n", " \n", + " \n", " \n", " \n", " 9\n", @@ -771,6 +774,7 @@ " 7.50\n", " 150.01\n", " \n", + " \n", " \n", " \n", "\n", @@ -785,10 +789,10 @@ "8 Saido Berahino\\n Forward \u2014 West Brom 13.8 21 9 0 \n", "9 Steven Gerrard\\n Midfield \u2014 Liverpool 13.8 20 5 1 \n", "\n", - " shots_on_target points_per_game points team \n", - "7 10 10.47 209.49 \n", - "8 20 7.02 147.43 \n", - "9 11 7.50 150.01 " + " shots_on_target points_per_game points position team \n", + "7 10 10.47 209.49 \n", + "8 20 7.02 147.43 \n", + "9 11 7.50 150.01 " ] } ], @@ -830,8 +834,8 @@ " shots_on_target\n", " points_per_game\n", " points\n", - " team\n", " position\n", + " team\n", " \n", " \n", " \n", @@ -845,8 +849,8 @@ " 10\n", " 10.47\n", " 209.49\n", - " Chelsea\n", " Midfield\n", + " Chelsea\n", " \n", " \n", " 8\n", @@ -858,8 +862,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " West Brom\n", " Forward\n", + " West Brom\n", " \n", " \n", " 9\n", @@ -871,8 +875,8 @@ " 11\n", " 7.50\n", " 150.01\n", - " Liverpool\n", " Midfield\n", + " Liverpool\n", " \n", " \n", "\n", @@ -887,10 +891,10 @@ "8 Saido Berahino 13.8 21 9 0 20 \n", "9 Steven Gerrard 13.8 20 5 1 11 \n", "\n", - " points_per_game points team position \n", - "7 10.47 209.49 Chelsea Midfield \n", - "8 7.02 147.43 West Brom Forward \n", - "9 7.50 150.01 Liverpool Midfield " + " points_per_game points position team \n", + "7 10.47 209.49 Midfield Chelsea \n", + "8 7.02 147.43 Forward West Brom \n", + "9 7.50 150.01 Midfield Liverpool " ] } ], @@ -961,8 +965,8 @@ " shots_on_target\n", " points_per_game\n", " points\n", - " team\n", " position\n", + " team\n", " \n", " \n", " \n", @@ -976,8 +980,8 @@ " 13\n", " 10.17\n", " 132.23\n", - " Manchester United\n", " Midfield\n", + " Manchester United\n", " \n", " \n", " 5\n", @@ -989,8 +993,8 @@ " 20\n", " 9.97\n", " NaN\n", - " Arsenal\n", " Midfield\n", + " Arsenal\n", " \n", " \n", "\n", @@ -1004,9 +1008,9 @@ "4 \u00c1ngel Di Mar\u00eda 15.0 13 3 NaN 13 \n", "5 Santiago Cazorla 14.8 20 4 NaN 20 \n", "\n", - " points_per_game points team position \n", - "4 10.17 132.23 Manchester United Midfield \n", - "5 9.97 NaN Arsenal Midfield " + " points_per_game points position team \n", + "4 10.17 132.23 Midfield Manchester United \n", + "5 9.97 NaN Midfield Arsenal " ] } ], @@ -1052,8 +1056,8 @@ " shots_on_target\n", " points_per_game\n", " points\n", - " team\n", " position\n", + " team\n", " \n", " \n", " \n", @@ -1067,8 +1071,8 @@ " 34\n", " 13.12\n", " 209.98\n", - " Manchester City\n", " Forward\n", + " Manchester City\n", " \n", " \n", " 1\n", @@ -1080,8 +1084,8 @@ " 17\n", " 13.05\n", " 274.04\n", - " Chelsea\n", " Midfield\n", + " Chelsea\n", " \n", " \n", " 2\n", @@ -1093,8 +1097,8 @@ " 29\n", " 11.19\n", " 223.86\n", - " Arsenal\n", " Forward\n", + " Arsenal\n", " \n", " \n", " 3\n", @@ -1106,8 +1110,8 @@ " 19\n", " 10.99\n", " 197.91\n", - " Manchester City\n", " Midfield\n", + " Manchester City\n", " \n", " \n", " 6\n", @@ -1119,8 +1123,8 @@ " 11\n", " 10.35\n", " 155.26\n", - " Manchester City\n", " Midfield\n", + " Manchester City\n", " \n", " \n", " 7\n", @@ -1132,8 +1136,8 @@ " 10\n", " 10.47\n", " 209.49\n", - " Chelsea\n", " Midfield\n", + " Chelsea\n", " \n", " \n", " 8\n", @@ -1145,8 +1149,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " West Brom\n", " Forward\n", + " West Brom\n", " \n", " \n", " 9\n", @@ -1158,8 +1162,8 @@ " 11\n", " 7.50\n", " 150.01\n", - " Liverpool\n", " Midfield\n", + " Liverpool\n", " \n", " \n", "\n", @@ -1179,15 +1183,15 @@ "8 Saido Berahino 13.8 21 9 0 20 \n", "9 Steven Gerrard 13.8 20 5 1 11 \n", "\n", - " points_per_game points team position \n", - "0 13.12 209.98 Manchester City Forward \n", - "1 13.05 274.04 Chelsea Midfield \n", - "2 11.19 223.86 Arsenal Forward \n", - "3 10.99 197.91 Manchester City Midfield \n", - "6 10.35 155.26 Manchester City Midfield \n", - "7 10.47 209.49 Chelsea Midfield \n", - "8 7.02 147.43 West Brom Forward \n", - "9 7.50 150.01 Liverpool Midfield " + " points_per_game points position team \n", + "0 13.12 209.98 Forward Manchester City \n", + "1 13.05 274.04 Midfield Chelsea \n", + "2 11.19 223.86 Forward Arsenal \n", + "3 10.99 197.91 Midfield Manchester City \n", + "6 10.35 155.26 Midfield Manchester City \n", + "7 10.47 209.49 Midfield Chelsea \n", + "8 7.02 147.43 Forward West Brom \n", + "9 7.50 150.01 Midfield Liverpool " ] } ], @@ -1236,8 +1240,8 @@ " shots_on_target\n", " points_per_game\n", " points\n", - " team\n", " position\n", + " team\n", " \n", " \n", " \n", @@ -1251,8 +1255,8 @@ " 34\n", " 13.12\n", " 209.98\n", - " Manchester City\n", " Forward\n", + " Manchester City\n", " \n", " \n", " 1\n", @@ -1264,8 +1268,8 @@ " 17\n", " 13.05\n", " 274.04\n", - " Chelsea\n", " Midfield\n", + " Chelsea\n", " \n", " \n", " 2\n", @@ -1277,8 +1281,8 @@ " 29\n", " 11.19\n", " 223.86\n", - " Arsenal\n", " Forward\n", + " Arsenal\n", " \n", " \n", " 3\n", @@ -1290,8 +1294,8 @@ " 19\n", " 10.99\n", " 197.91\n", - " Manchester City\n", " Midfield\n", + " Manchester City\n", " \n", " \n", " 4\n", @@ -1303,8 +1307,8 @@ " 13\n", " 10.17\n", " 132.23\n", - " Manchester United\n", " Midfield\n", + " Manchester United\n", " \n", " \n", " 5\n", @@ -1316,8 +1320,8 @@ " 20\n", " 9.97\n", " 0.00\n", - " Arsenal\n", " Midfield\n", + " Arsenal\n", " \n", " \n", " 6\n", @@ -1329,8 +1333,8 @@ " 11\n", " 10.35\n", " 155.26\n", - " Manchester City\n", " Midfield\n", + " Manchester City\n", " \n", " \n", " 7\n", @@ -1342,8 +1346,8 @@ " 10\n", " 10.47\n", " 209.49\n", - " Chelsea\n", " Midfield\n", + " Chelsea\n", " \n", " \n", " 8\n", @@ -1355,8 +1359,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " West Brom\n", " Forward\n", + " West Brom\n", " \n", " \n", " 9\n", @@ -1368,8 +1372,8 @@ " 11\n", " 7.50\n", " 150.01\n", - " Liverpool\n", " Midfield\n", + " Liverpool\n", " \n", " \n", "\n", @@ -1391,17 +1395,17 @@ "8 Saido Berahino 13.8 21 9 0 20 \n", "9 Steven Gerrard 13.8 20 5 1 11 \n", "\n", - " points_per_game points team position \n", - "0 13.12 209.98 Manchester City Forward \n", - "1 13.05 274.04 Chelsea Midfield \n", - "2 11.19 223.86 Arsenal Forward \n", - "3 10.99 197.91 Manchester City Midfield \n", - "4 10.17 132.23 Manchester United Midfield \n", - "5 9.97 0.00 Arsenal Midfield \n", - "6 10.35 155.26 Manchester City Midfield \n", - "7 10.47 209.49 Chelsea Midfield \n", - "8 7.02 147.43 West Brom Forward \n", - "9 7.50 150.01 Liverpool Midfield " + " points_per_game points position team \n", + "0 13.12 209.98 Forward Manchester City \n", + "1 13.05 274.04 Midfield Chelsea \n", + "2 11.19 223.86 Forward Arsenal \n", + "3 10.99 197.91 Midfield Manchester City \n", + "4 10.17 132.23 Midfield Manchester United \n", + "5 9.97 0.00 Midfield Arsenal \n", + "6 10.35 155.26 Midfield Manchester City \n", + "7 10.47 209.49 Midfield Chelsea \n", + "8 7.02 147.43 Forward West Brom \n", + "9 7.50 150.01 Midfield Liverpool " ] } ], @@ -1463,8 +1467,8 @@ " shots_on_target\n", " points_per_game\n", " points\n", - " team\n", " position\n", + " team\n", " \n", " \n", " \n", @@ -1478,8 +1482,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " West Brom\n", " Forward\n", + " West Brom\n", " \n", " \n", " 9 \n", @@ -1491,8 +1495,8 @@ " 11\n", " 7.50\n", " 150.01\n", - " Liverpool\n", " Midfield\n", + " Liverpool\n", " \n", " \n", " 10\n", @@ -1520,9 +1524,9 @@ "9 Steven Gerrard 13.8 20 5 1 11 \n", "10 NaN NaN NaN NaN NaN NaN \n", "\n", - " points_per_game points team position \n", - "8 7.02 147.43 West Brom Forward \n", - "9 7.50 150.01 Liverpool Midfield \n", + " points_per_game points position team \n", + "8 7.02 147.43 Forward West Brom \n", + "9 7.50 150.01 Midfield Liverpool \n", "10 NaN NaN NaN NaN " ] } @@ -1557,8 +1561,8 @@ " shots_on_target\n", " points_per_game\n", " points\n", - " team\n", " position\n", + " team\n", " \n", " \n", " \n", @@ -1572,8 +1576,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " West Brom\n", " Forward\n", + " West Brom\n", " \n", " \n", " 9 \n", @@ -1585,8 +1589,8 @@ " 11\n", " 7.50\n", " 150.01\n", - " Liverpool\n", " Midfield\n", + " Liverpool\n", " \n", " \n", " 10\n", @@ -1614,9 +1618,9 @@ "9 Steven Gerrard 13.8 20 5 1 11 \n", "10 New Player 12.3 NaN NaN NaN NaN \n", "\n", - " points_per_game points team position \n", - "8 7.02 147.43 West Brom Forward \n", - "9 7.50 150.01 Liverpool Midfield \n", + " points_per_game points position team \n", + "8 7.02 147.43 Forward West Brom \n", + "9 7.50 150.01 Midfield Liverpool \n", "10 NaN NaN NaN NaN " ] } @@ -1673,8 +1677,8 @@ " shots_on_target\n", " points_per_game\n", " points\n", - " team\n", " position\n", + " team\n", " \n", " \n", " \n", @@ -1688,8 +1692,8 @@ " 34\n", " 13.12\n", " 209.98\n", - " Manchester City\n", " Forward\n", + " Manchester City\n", " \n", " \n", " 2\n", @@ -1701,8 +1705,8 @@ " 29\n", " 11.19\n", " 223.86\n", - " Arsenal\n", " Forward\n", + " Arsenal\n", " \n", " \n", " 8\n", @@ -1714,8 +1718,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " West Brom\n", " Forward\n", + " West Brom\n", " \n", " \n", " 1\n", @@ -1727,8 +1731,8 @@ " 17\n", " 13.05\n", " 274.04\n", - " Chelsea\n", " Midfield\n", + " Chelsea\n", " \n", " \n", " 3\n", @@ -1740,8 +1744,8 @@ " 19\n", " 10.99\n", " 197.91\n", - " Manchester City\n", " Midfield\n", + " Manchester City\n", " \n", " \n", "\n", @@ -1758,12 +1762,12 @@ "1 Eden Hazard 18.9 21 8 4 17 \n", "3 Yaya Tour\u00e9 16.6 18 7 1 19 \n", "\n", - " points_per_game points team position \n", - "0 13.12 209.98 Manchester City Forward \n", - "2 11.19 223.86 Arsenal Forward \n", - "8 7.02 147.43 West Brom Forward \n", - "1 13.05 274.04 Chelsea Midfield \n", - "3 10.99 197.91 Manchester City Midfield " + " points_per_game points position team \n", + "0 13.12 209.98 Forward Manchester City \n", + "2 11.19 223.86 Forward Arsenal \n", + "8 7.02 147.43 Forward West Brom \n", + "1 13.05 274.04 Midfield Chelsea \n", + "3 10.99 197.91 Midfield Manchester City " ] } ], @@ -1796,8 +1800,8 @@ " shots_on_target\n", " points_per_game\n", " points\n", - " team\n", " position\n", + " team\n", " \n", " \n", " \n", @@ -1811,8 +1815,8 @@ " 34\n", " 13.12\n", " 209.98\n", - " Manchester City\n", " Forward\n", + " Manchester City\n", " \n", " \n", " 2\n", @@ -1824,8 +1828,8 @@ " 29\n", " 11.19\n", " 223.86\n", - " Arsenal\n", " Forward\n", + " Arsenal\n", " \n", " \n", " 3\n", @@ -1837,8 +1841,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " West Brom\n", " Forward\n", + " West Brom\n", " \n", " \n", " 4\n", @@ -1850,8 +1854,8 @@ " 17\n", " 13.05\n", " 274.04\n", - " Chelsea\n", " Midfield\n", + " Chelsea\n", " \n", " \n", " 5\n", @@ -1863,8 +1867,8 @@ " 19\n", " 10.99\n", " 197.91\n", - " Manchester City\n", " Midfield\n", + " Manchester City\n", " \n", " \n", "\n", @@ -1881,12 +1885,12 @@ "4 Eden Hazard 18.9 21 8 4 17 \n", "5 Yaya Tour\u00e9 16.6 18 7 1 19 \n", "\n", - " points_per_game points team position \n", - "1 13.12 209.98 Manchester City Forward \n", - "2 11.19 223.86 Arsenal Forward \n", - "3 7.02 147.43 West Brom Forward \n", - "4 13.05 274.04 Chelsea Midfield \n", - "5 10.99 197.91 Manchester City Midfield " + " points_per_game points position team \n", + "1 13.12 209.98 Forward Manchester City \n", + "2 11.19 223.86 Forward Arsenal \n", + "3 7.02 147.43 Forward West Brom \n", + "4 13.05 274.04 Midfield Chelsea \n", + "5 10.99 197.91 Midfield Manchester City " ] } ], @@ -1943,8 +1947,8 @@ " shots_on_target\n", " points_per_game\n", " points\n", - " team\n", " position\n", + " team\n", " \n", " \n", " \n", @@ -1958,8 +1962,8 @@ " 34\n", " 13.12\n", " 209.98\n", - " Manchester City\n", " Forward\n", + " Manchester City\n", " \n", " \n", " 2\n", @@ -1971,8 +1975,8 @@ " 29\n", " 11.19\n", " 223.86\n", - " Arsenal\n", " Forward\n", + " Arsenal\n", " \n", " \n", " 3\n", @@ -1984,8 +1988,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " West Brom\n", " Forward\n", + " West Brom\n", " \n", " \n", "\n", @@ -2000,10 +2004,10 @@ "2 Alexis S\u00e1nchez 15 0 12 7 29 \n", "3 Saido Berahino 13.8 21 9 0 20 \n", "\n", - " points_per_game points team position \n", - "1 13.12 209.98 Manchester City Forward \n", - "2 11.19 223.86 Arsenal Forward \n", - "3 7.02 147.43 West Brom Forward " + " points_per_game points position team \n", + "1 13.12 209.98 Forward Manchester City \n", + "2 11.19 223.86 Forward Arsenal \n", + "3 7.02 147.43 Forward West Brom " ] } ], @@ -2045,8 +2049,8 @@ " shots_on_target\n", " points_per_game\n", " points\n", - " team\n", " position\n", + " team\n", " \n", " \n", " player\n", @@ -2071,8 +2075,8 @@ " 34\n", " 13.12\n", " 209.98\n", - " Manchester City\n", " Forward\n", + " Manchester City\n", " \n", " \n", " Alexis S\u00e1nchez\n", @@ -2083,8 +2087,8 @@ " 29\n", " 11.19\n", " 223.86\n", - " Arsenal\n", " Forward\n", + " Arsenal\n", " \n", " \n", " Saido Berahino\n", @@ -2095,8 +2099,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " West Brom\n", " Forward\n", + " West Brom\n", " \n", " \n", "\n", @@ -2112,11 +2116,11 @@ "Alexis S\u00e1nchez 17.6 0 12 7 29 \n", "Saido Berahino 13.8 21 9 0 20 \n", "\n", - " points_per_game points team position \n", + " points_per_game points position team \n", "player \n", - "Sergio Ag\u00fcero 13.12 209.98 Manchester City Forward \n", - "Alexis S\u00e1nchez 11.19 223.86 Arsenal Forward \n", - "Saido Berahino 7.02 147.43 West Brom Forward " + "Sergio Ag\u00fcero 13.12 209.98 Forward Manchester City \n", + "Alexis S\u00e1nchez 11.19 223.86 Forward Arsenal \n", + "Saido Berahino 7.02 147.43 Forward West Brom " ] } ], @@ -2155,8 +2159,8 @@ " shots_on_target\n", " points_per_game\n", " points\n", - " team\n", " position\n", + " team\n", " \n", " \n", " player\n", @@ -2181,8 +2185,8 @@ " 34\n", " 13.12\n", " 209.98\n", - " Manchester City\n", " Forward\n", + " Manchester City\n", " \n", " \n", " Alexis S\u00e1nchez\n", @@ -2193,8 +2197,8 @@ " 29\n", " 11.19\n", " 223.86\n", - " Arsenal\n", " Forward\n", + " Arsenal\n", " \n", " \n", " Saido Berahino\n", @@ -2205,8 +2209,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " West Brom\n", " Forward\n", + " West Brom\n", " \n", " \n", "\n", @@ -2222,11 +2226,11 @@ "Alexis S\u00e1nchez 15 0 12 7 29 \n", "Saido Berahino 13.8 21 9 0 20 \n", "\n", - " points_per_game points team position \n", + " points_per_game points position team \n", "player \n", - "Sergio Ag\u00fcero 13.12 209.98 Manchester City Forward \n", - "Alexis S\u00e1nchez 11.19 223.86 Arsenal Forward \n", - "Saido Berahino 7.02 147.43 West Brom Forward " + "Sergio Ag\u00fcero 13.12 209.98 Forward Manchester City \n", + "Alexis S\u00e1nchez 11.19 223.86 Forward Arsenal \n", + "Saido Berahino 7.02 147.43 Forward West Brom " ] } ], @@ -2266,8 +2270,8 @@ " shots_on_target\n", " points_per_game\n", " points\n", - " team\n", " position\n", + " team\n", " \n", " \n", " \n", @@ -2281,8 +2285,8 @@ " 34\n", " 13.12\n", " 209.98\n", - " Manchester City\n", " Forward\n", + " Manchester City\n", " \n", " \n", " 1\n", @@ -2294,8 +2298,8 @@ " 29\n", " 11.19\n", " 223.86\n", - " Arsenal\n", " Forward\n", + " Arsenal\n", " \n", " \n", " 2\n", @@ -2307,8 +2311,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " West Brom\n", " Forward\n", + " West Brom\n", " \n", " \n", "\n", @@ -2323,10 +2327,10 @@ "1 Alexis S\u00e1nchez 15 0 12 7 29 \n", "2 Saido Berahino 13.8 21 9 0 20 \n", "\n", - " points_per_game points team position \n", - "0 13.12 209.98 Manchester City Forward \n", - "1 11.19 223.86 Arsenal Forward \n", - "2 7.02 147.43 West Brom Forward " + " points_per_game points position team \n", + "0 13.12 209.98 Forward Manchester City \n", + "1 11.19 223.86 Forward Arsenal \n", + "2 7.02 147.43 Forward West Brom " ] } ], From 1e6c7444ef0bdd0d7aa298b0b37a1e80b9ac7be8 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 24 Jan 2015 20:21:07 -0500 Subject: [PATCH 211/248] updated row-wise ops --- tutorials/things_in_pandas.ipynb | 238 +++++++++++++++---------------- 1 file changed, 117 insertions(+), 121 deletions(-) diff --git a/tutorials/things_in_pandas.ipynb b/tutorials/things_in_pandas.ipynb index 9fdc9e7..44f3acf 100644 --- a/tutorials/things_in_pandas.ipynb +++ b/tutorials/things_in_pandas.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:3075a6608bb9a788ad29d1daaeb2421c2db561abd63a3ce811c1fe8e6e482d9f" + "signature": "sha256:ae8818183bc1fe6a58845005b18b12c4458686fa307a82a46857775364df6506" }, "nbformat": 3, "nbformat_minor": 0, @@ -807,12 +807,17 @@ "def process_player_col(text):\n", " name, rest = text.split('\\n')\n", " position, team = rest.split(' \u2014 ')\n", - " return name, position, team\n", + " return pd.Series([name, position, team])\n", "\n", - "for idx,row in df.iterrows():\n", - " name, position, team = process_player_col(row['player'])\n", + "df[['player', 'team', 'position']] = df.player.apply(process_player_col)\n", "\n", - " df.ix[idx, 'player'], df.ix[idx, 'position'], df.ix[idx, 'team'] = name, position, team\n", + "# modified after tip from reddit.com/user/hharison\n", + "#\n", + "# Alternative (inferior) approach:\n", + "#\n", + "#for idx,row in df.iterrows():\n", + "# name, position, team = process_player_col(row['player'])\n", + "# df.ix[idx, 'player'], df.ix[idx, 'position'], df.ix[idx, 'team'] = name, position, team\n", " \n", "df.tail(3)" ], @@ -849,8 +854,8 @@ " 10\n", " 10.47\n", " 209.49\n", - " Midfield\n", " Chelsea\n", + " Midfield\n", " \n", " \n", " 8\n", @@ -862,8 +867,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", " West Brom\n", + " Forward\n", " \n", " \n", " 9\n", @@ -875,8 +880,8 @@ " 11\n", " 7.50\n", " 150.01\n", - " Midfield\n", " Liverpool\n", + " Midfield\n", " \n", " \n", "\n", @@ -892,9 +897,9 @@ "9 Steven Gerrard 13.8 20 5 1 11 \n", "\n", " points_per_game points position team \n", - "7 10.47 209.49 Midfield Chelsea \n", - "8 7.02 147.43 Forward West Brom \n", - "9 7.50 150.01 Midfield Liverpool " + "7 10.47 209.49 Chelsea Midfield \n", + "8 7.02 147.43 West Brom Forward \n", + "9 7.50 150.01 Liverpool Midfield " ] } ], @@ -980,8 +985,8 @@ " 13\n", " 10.17\n", " 132.23\n", - " Midfield\n", " Manchester United\n", + " Midfield\n", " \n", " \n", " 5\n", @@ -993,8 +998,8 @@ " 20\n", " 9.97\n", " NaN\n", - " Midfield\n", " Arsenal\n", + " Midfield\n", " \n", " \n", "\n", @@ -1008,9 +1013,9 @@ "4 \u00c1ngel Di Mar\u00eda 15.0 13 3 NaN 13 \n", "5 Santiago Cazorla 14.8 20 4 NaN 20 \n", "\n", - " points_per_game points position team \n", - "4 10.17 132.23 Midfield Manchester United \n", - "5 9.97 NaN Midfield Arsenal " + " points_per_game points position team \n", + "4 10.17 132.23 Manchester United Midfield \n", + "5 9.97 NaN Arsenal Midfield " ] } ], @@ -1071,8 +1076,8 @@ " 34\n", " 13.12\n", " 209.98\n", - " Forward\n", " Manchester City\n", + " Forward\n", " \n", " \n", " 1\n", @@ -1084,8 +1089,8 @@ " 17\n", " 13.05\n", " 274.04\n", - " Midfield\n", " Chelsea\n", + " Midfield\n", " \n", " \n", " 2\n", @@ -1097,8 +1102,8 @@ " 29\n", " 11.19\n", " 223.86\n", - " Forward\n", " Arsenal\n", + " Forward\n", " \n", " \n", " 3\n", @@ -1110,8 +1115,8 @@ " 19\n", " 10.99\n", " 197.91\n", - " Midfield\n", " Manchester City\n", + " Midfield\n", " \n", " \n", " 6\n", @@ -1123,8 +1128,8 @@ " 11\n", " 10.35\n", " 155.26\n", - " Midfield\n", " Manchester City\n", + " Midfield\n", " \n", " \n", " 7\n", @@ -1136,8 +1141,8 @@ " 10\n", " 10.47\n", " 209.49\n", - " Midfield\n", " Chelsea\n", + " Midfield\n", " \n", " \n", " 8\n", @@ -1149,8 +1154,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", " West Brom\n", + " Forward\n", " \n", " \n", " 9\n", @@ -1162,8 +1167,8 @@ " 11\n", " 7.50\n", " 150.01\n", - " Midfield\n", " Liverpool\n", + " Midfield\n", " \n", " \n", "\n", @@ -1183,15 +1188,15 @@ "8 Saido Berahino 13.8 21 9 0 20 \n", "9 Steven Gerrard 13.8 20 5 1 11 \n", "\n", - " points_per_game points position team \n", - "0 13.12 209.98 Forward Manchester City \n", - "1 13.05 274.04 Midfield Chelsea \n", - "2 11.19 223.86 Forward Arsenal \n", - "3 10.99 197.91 Midfield Manchester City \n", - "6 10.35 155.26 Midfield Manchester City \n", - "7 10.47 209.49 Midfield Chelsea \n", - "8 7.02 147.43 Forward West Brom \n", - "9 7.50 150.01 Midfield Liverpool " + " points_per_game points position team \n", + "0 13.12 209.98 Manchester City Forward \n", + "1 13.05 274.04 Chelsea Midfield \n", + "2 11.19 223.86 Arsenal Forward \n", + "3 10.99 197.91 Manchester City Midfield \n", + "6 10.35 155.26 Manchester City Midfield \n", + "7 10.47 209.49 Chelsea Midfield \n", + "8 7.02 147.43 West Brom Forward \n", + "9 7.50 150.01 Liverpool Midfield " ] } ], @@ -1255,8 +1260,8 @@ " 34\n", " 13.12\n", " 209.98\n", - " Forward\n", " Manchester City\n", + " Forward\n", " \n", " \n", " 1\n", @@ -1268,8 +1273,8 @@ " 17\n", " 13.05\n", " 274.04\n", - " Midfield\n", " Chelsea\n", + " Midfield\n", " \n", " \n", " 2\n", @@ -1281,8 +1286,8 @@ " 29\n", " 11.19\n", " 223.86\n", - " Forward\n", " Arsenal\n", + " Forward\n", " \n", " \n", " 3\n", @@ -1294,8 +1299,8 @@ " 19\n", " 10.99\n", " 197.91\n", - " Midfield\n", " Manchester City\n", + " Midfield\n", " \n", " \n", " 4\n", @@ -1307,8 +1312,8 @@ " 13\n", " 10.17\n", " 132.23\n", - " Midfield\n", " Manchester United\n", + " Midfield\n", " \n", " \n", " 5\n", @@ -1320,8 +1325,8 @@ " 20\n", " 9.97\n", " 0.00\n", - " Midfield\n", " Arsenal\n", + " Midfield\n", " \n", " \n", " 6\n", @@ -1333,8 +1338,8 @@ " 11\n", " 10.35\n", " 155.26\n", - " Midfield\n", " Manchester City\n", + " Midfield\n", " \n", " \n", " 7\n", @@ -1346,8 +1351,8 @@ " 10\n", " 10.47\n", " 209.49\n", - " Midfield\n", " Chelsea\n", + " Midfield\n", " \n", " \n", " 8\n", @@ -1359,8 +1364,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", " West Brom\n", + " Forward\n", " \n", " \n", " 9\n", @@ -1372,8 +1377,8 @@ " 11\n", " 7.50\n", " 150.01\n", - " Midfield\n", " Liverpool\n", + " Midfield\n", " \n", " \n", "\n", @@ -1395,17 +1400,17 @@ "8 Saido Berahino 13.8 21 9 0 20 \n", "9 Steven Gerrard 13.8 20 5 1 11 \n", "\n", - " points_per_game points position team \n", - "0 13.12 209.98 Forward Manchester City \n", - "1 13.05 274.04 Midfield Chelsea \n", - "2 11.19 223.86 Forward Arsenal \n", - "3 10.99 197.91 Midfield Manchester City \n", - "4 10.17 132.23 Midfield Manchester United \n", - "5 9.97 0.00 Midfield Arsenal \n", - "6 10.35 155.26 Midfield Manchester City \n", - "7 10.47 209.49 Midfield Chelsea \n", - "8 7.02 147.43 Forward West Brom \n", - "9 7.50 150.01 Midfield Liverpool " + " points_per_game points position team \n", + "0 13.12 209.98 Manchester City Forward \n", + "1 13.05 274.04 Chelsea Midfield \n", + "2 11.19 223.86 Arsenal Forward \n", + "3 10.99 197.91 Manchester City Midfield \n", + "4 10.17 132.23 Manchester United Midfield \n", + "5 9.97 0.00 Arsenal Midfield \n", + "6 10.35 155.26 Manchester City Midfield \n", + "7 10.47 209.49 Chelsea Midfield \n", + "8 7.02 147.43 West Brom Forward \n", + "9 7.50 150.01 Liverpool Midfield " ] } ], @@ -1482,8 +1487,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", " West Brom\n", + " Forward\n", " \n", " \n", " 9 \n", @@ -1495,8 +1500,8 @@ " 11\n", " 7.50\n", " 150.01\n", - " Midfield\n", " Liverpool\n", + " Midfield\n", " \n", " \n", " 10\n", @@ -1525,8 +1530,8 @@ "10 NaN NaN NaN NaN NaN NaN \n", "\n", " points_per_game points position team \n", - "8 7.02 147.43 Forward West Brom \n", - "9 7.50 150.01 Midfield Liverpool \n", + "8 7.02 147.43 West Brom Forward \n", + "9 7.50 150.01 Liverpool Midfield \n", "10 NaN NaN NaN NaN " ] } @@ -1576,8 +1581,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", " West Brom\n", + " Forward\n", " \n", " \n", " 9 \n", @@ -1589,8 +1594,8 @@ " 11\n", " 7.50\n", " 150.01\n", - " Midfield\n", " Liverpool\n", + " Midfield\n", " \n", " \n", " 10\n", @@ -1619,8 +1624,8 @@ "10 New Player 12.3 NaN NaN NaN NaN \n", "\n", " points_per_game points position team \n", - "8 7.02 147.43 Forward West Brom \n", - "9 7.50 150.01 Midfield Liverpool \n", + "8 7.02 147.43 West Brom Forward \n", + "9 7.50 150.01 Liverpool Midfield \n", "10 NaN NaN NaN NaN " ] } @@ -1692,8 +1697,8 @@ " 34\n", " 13.12\n", " 209.98\n", - " Forward\n", " Manchester City\n", + " Forward\n", " \n", " \n", " 2\n", @@ -1705,8 +1710,8 @@ " 29\n", " 11.19\n", " 223.86\n", - " Forward\n", " Arsenal\n", + " Forward\n", " \n", " \n", " 8\n", @@ -1718,8 +1723,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", " West Brom\n", + " Forward\n", " \n", " \n", " 1\n", @@ -1731,8 +1736,8 @@ " 17\n", " 13.05\n", " 274.04\n", - " Midfield\n", " Chelsea\n", + " Midfield\n", " \n", " \n", " 3\n", @@ -1744,8 +1749,8 @@ " 19\n", " 10.99\n", " 197.91\n", - " Midfield\n", " Manchester City\n", + " Midfield\n", " \n", " \n", "\n", @@ -1762,12 +1767,12 @@ "1 Eden Hazard 18.9 21 8 4 17 \n", "3 Yaya Tour\u00e9 16.6 18 7 1 19 \n", "\n", - " points_per_game points position team \n", - "0 13.12 209.98 Forward Manchester City \n", - "2 11.19 223.86 Forward Arsenal \n", - "8 7.02 147.43 Forward West Brom \n", - "1 13.05 274.04 Midfield Chelsea \n", - "3 10.99 197.91 Midfield Manchester City " + " points_per_game points position team \n", + "0 13.12 209.98 Manchester City Forward \n", + "2 11.19 223.86 Arsenal Forward \n", + "8 7.02 147.43 West Brom Forward \n", + "1 13.05 274.04 Chelsea Midfield \n", + "3 10.99 197.91 Manchester City Midfield " ] } ], @@ -1815,8 +1820,8 @@ " 34\n", " 13.12\n", " 209.98\n", - " Forward\n", " Manchester City\n", + " Forward\n", " \n", " \n", " 2\n", @@ -1828,8 +1833,8 @@ " 29\n", " 11.19\n", " 223.86\n", - " Forward\n", " Arsenal\n", + " Forward\n", " \n", " \n", " 3\n", @@ -1841,8 +1846,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", " West Brom\n", + " Forward\n", " \n", " \n", " 4\n", @@ -1854,8 +1859,8 @@ " 17\n", " 13.05\n", " 274.04\n", - " Midfield\n", " Chelsea\n", + " Midfield\n", " \n", " \n", " 5\n", @@ -1867,8 +1872,8 @@ " 19\n", " 10.99\n", " 197.91\n", - " Midfield\n", " Manchester City\n", + " Midfield\n", " \n", " \n", "\n", @@ -1885,12 +1890,12 @@ "4 Eden Hazard 18.9 21 8 4 17 \n", "5 Yaya Tour\u00e9 16.6 18 7 1 19 \n", "\n", - " points_per_game points position team \n", - "1 13.12 209.98 Forward Manchester City \n", - "2 11.19 223.86 Forward Arsenal \n", - "3 7.02 147.43 Forward West Brom \n", - "4 13.05 274.04 Midfield Chelsea \n", - "5 10.99 197.91 Midfield Manchester City " + " points_per_game points position team \n", + "1 13.12 209.98 Manchester City Forward \n", + "2 11.19 223.86 Arsenal Forward \n", + "3 7.02 147.43 West Brom Forward \n", + "4 13.05 274.04 Chelsea Midfield \n", + "5 10.99 197.91 Manchester City Midfield " ] } ], @@ -1962,8 +1967,8 @@ " 34\n", " 13.12\n", " 209.98\n", - " Forward\n", " Manchester City\n", + " Forward\n", " \n", " \n", " 2\n", @@ -1975,8 +1980,8 @@ " 29\n", " 11.19\n", " 223.86\n", - " Forward\n", " Arsenal\n", + " Forward\n", " \n", " \n", " 3\n", @@ -1988,8 +1993,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", " West Brom\n", + " Forward\n", " \n", " \n", "\n", @@ -2004,10 +2009,10 @@ "2 Alexis S\u00e1nchez 15 0 12 7 29 \n", "3 Saido Berahino 13.8 21 9 0 20 \n", "\n", - " points_per_game points position team \n", - "1 13.12 209.98 Forward Manchester City \n", - "2 11.19 223.86 Forward Arsenal \n", - "3 7.02 147.43 Forward West Brom " + " points_per_game points position team \n", + "1 13.12 209.98 Manchester City Forward \n", + "2 11.19 223.86 Arsenal Forward \n", + "3 7.02 147.43 West Brom Forward " ] } ], @@ -2075,8 +2080,8 @@ " 34\n", " 13.12\n", " 209.98\n", - " Forward\n", " Manchester City\n", + " Forward\n", " \n", " \n", " Alexis S\u00e1nchez\n", @@ -2087,8 +2092,8 @@ " 29\n", " 11.19\n", " 223.86\n", - " Forward\n", " Arsenal\n", + " Forward\n", " \n", " \n", " Saido Berahino\n", @@ -2099,8 +2104,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", " West Brom\n", + " Forward\n", " \n", " \n", "\n", @@ -2116,11 +2121,11 @@ "Alexis S\u00e1nchez 17.6 0 12 7 29 \n", "Saido Berahino 13.8 21 9 0 20 \n", "\n", - " points_per_game points position team \n", + " points_per_game points position team \n", "player \n", - "Sergio Ag\u00fcero 13.12 209.98 Forward Manchester City \n", - "Alexis S\u00e1nchez 11.19 223.86 Forward Arsenal \n", - "Saido Berahino 7.02 147.43 Forward West Brom " + "Sergio Ag\u00fcero 13.12 209.98 Manchester City Forward \n", + "Alexis S\u00e1nchez 11.19 223.86 Arsenal Forward \n", + "Saido Berahino 7.02 147.43 West Brom Forward " ] } ], @@ -2185,8 +2190,8 @@ " 34\n", " 13.12\n", " 209.98\n", - " Forward\n", " Manchester City\n", + " Forward\n", " \n", " \n", " Alexis S\u00e1nchez\n", @@ -2197,8 +2202,8 @@ " 29\n", " 11.19\n", " 223.86\n", - " Forward\n", " Arsenal\n", + " Forward\n", " \n", " \n", " Saido Berahino\n", @@ -2209,8 +2214,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", " West Brom\n", + " Forward\n", " \n", " \n", "\n", @@ -2226,11 +2231,11 @@ "Alexis S\u00e1nchez 15 0 12 7 29 \n", "Saido Berahino 13.8 21 9 0 20 \n", "\n", - " points_per_game points position team \n", + " points_per_game points position team \n", "player \n", - "Sergio Ag\u00fcero 13.12 209.98 Forward Manchester City \n", - "Alexis S\u00e1nchez 11.19 223.86 Forward Arsenal \n", - "Saido Berahino 7.02 147.43 Forward West Brom " + "Sergio Ag\u00fcero 13.12 209.98 Manchester City Forward \n", + "Alexis S\u00e1nchez 11.19 223.86 Arsenal Forward \n", + "Saido Berahino 7.02 147.43 West Brom Forward " ] } ], @@ -2285,8 +2290,8 @@ " 34\n", " 13.12\n", " 209.98\n", - " Forward\n", " Manchester City\n", + " Forward\n", " \n", " \n", " 1\n", @@ -2298,8 +2303,8 @@ " 29\n", " 11.19\n", " 223.86\n", - " Forward\n", " Arsenal\n", + " Forward\n", " \n", " \n", " 2\n", @@ -2311,8 +2316,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", " West Brom\n", + " Forward\n", " \n", " \n", "\n", @@ -2327,23 +2332,14 @@ "1 Alexis S\u00e1nchez 15 0 12 7 29 \n", "2 Saido Berahino 13.8 21 9 0 20 \n", "\n", - " points_per_game points position team \n", - "0 13.12 209.98 Forward Manchester City \n", - "1 11.19 223.86 Forward Arsenal \n", - "2 7.02 147.43 Forward West Brom " + " points_per_game points position team \n", + "0 13.12 209.98 Manchester City Forward \n", + "1 11.19 223.86 Arsenal Forward \n", + "2 7.02 147.43 West Brom Forward " ] } ], "prompt_number": 18 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 18 } ], "metadata": {} From 632aef1bc4de0dede77a9c451a35980db39f2f18 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 24 Jan 2015 22:25:57 -0500 Subject: [PATCH 212/248] Chaining Conditions - Using Bitwise Operators --- tutorials/things_in_pandas.ipynb | 481 ++++++++++++++++++++++--------- 1 file changed, 337 insertions(+), 144 deletions(-) diff --git a/tutorials/things_in_pandas.ipynb b/tutorials/things_in_pandas.ipynb index 44f3acf..bb71a69 100644 --- a/tutorials/things_in_pandas.ipynb +++ b/tutorials/things_in_pandas.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:ae8818183bc1fe6a58845005b18b12c4458686fa307a82a46857775364df6506" + "signature": "sha256:cf7223086a74b13d1ae2228a4c8545c401765a90cdb3eca418f18138a4afdaab" }, "nbformat": 3, "nbformat_minor": 0, @@ -95,7 +95,8 @@ " - [Filling NaN Rows](#Filling-NaN-Rows)\n", "- [Appending Rows to a DataFrame](#Appending-Rows-to-a-DataFrame)\n", "- [Sorting and Reindexing DataFrames](#Sorting-and-Reindexing-DataFrames)\n", - "- [Updating Columns](#Updating-Columns)" + "- [Updating Columns](#Updating-Columns)\n", + "- [Chaining Conditions - Using Bitwise Operators](#Chaining-Conditions---Using-Bitwise-Operators)" ] }, { @@ -806,8 +807,8 @@ "\n", "def process_player_col(text):\n", " name, rest = text.split('\\n')\n", - " position, team = rest.split(' \u2014 ')\n", - " return pd.Series([name, position, team])\n", + " position, team = [x.strip() for x in rest.split(' \u2014 ')]\n", + " return pd.Series([name, team, position])\n", "\n", "df[['player', 'team', 'position']] = df.player.apply(process_player_col)\n", "\n", @@ -854,8 +855,8 @@ " 10\n", " 10.47\n", " 209.49\n", + " Midfield\n", " Chelsea\n", - " Midfield\n", " \n", " \n", " 8\n", @@ -867,8 +868,8 @@ " 20\n", " 7.02\n", " 147.43\n", + " Forward\n", " West Brom\n", - " Forward\n", " \n", " \n", " 9\n", @@ -880,8 +881,8 @@ " 11\n", " 7.50\n", " 150.01\n", + " Midfield\n", " Liverpool\n", - " Midfield\n", " \n", " \n", "\n", @@ -889,21 +890,21 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 7, + "prompt_number": 8, "text": [ " player salary games goals assists shots_on_target \\\n", "7 Cesc F\u00e0bregas 14.0 20 2 14 10 \n", "8 Saido Berahino 13.8 21 9 0 20 \n", "9 Steven Gerrard 13.8 20 5 1 11 \n", "\n", - " points_per_game points position team \n", - "7 10.47 209.49 Chelsea Midfield \n", - "8 7.02 147.43 West Brom Forward \n", - "9 7.50 150.01 Liverpool Midfield " + " points_per_game points position team \n", + "7 10.47 209.49 Midfield Chelsea \n", + "8 7.02 147.43 Forward West Brom \n", + "9 7.50 150.01 Midfield Liverpool " ] } ], - "prompt_number": 7 + "prompt_number": 8 }, { "cell_type": "markdown", @@ -985,8 +986,8 @@ " 13\n", " 10.17\n", " 132.23\n", + " Midfield\n", " Manchester United\n", - " Midfield\n", " \n", " \n", " 5\n", @@ -998,8 +999,8 @@ " 20\n", " 9.97\n", " NaN\n", + " Midfield\n", " Arsenal\n", - " Midfield\n", " \n", " \n", "\n", @@ -1007,19 +1008,19 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 8, + "prompt_number": 9, "text": [ " player salary games goals assists shots_on_target \\\n", "4 \u00c1ngel Di Mar\u00eda 15.0 13 3 NaN 13 \n", "5 Santiago Cazorla 14.8 20 4 NaN 20 \n", "\n", - " points_per_game points position team \n", - "4 10.17 132.23 Manchester United Midfield \n", - "5 9.97 NaN Arsenal Midfield " + " points_per_game points position team \n", + "4 10.17 132.23 Midfield Manchester United \n", + "5 9.97 NaN Midfield Arsenal " ] } ], - "prompt_number": 8 + "prompt_number": 9 }, { "cell_type": "markdown", @@ -1076,8 +1077,8 @@ " 34\n", " 13.12\n", " 209.98\n", + " Forward\n", " Manchester City\n", - " Forward\n", " \n", " \n", " 1\n", @@ -1089,8 +1090,8 @@ " 17\n", " 13.05\n", " 274.04\n", + " Midfield\n", " Chelsea\n", - " Midfield\n", " \n", " \n", " 2\n", @@ -1102,8 +1103,8 @@ " 29\n", " 11.19\n", " 223.86\n", + " Forward\n", " Arsenal\n", - " Forward\n", " \n", " \n", " 3\n", @@ -1115,8 +1116,8 @@ " 19\n", " 10.99\n", " 197.91\n", + " Midfield\n", " Manchester City\n", - " Midfield\n", " \n", " \n", " 6\n", @@ -1128,8 +1129,8 @@ " 11\n", " 10.35\n", " 155.26\n", + " Midfield\n", " Manchester City\n", - " Midfield\n", " \n", " \n", " 7\n", @@ -1141,8 +1142,8 @@ " 10\n", " 10.47\n", " 209.49\n", + " Midfield\n", " Chelsea\n", - " Midfield\n", " \n", " \n", " 8\n", @@ -1154,8 +1155,8 @@ " 20\n", " 7.02\n", " 147.43\n", + " Forward\n", " West Brom\n", - " Forward\n", " \n", " \n", " 9\n", @@ -1167,8 +1168,8 @@ " 11\n", " 7.50\n", " 150.01\n", + " Midfield\n", " Liverpool\n", - " Midfield\n", " \n", " \n", "\n", @@ -1176,7 +1177,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 9, + "prompt_number": 10, "text": [ " player salary games goals assists shots_on_target \\\n", "0 Sergio Ag\u00fcero 19.2 16 14 3 34 \n", @@ -1188,19 +1189,19 @@ "8 Saido Berahino 13.8 21 9 0 20 \n", "9 Steven Gerrard 13.8 20 5 1 11 \n", "\n", - " points_per_game points position team \n", - "0 13.12 209.98 Manchester City Forward \n", - "1 13.05 274.04 Chelsea Midfield \n", - "2 11.19 223.86 Arsenal Forward \n", - "3 10.99 197.91 Manchester City Midfield \n", - "6 10.35 155.26 Manchester City Midfield \n", - "7 10.47 209.49 Chelsea Midfield \n", - "8 7.02 147.43 West Brom Forward \n", - "9 7.50 150.01 Liverpool Midfield " + " points_per_game points position team \n", + "0 13.12 209.98 Forward Manchester City \n", + "1 13.05 274.04 Midfield Chelsea \n", + "2 11.19 223.86 Forward Arsenal \n", + "3 10.99 197.91 Midfield Manchester City \n", + "6 10.35 155.26 Midfield Manchester City \n", + "7 10.47 209.49 Midfield Chelsea \n", + "8 7.02 147.43 Forward West Brom \n", + "9 7.50 150.01 Midfield Liverpool " ] } ], - "prompt_number": 9 + "prompt_number": 10 }, { "cell_type": "markdown", @@ -1260,8 +1261,8 @@ " 34\n", " 13.12\n", " 209.98\n", + " Forward\n", " Manchester City\n", - " Forward\n", " \n", " \n", " 1\n", @@ -1273,8 +1274,8 @@ " 17\n", " 13.05\n", " 274.04\n", + " Midfield\n", " Chelsea\n", - " Midfield\n", " \n", " \n", " 2\n", @@ -1286,8 +1287,8 @@ " 29\n", " 11.19\n", " 223.86\n", + " Forward\n", " Arsenal\n", - " Forward\n", " \n", " \n", " 3\n", @@ -1299,8 +1300,8 @@ " 19\n", " 10.99\n", " 197.91\n", + " Midfield\n", " Manchester City\n", - " Midfield\n", " \n", " \n", " 4\n", @@ -1312,8 +1313,8 @@ " 13\n", " 10.17\n", " 132.23\n", + " Midfield\n", " Manchester United\n", - " Midfield\n", " \n", " \n", " 5\n", @@ -1325,8 +1326,8 @@ " 20\n", " 9.97\n", " 0.00\n", + " Midfield\n", " Arsenal\n", - " Midfield\n", " \n", " \n", " 6\n", @@ -1338,8 +1339,8 @@ " 11\n", " 10.35\n", " 155.26\n", + " Midfield\n", " Manchester City\n", - " Midfield\n", " \n", " \n", " 7\n", @@ -1351,8 +1352,8 @@ " 10\n", " 10.47\n", " 209.49\n", + " Midfield\n", " Chelsea\n", - " Midfield\n", " \n", " \n", " 8\n", @@ -1364,8 +1365,8 @@ " 20\n", " 7.02\n", " 147.43\n", + " Forward\n", " West Brom\n", - " Forward\n", " \n", " \n", " 9\n", @@ -1377,8 +1378,8 @@ " 11\n", " 7.50\n", " 150.01\n", + " Midfield\n", " Liverpool\n", - " Midfield\n", " \n", " \n", "\n", @@ -1386,7 +1387,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 10, + "prompt_number": 11, "text": [ " player salary games goals assists shots_on_target \\\n", "0 Sergio Ag\u00fcero 19.2 16 14 3 34 \n", @@ -1400,21 +1401,21 @@ "8 Saido Berahino 13.8 21 9 0 20 \n", "9 Steven Gerrard 13.8 20 5 1 11 \n", "\n", - " points_per_game points position team \n", - "0 13.12 209.98 Manchester City Forward \n", - "1 13.05 274.04 Chelsea Midfield \n", - "2 11.19 223.86 Arsenal Forward \n", - "3 10.99 197.91 Manchester City Midfield \n", - "4 10.17 132.23 Manchester United Midfield \n", - "5 9.97 0.00 Arsenal Midfield \n", - "6 10.35 155.26 Manchester City Midfield \n", - "7 10.47 209.49 Chelsea Midfield \n", - "8 7.02 147.43 West Brom Forward \n", - "9 7.50 150.01 Liverpool Midfield " + " points_per_game points position team \n", + "0 13.12 209.98 Forward Manchester City \n", + "1 13.05 274.04 Midfield Chelsea \n", + "2 11.19 223.86 Forward Arsenal \n", + "3 10.99 197.91 Midfield Manchester City \n", + "4 10.17 132.23 Midfield Manchester United \n", + "5 9.97 0.00 Midfield Arsenal \n", + "6 10.35 155.26 Midfield Manchester City \n", + "7 10.47 209.49 Midfield Chelsea \n", + "8 7.02 147.43 Forward West Brom \n", + "9 7.50 150.01 Midfield Liverpool " ] } ], - "prompt_number": 10 + "prompt_number": 11 }, { "cell_type": "markdown", @@ -1487,8 +1488,8 @@ " 20\n", " 7.02\n", " 147.43\n", + " Forward\n", " West Brom\n", - " Forward\n", " \n", " \n", " 9 \n", @@ -1500,8 +1501,8 @@ " 11\n", " 7.50\n", " 150.01\n", + " Midfield\n", " Liverpool\n", - " Midfield\n", " \n", " \n", " 10\n", @@ -1513,7 +1514,7 @@ " NaN\n", " NaN\n", " NaN\n", - " NaN\n", + " NaN\n", " NaN\n", " \n", " \n", @@ -1522,21 +1523,21 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 11, + "prompt_number": 12, "text": [ " player salary games goals assists shots_on_target \\\n", "8 Saido Berahino 13.8 21 9 0 20 \n", "9 Steven Gerrard 13.8 20 5 1 11 \n", "10 NaN NaN NaN NaN NaN NaN \n", "\n", - " points_per_game points position team \n", - "8 7.02 147.43 West Brom Forward \n", - "9 7.50 150.01 Liverpool Midfield \n", - "10 NaN NaN NaN NaN " + " points_per_game points position team \n", + "8 7.02 147.43 Forward West Brom \n", + "9 7.50 150.01 Midfield Liverpool \n", + "10 NaN NaN NaN NaN " ] } ], - "prompt_number": 11 + "prompt_number": 12 }, { "cell_type": "code", @@ -1581,8 +1582,8 @@ " 20\n", " 7.02\n", " 147.43\n", + " Forward\n", " West Brom\n", - " Forward\n", " \n", " \n", " 9 \n", @@ -1594,8 +1595,8 @@ " 11\n", " 7.50\n", " 150.01\n", + " Midfield\n", " Liverpool\n", - " Midfield\n", " \n", " \n", " 10\n", @@ -1607,7 +1608,7 @@ " NaN\n", " NaN\n", " NaN\n", - " NaN\n", + " NaN\n", " NaN\n", " \n", " \n", @@ -1616,21 +1617,21 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 12, + "prompt_number": 13, "text": [ " player salary games goals assists shots_on_target \\\n", "8 Saido Berahino 13.8 21 9 0 20 \n", "9 Steven Gerrard 13.8 20 5 1 11 \n", "10 New Player 12.3 NaN NaN NaN NaN \n", "\n", - " points_per_game points position team \n", - "8 7.02 147.43 West Brom Forward \n", - "9 7.50 150.01 Liverpool Midfield \n", - "10 NaN NaN NaN NaN " + " points_per_game points position team \n", + "8 7.02 147.43 Forward West Brom \n", + "9 7.50 150.01 Midfield Liverpool \n", + "10 NaN NaN NaN NaN " ] } ], - "prompt_number": 12 + "prompt_number": 13 }, { "cell_type": "markdown", @@ -1697,8 +1698,8 @@ " 34\n", " 13.12\n", " 209.98\n", + " Forward\n", " Manchester City\n", - " Forward\n", " \n", " \n", " 2\n", @@ -1710,8 +1711,8 @@ " 29\n", " 11.19\n", " 223.86\n", + " Forward\n", " Arsenal\n", - " Forward\n", " \n", " \n", " 8\n", @@ -1723,8 +1724,8 @@ " 20\n", " 7.02\n", " 147.43\n", + " Forward\n", " West Brom\n", - " Forward\n", " \n", " \n", " 1\n", @@ -1736,8 +1737,8 @@ " 17\n", " 13.05\n", " 274.04\n", + " Midfield\n", " Chelsea\n", - " Midfield\n", " \n", " \n", " 3\n", @@ -1749,8 +1750,8 @@ " 19\n", " 10.99\n", " 197.91\n", + " Midfield\n", " Manchester City\n", - " Midfield\n", " \n", " \n", "\n", @@ -1758,7 +1759,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 13, + "prompt_number": 14, "text": [ " player salary games goals assists shots_on_target \\\n", "0 Sergio Ag\u00fcero 19.2 16 14 3 34 \n", @@ -1767,16 +1768,16 @@ "1 Eden Hazard 18.9 21 8 4 17 \n", "3 Yaya Tour\u00e9 16.6 18 7 1 19 \n", "\n", - " points_per_game points position team \n", - "0 13.12 209.98 Manchester City Forward \n", - "2 11.19 223.86 Arsenal Forward \n", - "8 7.02 147.43 West Brom Forward \n", - "1 13.05 274.04 Chelsea Midfield \n", - "3 10.99 197.91 Manchester City Midfield " + " points_per_game points position team \n", + "0 13.12 209.98 Forward Manchester City \n", + "2 11.19 223.86 Forward Arsenal \n", + "8 7.02 147.43 Forward West Brom \n", + "1 13.05 274.04 Midfield Chelsea \n", + "3 10.99 197.91 Midfield Manchester City " ] } ], - "prompt_number": 13 + "prompt_number": 14 }, { "cell_type": "code", @@ -1820,8 +1821,8 @@ " 34\n", " 13.12\n", " 209.98\n", + " Forward\n", " Manchester City\n", - " Forward\n", " \n", " \n", " 2\n", @@ -1833,8 +1834,8 @@ " 29\n", " 11.19\n", " 223.86\n", + " Forward\n", " Arsenal\n", - " Forward\n", " \n", " \n", " 3\n", @@ -1846,8 +1847,8 @@ " 20\n", " 7.02\n", " 147.43\n", + " Forward\n", " West Brom\n", - " Forward\n", " \n", " \n", " 4\n", @@ -1859,8 +1860,8 @@ " 17\n", " 13.05\n", " 274.04\n", + " Midfield\n", " Chelsea\n", - " Midfield\n", " \n", " \n", " 5\n", @@ -1872,8 +1873,8 @@ " 19\n", " 10.99\n", " 197.91\n", + " Midfield\n", " Manchester City\n", - " Midfield\n", " \n", " \n", "\n", @@ -1881,7 +1882,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 14, + "prompt_number": 15, "text": [ " player salary games goals assists shots_on_target \\\n", "1 Sergio Ag\u00fcero 19.2 16 14 3 34 \n", @@ -1890,16 +1891,16 @@ "4 Eden Hazard 18.9 21 8 4 17 \n", "5 Yaya Tour\u00e9 16.6 18 7 1 19 \n", "\n", - " points_per_game points position team \n", - "1 13.12 209.98 Manchester City Forward \n", - "2 11.19 223.86 Arsenal Forward \n", - "3 7.02 147.43 West Brom Forward \n", - "4 13.05 274.04 Chelsea Midfield \n", - "5 10.99 197.91 Manchester City Midfield " + " points_per_game points position team \n", + "1 13.12 209.98 Forward Manchester City \n", + "2 11.19 223.86 Forward Arsenal \n", + "3 7.02 147.43 Forward West Brom \n", + "4 13.05 274.04 Midfield Chelsea \n", + "5 10.99 197.91 Midfield Manchester City " ] } ], - "prompt_number": 14 + "prompt_number": 15 }, { "cell_type": "markdown", @@ -1967,8 +1968,8 @@ " 34\n", " 13.12\n", " 209.98\n", + " Forward\n", " Manchester City\n", - " Forward\n", " \n", " \n", " 2\n", @@ -1980,8 +1981,8 @@ " 29\n", " 11.19\n", " 223.86\n", + " Forward\n", " Arsenal\n", - " Forward\n", " \n", " \n", " 3\n", @@ -1993,8 +1994,8 @@ " 20\n", " 7.02\n", " 147.43\n", + " Forward\n", " West Brom\n", - " Forward\n", " \n", " \n", "\n", @@ -2002,21 +2003,21 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 15, + "prompt_number": 16, "text": [ " player salary games goals assists shots_on_target \\\n", "1 Sergio Ag\u00fcero 20 16 14 3 34 \n", "2 Alexis S\u00e1nchez 15 0 12 7 29 \n", "3 Saido Berahino 13.8 21 9 0 20 \n", "\n", - " points_per_game points position team \n", - "1 13.12 209.98 Manchester City Forward \n", - "2 11.19 223.86 Arsenal Forward \n", - "3 7.02 147.43 West Brom Forward " + " points_per_game points position team \n", + "1 13.12 209.98 Forward Manchester City \n", + "2 11.19 223.86 Forward Arsenal \n", + "3 7.02 147.43 Forward West Brom " ] } ], - "prompt_number": 15 + "prompt_number": 16 }, { "cell_type": "markdown", @@ -2080,8 +2081,8 @@ " 34\n", " 13.12\n", " 209.98\n", + " Forward\n", " Manchester City\n", - " Forward\n", " \n", " \n", " Alexis S\u00e1nchez\n", @@ -2092,8 +2093,8 @@ " 29\n", " 11.19\n", " 223.86\n", + " Forward\n", " Arsenal\n", - " Forward\n", " \n", " \n", " Saido Berahino\n", @@ -2104,8 +2105,8 @@ " 20\n", " 7.02\n", " 147.43\n", + " Forward\n", " West Brom\n", - " Forward\n", " \n", " \n", "\n", @@ -2113,7 +2114,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 16, + "prompt_number": 17, "text": [ " salary games goals assists shots_on_target \\\n", "player \n", @@ -2121,15 +2122,15 @@ "Alexis S\u00e1nchez 17.6 0 12 7 29 \n", "Saido Berahino 13.8 21 9 0 20 \n", "\n", - " points_per_game points position team \n", - "player \n", - "Sergio Ag\u00fcero 13.12 209.98 Manchester City Forward \n", - "Alexis S\u00e1nchez 11.19 223.86 Arsenal Forward \n", - "Saido Berahino 7.02 147.43 West Brom Forward " + " points_per_game points position team \n", + "player \n", + "Sergio Ag\u00fcero 13.12 209.98 Forward Manchester City \n", + "Alexis S\u00e1nchez 11.19 223.86 Forward Arsenal \n", + "Saido Berahino 7.02 147.43 Forward West Brom " ] } ], - "prompt_number": 16 + "prompt_number": 17 }, { "cell_type": "markdown", @@ -2190,8 +2191,8 @@ " 34\n", " 13.12\n", " 209.98\n", + " Forward\n", " Manchester City\n", - " Forward\n", " \n", " \n", " Alexis S\u00e1nchez\n", @@ -2202,8 +2203,8 @@ " 29\n", " 11.19\n", " 223.86\n", + " Forward\n", " Arsenal\n", - " Forward\n", " \n", " \n", " Saido Berahino\n", @@ -2214,8 +2215,8 @@ " 20\n", " 7.02\n", " 147.43\n", + " Forward\n", " West Brom\n", - " Forward\n", " \n", " \n", "\n", @@ -2223,7 +2224,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 17, + "prompt_number": 18, "text": [ " salary games goals assists shots_on_target \\\n", "player \n", @@ -2231,15 +2232,15 @@ "Alexis S\u00e1nchez 15 0 12 7 29 \n", "Saido Berahino 13.8 21 9 0 20 \n", "\n", - " points_per_game points position team \n", - "player \n", - "Sergio Ag\u00fcero 13.12 209.98 Manchester City Forward \n", - "Alexis S\u00e1nchez 11.19 223.86 Arsenal Forward \n", - "Saido Berahino 7.02 147.43 West Brom Forward " + " points_per_game points position team \n", + "player \n", + "Sergio Ag\u00fcero 13.12 209.98 Forward Manchester City \n", + "Alexis S\u00e1nchez 11.19 223.86 Forward Arsenal \n", + "Saido Berahino 7.02 147.43 Forward West Brom " ] } ], - "prompt_number": 17 + "prompt_number": 18 }, { "cell_type": "markdown", @@ -2290,8 +2291,8 @@ " 34\n", " 13.12\n", " 209.98\n", + " Forward\n", " Manchester City\n", - " Forward\n", " \n", " \n", " 1\n", @@ -2303,8 +2304,8 @@ " 29\n", " 11.19\n", " 223.86\n", + " Forward\n", " Arsenal\n", - " Forward\n", " \n", " \n", " 2\n", @@ -2316,8 +2317,8 @@ " 20\n", " 7.02\n", " 147.43\n", + " Forward\n", " West Brom\n", - " Forward\n", " \n", " \n", "\n", @@ -2325,21 +2326,213 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 18, + "prompt_number": 19, "text": [ " player salary games goals assists shots_on_target \\\n", "0 Sergio Ag\u00fcero 20 16 14 3 34 \n", "1 Alexis S\u00e1nchez 15 0 12 7 29 \n", "2 Saido Berahino 13.8 21 9 0 20 \n", "\n", - " points_per_game points position team \n", - "0 13.12 209.98 Manchester City Forward \n", - "1 11.19 223.86 Arsenal Forward \n", - "2 7.02 147.43 West Brom Forward " + " points_per_game points position team \n", + "0 13.12 209.98 Forward Manchester City \n", + "1 11.19 223.86 Forward Arsenal \n", + "2 7.02 147.43 Forward West Brom " ] } ], - "prompt_number": 18 + "prompt_number": 19 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Chaining Conditions - Using Bitwise Operators" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Selecting only those players that either playing for Arsenal or Chelsea\n", + "\n", + "df[ (df['team'] == 'Arsenal') | (df['team'] == 'Chelsea') ]" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    1 Alexis S\u00e1nchez 15 0 12 7 29 11.19 223.86 Forward Arsenal
    3 Eden Hazard 18.9 21 8 4 17 13.05 274.04 Midfield Chelsea
    7 Santiago Cazorla 14.8 20 4 0 20 9.97 0.00 Midfield Arsenal
    9 Cesc F\u00e0bregas 14.0 20 2 14 10 10.47 209.49 Midfield Chelsea
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 20, + "text": [ + " player salary games goals assists shots_on_target \\\n", + "1 Alexis S\u00e1nchez 15 0 12 7 29 \n", + "3 Eden Hazard 18.9 21 8 4 17 \n", + "7 Santiago Cazorla 14.8 20 4 0 20 \n", + "9 Cesc F\u00e0bregas 14.0 20 2 14 10 \n", + "\n", + " points_per_game points position team \n", + "1 11.19 223.86 Forward Arsenal \n", + "3 13.05 274.04 Midfield Chelsea \n", + "7 9.97 0.00 Midfield Arsenal \n", + "9 10.47 209.49 Midfield Chelsea " + ] + } + ], + "prompt_number": 20 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Selecting forwards from Arsenal only\n", + "\n", + "df[ (df['team'] == 'Arsenal') & (df['position'] == 'Forward') ]" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    1 Alexis S\u00e1nchez 15 0 12 7 29 11.19 223.86 Forward Arsenal
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 22, + "text": [ + " player salary games goals assists shots_on_target \\\n", + "1 Alexis S\u00e1nchez 15 0 12 7 29 \n", + "\n", + " points_per_game points position team \n", + "1 11.19 223.86 Forward Arsenal " + ] + } + ], + "prompt_number": 22 } ], "metadata": {} From d2039a7868da12be7665d5349162d64af7ab4126 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 25 Jan 2015 00:10:54 -0500 Subject: [PATCH 213/248] inplace ops update --- tutorials/things_in_pandas.ipynb | 64 ++++++++++++++++---------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/tutorials/things_in_pandas.ipynb b/tutorials/things_in_pandas.ipynb index bb71a69..7afa576 100644 --- a/tutorials/things_in_pandas.ipynb +++ b/tutorials/things_in_pandas.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:cf7223086a74b13d1ae2228a4c8545c401765a90cdb3eca418f18138a4afdaab" + "signature": "sha256:2c7029e546d20c06eaa707f59d5b067689bf8827b87cc32f4fae7b55cde6e0f2" }, "nbformat": 3, "nbformat_minor": 0, @@ -29,7 +29,7 @@ "output_type": "stream", "stream": "stdout", "text": [ - "Sebastian Raschka 24/01/2015 \n", + "Sebastian Raschka 25/01/2015 \n", "\n", "CPython 3.4.2\n", "IPython 2.3.1\n", @@ -890,7 +890,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 8, + "prompt_number": 7, "text": [ " player salary games goals assists shots_on_target \\\n", "7 Cesc F\u00e0bregas 14.0 20 2 14 10 \n", @@ -904,7 +904,7 @@ ] } ], - "prompt_number": 8 + "prompt_number": 7 }, { "cell_type": "markdown", @@ -1008,7 +1008,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 9, + "prompt_number": 8, "text": [ " player salary games goals assists shots_on_target \\\n", "4 \u00c1ngel Di Mar\u00eda 15.0 13 3 NaN 13 \n", @@ -1020,7 +1020,7 @@ ] } ], - "prompt_number": 9 + "prompt_number": 8 }, { "cell_type": "markdown", @@ -1177,7 +1177,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 10, + "prompt_number": 9, "text": [ " player salary games goals assists shots_on_target \\\n", "0 Sergio Ag\u00fcero 19.2 16 14 3 34 \n", @@ -1201,7 +1201,7 @@ ] } ], - "prompt_number": 10 + "prompt_number": 9 }, { "cell_type": "markdown", @@ -1225,7 +1225,7 @@ "input": [ "# Filling NaN cells with default value 0\n", "\n", - "df = df.fillna(value=0)\n", + "df.fillna(value=0, inplace=True)\n", "df" ], "language": "python", @@ -1387,7 +1387,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 11, + "prompt_number": 10, "text": [ " player salary games goals assists shots_on_target \\\n", "0 Sergio Ag\u00fcero 19.2 16 14 3 34 \n", @@ -1415,7 +1415,7 @@ ] } ], - "prompt_number": 11 + "prompt_number": 10 }, { "cell_type": "markdown", @@ -1523,7 +1523,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 12, + "prompt_number": 11, "text": [ " player salary games goals assists shots_on_target \\\n", "8 Saido Berahino 13.8 21 9 0 20 \n", @@ -1537,7 +1537,7 @@ ] } ], - "prompt_number": 12 + "prompt_number": 11 }, { "cell_type": "code", @@ -1617,7 +1617,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 13, + "prompt_number": 12, "text": [ " player salary games goals assists shots_on_target \\\n", "8 Saido Berahino 13.8 21 9 0 20 \n", @@ -1631,7 +1631,7 @@ ] } ], - "prompt_number": 13 + "prompt_number": 12 }, { "cell_type": "markdown", @@ -1662,7 +1662,7 @@ "input": [ "# Sorting the DataFrame by a certain column (from highest to lowest)\n", "\n", - "df = df.sort('goals', ascending=False)\n", + "df.sort('goals', ascending=False, inplace=True)\n", "df.head()" ], "language": "python", @@ -1759,7 +1759,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 14, + "prompt_number": 13, "text": [ " player salary games goals assists shots_on_target \\\n", "0 Sergio Ag\u00fcero 19.2 16 14 3 34 \n", @@ -1777,7 +1777,7 @@ ] } ], - "prompt_number": 14 + "prompt_number": 13 }, { "cell_type": "code", @@ -1882,7 +1882,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 15, + "prompt_number": 14, "text": [ " player salary games goals assists shots_on_target \\\n", "1 Sergio Ag\u00fcero 19.2 16 14 3 34 \n", @@ -1900,7 +1900,7 @@ ] } ], - "prompt_number": 15 + "prompt_number": 14 }, { "cell_type": "markdown", @@ -2003,7 +2003,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 16, + "prompt_number": 15, "text": [ " player salary games goals assists shots_on_target \\\n", "1 Sergio Ag\u00fcero 20 16 14 3 34 \n", @@ -2017,7 +2017,7 @@ ] } ], - "prompt_number": 16 + "prompt_number": 15 }, { "cell_type": "markdown", @@ -2114,7 +2114,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 17, + "prompt_number": 16, "text": [ " salary games goals assists shots_on_target \\\n", "player \n", @@ -2130,7 +2130,7 @@ ] } ], - "prompt_number": 17 + "prompt_number": 16 }, { "cell_type": "markdown", @@ -2224,7 +2224,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 18, + "prompt_number": 17, "text": [ " salary games goals assists shots_on_target \\\n", "player \n", @@ -2240,7 +2240,7 @@ ] } ], - "prompt_number": 18 + "prompt_number": 17 }, { "cell_type": "markdown", @@ -2326,7 +2326,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 19, + "prompt_number": 18, "text": [ " player salary games goals assists shots_on_target \\\n", "0 Sergio Ag\u00fcero 20 16 14 3 34 \n", @@ -2340,7 +2340,7 @@ ] } ], - "prompt_number": 19 + "prompt_number": 18 }, { "cell_type": "markdown", @@ -2454,7 +2454,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 20, + "prompt_number": 19, "text": [ " player salary games goals assists shots_on_target \\\n", "1 Alexis S\u00e1nchez 15 0 12 7 29 \n", @@ -2470,7 +2470,7 @@ ] } ], - "prompt_number": 20 + "prompt_number": 19 }, { "cell_type": "code", @@ -2522,7 +2522,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 22, + "prompt_number": 20, "text": [ " player salary games goals assists shots_on_target \\\n", "1 Alexis S\u00e1nchez 15 0 12 7 29 \n", @@ -2532,7 +2532,7 @@ ] } ], - "prompt_number": 22 + "prompt_number": 20 } ], "metadata": {} From 367d8f99352d4ed142ea5436bd9f85b5759d3328 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 28 Jan 2015 13:26:03 -0500 Subject: [PATCH 214/248] counting nan rows --- tutorials/things_in_pandas.ipynb | 40 +++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/tutorials/things_in_pandas.ipynb b/tutorials/things_in_pandas.ipynb index 7afa576..fd8a7f9 100644 --- a/tutorials/things_in_pandas.ipynb +++ b/tutorials/things_in_pandas.ipynb @@ -29,7 +29,7 @@ "output_type": "stream", "stream": "stdout", "text": [ - "Sebastian Raschka 25/01/2015 \n", + "Sebastian Raschka 28/01/2015 \n", "\n", "CPython 3.4.2\n", "IPython 2.3.1\n", @@ -90,6 +90,7 @@ " - [Changing Values in a Column](#Changing-Values-in-a-Column)\n", " - [Adding a New Column](#Adding-a-New-Column)\n", "- [Missing Values aka NaNs](#Missing-Values-aka-NaNs)\n", + " - [Counting Rows with NaNs](#Counting-Rows-with-NaNs)\n", " - [Selecting NaN Rows](#Selecting-NaN-Rows)\n", " - [Selecting non-NaN Rows](#Selecting-non-NaN-Rows)\n", " - [Filling NaN Rows](#Filling-NaN-Rows)\n", @@ -937,6 +938,43 @@ "
    " ] }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Counting Rows with NaNs" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "nans = df.shape[0] - df.dropna().shape[0]\n", + "\n", + "print('%d rows have missing values' % nans)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "3 rows have missing values\n" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, { "cell_type": "heading", "level": 3, From 7cfec1ddc02143fbd61e56badda686ac5f11dac7 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 28 Jan 2015 22:22:37 -0500 Subject: [PATCH 215/248] Applying Functions to Multiple Columns --- tutorials/things_in_pandas.ipynb | 742 +++++++++++++++++-------------- 1 file changed, 403 insertions(+), 339 deletions(-) diff --git a/tutorials/things_in_pandas.ipynb b/tutorials/things_in_pandas.ipynb index fd8a7f9..87c09bb 100644 --- a/tutorials/things_in_pandas.ipynb +++ b/tutorials/things_in_pandas.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:2c7029e546d20c06eaa707f59d5b067689bf8827b87cc32f4fae7b55cde6e0f2" + "signature": "sha256:c69dee8958d58e899a12b80810cc37f7abd7a90f9b76135251a76499ed8aeb2a" }, "nbformat": 3, "nbformat_minor": 0, @@ -89,6 +89,7 @@ "- [Applying Computations Rows-wise](#Applying-Computations-Rows-wise)\n", " - [Changing Values in a Column](#Changing-Values-in-a-Column)\n", " - [Adding a New Column](#Adding-a-New-Column)\n", + " - [Applying Functions to Multiple Columns](#Applying-Functions-to-Multiple-Columns)\n", "- [Missing Values aka NaNs](#Missing-Values-aka-NaNs)\n", " - [Counting Rows with NaNs](#Counting-Rows-with-NaNs)\n", " - [Selecting NaN Rows](#Selecting-NaN-Rows)\n", @@ -915,6 +916,144 @@ "
    " ] }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Applying Functions to Multiple Columns" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "cols = ['player', 'position', 'team']\n", + "df[cols] = df[cols].applymap(lambda x: x.lower())\n", + "df.head()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    0 sergio ag\u00fcero 19.2 16 14 3 34 13.12 209.98 forward manchester city
    1 eden hazard 18.9 21 8 4 17 13.05 274.04 midfield chelsea
    2 alexis s\u00e1nchez 17.6NaN 12 7 29 11.19 223.86 forward arsenal
    3 yaya tour\u00e9 16.6 18 7 1 19 10.99 197.91 midfield manchester city
    4 \u00e1ngel di mar\u00eda 15.0 13 3NaN 13 10.17 132.23 midfield manchester united
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 8, + "text": [ + " player salary games goals assists shots_on_target \\\n", + "0 sergio ag\u00fcero 19.2 16 14 3 34 \n", + "1 eden hazard 18.9 21 8 4 17 \n", + "2 alexis s\u00e1nchez 17.6 NaN 12 7 29 \n", + "3 yaya tour\u00e9 16.6 18 7 1 19 \n", + "4 \u00e1ngel di mar\u00eda 15.0 13 3 NaN 13 \n", + "\n", + " points_per_game points position team \n", + "0 13.12 209.98 forward manchester city \n", + "1 13.05 274.04 midfield chelsea \n", + "2 11.19 223.86 forward arsenal \n", + "3 10.99 197.91 midfield manchester city \n", + "4 10.17 132.23 midfield manchester united " + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, { "cell_type": "heading", "level": 1, @@ -965,7 +1104,7 @@ ] } ], - "prompt_number": 8 + "prompt_number": 9 }, { "cell_type": "markdown", @@ -1016,7 +1155,7 @@ " \n", " \n", " 4\n", - " \u00c1ngel Di Mar\u00eda\n", + " \u00e1ngel di mar\u00eda\n", " 15.0\n", " 13\n", " 3\n", @@ -1024,12 +1163,12 @@ " 13\n", " 10.17\n", " 132.23\n", - " Midfield\n", - " Manchester United\n", + " midfield\n", + " manchester united\n", " \n", " \n", " 5\n", - " Santiago Cazorla\n", + " santiago cazorla\n", " 14.8\n", " 20\n", " 4\n", @@ -1037,8 +1176,8 @@ " 20\n", " 9.97\n", " NaN\n", - " Midfield\n", - " Arsenal\n", + " midfield\n", + " arsenal\n", " \n", " \n", "\n", @@ -1046,19 +1185,19 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 8, + "prompt_number": 10, "text": [ " player salary games goals assists shots_on_target \\\n", - "4 \u00c1ngel Di Mar\u00eda 15.0 13 3 NaN 13 \n", - "5 Santiago Cazorla 14.8 20 4 NaN 20 \n", + "4 \u00e1ngel di mar\u00eda 15.0 13 3 NaN 13 \n", + "5 santiago cazorla 14.8 20 4 NaN 20 \n", "\n", " points_per_game points position team \n", - "4 10.17 132.23 Midfield Manchester United \n", - "5 9.97 NaN Midfield Arsenal " + "4 10.17 132.23 midfield manchester united \n", + "5 9.97 NaN midfield arsenal " ] } ], - "prompt_number": 8 + "prompt_number": 10 }, { "cell_type": "markdown", @@ -1107,7 +1246,7 @@ " \n", " \n", " 0\n", - " Sergio Ag\u00fcero\n", + " sergio ag\u00fcero\n", " 19.2\n", " 16\n", " 14\n", @@ -1115,12 +1254,12 @@ " 34\n", " 13.12\n", " 209.98\n", - " Forward\n", - " Manchester City\n", + " forward\n", + " manchester city\n", " \n", " \n", " 1\n", - " Eden Hazard\n", + " eden hazard\n", " 18.9\n", " 21\n", " 8\n", @@ -1128,12 +1267,12 @@ " 17\n", " 13.05\n", " 274.04\n", - " Midfield\n", - " Chelsea\n", + " midfield\n", + " chelsea\n", " \n", " \n", " 2\n", - " Alexis S\u00e1nchez\n", + " alexis s\u00e1nchez\n", " 17.6\n", " NaN\n", " 12\n", @@ -1141,12 +1280,12 @@ " 29\n", " 11.19\n", " 223.86\n", - " Forward\n", - " Arsenal\n", + " forward\n", + " arsenal\n", " \n", " \n", " 3\n", - " Yaya Tour\u00e9\n", + " yaya tour\u00e9\n", " 16.6\n", " 18\n", " 7\n", @@ -1154,12 +1293,12 @@ " 19\n", " 10.99\n", " 197.91\n", - " Midfield\n", - " Manchester City\n", + " midfield\n", + " manchester city\n", " \n", " \n", " 6\n", - " David Silva\n", + " david silva\n", " 14.3\n", " 15\n", " 6\n", @@ -1167,12 +1306,12 @@ " 11\n", " 10.35\n", " 155.26\n", - " Midfield\n", - " Manchester City\n", + " midfield\n", + " manchester city\n", " \n", " \n", " 7\n", - " Cesc F\u00e0bregas\n", + " cesc f\u00e0bregas\n", " 14.0\n", " 20\n", " 2\n", @@ -1180,12 +1319,12 @@ " 10\n", " 10.47\n", " 209.49\n", - " Midfield\n", - " Chelsea\n", + " midfield\n", + " chelsea\n", " \n", " \n", " 8\n", - " Saido Berahino\n", + " saido berahino\n", " 13.8\n", " 21\n", " 9\n", @@ -1193,12 +1332,12 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", - " West Brom\n", + " forward\n", + " west brom\n", " \n", " \n", " 9\n", - " Steven Gerrard\n", + " steven gerrard\n", " 13.8\n", " 20\n", " 5\n", @@ -1206,8 +1345,8 @@ " 11\n", " 7.50\n", " 150.01\n", - " Midfield\n", - " Liverpool\n", + " midfield\n", + " liverpool\n", " \n", " \n", "\n", @@ -1215,31 +1354,31 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 9, + "prompt_number": 11, "text": [ " player salary games goals assists shots_on_target \\\n", - "0 Sergio Ag\u00fcero 19.2 16 14 3 34 \n", - "1 Eden Hazard 18.9 21 8 4 17 \n", - "2 Alexis S\u00e1nchez 17.6 NaN 12 7 29 \n", - "3 Yaya Tour\u00e9 16.6 18 7 1 19 \n", - "6 David Silva 14.3 15 6 2 11 \n", - "7 Cesc F\u00e0bregas 14.0 20 2 14 10 \n", - "8 Saido Berahino 13.8 21 9 0 20 \n", - "9 Steven Gerrard 13.8 20 5 1 11 \n", + "0 sergio ag\u00fcero 19.2 16 14 3 34 \n", + "1 eden hazard 18.9 21 8 4 17 \n", + "2 alexis s\u00e1nchez 17.6 NaN 12 7 29 \n", + "3 yaya tour\u00e9 16.6 18 7 1 19 \n", + "6 david silva 14.3 15 6 2 11 \n", + "7 cesc f\u00e0bregas 14.0 20 2 14 10 \n", + "8 saido berahino 13.8 21 9 0 20 \n", + "9 steven gerrard 13.8 20 5 1 11 \n", "\n", " points_per_game points position team \n", - "0 13.12 209.98 Forward Manchester City \n", - "1 13.05 274.04 Midfield Chelsea \n", - "2 11.19 223.86 Forward Arsenal \n", - "3 10.99 197.91 Midfield Manchester City \n", - "6 10.35 155.26 Midfield Manchester City \n", - "7 10.47 209.49 Midfield Chelsea \n", - "8 7.02 147.43 Forward West Brom \n", - "9 7.50 150.01 Midfield Liverpool " + "0 13.12 209.98 forward manchester city \n", + "1 13.05 274.04 midfield chelsea \n", + "2 11.19 223.86 forward arsenal \n", + "3 10.99 197.91 midfield manchester city \n", + "6 10.35 155.26 midfield manchester city \n", + "7 10.47 209.49 midfield chelsea \n", + "8 7.02 147.43 forward west brom \n", + "9 7.50 150.01 midfield liverpool " ] } ], - "prompt_number": 9 + "prompt_number": 11 }, { "cell_type": "markdown", @@ -1291,7 +1430,7 @@ " \n", " \n", " 0\n", - " Sergio Ag\u00fcero\n", + " sergio ag\u00fcero\n", " 19.2\n", " 16\n", " 14\n", @@ -1299,12 +1438,12 @@ " 34\n", " 13.12\n", " 209.98\n", - " Forward\n", - " Manchester City\n", + " forward\n", + " manchester city\n", " \n", " \n", " 1\n", - " Eden Hazard\n", + " eden hazard\n", " 18.9\n", " 21\n", " 8\n", @@ -1312,12 +1451,12 @@ " 17\n", " 13.05\n", " 274.04\n", - " Midfield\n", - " Chelsea\n", + " midfield\n", + " chelsea\n", " \n", " \n", " 2\n", - " Alexis S\u00e1nchez\n", + " alexis s\u00e1nchez\n", " 17.6\n", " 0\n", " 12\n", @@ -1325,12 +1464,12 @@ " 29\n", " 11.19\n", " 223.86\n", - " Forward\n", - " Arsenal\n", + " forward\n", + " arsenal\n", " \n", " \n", " 3\n", - " Yaya Tour\u00e9\n", + " yaya tour\u00e9\n", " 16.6\n", " 18\n", " 7\n", @@ -1338,12 +1477,12 @@ " 19\n", " 10.99\n", " 197.91\n", - " Midfield\n", - " Manchester City\n", + " midfield\n", + " manchester city\n", " \n", " \n", " 4\n", - " \u00c1ngel Di Mar\u00eda\n", + " \u00e1ngel di mar\u00eda\n", " 15.0\n", " 13\n", " 3\n", @@ -1351,12 +1490,12 @@ " 13\n", " 10.17\n", " 132.23\n", - " Midfield\n", - " Manchester United\n", + " midfield\n", + " manchester united\n", " \n", " \n", " 5\n", - " Santiago Cazorla\n", + " santiago cazorla\n", " 14.8\n", " 20\n", " 4\n", @@ -1364,12 +1503,12 @@ " 20\n", " 9.97\n", " 0.00\n", - " Midfield\n", - " Arsenal\n", + " midfield\n", + " arsenal\n", " \n", " \n", " 6\n", - " David Silva\n", + " david silva\n", " 14.3\n", " 15\n", " 6\n", @@ -1377,12 +1516,12 @@ " 11\n", " 10.35\n", " 155.26\n", - " Midfield\n", - " Manchester City\n", + " midfield\n", + " manchester city\n", " \n", " \n", " 7\n", - " Cesc F\u00e0bregas\n", + " cesc f\u00e0bregas\n", " 14.0\n", " 20\n", " 2\n", @@ -1390,12 +1529,12 @@ " 10\n", " 10.47\n", " 209.49\n", - " Midfield\n", - " Chelsea\n", + " midfield\n", + " chelsea\n", " \n", " \n", " 8\n", - " Saido Berahino\n", + " saido berahino\n", " 13.8\n", " 21\n", " 9\n", @@ -1403,12 +1542,12 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", - " West Brom\n", + " forward\n", + " west brom\n", " \n", " \n", " 9\n", - " Steven Gerrard\n", + " steven gerrard\n", " 13.8\n", " 20\n", " 5\n", @@ -1416,8 +1555,8 @@ " 11\n", " 7.50\n", " 150.01\n", - " Midfield\n", - " Liverpool\n", + " midfield\n", + " liverpool\n", " \n", " \n", "\n", @@ -1425,35 +1564,35 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 10, + "prompt_number": 12, "text": [ " player salary games goals assists shots_on_target \\\n", - "0 Sergio Ag\u00fcero 19.2 16 14 3 34 \n", - "1 Eden Hazard 18.9 21 8 4 17 \n", - "2 Alexis S\u00e1nchez 17.6 0 12 7 29 \n", - "3 Yaya Tour\u00e9 16.6 18 7 1 19 \n", - "4 \u00c1ngel Di Mar\u00eda 15.0 13 3 0 13 \n", - "5 Santiago Cazorla 14.8 20 4 0 20 \n", - "6 David Silva 14.3 15 6 2 11 \n", - "7 Cesc F\u00e0bregas 14.0 20 2 14 10 \n", - "8 Saido Berahino 13.8 21 9 0 20 \n", - "9 Steven Gerrard 13.8 20 5 1 11 \n", + "0 sergio ag\u00fcero 19.2 16 14 3 34 \n", + "1 eden hazard 18.9 21 8 4 17 \n", + "2 alexis s\u00e1nchez 17.6 0 12 7 29 \n", + "3 yaya tour\u00e9 16.6 18 7 1 19 \n", + "4 \u00e1ngel di mar\u00eda 15.0 13 3 0 13 \n", + "5 santiago cazorla 14.8 20 4 0 20 \n", + "6 david silva 14.3 15 6 2 11 \n", + "7 cesc f\u00e0bregas 14.0 20 2 14 10 \n", + "8 saido berahino 13.8 21 9 0 20 \n", + "9 steven gerrard 13.8 20 5 1 11 \n", "\n", " points_per_game points position team \n", - "0 13.12 209.98 Forward Manchester City \n", - "1 13.05 274.04 Midfield Chelsea \n", - "2 11.19 223.86 Forward Arsenal \n", - "3 10.99 197.91 Midfield Manchester City \n", - "4 10.17 132.23 Midfield Manchester United \n", - "5 9.97 0.00 Midfield Arsenal \n", - "6 10.35 155.26 Midfield Manchester City \n", - "7 10.47 209.49 Midfield Chelsea \n", - "8 7.02 147.43 Forward West Brom \n", - "9 7.50 150.01 Midfield Liverpool " + "0 13.12 209.98 forward manchester city \n", + "1 13.05 274.04 midfield chelsea \n", + "2 11.19 223.86 forward arsenal \n", + "3 10.99 197.91 midfield manchester city \n", + "4 10.17 132.23 midfield manchester united \n", + "5 9.97 0.00 midfield arsenal \n", + "6 10.35 155.26 midfield manchester city \n", + "7 10.47 209.49 midfield chelsea \n", + "8 7.02 147.43 forward west brom \n", + "9 7.50 150.01 midfield liverpool " ] } ], - "prompt_number": 10 + "prompt_number": 12 }, { "cell_type": "markdown", @@ -1518,7 +1657,7 @@ " \n", " \n", " 8 \n", - " Saido Berahino\n", + " saido berahino\n", " 13.8\n", " 21\n", " 9\n", @@ -1526,12 +1665,12 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", - " West Brom\n", + " forward\n", + " west brom\n", " \n", " \n", " 9 \n", - " Steven Gerrard\n", + " steven gerrard\n", " 13.8\n", " 20\n", " 5\n", @@ -1539,8 +1678,8 @@ " 11\n", " 7.50\n", " 150.01\n", - " Midfield\n", - " Liverpool\n", + " midfield\n", + " liverpool\n", " \n", " \n", " 10\n", @@ -1561,21 +1700,21 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 11, + "prompt_number": 13, "text": [ " player salary games goals assists shots_on_target \\\n", - "8 Saido Berahino 13.8 21 9 0 20 \n", - "9 Steven Gerrard 13.8 20 5 1 11 \n", + "8 saido berahino 13.8 21 9 0 20 \n", + "9 steven gerrard 13.8 20 5 1 11 \n", "10 NaN NaN NaN NaN NaN NaN \n", "\n", " points_per_game points position team \n", - "8 7.02 147.43 Forward West Brom \n", - "9 7.50 150.01 Midfield Liverpool \n", + "8 7.02 147.43 forward west brom \n", + "9 7.50 150.01 midfield liverpool \n", "10 NaN NaN NaN NaN " ] } ], - "prompt_number": 11 + "prompt_number": 13 }, { "cell_type": "code", @@ -1612,7 +1751,7 @@ " \n", " \n", " 8 \n", - " Saido Berahino\n", + " saido berahino\n", " 13.8\n", " 21\n", " 9\n", @@ -1620,12 +1759,12 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", - " West Brom\n", + " forward\n", + " west brom\n", " \n", " \n", " 9 \n", - " Steven Gerrard\n", + " steven gerrard\n", " 13.8\n", " 20\n", " 5\n", @@ -1633,8 +1772,8 @@ " 11\n", " 7.50\n", " 150.01\n", - " Midfield\n", - " Liverpool\n", + " midfield\n", + " liverpool\n", " \n", " \n", " 10\n", @@ -1655,21 +1794,21 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 12, + "prompt_number": 14, "text": [ " player salary games goals assists shots_on_target \\\n", - "8 Saido Berahino 13.8 21 9 0 20 \n", - "9 Steven Gerrard 13.8 20 5 1 11 \n", + "8 saido berahino 13.8 21 9 0 20 \n", + "9 steven gerrard 13.8 20 5 1 11 \n", "10 New Player 12.3 NaN NaN NaN NaN \n", "\n", " points_per_game points position team \n", - "8 7.02 147.43 Forward West Brom \n", - "9 7.50 150.01 Midfield Liverpool \n", + "8 7.02 147.43 forward west brom \n", + "9 7.50 150.01 midfield liverpool \n", "10 NaN NaN NaN NaN " ] } ], - "prompt_number": 12 + "prompt_number": 14 }, { "cell_type": "markdown", @@ -1728,7 +1867,7 @@ " \n", " \n", " 0\n", - " Sergio Ag\u00fcero\n", + " sergio ag\u00fcero\n", " 19.2\n", " 16\n", " 14\n", @@ -1736,12 +1875,12 @@ " 34\n", " 13.12\n", " 209.98\n", - " Forward\n", - " Manchester City\n", + " forward\n", + " manchester city\n", " \n", " \n", " 2\n", - " Alexis S\u00e1nchez\n", + " alexis s\u00e1nchez\n", " 17.6\n", " 0\n", " 12\n", @@ -1749,12 +1888,12 @@ " 29\n", " 11.19\n", " 223.86\n", - " Forward\n", - " Arsenal\n", + " forward\n", + " arsenal\n", " \n", " \n", " 8\n", - " Saido Berahino\n", + " saido berahino\n", " 13.8\n", " 21\n", " 9\n", @@ -1762,12 +1901,12 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", - " West Brom\n", + " forward\n", + " west brom\n", " \n", " \n", " 1\n", - " Eden Hazard\n", + " eden hazard\n", " 18.9\n", " 21\n", " 8\n", @@ -1775,12 +1914,12 @@ " 17\n", " 13.05\n", " 274.04\n", - " Midfield\n", - " Chelsea\n", + " midfield\n", + " chelsea\n", " \n", " \n", " 3\n", - " Yaya Tour\u00e9\n", + " yaya tour\u00e9\n", " 16.6\n", " 18\n", " 7\n", @@ -1788,8 +1927,8 @@ " 19\n", " 10.99\n", " 197.91\n", - " Midfield\n", - " Manchester City\n", + " midfield\n", + " manchester city\n", " \n", " \n", "\n", @@ -1797,25 +1936,25 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 13, + "prompt_number": 15, "text": [ " player salary games goals assists shots_on_target \\\n", - "0 Sergio Ag\u00fcero 19.2 16 14 3 34 \n", - "2 Alexis S\u00e1nchez 17.6 0 12 7 29 \n", - "8 Saido Berahino 13.8 21 9 0 20 \n", - "1 Eden Hazard 18.9 21 8 4 17 \n", - "3 Yaya Tour\u00e9 16.6 18 7 1 19 \n", + "0 sergio ag\u00fcero 19.2 16 14 3 34 \n", + "2 alexis s\u00e1nchez 17.6 0 12 7 29 \n", + "8 saido berahino 13.8 21 9 0 20 \n", + "1 eden hazard 18.9 21 8 4 17 \n", + "3 yaya tour\u00e9 16.6 18 7 1 19 \n", "\n", " points_per_game points position team \n", - "0 13.12 209.98 Forward Manchester City \n", - "2 11.19 223.86 Forward Arsenal \n", - "8 7.02 147.43 Forward West Brom \n", - "1 13.05 274.04 Midfield Chelsea \n", - "3 10.99 197.91 Midfield Manchester City " + "0 13.12 209.98 forward manchester city \n", + "2 11.19 223.86 forward arsenal \n", + "8 7.02 147.43 forward west brom \n", + "1 13.05 274.04 midfield chelsea \n", + "3 10.99 197.91 midfield manchester city " ] } ], - "prompt_number": 13 + "prompt_number": 15 }, { "cell_type": "code", @@ -1851,7 +1990,7 @@ " \n", " \n", " 1\n", - " Sergio Ag\u00fcero\n", + " sergio ag\u00fcero\n", " 19.2\n", " 16\n", " 14\n", @@ -1859,12 +1998,12 @@ " 34\n", " 13.12\n", " 209.98\n", - " Forward\n", - " Manchester City\n", + " forward\n", + " manchester city\n", " \n", " \n", " 2\n", - " Alexis S\u00e1nchez\n", + " alexis s\u00e1nchez\n", " 17.6\n", " 0\n", " 12\n", @@ -1872,12 +2011,12 @@ " 29\n", " 11.19\n", " 223.86\n", - " Forward\n", - " Arsenal\n", + " forward\n", + " arsenal\n", " \n", " \n", " 3\n", - " Saido Berahino\n", + " saido berahino\n", " 13.8\n", " 21\n", " 9\n", @@ -1885,12 +2024,12 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", - " West Brom\n", + " forward\n", + " west brom\n", " \n", " \n", " 4\n", - " Eden Hazard\n", + " eden hazard\n", " 18.9\n", " 21\n", " 8\n", @@ -1898,12 +2037,12 @@ " 17\n", " 13.05\n", " 274.04\n", - " Midfield\n", - " Chelsea\n", + " midfield\n", + " chelsea\n", " \n", " \n", " 5\n", - " Yaya Tour\u00e9\n", + " yaya tour\u00e9\n", " 16.6\n", " 18\n", " 7\n", @@ -1911,8 +2050,8 @@ " 19\n", " 10.99\n", " 197.91\n", - " Midfield\n", - " Manchester City\n", + " midfield\n", + " manchester city\n", " \n", " \n", "\n", @@ -1920,25 +2059,25 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 14, + "prompt_number": 16, "text": [ " player salary games goals assists shots_on_target \\\n", - "1 Sergio Ag\u00fcero 19.2 16 14 3 34 \n", - "2 Alexis S\u00e1nchez 17.6 0 12 7 29 \n", - "3 Saido Berahino 13.8 21 9 0 20 \n", - "4 Eden Hazard 18.9 21 8 4 17 \n", - "5 Yaya Tour\u00e9 16.6 18 7 1 19 \n", + "1 sergio ag\u00fcero 19.2 16 14 3 34 \n", + "2 alexis s\u00e1nchez 17.6 0 12 7 29 \n", + "3 saido berahino 13.8 21 9 0 20 \n", + "4 eden hazard 18.9 21 8 4 17 \n", + "5 yaya tour\u00e9 16.6 18 7 1 19 \n", "\n", " points_per_game points position team \n", - "1 13.12 209.98 Forward Manchester City \n", - "2 11.19 223.86 Forward Arsenal \n", - "3 7.02 147.43 Forward West Brom \n", - "4 13.05 274.04 Midfield Chelsea \n", - "5 10.99 197.91 Midfield Manchester City " + "1 13.12 209.98 forward manchester city \n", + "2 11.19 223.86 forward arsenal \n", + "3 7.02 147.43 forward west brom \n", + "4 13.05 274.04 midfield chelsea \n", + "5 10.99 197.91 midfield manchester city " ] } ], - "prompt_number": 14 + "prompt_number": 16 }, { "cell_type": "markdown", @@ -1998,7 +2137,7 @@ " \n", " \n", " 1\n", - " Sergio Ag\u00fcero\n", + " sergio ag\u00fcero\n", " 20\n", " 16\n", " 14\n", @@ -2006,12 +2145,12 @@ " 34\n", " 13.12\n", " 209.98\n", - " Forward\n", - " Manchester City\n", + " forward\n", + " manchester city\n", " \n", " \n", " 2\n", - " Alexis S\u00e1nchez\n", + " alexis s\u00e1nchez\n", " 15\n", " 0\n", " 12\n", @@ -2019,12 +2158,12 @@ " 29\n", " 11.19\n", " 223.86\n", - " Forward\n", - " Arsenal\n", + " forward\n", + " arsenal\n", " \n", " \n", " 3\n", - " Saido Berahino\n", + " saido berahino\n", " 13.8\n", " 21\n", " 9\n", @@ -2032,8 +2171,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", - " West Brom\n", + " forward\n", + " west brom\n", " \n", " \n", "\n", @@ -2041,21 +2180,21 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 15, + "prompt_number": 17, "text": [ " player salary games goals assists shots_on_target \\\n", - "1 Sergio Ag\u00fcero 20 16 14 3 34 \n", - "2 Alexis S\u00e1nchez 15 0 12 7 29 \n", - "3 Saido Berahino 13.8 21 9 0 20 \n", + "1 sergio ag\u00fcero 20 16 14 3 34 \n", + "2 alexis s\u00e1nchez 15 0 12 7 29 \n", + "3 saido berahino 13.8 21 9 0 20 \n", "\n", " points_per_game points position team \n", - "1 13.12 209.98 Forward Manchester City \n", - "2 11.19 223.86 Forward Arsenal \n", - "3 7.02 147.43 Forward West Brom " + "1 13.12 209.98 forward manchester city \n", + "2 11.19 223.86 forward arsenal \n", + "3 7.02 147.43 forward west brom " ] } ], - "prompt_number": 15 + "prompt_number": 17 }, { "cell_type": "markdown", @@ -2111,7 +2250,7 @@ " \n", " \n", " \n", - " Sergio Ag\u00fcero\n", + " sergio ag\u00fcero\n", " 19.2\n", " 16\n", " 14\n", @@ -2119,11 +2258,11 @@ " 34\n", " 13.12\n", " 209.98\n", - " Forward\n", - " Manchester City\n", + " forward\n", + " manchester city\n", " \n", " \n", - " Alexis S\u00e1nchez\n", + " alexis s\u00e1nchez\n", " 17.6\n", " 0\n", " 12\n", @@ -2131,11 +2270,11 @@ " 29\n", " 11.19\n", " 223.86\n", - " Forward\n", - " Arsenal\n", + " forward\n", + " arsenal\n", " \n", " \n", - " Saido Berahino\n", + " saido berahino\n", " 13.8\n", " 21\n", " 9\n", @@ -2143,8 +2282,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", - " West Brom\n", + " forward\n", + " west brom\n", " \n", " \n", "\n", @@ -2152,23 +2291,23 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 16, + "prompt_number": 18, "text": [ " salary games goals assists shots_on_target \\\n", "player \n", - "Sergio Ag\u00fcero 19.2 16 14 3 34 \n", - "Alexis S\u00e1nchez 17.6 0 12 7 29 \n", - "Saido Berahino 13.8 21 9 0 20 \n", + "sergio ag\u00fcero 19.2 16 14 3 34 \n", + "alexis s\u00e1nchez 17.6 0 12 7 29 \n", + "saido berahino 13.8 21 9 0 20 \n", "\n", " points_per_game points position team \n", "player \n", - "Sergio Ag\u00fcero 13.12 209.98 Forward Manchester City \n", - "Alexis S\u00e1nchez 11.19 223.86 Forward Arsenal \n", - "Saido Berahino 7.02 147.43 Forward West Brom " + "sergio ag\u00fcero 13.12 209.98 forward manchester city \n", + "alexis s\u00e1nchez 11.19 223.86 forward arsenal \n", + "saido berahino 7.02 147.43 forward west brom " ] } ], - "prompt_number": 16 + "prompt_number": 18 }, { "cell_type": "markdown", @@ -2221,7 +2360,7 @@ " \n", " \n", " \n", - " Sergio Ag\u00fcero\n", + " sergio ag\u00fcero\n", " 20\n", " 16\n", " 14\n", @@ -2229,11 +2368,11 @@ " 34\n", " 13.12\n", " 209.98\n", - " Forward\n", - " Manchester City\n", + " forward\n", + " manchester city\n", " \n", " \n", - " Alexis S\u00e1nchez\n", + " alexis s\u00e1nchez\n", " 15\n", " 0\n", " 12\n", @@ -2241,11 +2380,11 @@ " 29\n", " 11.19\n", " 223.86\n", - " Forward\n", - " Arsenal\n", + " forward\n", + " arsenal\n", " \n", " \n", - " Saido Berahino\n", + " saido berahino\n", " 13.8\n", " 21\n", " 9\n", @@ -2253,8 +2392,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", - " West Brom\n", + " forward\n", + " west brom\n", " \n", " \n", "\n", @@ -2262,23 +2401,23 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 17, + "prompt_number": 19, "text": [ " salary games goals assists shots_on_target \\\n", "player \n", - "Sergio Ag\u00fcero 20 16 14 3 34 \n", - "Alexis S\u00e1nchez 15 0 12 7 29 \n", - "Saido Berahino 13.8 21 9 0 20 \n", + "sergio ag\u00fcero 20 16 14 3 34 \n", + "alexis s\u00e1nchez 15 0 12 7 29 \n", + "saido berahino 13.8 21 9 0 20 \n", "\n", " points_per_game points position team \n", "player \n", - "Sergio Ag\u00fcero 13.12 209.98 Forward Manchester City \n", - "Alexis S\u00e1nchez 11.19 223.86 Forward Arsenal \n", - "Saido Berahino 7.02 147.43 Forward West Brom " + "sergio ag\u00fcero 13.12 209.98 forward manchester city \n", + "alexis s\u00e1nchez 11.19 223.86 forward arsenal \n", + "saido berahino 7.02 147.43 forward west brom " ] } ], - "prompt_number": 17 + "prompt_number": 19 }, { "cell_type": "markdown", @@ -2321,7 +2460,7 @@ " \n", " \n", " 0\n", - " Sergio Ag\u00fcero\n", + " sergio ag\u00fcero\n", " 20\n", " 16\n", " 14\n", @@ -2329,12 +2468,12 @@ " 34\n", " 13.12\n", " 209.98\n", - " Forward\n", - " Manchester City\n", + " forward\n", + " manchester city\n", " \n", " \n", " 1\n", - " Alexis S\u00e1nchez\n", + " alexis s\u00e1nchez\n", " 15\n", " 0\n", " 12\n", @@ -2342,12 +2481,12 @@ " 29\n", " 11.19\n", " 223.86\n", - " Forward\n", - " Arsenal\n", + " forward\n", + " arsenal\n", " \n", " \n", " 2\n", - " Saido Berahino\n", + " saido berahino\n", " 13.8\n", " 21\n", " 9\n", @@ -2355,8 +2494,8 @@ " 20\n", " 7.02\n", " 147.43\n", - " Forward\n", - " West Brom\n", + " forward\n", + " west brom\n", " \n", " \n", "\n", @@ -2364,21 +2503,21 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 18, + "prompt_number": 20, "text": [ " player salary games goals assists shots_on_target \\\n", - "0 Sergio Ag\u00fcero 20 16 14 3 34 \n", - "1 Alexis S\u00e1nchez 15 0 12 7 29 \n", - "2 Saido Berahino 13.8 21 9 0 20 \n", + "0 sergio ag\u00fcero 20 16 14 3 34 \n", + "1 alexis s\u00e1nchez 15 0 12 7 29 \n", + "2 saido berahino 13.8 21 9 0 20 \n", "\n", " points_per_game points position team \n", - "0 13.12 209.98 Forward Manchester City \n", - "1 11.19 223.86 Forward Arsenal \n", - "2 7.02 147.43 Forward West Brom " + "0 13.12 209.98 forward manchester city \n", + "1 11.19 223.86 forward arsenal \n", + "2 7.02 147.43 forward west brom " ] } ], - "prompt_number": 18 + "prompt_number": 20 }, { "cell_type": "markdown", @@ -2434,81 +2573,21 @@ " \n", " \n", " \n", - " \n", - " 1\n", - " Alexis S\u00e1nchez\n", - " 15\n", - " 0\n", - " 12\n", - " 7\n", - " 29\n", - " 11.19\n", - " 223.86\n", - " Forward\n", - " Arsenal\n", - " \n", - " \n", - " 3\n", - " Eden Hazard\n", - " 18.9\n", - " 21\n", - " 8\n", - " 4\n", - " 17\n", - " 13.05\n", - " 274.04\n", - " Midfield\n", - " Chelsea\n", - " \n", - " \n", - " 7\n", - " Santiago Cazorla\n", - " 14.8\n", - " 20\n", - " 4\n", - " 0\n", - " 20\n", - " 9.97\n", - " 0.00\n", - " Midfield\n", - " Arsenal\n", - " \n", - " \n", - " 9\n", - " Cesc F\u00e0bregas\n", - " 14.0\n", - " 20\n", - " 2\n", - " 14\n", - " 10\n", - " 10.47\n", - " 209.49\n", - " Midfield\n", - " Chelsea\n", - " \n", " \n", "\n", "" ], "metadata": {}, "output_type": "pyout", - "prompt_number": 19, + "prompt_number": 21, "text": [ - " player salary games goals assists shots_on_target \\\n", - "1 Alexis S\u00e1nchez 15 0 12 7 29 \n", - "3 Eden Hazard 18.9 21 8 4 17 \n", - "7 Santiago Cazorla 14.8 20 4 0 20 \n", - "9 Cesc F\u00e0bregas 14.0 20 2 14 10 \n", - "\n", - " points_per_game points position team \n", - "1 11.19 223.86 Forward Arsenal \n", - "3 13.05 274.04 Midfield Chelsea \n", - "7 9.97 0.00 Midfield Arsenal \n", - "9 10.47 209.49 Midfield Chelsea " + "Empty DataFrame\n", + "Columns: [player, salary, games, goals, assists, shots_on_target, points_per_game, points, position, team]\n", + "Index: []" ] } ], - "prompt_number": 19 + "prompt_number": 21 }, { "cell_type": "code", @@ -2541,36 +2620,21 @@ " \n", " \n", " \n", - " \n", - " 1\n", - " Alexis S\u00e1nchez\n", - " 15\n", - " 0\n", - " 12\n", - " 7\n", - " 29\n", - " 11.19\n", - " 223.86\n", - " Forward\n", - " Arsenal\n", - " \n", " \n", "\n", "" ], "metadata": {}, "output_type": "pyout", - "prompt_number": 20, + "prompt_number": 22, "text": [ - " player salary games goals assists shots_on_target \\\n", - "1 Alexis S\u00e1nchez 15 0 12 7 29 \n", - "\n", - " points_per_game points position team \n", - "1 11.19 223.86 Forward Arsenal " + "Empty DataFrame\n", + "Columns: [player, salary, games, goals, assists, shots_on_target, points_per_game, points, position, team]\n", + "Index: []" ] } ], - "prompt_number": 20 + "prompt_number": 22 } ], "metadata": {} From db6679eb9c064d1ee974e5c0226f81a739141112 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 28 Jan 2015 22:25:09 -0500 Subject: [PATCH 216/248] Applying Functions to Multiple Columns --- tutorials/things_in_pandas.ipynb | 99 ++++++++++++++++++++++++++++---- 1 file changed, 87 insertions(+), 12 deletions(-) diff --git a/tutorials/things_in_pandas.ipynb b/tutorials/things_in_pandas.ipynb index 87c09bb..53145eb 100644 --- a/tutorials/things_in_pandas.ipynb +++ b/tutorials/things_in_pandas.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:c69dee8958d58e899a12b80810cc37f7abd7a90f9b76135251a76499ed8aeb2a" + "signature": "sha256:3155cd3fa2449393a467f91f3cdbb32eeac212db664843ef30f96b635dbfc06d" }, "nbformat": 3, "nbformat_minor": 0, @@ -1722,7 +1722,7 @@ "input": [ "# Filling cells with data\n", "\n", - "df.loc[df.index[-1], 'player'] = 'New Player'\n", + "df.loc[df.index[-1], 'player'] = 'new player'\n", "df.loc[df.index[-1], 'salary'] = 12.3\n", "df.tail(3)" ], @@ -1777,7 +1777,7 @@ " \n", " \n", " 10\n", - " New Player\n", + " new player\n", " 12.3\n", " NaN\n", " NaN\n", @@ -1799,7 +1799,7 @@ " player salary games goals assists shots_on_target \\\n", "8 saido berahino 13.8 21 9 0 20 \n", "9 steven gerrard 13.8 20 5 1 11 \n", - "10 New Player 12.3 NaN NaN NaN NaN \n", + "10 new player 12.3 NaN NaN NaN NaN \n", "\n", " points_per_game points position team \n", "8 7.02 147.43 forward west brom \n", @@ -2548,7 +2548,7 @@ "input": [ "# Selecting only those players that either playing for Arsenal or Chelsea\n", "\n", - "df[ (df['team'] == 'Arsenal') | (df['team'] == 'Chelsea') ]" + "df[ (df['team'] == 'arsenal') | (df['team'] == 'chelsea') ]" ], "language": "python", "metadata": {}, @@ -2573,6 +2573,58 @@ " \n", " \n", " \n", + " \n", + " 1\n", + " alexis s\u00e1nchez\n", + " 15\n", + " 0\n", + " 12\n", + " 7\n", + " 29\n", + " 11.19\n", + " 223.86\n", + " forward\n", + " arsenal\n", + " \n", + " \n", + " 3\n", + " eden hazard\n", + " 18.9\n", + " 21\n", + " 8\n", + " 4\n", + " 17\n", + " 13.05\n", + " 274.04\n", + " midfield\n", + " chelsea\n", + " \n", + " \n", + " 7\n", + " santiago cazorla\n", + " 14.8\n", + " 20\n", + " 4\n", + " 0\n", + " 20\n", + " 9.97\n", + " 0.00\n", + " midfield\n", + " arsenal\n", + " \n", + " \n", + " 9\n", + " cesc f\u00e0bregas\n", + " 14.0\n", + " 20\n", + " 2\n", + " 14\n", + " 10\n", + " 10.47\n", + " 209.49\n", + " midfield\n", + " chelsea\n", + " \n", " \n", "\n", "" @@ -2581,9 +2633,17 @@ "output_type": "pyout", "prompt_number": 21, "text": [ - "Empty DataFrame\n", - "Columns: [player, salary, games, goals, assists, shots_on_target, points_per_game, points, position, team]\n", - "Index: []" + " player salary games goals assists shots_on_target \\\n", + "1 alexis s\u00e1nchez 15 0 12 7 29 \n", + "3 eden hazard 18.9 21 8 4 17 \n", + "7 santiago cazorla 14.8 20 4 0 20 \n", + "9 cesc f\u00e0bregas 14.0 20 2 14 10 \n", + "\n", + " points_per_game points position team \n", + "1 11.19 223.86 forward arsenal \n", + "3 13.05 274.04 midfield chelsea \n", + "7 9.97 0.00 midfield arsenal \n", + "9 10.47 209.49 midfield chelsea " ] } ], @@ -2595,7 +2655,7 @@ "input": [ "# Selecting forwards from Arsenal only\n", "\n", - "df[ (df['team'] == 'Arsenal') & (df['position'] == 'Forward') ]" + "df[ (df['team'] == 'arsenal') & (df['position'] == 'forward') ]" ], "language": "python", "metadata": {}, @@ -2620,6 +2680,19 @@ " \n", " \n", " \n", + " \n", + " 1\n", + " alexis s\u00e1nchez\n", + " 15\n", + " 0\n", + " 12\n", + " 7\n", + " 29\n", + " 11.19\n", + " 223.86\n", + " forward\n", + " arsenal\n", + " \n", " \n", "\n", "" @@ -2628,9 +2701,11 @@ "output_type": "pyout", "prompt_number": 22, "text": [ - "Empty DataFrame\n", - "Columns: [player, salary, games, goals, assists, shots_on_target, points_per_game, points, position, team]\n", - "Index: []" + " player salary games goals assists shots_on_target \\\n", + "1 alexis s\u00e1nchez 15 0 12 7 29 \n", + "\n", + " points_per_game points position team \n", + "1 11.19 223.86 forward arsenal " ] } ], From 40d5dd93a56218bd2e2287ff95ce428e3607dfa7 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 28 Jan 2015 22:31:23 -0500 Subject: [PATCH 217/248] Getting an Overview of the Column Types --- tutorials/things_in_pandas.ipynb | 142 +++++++++++++++++++++---------- 1 file changed, 98 insertions(+), 44 deletions(-) diff --git a/tutorials/things_in_pandas.ipynb b/tutorials/things_in_pandas.ipynb index 53145eb..bf6c0b5 100644 --- a/tutorials/things_in_pandas.ipynb +++ b/tutorials/things_in_pandas.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:3155cd3fa2449393a467f91f3cdbb32eeac212db664843ef30f96b635dbfc06d" + "signature": "sha256:2dd2df7144acb424c4be84b5679ebc4d06bf16dc6a3e0f7fd3d1ed0595479f64" }, "nbformat": 3, "nbformat_minor": 0, @@ -38,7 +38,7 @@ ] } ], - "prompt_number": 1 + "prompt_number": 2 }, { "cell_type": "markdown", @@ -98,7 +98,8 @@ "- [Appending Rows to a DataFrame](#Appending-Rows-to-a-DataFrame)\n", "- [Sorting and Reindexing DataFrames](#Sorting-and-Reindexing-DataFrames)\n", "- [Updating Columns](#Updating-Columns)\n", - "- [Chaining Conditions - Using Bitwise Operators](#Chaining-Conditions---Using-Bitwise-Operators)" + "- [Chaining Conditions - Using Bitwise Operators](#Chaining-Conditions---Using-Bitwise-Operators)\n", + "- [Getting an Overview of the Column Types](#Getting-an-Overview-of-the-Column-Types)" ] }, { @@ -277,7 +278,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 2, + "prompt_number": 3, "text": [ " PLAYER SALARY GP G A SOT \\\n", "0 Sergio Ag\u00fcero\\n Forward \u2014 Manchester City $19.2m 16 14 3 34 \n", @@ -305,7 +306,7 @@ ] } ], - "prompt_number": 2 + "prompt_number": 3 }, { "cell_type": "markdown", @@ -419,7 +420,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 3, + "prompt_number": 4, "text": [ " player salary gp g a sot ppg \\\n", "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 10 10.47 \n", @@ -433,7 +434,7 @@ ] } ], - "prompt_number": 3 + "prompt_number": 4 }, { "cell_type": "markdown", @@ -524,7 +525,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 4, + "prompt_number": 5, "text": [ " player salary games goals assists \\\n", "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 \n", @@ -538,7 +539,7 @@ ] } ], - "prompt_number": 4 + "prompt_number": 5 }, { "cell_type": "markdown", @@ -670,7 +671,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 5, + "prompt_number": 6, "text": [ " player salary games goals assists \\\n", "5 Santiago Cazorla\\n Midfield \u2014 Arsenal 14.8 20 4 NaN \n", @@ -688,7 +689,7 @@ ] } ], - "prompt_number": 5 + "prompt_number": 6 }, { "cell_type": "markdown", @@ -785,7 +786,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 6, + "prompt_number": 7, "text": [ " player salary games goals assists \\\n", "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea 14.0 20 2 14 \n", @@ -799,7 +800,7 @@ ] } ], - "prompt_number": 6 + "prompt_number": 7 }, { "cell_type": "code", @@ -892,7 +893,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 7, + "prompt_number": 8, "text": [ " player salary games goals assists shots_on_target \\\n", "7 Cesc F\u00e0bregas 14.0 20 2 14 10 \n", @@ -906,7 +907,7 @@ ] } ], - "prompt_number": 7 + "prompt_number": 8 }, { "cell_type": "markdown", @@ -1026,7 +1027,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 8, + "prompt_number": 9, "text": [ " player salary games goals assists shots_on_target \\\n", "0 sergio ag\u00fcero 19.2 16 14 3 34 \n", @@ -1044,7 +1045,7 @@ ] } ], - "prompt_number": 8 + "prompt_number": 9 }, { "cell_type": "markdown", @@ -1104,7 +1105,7 @@ ] } ], - "prompt_number": 9 + "prompt_number": 10 }, { "cell_type": "markdown", @@ -1185,7 +1186,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 10, + "prompt_number": 11, "text": [ " player salary games goals assists shots_on_target \\\n", "4 \u00e1ngel di mar\u00eda 15.0 13 3 NaN 13 \n", @@ -1197,7 +1198,7 @@ ] } ], - "prompt_number": 10 + "prompt_number": 11 }, { "cell_type": "markdown", @@ -1354,7 +1355,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 11, + "prompt_number": 12, "text": [ " player salary games goals assists shots_on_target \\\n", "0 sergio ag\u00fcero 19.2 16 14 3 34 \n", @@ -1378,7 +1379,7 @@ ] } ], - "prompt_number": 11 + "prompt_number": 12 }, { "cell_type": "markdown", @@ -1564,7 +1565,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 12, + "prompt_number": 13, "text": [ " player salary games goals assists shots_on_target \\\n", "0 sergio ag\u00fcero 19.2 16 14 3 34 \n", @@ -1592,7 +1593,7 @@ ] } ], - "prompt_number": 12 + "prompt_number": 13 }, { "cell_type": "markdown", @@ -1700,7 +1701,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 13, + "prompt_number": 14, "text": [ " player salary games goals assists shots_on_target \\\n", "8 saido berahino 13.8 21 9 0 20 \n", @@ -1714,7 +1715,7 @@ ] } ], - "prompt_number": 13 + "prompt_number": 14 }, { "cell_type": "code", @@ -1794,7 +1795,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 14, + "prompt_number": 15, "text": [ " player salary games goals assists shots_on_target \\\n", "8 saido berahino 13.8 21 9 0 20 \n", @@ -1808,7 +1809,7 @@ ] } ], - "prompt_number": 14 + "prompt_number": 15 }, { "cell_type": "markdown", @@ -1936,7 +1937,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 15, + "prompt_number": 16, "text": [ " player salary games goals assists shots_on_target \\\n", "0 sergio ag\u00fcero 19.2 16 14 3 34 \n", @@ -1954,7 +1955,7 @@ ] } ], - "prompt_number": 15 + "prompt_number": 16 }, { "cell_type": "code", @@ -2059,7 +2060,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 16, + "prompt_number": 17, "text": [ " player salary games goals assists shots_on_target \\\n", "1 sergio ag\u00fcero 19.2 16 14 3 34 \n", @@ -2077,7 +2078,7 @@ ] } ], - "prompt_number": 16 + "prompt_number": 17 }, { "cell_type": "markdown", @@ -2180,7 +2181,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 17, + "prompt_number": 18, "text": [ " player salary games goals assists shots_on_target \\\n", "1 sergio ag\u00fcero 20 16 14 3 34 \n", @@ -2194,7 +2195,7 @@ ] } ], - "prompt_number": 17 + "prompt_number": 18 }, { "cell_type": "markdown", @@ -2291,7 +2292,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 18, + "prompt_number": 19, "text": [ " salary games goals assists shots_on_target \\\n", "player \n", @@ -2307,7 +2308,7 @@ ] } ], - "prompt_number": 18 + "prompt_number": 19 }, { "cell_type": "markdown", @@ -2401,7 +2402,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 19, + "prompt_number": 20, "text": [ " salary games goals assists shots_on_target \\\n", "player \n", @@ -2417,7 +2418,7 @@ ] } ], - "prompt_number": 19 + "prompt_number": 20 }, { "cell_type": "markdown", @@ -2503,7 +2504,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 20, + "prompt_number": 21, "text": [ " player salary games goals assists shots_on_target \\\n", "0 sergio ag\u00fcero 20 16 14 3 34 \n", @@ -2517,7 +2518,7 @@ ] } ], - "prompt_number": 20 + "prompt_number": 21 }, { "cell_type": "markdown", @@ -2631,7 +2632,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 21, + "prompt_number": 22, "text": [ " player salary games goals assists shots_on_target \\\n", "1 alexis s\u00e1nchez 15 0 12 7 29 \n", @@ -2647,7 +2648,7 @@ ] } ], - "prompt_number": 21 + "prompt_number": 22 }, { "cell_type": "code", @@ -2699,7 +2700,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 22, + "prompt_number": 23, "text": [ " player salary games goals assists shots_on_target \\\n", "1 alexis s\u00e1nchez 15 0 12 7 29 \n", @@ -2709,7 +2710,60 @@ ] } ], - "prompt_number": 22 + "prompt_number": 23 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Getting an Overview of the Column Types" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "types = df.columns.to_series().groupby(df.dtypes).groups\n", + "for t in types.items():\n", + " print(t)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "(dtype('O'), ['player', 'salary', 'position', 'team'])\n", + "(dtype('float64'), ['games', 'goals', 'assists', 'shots_on_target', 'points_per_game', 'points'])\n" + ] + } + ], + "prompt_number": 29 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [] } ], "metadata": {} From c20584ea6c8c32380e47fa614e68d7b9f341e990 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 28 Jan 2015 22:47:03 -0500 Subject: [PATCH 218/248] column types --- tutorials/things_in_pandas.ipynb | 273 +++++++++++++++++++++++++------ 1 file changed, 219 insertions(+), 54 deletions(-) diff --git a/tutorials/things_in_pandas.ipynb b/tutorials/things_in_pandas.ipynb index bf6c0b5..505c1f3 100644 --- a/tutorials/things_in_pandas.ipynb +++ b/tutorials/things_in_pandas.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:2dd2df7144acb424c4be84b5679ebc4d06bf16dc6a3e0f7fd3d1ed0595479f64" + "signature": "sha256:c8ab1a3c99e7c72951c91e74991b8837884cd9e3863f1cd1833651e180ff32bd" }, "nbformat": 3, "nbformat_minor": 0, @@ -38,7 +38,7 @@ ] } ], - "prompt_number": 2 + "prompt_number": 1 }, { "cell_type": "markdown", @@ -99,7 +99,10 @@ "- [Sorting and Reindexing DataFrames](#Sorting-and-Reindexing-DataFrames)\n", "- [Updating Columns](#Updating-Columns)\n", "- [Chaining Conditions - Using Bitwise Operators](#Chaining-Conditions---Using-Bitwise-Operators)\n", - "- [Getting an Overview of the Column Types](#Getting-an-Overview-of-the-Column-Types)" + "- [Column Types](#Column-Types)\n", + " - [Printing Column Types](#Printing-Column-Types)\n", + " - [Selecting by Column Type](#Selecting-by-Column-Type)\n", + " - [Converting Column Types](#Converting-Column-Types)" ] }, { @@ -278,7 +281,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 3, + "prompt_number": 2, "text": [ " PLAYER SALARY GP G A SOT \\\n", "0 Sergio Ag\u00fcero\\n Forward \u2014 Manchester City $19.2m 16 14 3 34 \n", @@ -306,7 +309,7 @@ ] } ], - "prompt_number": 3 + "prompt_number": 2 }, { "cell_type": "markdown", @@ -420,7 +423,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 4, + "prompt_number": 3, "text": [ " player salary gp g a sot ppg \\\n", "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 10 10.47 \n", @@ -434,7 +437,7 @@ ] } ], - "prompt_number": 4 + "prompt_number": 3 }, { "cell_type": "markdown", @@ -525,7 +528,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 5, + "prompt_number": 4, "text": [ " player salary games goals assists \\\n", "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 \n", @@ -539,7 +542,7 @@ ] } ], - "prompt_number": 5 + "prompt_number": 4 }, { "cell_type": "markdown", @@ -671,7 +674,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 6, + "prompt_number": 5, "text": [ " player salary games goals assists \\\n", "5 Santiago Cazorla\\n Midfield \u2014 Arsenal 14.8 20 4 NaN \n", @@ -689,7 +692,7 @@ ] } ], - "prompt_number": 6 + "prompt_number": 5 }, { "cell_type": "markdown", @@ -786,7 +789,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 7, + "prompt_number": 6, "text": [ " player salary games goals assists \\\n", "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea 14.0 20 2 14 \n", @@ -800,7 +803,7 @@ ] } ], - "prompt_number": 7 + "prompt_number": 6 }, { "cell_type": "code", @@ -893,7 +896,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 8, + "prompt_number": 7, "text": [ " player salary games goals assists shots_on_target \\\n", "7 Cesc F\u00e0bregas 14.0 20 2 14 10 \n", @@ -907,7 +910,7 @@ ] } ], - "prompt_number": 8 + "prompt_number": 7 }, { "cell_type": "markdown", @@ -1027,7 +1030,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 9, + "prompt_number": 8, "text": [ " player salary games goals assists shots_on_target \\\n", "0 sergio ag\u00fcero 19.2 16 14 3 34 \n", @@ -1045,7 +1048,7 @@ ] } ], - "prompt_number": 9 + "prompt_number": 8 }, { "cell_type": "markdown", @@ -1105,7 +1108,7 @@ ] } ], - "prompt_number": 10 + "prompt_number": 9 }, { "cell_type": "markdown", @@ -1186,7 +1189,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 11, + "prompt_number": 10, "text": [ " player salary games goals assists shots_on_target \\\n", "4 \u00e1ngel di mar\u00eda 15.0 13 3 NaN 13 \n", @@ -1198,7 +1201,7 @@ ] } ], - "prompt_number": 11 + "prompt_number": 10 }, { "cell_type": "markdown", @@ -1355,7 +1358,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 12, + "prompt_number": 11, "text": [ " player salary games goals assists shots_on_target \\\n", "0 sergio ag\u00fcero 19.2 16 14 3 34 \n", @@ -1379,7 +1382,7 @@ ] } ], - "prompt_number": 12 + "prompt_number": 11 }, { "cell_type": "markdown", @@ -1565,7 +1568,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 13, + "prompt_number": 12, "text": [ " player salary games goals assists shots_on_target \\\n", "0 sergio ag\u00fcero 19.2 16 14 3 34 \n", @@ -1593,7 +1596,7 @@ ] } ], - "prompt_number": 13 + "prompt_number": 12 }, { "cell_type": "markdown", @@ -1701,7 +1704,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 14, + "prompt_number": 13, "text": [ " player salary games goals assists shots_on_target \\\n", "8 saido berahino 13.8 21 9 0 20 \n", @@ -1715,7 +1718,7 @@ ] } ], - "prompt_number": 14 + "prompt_number": 13 }, { "cell_type": "code", @@ -1795,7 +1798,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 15, + "prompt_number": 14, "text": [ " player salary games goals assists shots_on_target \\\n", "8 saido berahino 13.8 21 9 0 20 \n", @@ -1809,7 +1812,7 @@ ] } ], - "prompt_number": 15 + "prompt_number": 14 }, { "cell_type": "markdown", @@ -1937,7 +1940,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 16, + "prompt_number": 15, "text": [ " player salary games goals assists shots_on_target \\\n", "0 sergio ag\u00fcero 19.2 16 14 3 34 \n", @@ -1955,7 +1958,7 @@ ] } ], - "prompt_number": 16 + "prompt_number": 15 }, { "cell_type": "code", @@ -2060,7 +2063,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 17, + "prompt_number": 16, "text": [ " player salary games goals assists shots_on_target \\\n", "1 sergio ag\u00fcero 19.2 16 14 3 34 \n", @@ -2078,7 +2081,7 @@ ] } ], - "prompt_number": 17 + "prompt_number": 16 }, { "cell_type": "markdown", @@ -2181,7 +2184,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 18, + "prompt_number": 17, "text": [ " player salary games goals assists shots_on_target \\\n", "1 sergio ag\u00fcero 20 16 14 3 34 \n", @@ -2195,7 +2198,7 @@ ] } ], - "prompt_number": 18 + "prompt_number": 17 }, { "cell_type": "markdown", @@ -2292,7 +2295,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 19, + "prompt_number": 18, "text": [ " salary games goals assists shots_on_target \\\n", "player \n", @@ -2308,7 +2311,7 @@ ] } ], - "prompt_number": 19 + "prompt_number": 18 }, { "cell_type": "markdown", @@ -2402,7 +2405,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 20, + "prompt_number": 19, "text": [ " salary games goals assists shots_on_target \\\n", "player \n", @@ -2418,7 +2421,7 @@ ] } ], - "prompt_number": 20 + "prompt_number": 19 }, { "cell_type": "markdown", @@ -2504,7 +2507,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 21, + "prompt_number": 20, "text": [ " player salary games goals assists shots_on_target \\\n", "0 sergio ag\u00fcero 20 16 14 3 34 \n", @@ -2518,7 +2521,7 @@ ] } ], - "prompt_number": 21 + "prompt_number": 20 }, { "cell_type": "markdown", @@ -2632,7 +2635,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 22, + "prompt_number": 21, "text": [ " player salary games goals assists shots_on_target \\\n", "1 alexis s\u00e1nchez 15 0 12 7 29 \n", @@ -2648,7 +2651,7 @@ ] } ], - "prompt_number": 22 + "prompt_number": 21 }, { "cell_type": "code", @@ -2700,7 +2703,7 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 23, + "prompt_number": 22, "text": [ " player salary games goals assists shots_on_target \\\n", "1 alexis s\u00e1nchez 15 0 12 7 29 \n", @@ -2710,7 +2713,7 @@ ] } ], - "prompt_number": 23 + "prompt_number": 22 }, { "cell_type": "markdown", @@ -2725,7 +2728,7 @@ "level": 1, "metadata": {}, "source": [ - "Getting an Overview of the Column Types" + "Column Types" ] }, { @@ -2735,35 +2738,197 @@ "[[back to section overview](#Sections)]" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Printing Column Types" + ] + }, { "cell_type": "code", "collapsed": false, "input": [ "types = df.columns.to_series().groupby(df.dtypes).groups\n", - "for t in types.items():\n", - " print(t)" + "types" ], "language": "python", "metadata": {}, "outputs": [ { - "output_type": "stream", - "stream": "stdout", + "metadata": {}, + "output_type": "pyout", + "prompt_number": 23, + "text": [ + "{dtype('float64'): ['games',\n", + " 'goals',\n", + " 'assists',\n", + " 'shots_on_target',\n", + " 'points_per_game',\n", + " 'points'],\n", + " dtype('O'): ['player', 'salary', 'position', 'team']}" + ] + } + ], + "prompt_number": 23 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Selecting by Column Type" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# select string columns\n", + "df.loc[:, (df.dtypes == np.dtype('O')).values].head()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarypositionteam
    0 sergio ag\u00fcero 20 forward manchester city
    1 alexis s\u00e1nchez 15 forward arsenal
    2 saido berahino 13.8 forward west brom
    3 eden hazard 18.9 midfield chelsea
    4 yaya tour\u00e9 16.6 midfield manchester city
    \n", + "
    " + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 24, "text": [ - "(dtype('O'), ['player', 'salary', 'position', 'team'])\n", - "(dtype('float64'), ['games', 'goals', 'assists', 'shots_on_target', 'points_per_game', 'points'])\n" + " player salary position team\n", + "0 sergio ag\u00fcero 20 forward manchester city\n", + "1 alexis s\u00e1nchez 15 forward arsenal\n", + "2 saido berahino 13.8 forward west brom\n", + "3 eden hazard 18.9 midfield chelsea\n", + "4 yaya tour\u00e9 16.6 midfield manchester city" ] } ], - "prompt_number": 29 + "prompt_number": 24 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Converting Column Types" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "df['salary'] = df['salary'].astype(float)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, - "input": [], + "input": [ + "types = df.columns.to_series().groupby(df.dtypes).groups\n", + "types" + ], "language": "python", "metadata": {}, - "outputs": [] + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 26, + "text": [ + "{dtype('float64'): ['salary',\n", + " 'games',\n", + " 'goals',\n", + " 'assists',\n", + " 'shots_on_target',\n", + " 'points_per_game',\n", + " 'points'],\n", + " dtype('O'): ['player', 'position', 'team']}" + ] + } + ], + "prompt_number": 26 } ], "metadata": {} From 99f48330a091f0d27ff794402b82d171b2571625 Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 6 Feb 2015 11:52:10 -0500 Subject: [PATCH 219/248] added large_csv_to_sqlite.py --- useful_scripts/large_csv_to_sqlite.py | 45 +++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 useful_scripts/large_csv_to_sqlite.py diff --git a/useful_scripts/large_csv_to_sqlite.py b/useful_scripts/large_csv_to_sqlite.py new file mode 100644 index 0000000..633ea8c --- /dev/null +++ b/useful_scripts/large_csv_to_sqlite.py @@ -0,0 +1,45 @@ +# This is a workaround snippet for reading very large CSV that exceed the +# machine's memory and dump it into an SQLite database using pandas. +# +# Sebastian Raschka, 2015 +# +# Tested in Python 3.4.2 and pandas 0.15.2 + +import pandas as pd +import sqlite3 +from pandas.io import sql +import subprocess + +# In and output file paths +in_csv = '../data/my_large.csv' +out_sqlite = '../data/my.sqlite' + +table_name = 'my_table' # name for the SQLite database table +chunksize = 100000 # number of lines to process at each iteration + +# Get number of lines in the CSV file +nlines = subprocess.check_output('wc -l %s' % in_csv, shell=True) +nlines = int(nlines.split()[0]) + +# connect to database +cnx = sqlite3.connect(out_sqlite) + +# Iteratively read CSV and dump lines into the SQLite table +for i in range(0, nlines, chunksize): + + df = pd.read_csv(in_csv, + header=None, # no header, define column header manually later + nrows=chunksize, # number of rows to read at each iteration + skiprows=i) # skip rows that were already read + + # columns to read + df.columns = ['molecule_id','charge','db','drugsnow','hba','hbd','loc','nrb','smiles'] + + sql.to_sql(df, + name=table_name, + con=cnx, + index=False, # don't use CSV file index + index_label='molecule_id', # use a unique column from DataFrame as index + if_exists='append') +cnx.close() + From edc17e29074871bd7bbd75075577ff730cf91a16 Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 6 Feb 2015 11:58:24 -0500 Subject: [PATCH 220/248] updated readme --- README.md | 6 +++--- useful_scripts/sparsify_matrix.py | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8b1340d..66ad901 100644 --- a/README.md +++ b/README.md @@ -154,11 +154,11 @@ - [Shell script](./useful_scripts/prepend_python_shebang.sh) For prepending Python-shebangs to .py files. -- Convert 'tab-delimited' to 'comma-separated' CSV files [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/useful_scripts/fix_tab_csv.ipynb)] - -- A random string generator [function](./useful_scripts/random_string_generator.py) +- A random string generator [function](./useful_scripts/random_string_generator.py). +- [Converting large CSV files](https://github.com/rasbt/python_reference/blob/master/useful_scripts/large_csv_to_sqlite.py) to SQLite databases using pandas. +- [Sparsifying a matrix](https://github.com/rasbt/python_reference/blob/master/useful_scripts/sparsify_matrix.py) by zeroing out all elements but the top k elements in a row using NumPy.
    diff --git a/useful_scripts/sparsify_matrix.py b/useful_scripts/sparsify_matrix.py index 27c864c..ef5e141 100644 --- a/useful_scripts/sparsify_matrix.py +++ b/useful_scripts/sparsify_matrix.py @@ -4,6 +4,8 @@ # The matrix could be a distance or similarity matrix (e.g., kernel matrix in kernel PCA), # where we are interested to keep the top k neighbors. +import numpy as np + print('Sparsify a matrix by zeroing all elements but the top 2 values in a row.\n') A = np.array([[1,2,3,4,5],[9,8,6,4,5],[3,1,7,8,9]]) From 45c931b3f90742f306aaf813ed8a9964d7e41d5f Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 6 Feb 2015 12:01:46 -0500 Subject: [PATCH 221/248] updated readme --- useful_scripts/large_csv_to_sqlite.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/useful_scripts/large_csv_to_sqlite.py b/useful_scripts/large_csv_to_sqlite.py index 633ea8c..5e67691 100644 --- a/useful_scripts/large_csv_to_sqlite.py +++ b/useful_scripts/large_csv_to_sqlite.py @@ -17,6 +17,9 @@ table_name = 'my_table' # name for the SQLite database table chunksize = 100000 # number of lines to process at each iteration +# columns that should be read from the CSV file +columns = ['molecule_id','charge','db','drugsnow','hba','hbd','loc','nrb','smiles'] + # Get number of lines in the CSV file nlines = subprocess.check_output('wc -l %s' % in_csv, shell=True) nlines = int(nlines.split()[0]) @@ -33,7 +36,7 @@ skiprows=i) # skip rows that were already read # columns to read - df.columns = ['molecule_id','charge','db','drugsnow','hba','hbd','loc','nrb','smiles'] + df.columns = columns sql.to_sql(df, name=table_name, From cdac4741154ed99afbc8740ca2f38f9fa62cd678 Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 6 Feb 2015 15:09:13 -0500 Subject: [PATCH 222/248] shell cmd upd --- useful_scripts/large_csv_to_sqlite.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/useful_scripts/large_csv_to_sqlite.py b/useful_scripts/large_csv_to_sqlite.py index 5e67691..8edba57 100644 --- a/useful_scripts/large_csv_to_sqlite.py +++ b/useful_scripts/large_csv_to_sqlite.py @@ -21,7 +21,7 @@ columns = ['molecule_id','charge','db','drugsnow','hba','hbd','loc','nrb','smiles'] # Get number of lines in the CSV file -nlines = subprocess.check_output('wc -l %s' % in_csv, shell=True) +nlines = subprocess.check_output(['wc', '-l', in_csv]) nlines = int(nlines.split()[0]) # connect to database From 06387b454dc65483ccbdaeff710e5ccdff4eac32 Mon Sep 17 00:00:00 2001 From: rasbt Date: Fri, 6 Feb 2015 17:00:53 -0500 Subject: [PATCH 223/248] comment to skip header --- useful_scripts/large_csv_to_sqlite.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/useful_scripts/large_csv_to_sqlite.py b/useful_scripts/large_csv_to_sqlite.py index 8edba57..9932f9c 100644 --- a/useful_scripts/large_csv_to_sqlite.py +++ b/useful_scripts/large_csv_to_sqlite.py @@ -28,7 +28,7 @@ cnx = sqlite3.connect(out_sqlite) # Iteratively read CSV and dump lines into the SQLite table -for i in range(0, nlines, chunksize): +for i in range(0, nlines, chunksize): # change 0 -> 1 if your csv file contains a column header df = pd.read_csv(in_csv, header=None, # no header, define column header manually later From 80a06cfd60ac7bc20947ea9ef136f1c424aac9f4 Mon Sep 17 00:00:00 2001 From: rasbt Date: Thu, 19 Feb 2015 20:51:20 -0500 Subject: [PATCH 224/248] added pep links --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 66ad901..42903d5 100644 --- a/README.md +++ b/README.md @@ -170,7 +170,9 @@ - [PyPI - the Python Package Index](https://pypi.python.org/pypi) - The official repository for all open source Python modules and packages. -- [PEP 8](http://legacy.python.org/dev/peps/pep-0008/) - The official style guide for Python code. +- [PEP 8](https://www.python.org/dev/peps/pep-0008/) - The official style guide for Python code. + +- [PEP 257](https://www.python.org/dev/peps/pep-0257/) - Python's official docstring conventions; [pep257 - Python style guide checker](https://pypi.python.org/pypi/pep257)
    From c4feff05e53aad7796ee70f483eff3d03dffd5af Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 3 Jun 2015 15:50:00 -0400 Subject: [PATCH 225/248] namedtuple ex --- python_patterns/patterns.ipynb | 3068 ++++++++++++++++---------------- 1 file changed, 1563 insertions(+), 1505 deletions(-) diff --git a/python_patterns/patterns.ipynb b/python_patterns/patterns.ipynb index 2a769ba..64c6fe1 100644 --- a/python_patterns/patterns.ipynb +++ b/python_patterns/patterns.ipynb @@ -1,1542 +1,1600 @@ { - "metadata": { - "name": "", - "signature": "sha256:714a46a359c5b1c3e7e7bd4d19d73221f9def5bcb806840be82541070041d29e" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ + "cells": [ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[Go back](https://github.com/rasbt/python_reference) to the `python_reference` repository." - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "A random collection of useful Python snippets" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "I just cleaned my hard drive and found a couple of useful Python snippets that I had some use for in the past. I thought it would be worthwhile to collect them in a IPython notebook for personal reference and share it with people who might find them useful too. \n", - "Most of those snippets are hopefully self-explanatory, but I am planning to add more comments and descriptions in future." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Table of Contents" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- [Bitstrings from positive and negative elements in a list](#Bitstrings-from-positive-and-negative-elements-in-a-list)\n", - "- [Command line arguments 1 - sys.argv](#Command-line-arguments-1---sys.argv)\n", - "- [Data and time basics](#Data-and-time-basics)\n", - "- [Differences between 2 files](#Differences-between-2-files)\n", - "- [Differences between successive elements in a list](#Differences-between-successive-elements-in-a-list)\n", - "- [Doctest example](#Doctest-example)\n", - "- [English language detection](#English-language-detection)\n", - "- [File browsing basics](#File-browsing-basics)\n", - "- [File reading basics](#File-reading-basics)\n", - "- [Indices of min and max elements from a list](#Indices-of-min-and-max-elements-from-a-list)\n", - "- [Lambda functions](#Lambda-functions)\n", - "- [Private functions](#Private-functions)\n", - "- [Namedtuples](#Namedtuples)\n", - "- [Normalizing data](#Normalizing-data)\n", - "- [NumPy essentials](#NumPy-essentials)\n", - "- [Pickling Python objects to bitstreams](#Pickling-Python-objects-to-bitstreams)\n", - "- [Python version check](#Python-version-check)\n", - "- [Runtime within a script](#Runtime-within-a-script)\n", - "- [Sorting lists of tuples by elements](#Sorting-lists-of-tuples-by-elements)\n", - "- [Sorting multiple lists relative to each other](#Sorting-multiple-lists-relative-to-each-other)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%load_ext watermark" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 1 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%watermark -d -a \"Sebastian Raschka\" -v" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Sebastian Raschka 26/09/2014 \n", - "\n", - "CPython 3.4.1\n", - "IPython 2.0.0\n" - ] - } - ], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[More information](https://github.com/rasbt/watermark) about the `watermark` magic command extension." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Bitstrings from positive and negative elements in a list" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" - ] - }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Go back](https://github.com/rasbt/python_reference) to the `python_reference` repository." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# A random collection of useful Python snippets" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I just cleaned my hard drive and found a couple of useful Python snippets that I had some use for in the past. I thought it would be worthwhile to collect them in a IPython notebook for personal reference and share it with people who might find them useful too. \n", + "Most of those snippets are hopefully self-explanatory, but I am planning to add more comments and descriptions in future." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Table of Contents" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- [Bitstrings from positive and negative elements in a list](#Bitstrings-from-positive-and-negative-elements-in-a-list)\n", + "- [Command line arguments 1 - sys.argv](#Command-line-arguments-1---sys.argv)\n", + "- [Data and time basics](#Data-and-time-basics)\n", + "- [Differences between 2 files](#Differences-between-2-files)\n", + "- [Differences between successive elements in a list](#Differences-between-successive-elements-in-a-list)\n", + "- [Doctest example](#Doctest-example)\n", + "- [English language detection](#English-language-detection)\n", + "- [File browsing basics](#File-browsing-basics)\n", + "- [File reading basics](#File-reading-basics)\n", + "- [Indices of min and max elements from a list](#Indices-of-min-and-max-elements-from-a-list)\n", + "- [Lambda functions](#Lambda-functions)\n", + "- [Private functions](#Private-functions)\n", + "- [Namedtuples](#Namedtuples)\n", + "- [Normalizing data](#Normalizing-data)\n", + "- [NumPy essentials](#NumPy-essentials)\n", + "- [Pickling Python objects to bitstreams](#Pickling-Python-objects-to-bitstreams)\n", + "- [Python version check](#Python-version-check)\n", + "- [Runtime within a script](#Runtime-within-a-script)\n", + "- [Sorting lists of tuples by elements](#Sorting-lists-of-tuples-by-elements)\n", + "- [Sorting multiple lists relative to each other](#Sorting-multiple-lists-relative-to-each-other)\n", + "- [Using namedtuples](#Using-namedtuples)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%load_ext watermark" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Generating a bitstring from a Python list or numpy array\n", - "# where all postive values -> 1\n", - "# all negative values -> 0\n", - "\n", - "import numpy as np\n", - "\n", - "def make_bitstring(ary):\n", - " return np.where(ary > 0, 1, 0)\n", + "name": "stdout", + "output_type": "stream", + "text": [ + "Sebastian Raschka 26/09/2014 \n", "\n", - "\n", - "def faster_bitstring(ary):\n", - " return np.where(ary > 0).astype('i1')\n", - "\n", - "### Example:\n", - "\n", - "ary1 = np.array([1, 2, 0.3, -1, -2])\n", - "print('input values %s' %ary1)\n", - "print('bitstring %s' %make_bitstring(ary1))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "input values [ 1. 2. 0.3 -1. -2. ]\n", - "bitstring [1 1 1 0 0]\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " + "CPython 3.4.1\n", + "IPython 2.0.0\n" ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Command line arguments 1 - sys.argv" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" + } + ], + "source": [ + "%watermark -d -a \"Sebastian Raschka\" -v" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[More information](https://github.com/rasbt/watermark) about the `watermark` magic command extension." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Bitstrings from positive and negative elements in a list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "input values [ 1. 2. 0.3 -1. -2. ]\n", + "bitstring [1 1 1 0 0]\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%file cmd_line_args_1_sysarg.py\n", - "import sys\n", - "\n", - "def error(msg):\n", - " \"\"\"Prints error message, sends it to stderr, and quites the program.\"\"\"\n", - " sys.exit(msg)\n", - "\n", - "args = sys.argv[1:] # sys.argv[0] is the name of the python script itself\n", - "\n", - "try:\n", - " arg1 = int(args[0])\n", - " arg2 = args[1]\n", - " arg3 = args[2]\n", - " print(\"Everything okay!\")\n", - "\n", - "except ValueError:\n", - " error(\"First argument must be integer type!\")\n", - "\n", - "except IndexError:\n", - " error(\"Requires 3 arguments!\")" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Overwriting cmd_line_args_1_sysarg.py\n" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "% run cmd_line_args_1_sysarg.py 1 2 3" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Everything okay!\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "% run cmd_line_args_1_sysarg.py a 2 3" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "SystemExit", - "evalue": "First argument must be integer type!", - "output_type": "pyerr", - "traceback": [ - "An exception has occurred, use %tb to see the full traceback.\n", - "\u001b[0;31mSystemExit\u001b[0m\u001b[0;31m:\u001b[0m First argument must be integer type!\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " + } + ], + "source": [ + "# Generating a bitstring from a Python list or numpy array\n", + "# where all postive values -> 1\n", + "# all negative values -> 0\n", + "\n", + "import numpy as np\n", + "\n", + "def make_bitstring(ary):\n", + " return np.where(ary > 0, 1, 0)\n", + "\n", + "\n", + "def faster_bitstring(ary):\n", + " return np.where(ary > 0).astype('i1')\n", + "\n", + "### Example:\n", + "\n", + "ary1 = np.array([1, 2, 0.3, -1, -2])\n", + "print('input values %s' %ary1)\n", + "print('bitstring %s' %make_bitstring(ary1))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Command line arguments 1 - sys.argv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Overwriting cmd_line_args_1_sysarg.py\n" ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Data and time basics" + } + ], + "source": [ + "%%file cmd_line_args_1_sysarg.py\n", + "import sys\n", + "\n", + "def error(msg):\n", + " \"\"\"Prints error message, sends it to stderr, and quites the program.\"\"\"\n", + " sys.exit(msg)\n", + "\n", + "args = sys.argv[1:] # sys.argv[0] is the name of the python script itself\n", + "\n", + "try:\n", + " arg1 = int(args[0])\n", + " arg2 = args[1]\n", + " arg3 = args[2]\n", + " print(\"Everything okay!\")\n", + "\n", + "except ValueError:\n", + " error(\"First argument must be integer type!\")\n", + "\n", + "except IndexError:\n", + " error(\"Requires 3 arguments!\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Everything okay!\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" + } + ], + "source": [ + "% run cmd_line_args_1_sysarg.py 1 2 3" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "SystemExit", + "evalue": "First argument must be integer type!", + "output_type": "error", + "traceback": [ + "An exception has occurred, use %tb to see the full traceback.\n", + "\u001b[0;31mSystemExit\u001b[0m\u001b[0;31m:\u001b[0m First argument must be integer type!\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import time\n", - "\n", - "# print time HOURS:MINUTES:SECONDS\n", - "# e.g., '10:50:58'\n", - "print(time.strftime(\"%H:%M:%S\"))\n", - "\n", - "# print current date DAY:MONTH:YEAR\n", - "# e.g., '06/03/2014'\n", - "print(time.strftime(\"%d/%m/%Y\"))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "13:28:05\n", - "26/09/2014\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " + } + ], + "source": [ + "% run cmd_line_args_1_sysarg.py a 2 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data and time basics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "13:28:05\n", + "26/09/2014\n" ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Differences between 2 files" + } + ], + "source": [ + "import time\n", + "\n", + "# print time HOURS:MINUTES:SECONDS\n", + "# e.g., '10:50:58'\n", + "print(time.strftime(\"%H:%M:%S\"))\n", + "\n", + "# print current date DAY:MONTH:YEAR\n", + "# e.g., '06/03/2014'\n", + "print(time.strftime(\"%d/%m/%Y\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Differences between 2 files" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Writing id_file1.txt\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" + } + ], + "source": [ + "%%file id_file1.txt\n", + "1234\n", + "2342\n", + "2341" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Writing id_file2.txt\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%file id_file1.txt\n", - "1234\n", - "2342\n", - "2341" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Writing id_file1.txt\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%%file id_file2.txt\n", + } + ], + "source": [ + "%%file id_file2.txt\n", + "5234\n", + "3344\n", + "2341" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ "5234\n", "3344\n", - "2341" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Writing id_file2.txt\n" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Print lines that are different between 2 files. Insensitive\n", - "# to the order of the file contents.\n", - "\n", - "id_set1 = set()\n", - "id_set2 = set()\n", - "\n", - "with open('id_file1.txt', 'r') as id_file:\n", - " for line in id_file:\n", - " id_set1.add(line.strip())\n", - "\n", - "with open('id_file2.txt', 'r') as id_file:\n", - " for line in id_file:\n", - " id_set2.add(line.strip()) \n", - "\n", - "diffs = id_set2.difference(id_set1)\n", - "\n", - "for d in diffs:\n", - " print(d)\n", - "print(\"Total differences:\",len(diffs))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "5234\n", - "3344\n", - "Total differences: 2\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " + "Total differences: 2\n" ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Differences between successive elements in a list" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from itertools import islice\n", - "\n", - "lst = [1,2,3,5,8]\n", - "diff = [j - i for i, j in zip(lst, islice(lst, 1, None))]\n", - "print(diff)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[1, 1, 2, 3]\n" - ] - } - ], - "prompt_number": 12 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Doctest example" + } + ], + "source": [ + "# Print lines that are different between 2 files. Insensitive\n", + "# to the order of the file contents.\n", + "\n", + "id_set1 = set()\n", + "id_set2 = set()\n", + "\n", + "with open('id_file1.txt', 'r') as id_file:\n", + " for line in id_file:\n", + " id_set1.add(line.strip())\n", + "\n", + "with open('id_file2.txt', 'r') as id_file:\n", + " for line in id_file:\n", + " id_set2.add(line.strip()) \n", + "\n", + "diffs = id_set2.difference(id_set1)\n", + "\n", + "for d in diffs:\n", + " print(d)\n", + "print(\"Total differences:\",len(diffs))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Differences between successive elements in a list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 1, 2, 3]\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" + } + ], + "source": [ + "from itertools import islice\n", + "\n", + "lst = [1,2,3,5,8]\n", + "diff = [j - i for i, j in zip(lst, islice(lst, 1, None))]\n", + "print(diff)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Doctest example" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ok\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def subtract(a, b):\n", - " \"\"\"\n", - " Subtracts second from first number and returns result.\n", - " >>> subtract(10, 5)\n", - " 5\n", - " >>> subtract(11, 0.7)\n", - " 10.3\n", - " \"\"\"\n", - " return a-b\n", - "\n", - "if __name__ == \"__main__\": # is 'false' if imported\n", - " import doctest\n", - " doctest.testmod()\n", - " print('ok')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "ok\n" - ] - } - ], - "prompt_number": 17 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def hello_world():\n", - " \"\"\"\n", - " Returns 'Hello, World'\n", - " >>> hello_world()\n", + } + ], + "source": [ + "def subtract(a, b):\n", + " \"\"\"\n", + " Subtracts second from first number and returns result.\n", + " >>> subtract(10, 5)\n", + " 5\n", + " >>> subtract(11, 0.7)\n", + " 10.3\n", + " \"\"\"\n", + " return a-b\n", + "\n", + "if __name__ == \"__main__\": # is 'false' if imported\n", + " import doctest\n", + " doctest.testmod()\n", + " print('ok')" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "**********************************************************************\n", + "File \"__main__\", line 4, in __main__.hello_world\n", + "Failed example:\n", + " hello_world()\n", + "Expected:\n", " 'Hello, World'\n", - " \"\"\"\n", - " return 'hello world'\n", - "\n", - "if __name__ == \"__main__\": # is 'false' if imported\n", - " import doctest\n", - " doctest.testmod()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "**********************************************************************\n", - "File \"__main__\", line 4, in __main__.hello_world\n", - "Failed example:\n", - " hello_world()\n", - "Expected:\n", - " 'Hello, World'\n", - "Got:\n", - " 'hello world'\n", - "**********************************************************************\n", - "1 items had failures:\n", - " 1 of 1 in __main__.hello_world\n", - "***Test Failed*** 1 failures.\n" - ] - } - ], - "prompt_number": 18 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "English language detection" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import nltk\n", - "\n", - "def eng_ratio(text):\n", - " ''' Returns the ratio of non-English to English words from a text '''\n", - "\n", - " english_vocab = set(w.lower() for w in nltk.corpus.words.words()) \n", - " text_vocab = set(w.lower() for w in text.split() if w.lower().isalpha()) \n", - " unusual = text_vocab.difference(english_vocab)\n", - " diff = len(unusual)/len(text_vocab)\n", - " return diff\n", - " \n", - "text = 'This is a test fahrrad'\n", - "\n", - "print(eng_ratio(text))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0.2\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "File browsing basics" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import os\n", - "import shutil\n", - "import glob\n", - "\n", - "# working directory\n", - "c_dir = os.getcwd() # show current working directory\n", - "os.listdir(c_dir) # shows all files in the working directory\n", - "os.chdir('~/Data') # change working directory\n", - "\n", - "\n", - "# get all files in a directory\n", - "glob.glob('/Users/sebastian/Desktop/*')\n", - "\n", - "# e.g., ['/Users/sebastian/Desktop/untitled folder', '/Users/sebastian/Desktop/Untitled.txt']\n", - "\n", - "# walk\n", - "tree = os.walk(c_dir) \n", - "# moves through sub directories and creates a 'generator' object of tuples\n", - "# ('dir', [file1, file2, ...] [subdirectory1, subdirectory2, ...]), \n", - "# (...), ...\n", - "\n", - "#check files: returns either True or False\n", - "os.exists('../rel_path')\n", - "os.exists('/home/abs_path')\n", - "os.isfile('./file.txt')\n", - "os.isdir('./subdir')\n", - "\n", - "\n", - "# file permission (True or False\n", - "os.access('./some_file', os.F_OK) # File exists? Python 2.7\n", - "os.access('./some_file', os.R_OK) # Ok to read? Python 2.7\n", - "os.access('./some_file', os.W_OK) # Ok to write? Python 2.7\n", - "os.access('./some_file', os.X_OK) # Ok to execute? Python 2.7\n", - "os.access('./some_file', os.X_OK | os.W_OK) # Ok to execute or write? Python 2.7\n", - "\n", - "# join (creates operating system dependent paths)\n", - "os.path.join('a', 'b', 'c')\n", - "# 'a/b/c' on Unix/Linux\n", - "# 'a\\\\b\\\\c' on Windows\n", - "os.path.normpath('a/b/c') # converts file separators\n", - "\n", - "\n", - "# os.path: direcory and file names\n", - "os.path.samefile('./some_file', '/home/some_file') # True if those are the same\n", - "os.path.dirname('./some_file') # returns '.' (everythin but last component)\n", - "os.path.basename('./some_file') # returns 'some_file' (only last component\n", - "os.path.split('./some_file') # returns (dirname, basename) or ('.', 'some_file)\n", - "os.path.splitext('./some_file.txt') # returns ('./some_file', '.txt')\n", - "os.path.splitdrive('./some_file.txt') # returns ('', './some_file.txt')\n", - "os.path.isabs('./some_file.txt') # returns False (not an absolute path)\n", - "os.path.abspath('./some_file.txt')\n", - "\n", - "\n", - "# create and delete files and directories\n", - "os.mkdir('./test') # create a new direcotory\n", - "os.rmdir('./test') # removes an empty direcotory\n", - "os.removedirs('./test') # removes nested empty directories\n", - "os.remove('file.txt') # removes an individual file\n", - "shutil.rmtree('./test') # removes directory (empty or not empty)\n", - "\n", - "os.rename('./dir_before', './renamed') # renames directory if destination doesn't exist\n", - "shutil.move('./dir_before', './renamed') # renames directory always\n", - "\n", - "shutil.copytree('./orig', './copy') # copies a directory recursively\n", - "shutil.copyfile('file', 'copy') # copies a file\n", - "\n", - " \n", - "# Getting files of particular type from directory\n", - "files = [f for f in os.listdir(s_pdb_dir) if f.endswith(\".txt\")]\n", - " \n", - "# Copy and move\n", - "shutil.copyfile(\"/path/to/file\", \"/path/to/new/file\") \n", - "shutil.copy(\"/path/to/file\", \"/path/to/directory\")\n", - "shutil.move(\"/path/to/file\",\"/path/to/directory\")\n", - " \n", - "# Check if file or directory exists\n", - "os.path.exists(\"file or directory\")\n", - "os.path.isfile(\"file\")\n", - "os.path.isdir(\"directory\")\n", - " \n", - "# Working directory and absolute path to files\n", - "os.getcwd()\n", - "os.path.abspath(\"file\")" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "File reading basics" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" + "Got:\n", + " 'hello world'\n", + "**********************************************************************\n", + "1 items had failures:\n", + " 1 of 1 in __main__.hello_world\n", + "***Test Failed*** 1 failures.\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Note: rb opens file in binary mode to avoid issues with Windows systems\n", - "# where '\\r\\n' is used instead of '\\n' as newline character(s).\n", - "\n", - "\n", - "# A) Reading in Byte chunks\n", - "reader_a = open(\"file.txt\", \"rb\")\n", - "chunks = []\n", - "data = reader_a.read(64) # reads first 64 bytes\n", - "while data != \"\":\n", - " chunks.append(data)\n", - " data = reader_a.read(64)\n", - "if data:\n", - " chunks.append(data)\n", - "print(len(chunks))\n", - "reader_a.close()\n", - "\n", - "\n", - "# B) Reading whole file at once into a list of lines\n", - "with open(\"file.txt\", \"rb\") as reader_b: # recommended syntax, auto closes\n", - " data = reader_b.readlines() # data is assigned a list of lines\n", - "print(len(data))\n", - "\n", - "\n", - "# C) Reading whole file at once into a string\n", - "with open(\"file.txt\", \"rb\") as reader_c:\n", - " data = reader_c.read() # data is assigned a list of lines\n", - "print(len(data))\n", - "\n", - "\n", - "# D) Reading line by line into a list\n", - "data = []\n", - "with open(\"file.txt\", \"rb\") as reader_d:\n", - " for line in reader_d:\n", - " data.append(line)\n", - "print(len(data))\n" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Indices of min and max elements from a list" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import operator\n", - "\n", - "values = [1, 2, 3, 4, 5]\n", - "\n", - "min_index, min_value = min(enumerate(values), key=operator.itemgetter(1))\n", - "max_index, max_value = max(enumerate(values), key=operator.itemgetter(1))\n", - "\n", - "print('min_index:', min_index, 'min_value:', min_value)\n", - "print('max_index:', max_index, 'max_value:', max_value)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "min_index: 0 min_value: 1\n", - "max_index: 4 max_value: 5\n" - ] - } - ], - "prompt_number": 19 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Lambda functions" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Lambda functions are just a short-hand way or writing\n", - "# short function definitions\n", - "\n", - "def square_root1(x):\n", - " return x**0.5\n", - " \n", - "square_root2 = lambda x: x**0.5\n", - "\n", - "assert(square_root1(9) == square_root2(9))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 20 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Private functions" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def create_message(msg_txt):\n", - " def _priv_msg(message): # private, no access from outside\n", - " print(\"{}: {}\".format(msg_txt, message))\n", - " return _priv_msg # returns a function\n", - "\n", - "new_msg = create_message(\"My message\")\n", - "# note, new_msg is a function\n", - "\n", - "new_msg(\"Hello, World\")" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "My message: Hello, World\n" - ] - } - ], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Namedtuples" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from collections import namedtuple\n", - "\n", - "my_namedtuple = namedtuple('field_name', ['x', 'y', 'z', 'bla', 'blub'])\n", - "p = my_namedtuple(1, 2, 3, 4, 5)\n", - "print(p.x, p.y, p.z)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1 2 3\n" - ] - } - ], - "prompt_number": 25 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Normalizing data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def normalize(data, min_val=0, max_val=1):\n", - " \"\"\"\n", - " Normalizes values in a list of data points to a range, e.g.,\n", - " between 0.0 and 1.0. \n", - " Returns the original object if value is not a integer or float.\n", - " \n", - " \"\"\"\n", - " norm_data = []\n", - " data_min = min(data)\n", - " data_max = max(data)\n", - " for x in data:\n", - " numerator = x - data_min\n", - " denominator = data_max - data_min\n", - " x_norm = (max_val-min_val) * numerator/denominator + min_val\n", - " norm_data.append(x_norm)\n", - " return norm_data" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 28 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "normalize([1,2,3,4,5])" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 31, - "text": [ - "[0.0, 0.25, 0.5, 0.75, 1.0]" - ] - } - ], - "prompt_number": 31 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "normalize([1,2,3,4,5], min_val=-10, max_val=10)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 30, - "text": [ - "[-10.0, -5.0, 0.0, 5.0, 10.0]" - ] - } - ], - "prompt_number": 30 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "NumPy essentials" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import numpy as np\n", - "\n", - "ary1 = np.array([1,2,3,4,5]) # must be same type\n", - "ary2 = np.zeros((3,4)) # 3x4 matrix consisiting of 0s \n", - "ary3 = np.ones((3,4)) # 3x4 matrix consisiting of 1s \n", - "ary4 = np.identity(3) # 3x3 identity matrix\n", - "ary5 = ary1.copy() # make a copy of ary1\n", - "\n", - "item1 = ary3[0, 0] # item in row1, column1\n", - "\n", - "ary2.shape # tuple of dimensions. Here: (3,4)\n", - "ary2.size # number of elements. Here: 12\n", - "\n", - "\n", - "ary2_t = ary2.transpose() # transposes matrix\n", - "\n", - "ary2.ravel() # makes an array linear (1-dimensional)\n", - " # by concatenating rows\n", - "ary2.reshape(2,6) # reshapes array (must have same dimensions)\n", - "\n", - "ary3[0:2, 0:3] # submatrix of first 2 rows and first 3 columns \n", - "\n", - "ary3 = ary3[[2,0,1]] # re-arrange rows\n", - "\n", - "\n", - "# element-wise operations\n", - "\n", - "ary1 + ary1\n", - "ary1 * ary1\n", - "numpy.dot(ary1, ary1) # matrix/vector (dot) product\n", - "\n", - "numpy.sum(ary1, axis=1) # sum of a 1D array, column sums of a 2D array\n", - "numpy.mean(ary1, axis=1) # mean of a 1D array, column means of a 2D array" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Pickling Python objects to bitstreams" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" + } + ], + "source": [ + "def hello_world():\n", + " \"\"\"\n", + " Returns 'Hello, World'\n", + " >>> hello_world()\n", + " 'Hello, World'\n", + " \"\"\"\n", + " return 'hello world'\n", + "\n", + "if __name__ == \"__main__\": # is 'false' if imported\n", + " import doctest\n", + " doctest.testmod()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## English language detection" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.2\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import pickle\n", - "\n", - "#### Generate some object\n", - "my_dict = dict()\n", - "for i in range(1,10):\n", - " my_dict[i] = \"some text\"\n", - "\n", - "#### Save object to file\n", - "pickle_out = open('my_file.pkl', 'wb')\n", - "pickle.dump(my_dict, pickle_out)\n", - "pickle_out.close()\n", - "\n", - "#### Load object from file\n", - "my_object_file = open('my_file.pkl', 'rb')\n", - "my_dict = pickle.load(my_object_file)\n", - "my_object_file.close()\n", - "\n", - "print(my_dict)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "{1: 'some text', 2: 'some text', 3: 'some text', 4: 'some text', 5: 'some text', 6: 'some text', 7: 'some text', 8: 'some text', 9: 'some text'}\n" - ] - } - ], - "prompt_number": 35 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " + } + ], + "source": [ + "import nltk\n", + "\n", + "def eng_ratio(text):\n", + " ''' Returns the ratio of non-English to English words from a text '''\n", + "\n", + " english_vocab = set(w.lower() for w in nltk.corpus.words.words()) \n", + " text_vocab = set(w.lower() for w in text.split() if w.lower().isalpha()) \n", + " unusual = text_vocab.difference(english_vocab)\n", + " diff = len(unusual)/len(text_vocab)\n", + " return diff\n", + " \n", + "text = 'This is a test fahrrad'\n", + "\n", + "print(eng_ratio(text))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## File browsing basics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import os\n", + "import shutil\n", + "import glob\n", + "\n", + "# working directory\n", + "c_dir = os.getcwd() # show current working directory\n", + "os.listdir(c_dir) # shows all files in the working directory\n", + "os.chdir('~/Data') # change working directory\n", + "\n", + "\n", + "# get all files in a directory\n", + "glob.glob('/Users/sebastian/Desktop/*')\n", + "\n", + "# e.g., ['/Users/sebastian/Desktop/untitled folder', '/Users/sebastian/Desktop/Untitled.txt']\n", + "\n", + "# walk\n", + "tree = os.walk(c_dir) \n", + "# moves through sub directories and creates a 'generator' object of tuples\n", + "# ('dir', [file1, file2, ...] [subdirectory1, subdirectory2, ...]), \n", + "# (...), ...\n", + "\n", + "#check files: returns either True or False\n", + "os.exists('../rel_path')\n", + "os.exists('/home/abs_path')\n", + "os.isfile('./file.txt')\n", + "os.isdir('./subdir')\n", + "\n", + "\n", + "# file permission (True or False\n", + "os.access('./some_file', os.F_OK) # File exists? Python 2.7\n", + "os.access('./some_file', os.R_OK) # Ok to read? Python 2.7\n", + "os.access('./some_file', os.W_OK) # Ok to write? Python 2.7\n", + "os.access('./some_file', os.X_OK) # Ok to execute? Python 2.7\n", + "os.access('./some_file', os.X_OK | os.W_OK) # Ok to execute or write? Python 2.7\n", + "\n", + "# join (creates operating system dependent paths)\n", + "os.path.join('a', 'b', 'c')\n", + "# 'a/b/c' on Unix/Linux\n", + "# 'a\\\\b\\\\c' on Windows\n", + "os.path.normpath('a/b/c') # converts file separators\n", + "\n", + "\n", + "# os.path: direcory and file names\n", + "os.path.samefile('./some_file', '/home/some_file') # True if those are the same\n", + "os.path.dirname('./some_file') # returns '.' (everythin but last component)\n", + "os.path.basename('./some_file') # returns 'some_file' (only last component\n", + "os.path.split('./some_file') # returns (dirname, basename) or ('.', 'some_file)\n", + "os.path.splitext('./some_file.txt') # returns ('./some_file', '.txt')\n", + "os.path.splitdrive('./some_file.txt') # returns ('', './some_file.txt')\n", + "os.path.isabs('./some_file.txt') # returns False (not an absolute path)\n", + "os.path.abspath('./some_file.txt')\n", + "\n", + "\n", + "# create and delete files and directories\n", + "os.mkdir('./test') # create a new direcotory\n", + "os.rmdir('./test') # removes an empty direcotory\n", + "os.removedirs('./test') # removes nested empty directories\n", + "os.remove('file.txt') # removes an individual file\n", + "shutil.rmtree('./test') # removes directory (empty or not empty)\n", + "\n", + "os.rename('./dir_before', './renamed') # renames directory if destination doesn't exist\n", + "shutil.move('./dir_before', './renamed') # renames directory always\n", + "\n", + "shutil.copytree('./orig', './copy') # copies a directory recursively\n", + "shutil.copyfile('file', 'copy') # copies a file\n", + "\n", + " \n", + "# Getting files of particular type from directory\n", + "files = [f for f in os.listdir(s_pdb_dir) if f.endswith(\".txt\")]\n", + " \n", + "# Copy and move\n", + "shutil.copyfile(\"/path/to/file\", \"/path/to/new/file\") \n", + "shutil.copy(\"/path/to/file\", \"/path/to/directory\")\n", + "shutil.move(\"/path/to/file\",\"/path/to/directory\")\n", + " \n", + "# Check if file or directory exists\n", + "os.path.exists(\"file or directory\")\n", + "os.path.isfile(\"file\")\n", + "os.path.isdir(\"directory\")\n", + " \n", + "# Working directory and absolute path to files\n", + "os.getcwd()\n", + "os.path.abspath(\"file\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## File reading basics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Note: rb opens file in binary mode to avoid issues with Windows systems\n", + "# where '\\r\\n' is used instead of '\\n' as newline character(s).\n", + "\n", + "\n", + "# A) Reading in Byte chunks\n", + "reader_a = open(\"file.txt\", \"rb\")\n", + "chunks = []\n", + "data = reader_a.read(64) # reads first 64 bytes\n", + "while data != \"\":\n", + " chunks.append(data)\n", + " data = reader_a.read(64)\n", + "if data:\n", + " chunks.append(data)\n", + "print(len(chunks))\n", + "reader_a.close()\n", + "\n", + "\n", + "# B) Reading whole file at once into a list of lines\n", + "with open(\"file.txt\", \"rb\") as reader_b: # recommended syntax, auto closes\n", + " data = reader_b.readlines() # data is assigned a list of lines\n", + "print(len(data))\n", + "\n", + "\n", + "# C) Reading whole file at once into a string\n", + "with open(\"file.txt\", \"rb\") as reader_c:\n", + " data = reader_c.read() # data is assigned a list of lines\n", + "print(len(data))\n", + "\n", + "\n", + "# D) Reading line by line into a list\n", + "data = []\n", + "with open(\"file.txt\", \"rb\") as reader_d:\n", + " for line in reader_d:\n", + " data.append(line)\n", + "print(len(data))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Indices of min and max elements from a list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "min_index: 0 min_value: 1\n", + "max_index: 4 max_value: 5\n" ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Python version check" + } + ], + "source": [ + "import operator\n", + "\n", + "values = [1, 2, 3, 4, 5]\n", + "\n", + "min_index, min_value = min(enumerate(values), key=operator.itemgetter(1))\n", + "max_index, max_value = max(enumerate(values), key=operator.itemgetter(1))\n", + "\n", + "print('min_index:', min_index, 'min_value:', min_value)\n", + "print('max_index:', max_index, 'max_value:', max_value)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lambda functions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Lambda functions are just a short-hand way or writing\n", + "# short function definitions\n", + "\n", + "def square_root1(x):\n", + " return x**0.5\n", + " \n", + "square_root2 = lambda x: x**0.5\n", + "\n", + "assert(square_root1(9) == square_root2(9))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Private functions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "My message: Hello, World\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" + } + ], + "source": [ + "def create_message(msg_txt):\n", + " def _priv_msg(message): # private, no access from outside\n", + " print(\"{}: {}\".format(msg_txt, message))\n", + " return _priv_msg # returns a function\n", + "\n", + "new_msg = create_message(\"My message\")\n", + "# note, new_msg is a function\n", + "\n", + "new_msg(\"Hello, World\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Namedtuples" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 2 3\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import sys\n", - "\n", - "def give_letter(word):\n", - " for letter in word:\n", - " yield letter\n", - "\n", - "if sys.version_info[0] == 3:\n", - " print('executed in Python 3.x')\n", - " test = give_letter('Hello')\n", - " print(next(test))\n", - " print('in for-loop:')\n", - " for l in test:\n", - " print(l)\n", - "\n", - "# if Python 2.x\n", - "if sys.version_info[0] == 2:\n", - " print('executed in Python 2.x')\n", - " test = give_letter('Hello')\n", - " print(test.next())\n", - " print('in for-loop:') \n", - " for l in test:\n", - " print(l)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "executed in Python 3.x\n", - "H\n", - "in for-loop:\n", - "e\n", - "l\n", - "l\n", - "o\n" - ] - } - ], - "prompt_number": 36 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " + } + ], + "source": [ + "from collections import namedtuple\n", + "\n", + "my_namedtuple = namedtuple('field_name', ['x', 'y', 'z', 'bla', 'blub'])\n", + "p = my_namedtuple(1, 2, 3, 4, 5)\n", + "print(p.x, p.y, p.z)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Normalizing data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def normalize(data, min_val=0, max_val=1):\n", + " \"\"\"\n", + " Normalizes values in a list of data points to a range, e.g.,\n", + " between 0.0 and 1.0. \n", + " Returns the original object if value is not a integer or float.\n", + " \n", + " \"\"\"\n", + " norm_data = []\n", + " data_min = min(data)\n", + " data_max = max(data)\n", + " for x in data:\n", + " numerator = x - data_min\n", + " denominator = data_max - data_min\n", + " x_norm = (max_val-min_val) * numerator/denominator + min_val\n", + " norm_data.append(x_norm)\n", + " return norm_data" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[0.0, 0.25, 0.5, 0.75, 1.0]" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "normalize([1,2,3,4,5])" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[-10.0, -5.0, 0.0, 5.0, 10.0]" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "normalize([1,2,3,4,5], min_val=-10, max_val=10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## NumPy essentials" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "ary1 = np.array([1,2,3,4,5]) # must be same type\n", + "ary2 = np.zeros((3,4)) # 3x4 matrix consisiting of 0s \n", + "ary3 = np.ones((3,4)) # 3x4 matrix consisiting of 1s \n", + "ary4 = np.identity(3) # 3x3 identity matrix\n", + "ary5 = ary1.copy() # make a copy of ary1\n", + "\n", + "item1 = ary3[0, 0] # item in row1, column1\n", + "\n", + "ary2.shape # tuple of dimensions. Here: (3,4)\n", + "ary2.size # number of elements. Here: 12\n", + "\n", + "\n", + "ary2_t = ary2.transpose() # transposes matrix\n", + "\n", + "ary2.ravel() # makes an array linear (1-dimensional)\n", + " # by concatenating rows\n", + "ary2.reshape(2,6) # reshapes array (must have same dimensions)\n", + "\n", + "ary3[0:2, 0:3] # submatrix of first 2 rows and first 3 columns \n", + "\n", + "ary3 = ary3[[2,0,1]] # re-arrange rows\n", + "\n", + "\n", + "# element-wise operations\n", + "\n", + "ary1 + ary1\n", + "ary1 * ary1\n", + "numpy.dot(ary1, ary1) # matrix/vector (dot) product\n", + "\n", + "numpy.sum(ary1, axis=1) # sum of a 1D array, column sums of a 2D array\n", + "numpy.mean(ary1, axis=1) # mean of a 1D array, column means of a 2D array" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pickling Python objects to bitstreams" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{1: 'some text', 2: 'some text', 3: 'some text', 4: 'some text', 5: 'some text', 6: 'some text', 7: 'some text', 8: 'some text', 9: 'some text'}\n" ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Runtime within a script" + } + ], + "source": [ + "import pickle\n", + "\n", + "#### Generate some object\n", + "my_dict = dict()\n", + "for i in range(1,10):\n", + " my_dict[i] = \"some text\"\n", + "\n", + "#### Save object to file\n", + "pickle_out = open('my_file.pkl', 'wb')\n", + "pickle.dump(my_dict, pickle_out)\n", + "pickle_out.close()\n", + "\n", + "#### Load object from file\n", + "my_object_file = open('my_file.pkl', 'rb')\n", + "my_dict = pickle.load(my_object_file)\n", + "my_object_file.close()\n", + "\n", + "print(my_dict)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Python version check" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "executed in Python 3.x\n", + "H\n", + "in for-loop:\n", + "e\n", + "l\n", + "l\n", + "o\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" + } + ], + "source": [ + "import sys\n", + "\n", + "def give_letter(word):\n", + " for letter in word:\n", + " yield letter\n", + "\n", + "if sys.version_info[0] == 3:\n", + " print('executed in Python 3.x')\n", + " test = give_letter('Hello')\n", + " print(next(test))\n", + " print('in for-loop:')\n", + " for l in test:\n", + " print(l)\n", + "\n", + "# if Python 2.x\n", + "if sys.version_info[0] == 2:\n", + " print('executed in Python 2.x')\n", + " test = give_letter('Hello')\n", + " print(test.next())\n", + " print('in for-loop:') \n", + " for l in test:\n", + " print(l)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Runtime within a script" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time elapsed: 0.49176900000000057 seconds\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import time\n", - "\n", - "start_time = time.clock()\n", - "\n", - "for i in range(10000000):\n", - " pass\n", - "\n", - "elapsed_time = time.clock() - start_time\n", - "print(\"Time elapsed: {} seconds\".format(elapsed_time))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Time elapsed: 0.49176900000000057 seconds\n" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "elapsed_time = timeit.timeit('for i in range(10000000): pass', number=1)\n", - "print(\"Time elapsed: {} seconds\".format(elapsed_time))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Time elapsed: 0.3550995970144868 seconds\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " + } + ], + "source": [ + "import time\n", + "\n", + "start_time = time.clock()\n", + "\n", + "for i in range(10000000):\n", + " pass\n", + "\n", + "elapsed_time = time.clock() - start_time\n", + "print(\"Time elapsed: {} seconds\".format(elapsed_time))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time elapsed: 0.3550995970144868 seconds\n" ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Sorting lists of tuples by elements" + } + ], + "source": [ + "import timeit\n", + "elapsed_time = timeit.timeit('for i in range(10000000): pass', number=1)\n", + "print(\"Time elapsed: {} seconds\".format(elapsed_time))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sorting lists of tuples by elements" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[(2, 3, 'a'), (2, 2, 'b'), (3, 2, 'b'), (1, 3, 'c')]\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" + } + ], + "source": [ + "# Here, we make use of the \"key\" parameter of the in-built \"sorted()\" function \n", + "# (also available for the \".sort()\" method), which let's us define a function \n", + "# that is called on every element that is to be sorted. In this case, our \n", + "# \"key\"-function is a simple lambda function that returns the last item \n", + "# from every tuple.\n", + "\n", + "a_list = [(1,3,'c'), (2,3,'a'), (3,2,'b'), (2,2,'b')]\n", + "\n", + "sorted_list = sorted(a_list, key=lambda e: e[::-1])\n", + "\n", + "print(sorted_list)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[(2, 3, 'a'), (3, 2, 'b'), (2, 2, 'b'), (1, 3, 'c')]\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Here, we make use of the \"key\" parameter of the in-built \"sorted()\" function \n", - "# (also available for the \".sort()\" method), which let's us define a function \n", - "# that is called on every element that is to be sorted. In this case, our \n", - "# \"key\"-function is a simple lambda function that returns the last item \n", - "# from every tuple.\n", - "\n", - "a_list = [(1,3,'c'), (2,3,'a'), (3,2,'b'), (2,2,'b')]\n", - "\n", - "sorted_list = sorted(a_list, key=lambda e: e[::-1])\n", - "\n", - "print(sorted_list)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[(2, 3, 'a'), (2, 2, 'b'), (3, 2, 'b'), (1, 3, 'c')]\n" - ] - } - ], - "prompt_number": 37 - }, + } + ], + "source": [ + "# prints [(2, 3, 'a'), (2, 2, 'b'), (3, 2, 'b'), (1, 3, 'c')]\n", + "\n", + "# If we are only interesting in sorting the list by the last element\n", + "# of the tuple and don't care about a \"tie\" situation, we can also use\n", + "# the index of the tuple item directly instead of reversing the tuple \n", + "# for efficiency.\n", + "\n", + "a_list = [(1,3,'c'), (2,3,'a'), (3,2,'b'), (2,2,'b')]\n", + "\n", + "sorted_list = sorted(a_list, key=lambda e: e[-1])\n", + "\n", + "print(sorted_list)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sorting multiple lists relative to each other" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "code", - "collapsed": false, - "input": [ - "# prints [(2, 3, 'a'), (2, 2, 'b'), (3, 2, 'b'), (1, 3, 'c')]\n", - "\n", - "# If we are only interesting in sorting the list by the last element\n", - "# of the tuple and don't care about a \"tie\" situation, we can also use\n", - "# the index of the tuple item directly instead of reversing the tuple \n", - "# for efficiency.\n", + "name": "stdout", + "output_type": "stream", + "text": [ + "input values:\n", + " ['c', 'b', 'a'] [6, 5, 4] ['some-val-associated-with-c', 'another_val-b', 'z_another_third_val-a']\n", "\n", - "a_list = [(1,3,'c'), (2,3,'a'), (3,2,'b'), (2,2,'b')]\n", "\n", - "sorted_list = sorted(a_list, key=lambda e: e[-1])\n", - "\n", - "print(sorted_list)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[(2, 3, 'a'), (3, 2, 'b'), (2, 2, 'b'), (1, 3, 'c')]\n" - ] - } - ], - "prompt_number": 38 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Sorting multiple lists relative to each other" + "sorted output:\n", + " ['a', 'b', 'c'] [4, 5, 6] ['z_another_third_val-a', 'another_val-b', 'some-val-associated-with-c']\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[back to top](#Table-of-Contents)" + } + ], + "source": [ + "\"\"\"\n", + "You have 3 lists that you want to sort \"relative\" to each other,\n", + "for example, picturing each list as a row in a 3x3 matrix: sort it by columns\n", + "\n", + "########################\n", + "If the input lists are\n", + "########################\n", + "\n", + " list1 = ['c','b','a']\n", + " list2 = [6,5,4]\n", + " list3 = ['some-val-associated-with-c','another_val-b','z_another_third_val-a']\n", + "\n", + "########################\n", + "the desired outcome is:\n", + "########################\n", + "\n", + " ['a', 'b', 'c'] \n", + " [4, 5, 6] \n", + " ['z_another_third_val-a', 'another_val-b', 'some-val-associated-with-c']\n", + "\n", + "########################\n", + "and NOT:\n", + "########################\n", + "\n", + " ['a', 'b', 'c'] \n", + " [4, 5, 6] \n", + " ['another_val-b', 'some-val-associated-with-c', 'z_another_third_val-a']\n", + "\n", + "\n", + "\"\"\"\n", + "\n", + "list1 = ['c','b','a']\n", + "list2 = [6,5,4]\n", + "list3 = ['some-val-associated-with-c','another_val-b','z_another_third_val-a']\n", + "\n", + "print('input values:\\n', list1, list2, list3)\n", + "\n", + "list1, list2, list3 = [list(t) for t in zip(*sorted(zip(list1, list2, list3)))]\n", + "\n", + "print('\\n\\nsorted output:\\n', list1, list2, list3 )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Using namedtuples" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[back to top](#Table-of-Contents)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`namedtuples` are high-performance container datatypes in the [`collection`](https://docs.python.org/2/library/collections.html) module (part of Python's stdlib since 2.6).\n", + "`namedtuple()` is factory function for creating tuple subclasses with named fields." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X-coordinate: 1\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "\"\"\"\n", - "You have 3 lists that you want to sort \"relative\" to each other,\n", - "for example, picturing each list as a row in a 3x3 matrix: sort it by columns\n", - "\n", - "########################\n", - "If the input lists are\n", - "########################\n", - "\n", - " list1 = ['c','b','a']\n", - " list2 = [6,5,4]\n", - " list3 = ['some-val-associated-with-c','another_val-b','z_another_third_val-a']\n", - "\n", - "########################\n", - "the desired outcome is:\n", - "########################\n", - "\n", - " ['a', 'b', 'c'] \n", - " [4, 5, 6] \n", - " ['z_another_third_val-a', 'another_val-b', 'some-val-associated-with-c']\n", - "\n", - "########################\n", - "and NOT:\n", - "########################\n", - "\n", - " ['a', 'b', 'c'] \n", - " [4, 5, 6] \n", - " ['another_val-b', 'some-val-associated-with-c', 'z_another_third_val-a']\n", - "\n", - "\n", - "\"\"\"\n", - "\n", - "list1 = ['c','b','a']\n", - "list2 = [6,5,4]\n", - "list3 = ['some-val-associated-with-c','another_val-b','z_another_third_val-a']\n", - "\n", - "print('input values:\\n', list1, list2, list3)\n", - "\n", - "list1, list2, list3 = [list(t) for t in zip(*sorted(zip(list1, list2, list3)))]\n", - "\n", - "print('\\n\\nsorted output:\\n', list1, list2, list3 )" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "input values:\n", - " ['c', 'b', 'a'] [6, 5, 4] ['some-val-associated-with-c', 'another_val-b', 'z_another_third_val-a']\n", - "\n", - "\n", - "sorted output:\n", - " ['a', 'b', 'c'] [4, 5, 6] ['z_another_third_val-a', 'another_val-b', 'some-val-associated-with-c']\n" - ] - } - ], - "prompt_number": 49 } ], - "metadata": {} + "source": [ + "from collections import namedtuple\n", + "\n", + "Coordinates = namedtuple('Coordinates', ['x', 'y', 'z'])\n", + "point1 = Coordinates(1, 2, 3)\n", + "print('X-coordinate: %d' % point1.x)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } - ] -} \ No newline at end of file + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.4.3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From 06830b939358f35f2daf50af42509e603c93d9b4 Mon Sep 17 00:00:00 2001 From: rasbt Date: Thu, 25 Jun 2015 14:16:13 -0400 Subject: [PATCH 226/248] flask template --- templates/webapp_ex1/README.md | 13 ++++++++ templates/webapp_ex1/app.py | 31 ++++++++++++++++++ templates/webapp_ex1/img/img_1.png | Bin 0 -> 6278 bytes templates/webapp_ex1/static/style.css | 7 ++++ .../webapp_ex1/templates/_formhelpers.html | 12 +++++++ templates/webapp_ex1/templates/entry.html | 26 +++++++++++++++ 6 files changed, 89 insertions(+) create mode 100644 templates/webapp_ex1/README.md create mode 100644 templates/webapp_ex1/app.py create mode 100644 templates/webapp_ex1/img/img_1.png create mode 100644 templates/webapp_ex1/static/style.css create mode 100644 templates/webapp_ex1/templates/_formhelpers.html create mode 100644 templates/webapp_ex1/templates/entry.html diff --git a/templates/webapp_ex1/README.md b/templates/webapp_ex1/README.md new file mode 100644 index 0000000..d07794d --- /dev/null +++ b/templates/webapp_ex1/README.md @@ -0,0 +1,13 @@ +Sebastian Raschka, 2015 + +# Flask Example App 1 + +A simple Flask app that calculates the sum of two numbers entered in the respective input fields. + +A more detailed description is going to follow some time in future. + +You can run the app locally by executing `python app.py` within this directory. + +
    + +![](./img/img_1.png) diff --git a/templates/webapp_ex1/app.py b/templates/webapp_ex1/app.py new file mode 100644 index 0000000..5314e37 --- /dev/null +++ b/templates/webapp_ex1/app.py @@ -0,0 +1,31 @@ +from flask import Flask, render_template, request +from wtforms import Form, DecimalField, validators + +app = Flask(__name__) + + +class EntryForm(Form): + x_entry = DecimalField('x:', + places=10, + validators=[validators.NumberRange(-1e10, 1e10)]) + y_entry = DecimalField('y:', + places=10, + validators=[validators.NumberRange(-1e10, 1e10)]) + +@app.route('/') +def index(): + form = EntryForm(request.form) + return render_template('entry.html', form=form, z='') + +@app.route('/results', methods=['POST']) +def results(): + form = EntryForm(request.form) + z = '' + if request.method == 'POST' and form.validate(): + x = request.form['x_entry'] + y = request.form['y_entry'] + z = float(x) + float(y) + return render_template('entry.html', form=form, z=z) + +if __name__ == '__main__': + app.run(debug=True) \ No newline at end of file diff --git a/templates/webapp_ex1/img/img_1.png b/templates/webapp_ex1/img/img_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc35109142affd9b2c6b2c2ec1014a822c15416 GIT binary patch literal 6278 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 field.label }} +
    {{ field(**kwargs)|safe }} + {% if field.errors %} +
      + {% for error in field.errors %} +
    • {{ error }}
    • + {% endfor %} +
    + {% endif %} +
    +{% endmacro %} \ No newline at end of file diff --git a/templates/webapp_ex1/templates/entry.html b/templates/webapp_ex1/templates/entry.html new file mode 100644 index 0000000..c31100d --- /dev/null +++ b/templates/webapp_ex1/templates/entry.html @@ -0,0 +1,26 @@ + + + + Webapp Ex 1 + + + + +{% from "_formhelpers.html" import render_field %} + +
    +
    + {{ render_field(form.x_entry, cols='1', rows='1') }} + {{ render_field(form.y_entry, cols='1', rows='1') }} +
    +
    + +
    + +
    + x + y = {{ z }} +
    +
    + + + \ No newline at end of file From b13d26a7ef8782ec807706654e9e0652fd81abf3 Mon Sep 17 00:00:00 2001 From: rasbt Date: Mon, 29 Jun 2015 15:35:39 -0400 Subject: [PATCH 227/248] upd. watermark download link --- ipython_magic/watermark.ipynb | 857 +++++++++++++++++----------------- 1 file changed, 437 insertions(+), 420 deletions(-) diff --git a/ipython_magic/watermark.ipynb b/ipython_magic/watermark.ipynb index d88d6b8..8210d3c 100644 --- a/ipython_magic/watermark.ipynb +++ b/ipython_magic/watermark.ipynb @@ -1,436 +1,453 @@ { - "metadata": { - "name": "", - "signature": "sha256:968e6f47972d4ab9e2ef4eef6906343257267ccf094fcae08da24fec3647743d" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ + "cells": [ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[Sebastian Raschka](http://sebastianraschka.com) \n", + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Sebastian Raschka](http://sebastianraschka.com) \n", + "\n", + "- [Link to the GitHub Repository python_reference](https://github.com/rasbt/python_reference/)\n", + "\n", + "
    \n", + "I would be happy to hear your comments and suggestions. \n", + "Please feel free to drop me a note via\n", + "[twitter](https://twitter.com/rasbt), [email](mailto:bluewoodtree@gmail.com), or [google+](https://plus.google.com/+SebastianRaschka).\n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**watermark is now located and maintained in a separate GitHub repository:** [https://github.com/rasbt/watermark](https://github.com/rasbt/watermark)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# IPython magic function documentation - `%watermark`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I wrote this simple `watermark` IPython magic function to conveniently add date- and time-stamps to my IPython notebooks. Also, I often want to document various system information, e.g., for my [Python benchmarks](https://github.com/rasbt/One-Python-benchmark-per-day) series.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `watermark` line magic can be directly installed from my GitHub repository via" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Installed watermark.py. To use it, type:\n", + " %load_ext watermark\n" + ] + } + ], + "source": [ + "install_ext https://raw.githubusercontent.com/rasbt/watermark/master/watermark.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Loading the `%watermark` magic" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To load the `date` magic, execute the following line in your IPython notebook or current IPython shell" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%load_ext watermark" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Usage" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to display the optional `watermark` arguments, type" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%watermark?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
      %watermark [-a AUTHOR] [-d] [-e] [-n] [-t] [-z] [-u] [-c CUSTOM_TIME]\n",
    +    "                 [-v] [-p PACKAGES] [-h] [-m] [-g] [-w]\n",
    +    "\n",
    +    " \n",
    +    "IPython magic function to print date/time stamps \n",
    +    "and various system information.\n",
    +    "\n",
    +    "watermark version 1.2.1\n",
    +    "\n",
    +    "optional arguments:\n",
    +    "  -a AUTHOR, --author AUTHOR\n",
    +    "                        prints author name\n",
    +    "  -d, --date            prints current date as MM/DD/YYYY\n",
    +    "  -e, --eurodate        prints current date as DD/MM/YYYY\n",
    +    "  -n, --datename        prints date with abbrv. day and month names\n",
    +    "  -t, --time            prints current time\n",
    +    "  -z, --timezone        appends the local time zone\n",
    +    "  -u, --updated         appends a string \"Last updated: \"\n",
    +    "  -c CUSTOM_TIME, --custom_time CUSTOM_TIME\n",
    +    "                        prints a valid strftime() string\n",
    +    "  -v, --python          prints Python and IPython version\n",
    +    "  -p PACKAGES, --packages PACKAGES\n",
    +    "                        prints versions of specified Python modules and\n",
    +    "                        packages\n",
    +    "  -h, --hostname        prints the host name\n",
    +    "  -m, --machine         prints system and machine info\n",
    +    "  -g, --githash         prints current Git commit hash\n",
    +    "  -w, --watermark       prints the current version of watermark\n",
    +    "File:      ~/.ipython/extensions/watermark.py\n",
    +    "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Examples" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "06/29/2015 15:34:42\n", "\n", - "- [Link to the GitHub Repository python_reference](https://github.com/rasbt/python_reference/)\n", + "CPython 3.4.3\n", + "IPython 3.2.0\n", "\n", - "
    \n", - "I would be happy to hear your comments and suggestions. \n", - "Please feel free to drop me a note via\n", - "[twitter](https://twitter.com/rasbt), [email](mailto:bluewoodtree@gmail.com), or [google+](https://plus.google.com/+SebastianRaschka).\n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**watermark is now located and maintained in a separate GitHub repository:** [https://github.com/rasbt/watermark](https://github.com/rasbt/watermark)" + "compiler : GCC 4.2.1 (Apple Inc. build 5577)\n", + "system : Darwin\n", + "release : 14.3.0\n", + "machine : x86_64\n", + "processor : i386\n", + "CPU cores : 4\n", + "interpreter: 64bit\n" ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "IPython magic function documentation - `%watermark`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "I wrote this simple `watermark` IPython magic function to conveniently add date- and time-stamps to my IPython notebooks. Also, I often want to document various system information, e.g., for my [Python benchmarks](https://github.com/rasbt/One-Python-benchmark-per-day) series.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Installation" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The `watermark` line magic can be directly installed from my GitHub repository via" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%install_ext https://raw.githubusercontent.com/rasbt/python_reference/master/ipython_magic/watermark.py" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Installed watermark.py. To use it, type:\n", - " %load_ext watermark\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Loading the `%watermark` magic" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To load the `date` magic, execute the following line in your IPython notebook or current IPython shell" + } + ], + "source": [ + "%watermark" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "06/29/2015 15:34:43 \n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%load_ext watermark" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " + } + ], + "source": [ + "%watermark -d -t" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Last updated: Mon Jun 29 2015 15:34:44 EDT\n" ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Usage" + } + ], + "source": [ + "%watermark -u -n -t -z" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPython 3.4.3\n", + "IPython 3.2.0\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In order to display the optional `watermark` arguments, type" + } + ], + "source": [ + "%watermark -v" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "compiler : GCC 4.2.1 (Apple Inc. build 5577)\n", + "system : Darwin\n", + "release : 14.3.0\n", + "machine : x86_64\n", + "processor : i386\n", + "CPU cores : 4\n", + "interpreter: 64bit\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%watermark?" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
      %watermark [-a AUTHOR] [-d] [-n] [-t] [-z] [-u] [-c CUSTOM_TIME] [-v]\n",
    -      "                 [-p PACKAGES] [-h] [-m] [-g]\n",
    -      "\n",
    -      " \n",
    -      "IPython magic function to print date/time stamps \n",
    -      "and various system information.\n",
    +    }
    +   ],
    +   "source": [
    +    "%watermark -m"
    +   ]
    +  },
    +  {
    +   "cell_type": "markdown",
    +   "metadata": {},
    +   "source": [
    +    "
    " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPython 3.4.3\n", + "IPython 3.2.0\n", "\n", - "watermark version 1.1.0\n", + "numpy 1.9.2\n", + "scipy 0.15.1\n", "\n", - "optional arguments:\n", - " -a AUTHOR, --author AUTHOR\n", - " prints author name\n", - " -d, --date prints current date\n", - " -n, --datename prints date with abbrv. day and month names\n", - " -t, --time prints current time\n", - " -z, --timezone appends the local time zone\n", - " -u, --updated appends a string \"Last updated: \"\n", - " -c CUSTOM_TIME, --custom_time CUSTOM_TIME\n", - " prints a valid strftime() string\n", - " -v, --python prints Python and IPython version\n", - " -p PACKAGES, --packages PACKAGES\n", - " prints versions of specified Python modules and\n", - " packages\n", - " -h, --hostname prints the host name\n", - " -m, --machine prints system and machine info\n", - " -g, --githash prints current Git commit hash\n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Examples" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%watermark" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "29/06/2014 01:19:10\n", - "\n", - "CPython 3.4.1\n", - "IPython 2.1.0\n", - "\n", - "compiler : GCC 4.2.1 (Apple Inc. build 5577)\n", - "system : Darwin\n", - "release : 13.2.0\n", - "machine : x86_64\n", - "processor : i386\n", - "CPU cores : 2\n", - "interpreter: 64bit\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%watermark -d -t" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "29/06/2014 01:19:11 \n" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%watermark -u -n -t -z" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Last updated: Sun Jun 19 2014 01:19:12 EDT\n" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%watermark -v" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "CPython 3.4.1\n", - "IPython 2.1.0\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%watermark -m" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "compiler : GCC 4.2.1 (Apple Inc. build 5577)\n", - "system : Darwin\n", - "release : 13.2.0\n", - "machine : x86_64\n", - "processor : i386\n", - "CPU cores : 2\n", - "interpreter: 64bit\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%watermark -v -m -p numpy,scipy" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "CPython 3.4.1\n", - "IPython 2.1.0\n", - "\n", - "numpy 1.8.1\n", - "scipy 0.14.0\n", - "\n", - "compiler : GCC 4.2.1 (Apple Inc. build 5577)\n", - "system : Darwin\n", - "release : 13.2.0\n", - "machine : x86_64\n", - "processor : i386\n", - "CPU cores : 2\n", - "interpreter: 64bit\n" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " + "compiler : GCC 4.2.1 (Apple Inc. build 5577)\n", + "system : Darwin\n", + "release : 14.3.0\n", + "machine : x86_64\n", + "processor : i386\n", + "CPU cores : 4\n", + "interpreter: 64bit\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%watermark -a \"John Doe\" -d -v -m -g" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "John Doe 29/06/2014 01:20:48 EDT\n", - "\n", - "CPython 3.4.1\n", - "IPython 2.1.0\n", - "\n", - "compiler : GCC 4.2.1 (Apple Inc. build 5577)\n", - "system : Darwin\n", - "release : 13.2.0\n", - "machine : x86_64\n", - "processor : i386\n", - "CPU cores : 2\n", - "interpreter: 64bit\n", - "Git hash : fbe7759fd7e0298bf0bd05ea4aac01b87aa8ed25\n" - ] - } - ], - "prompt_number": 16 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " + } + ], + "source": [ + "%watermark -v -m -p numpy,scipy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "John Doe 06/29/2015 \n", + "\n", + "CPython 3.4.3\n", + "IPython 3.2.0\n", + "\n", + "compiler : GCC 4.2.1 (Apple Inc. build 5577)\n", + "system : Darwin\n", + "release : 14.3.0\n", + "machine : x86_64\n", + "processor : i386\n", + "CPU cores : 4\n", + "interpreter: 64bit\n", + "Git hash : 06830b939358f35f2daf50af42509e603c93d9b4\n" ] } ], - "metadata": {} + "source": [ + "%watermark -a \"John Doe\" -d -v -m -g" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } - ] -} \ No newline at end of file + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.4.3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From e34d2f21b1db5e2d8503d6fed7f0b6c2e5c5b57a Mon Sep 17 00:00:00 2001 From: rasbt Date: Mon, 29 Jun 2015 15:37:25 -0400 Subject: [PATCH 228/248] watermark clarficitation --- ipython_magic/watermark.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ipython_magic/watermark.ipynb b/ipython_magic/watermark.ipynb index 8210d3c..5f07900 100644 --- a/ipython_magic/watermark.ipynb +++ b/ipython_magic/watermark.ipynb @@ -19,7 +19,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**watermark is now located and maintained in a separate GitHub repository:** [https://github.com/rasbt/watermark](https://github.com/rasbt/watermark)" + "### watermark is now located and maintained in a separate GitHub repository: [https://github.com/rasbt/watermark](https://github.com/rasbt/watermark)" ] }, { From 360fd6be3298392ee9223b85ef9b54b3f86a784a Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 1 Aug 2015 01:33:04 -0400 Subject: [PATCH 229/248] pandas if test --- tutorials/things_in_pandas.ipynb | 6120 ++++++++++++++++-------------- 1 file changed, 3192 insertions(+), 2928 deletions(-) diff --git a/tutorials/things_in_pandas.ipynb b/tutorials/things_in_pandas.ipynb index 505c1f3..968d734 100644 --- a/tutorials/things_in_pandas.ipynb +++ b/tutorials/things_in_pandas.ipynb @@ -1,2937 +1,3201 @@ { - "metadata": { - "name": "", - "signature": "sha256:c8ab1a3c99e7c72951c91e74991b8837884cd9e3863f1cd1833651e180ff32bd" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ + "cells": [ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[Back to the GitHub repository](https://github.com/rasbt/python_reference)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%load_ext watermark\n", - "%watermark -a 'Sebastian Raschka' -v -d -p pandas" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Sebastian Raschka 28/01/2015 \n", - "\n", - "CPython 3.4.2\n", - "IPython 2.3.1\n", - "\n", - "pandas 0.15.2\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[More information](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/ipython_magic/watermark.ipynb) about the `watermark` magic command extension." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Things in Pandas I Wish I'd Had Known Earlier" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is just a small but growing collection of pandas snippets that I find occasionally and particularly useful -- consider it as my personal notebook. Suggestions, tips, and contributions are very, very welcome!" - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Sections" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- [Loading Some Example Data](#Loading-Some-Example-Data)\n", - "- [Renaming Columns](#Renaming-Columns)\n", - " - [Converting Column Names to Lowercase](#Converting-Column-Names-to-Lowercase)\n", - " - [Renaming Particular Columns](#Renaming-Particular-Columns)\n", - "- [Applying Computations Rows-wise](#Applying-Computations-Rows-wise)\n", - " - [Changing Values in a Column](#Changing-Values-in-a-Column)\n", - " - [Adding a New Column](#Adding-a-New-Column)\n", - " - [Applying Functions to Multiple Columns](#Applying-Functions-to-Multiple-Columns)\n", - "- [Missing Values aka NaNs](#Missing-Values-aka-NaNs)\n", - " - [Counting Rows with NaNs](#Counting-Rows-with-NaNs)\n", - " - [Selecting NaN Rows](#Selecting-NaN-Rows)\n", - " - [Selecting non-NaN Rows](#Selecting-non-NaN-Rows)\n", - " - [Filling NaN Rows](#Filling-NaN-Rows)\n", - "- [Appending Rows to a DataFrame](#Appending-Rows-to-a-DataFrame)\n", - "- [Sorting and Reindexing DataFrames](#Sorting-and-Reindexing-DataFrames)\n", - "- [Updating Columns](#Updating-Columns)\n", - "- [Chaining Conditions - Using Bitwise Operators](#Chaining-Conditions---Using-Bitwise-Operators)\n", - "- [Column Types](#Column-Types)\n", - " - [Printing Column Types](#Printing-Column-Types)\n", - " - [Selecting by Column Type](#Selecting-by-Column-Type)\n", - " - [Converting Column Types](#Converting-Column-Types)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Loading Some Example Data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to section overview](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "I am heavily into sports prediction (via a machine learning approach) these days. So, let us use a (very) small subset of the soccer data that I am just working with." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import pandas as pd\n", - "\n", - "df = pd.read_csv('https://raw.githubusercontent.com/rasbt/python_reference/master/Data/some_soccer_data.csv')\n", - "df" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    PLAYERSALARYGPGASOTPPGP
    0 Sergio Ag\u00fcero\\n Forward \u2014 Manchester City $19.2m 16 14 3 34 13.12 209.98
    1 Eden Hazard\\n Midfield \u2014 Chelsea $18.9m 21 8 4 17 13.05 274.04
    2 Alexis S\u00e1nchez\\n Forward \u2014 Arsenal $17.6mNaN 12 7 29 11.19 223.86
    3 Yaya Tour\u00e9\\n Midfield \u2014 Manchester City $16.6m 18 7 1 19 10.99 197.91
    4 \u00c1ngel Di Mar\u00eda\\n Midfield \u2014 Manchester United $15.0m 13 3NaN 13 10.17 132.23
    5 Santiago Cazorla\\n Midfield \u2014 Arsenal $14.8m 20 4NaN 20 9.97 NaN
    6 David Silva\\n Midfield \u2014 Manchester City $14.3m 15 6 2 11 10.35 155.26
    7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 10 10.47 209.49
    8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 20 7.02 147.43
    9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 11 7.50 150.01
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 2, - "text": [ - " PLAYER SALARY GP G A SOT \\\n", - "0 Sergio Ag\u00fcero\\n Forward \u2014 Manchester City $19.2m 16 14 3 34 \n", - "1 Eden Hazard\\n Midfield \u2014 Chelsea $18.9m 21 8 4 17 \n", - "2 Alexis S\u00e1nchez\\n Forward \u2014 Arsenal $17.6m NaN 12 7 29 \n", - "3 Yaya Tour\u00e9\\n Midfield \u2014 Manchester City $16.6m 18 7 1 19 \n", - "4 \u00c1ngel Di Mar\u00eda\\n Midfield \u2014 Manchester United $15.0m 13 3 NaN 13 \n", - "5 Santiago Cazorla\\n Midfield \u2014 Arsenal $14.8m 20 4 NaN 20 \n", - "6 David Silva\\n Midfield \u2014 Manchester City $14.3m 15 6 2 11 \n", - "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 10 \n", - "8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 20 \n", - "9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 11 \n", - "\n", - " PPG P \n", - "0 13.12 209.98 \n", - "1 13.05 274.04 \n", - "2 11.19 223.86 \n", - "3 10.99 197.91 \n", - "4 10.17 132.23 \n", - "5 9.97 NaN \n", - "6 10.35 155.26 \n", - "7 10.47 209.49 \n", - "8 7.02 147.43 \n", - "9 7.50 150.01 " - ] - } - ], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Renaming Columns" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to section overview](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Converting Column Names to Lowercase" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Converting column names to lowercase\n", - "\n", - "df.columns = [c.lower() for c in df.columns]\n", - "\n", - "# or\n", - "# df.rename(columns=lambda x : x.lower())\n", - "\n", - "df.tail(3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    playersalarygpgasotppgp
    7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 10 10.47 209.49
    8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 20 7.02 147.43
    9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 11 7.50 150.01
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 3, - "text": [ - " player salary gp g a sot ppg \\\n", - "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 10 10.47 \n", - "8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 20 7.02 \n", - "9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 11 7.50 \n", - "\n", - " p \n", - "7 209.49 \n", - "8 147.43 \n", - "9 150.01 " - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Renaming Particular Columns" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "df = df.rename(columns={'p': 'points', \n", - " 'gp': 'games',\n", - " 'sot': 'shots_on_target',\n", - " 'g': 'goals',\n", - " 'ppg': 'points_per_game',\n", - " 'a': 'assists',})\n", - "\n", - "df.tail(3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepoints
    7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 10 10.47 209.49
    8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 20 7.02 147.43
    9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 11 7.50 150.01
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 4, - "text": [ - " player salary games goals assists \\\n", - "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea $14.0m 20 2 14 \n", - "8 Saido Berahino\\n Forward \u2014 West Brom $13.8m 21 9 0 \n", - "9 Steven Gerrard\\n Midfield \u2014 Liverpool $13.8m 20 5 1 \n", - "\n", - " shots_on_target points_per_game points \n", - "7 10 10.47 209.49 \n", - "8 20 7.02 147.43 \n", - "9 11 7.50 150.01 " - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Applying Computations Rows-wise" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to section overview](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Changing Values in a Column" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Processing `salary` column\n", - "\n", - "df['salary'] = df['salary'].apply(lambda x: x.strip('$m'))\n", - "df.tail()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepoints
    5 Santiago Cazorla\\n Midfield \u2014 Arsenal 14.8 20 4NaN 20 9.97 NaN
    6 David Silva\\n Midfield \u2014 Manchester City 14.3 15 6 2 11 10.35 155.26
    7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea 14.0 20 2 14 10 10.47 209.49
    8 Saido Berahino\\n Forward \u2014 West Brom 13.8 21 9 0 20 7.02 147.43
    9 Steven Gerrard\\n Midfield \u2014 Liverpool 13.8 20 5 1 11 7.50 150.01
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 5, - "text": [ - " player salary games goals assists \\\n", - "5 Santiago Cazorla\\n Midfield \u2014 Arsenal 14.8 20 4 NaN \n", - "6 David Silva\\n Midfield \u2014 Manchester City 14.3 15 6 2 \n", - "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea 14.0 20 2 14 \n", - "8 Saido Berahino\\n Forward \u2014 West Brom 13.8 21 9 0 \n", - "9 Steven Gerrard\\n Midfield \u2014 Liverpool 13.8 20 5 1 \n", - "\n", - " shots_on_target points_per_game points \n", - "5 20 9.97 NaN \n", - "6 11 10.35 155.26 \n", - "7 10 10.47 209.49 \n", - "8 20 7.02 147.43 \n", - "9 11 7.50 150.01 " - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Adding a New Column" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "df['team'] = pd.Series('', index=df.index)\n", - "\n", - "# or\n", - "df.insert(loc=8, column='position', value='') \n", - "\n", - "df.tail(3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea 14.0 20 2 14 10 10.47 209.49
    8 Saido Berahino\\n Forward \u2014 West Brom 13.8 21 9 0 20 7.02 147.43
    9 Steven Gerrard\\n Midfield \u2014 Liverpool 13.8 20 5 1 11 7.50 150.01
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 6, - "text": [ - " player salary games goals assists \\\n", - "7 Cesc F\u00e0bregas\\n Midfield \u2014 Chelsea 14.0 20 2 14 \n", - "8 Saido Berahino\\n Forward \u2014 West Brom 13.8 21 9 0 \n", - "9 Steven Gerrard\\n Midfield \u2014 Liverpool 13.8 20 5 1 \n", - "\n", - " shots_on_target points_per_game points position team \n", - "7 10 10.47 209.49 \n", - "8 20 7.02 147.43 \n", - "9 11 7.50 150.01 " - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Processing `player` column\n", - "\n", - "def process_player_col(text):\n", - " name, rest = text.split('\\n')\n", - " position, team = [x.strip() for x in rest.split(' \u2014 ')]\n", - " return pd.Series([name, team, position])\n", - "\n", - "df[['player', 'team', 'position']] = df.player.apply(process_player_col)\n", - "\n", - "# modified after tip from reddit.com/user/hharison\n", - "#\n", - "# Alternative (inferior) approach:\n", - "#\n", - "#for idx,row in df.iterrows():\n", - "# name, position, team = process_player_col(row['player'])\n", - "# df.ix[idx, 'player'], df.ix[idx, 'position'], df.ix[idx, 'team'] = name, position, team\n", - " \n", - "df.tail(3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    7 Cesc F\u00e0bregas 14.0 20 2 14 10 10.47 209.49 Midfield Chelsea
    8 Saido Berahino 13.8 21 9 0 20 7.02 147.43 Forward West Brom
    9 Steven Gerrard 13.8 20 5 1 11 7.50 150.01 Midfield Liverpool
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 7, - "text": [ - " player salary games goals assists shots_on_target \\\n", - "7 Cesc F\u00e0bregas 14.0 20 2 14 10 \n", - "8 Saido Berahino 13.8 21 9 0 20 \n", - "9 Steven Gerrard 13.8 20 5 1 11 \n", - "\n", - " points_per_game points position team \n", - "7 10.47 209.49 Midfield Chelsea \n", - "8 7.02 147.43 Forward West Brom \n", - "9 7.50 150.01 Midfield Liverpool " - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Applying Functions to Multiple Columns" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "cols = ['player', 'position', 'team']\n", - "df[cols] = df[cols].applymap(lambda x: x.lower())\n", - "df.head()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    0 sergio ag\u00fcero 19.2 16 14 3 34 13.12 209.98 forward manchester city
    1 eden hazard 18.9 21 8 4 17 13.05 274.04 midfield chelsea
    2 alexis s\u00e1nchez 17.6NaN 12 7 29 11.19 223.86 forward arsenal
    3 yaya tour\u00e9 16.6 18 7 1 19 10.99 197.91 midfield manchester city
    4 \u00e1ngel di mar\u00eda 15.0 13 3NaN 13 10.17 132.23 midfield manchester united
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 8, - "text": [ - " player salary games goals assists shots_on_target \\\n", - "0 sergio ag\u00fcero 19.2 16 14 3 34 \n", - "1 eden hazard 18.9 21 8 4 17 \n", - "2 alexis s\u00e1nchez 17.6 NaN 12 7 29 \n", - "3 yaya tour\u00e9 16.6 18 7 1 19 \n", - "4 \u00e1ngel di mar\u00eda 15.0 13 3 NaN 13 \n", - "\n", - " points_per_game points position team \n", - "0 13.12 209.98 forward manchester city \n", - "1 13.05 274.04 midfield chelsea \n", - "2 11.19 223.86 forward arsenal \n", - "3 10.99 197.91 midfield manchester city \n", - "4 10.17 132.23 midfield manchester united " - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Missing Values aka NaNs" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to section overview](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Counting Rows with NaNs" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "nans = df.shape[0] - df.dropna().shape[0]\n", - "\n", - "print('%d rows have missing values' % nans)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "3 rows have missing values\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Selecting NaN Rows" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Selecting all rows that have NaNs in the `assists` column\n", - "\n", - "df[df['assists'].isnull()]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    4 \u00e1ngel di mar\u00eda 15.0 13 3NaN 13 10.17 132.23 midfield manchester united
    5 santiago cazorla 14.8 20 4NaN 20 9.97 NaN midfield arsenal
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 10, - "text": [ - " player salary games goals assists shots_on_target \\\n", - "4 \u00e1ngel di mar\u00eda 15.0 13 3 NaN 13 \n", - "5 santiago cazorla 14.8 20 4 NaN 20 \n", - "\n", - " points_per_game points position team \n", - "4 10.17 132.23 midfield manchester united \n", - "5 9.97 NaN midfield arsenal " - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Selecting non-NaN Rows" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "df[df['assists'].notnull()]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    0 sergio ag\u00fcero 19.2 16 14 3 34 13.12 209.98 forward manchester city
    1 eden hazard 18.9 21 8 4 17 13.05 274.04 midfield chelsea
    2 alexis s\u00e1nchez 17.6NaN 12 7 29 11.19 223.86 forward arsenal
    3 yaya tour\u00e9 16.6 18 7 1 19 10.99 197.91 midfield manchester city
    6 david silva 14.3 15 6 2 11 10.35 155.26 midfield manchester city
    7 cesc f\u00e0bregas 14.0 20 2 14 10 10.47 209.49 midfield chelsea
    8 saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    9 steven gerrard 13.8 20 5 1 11 7.50 150.01 midfield liverpool
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 11, - "text": [ - " player salary games goals assists shots_on_target \\\n", - "0 sergio ag\u00fcero 19.2 16 14 3 34 \n", - "1 eden hazard 18.9 21 8 4 17 \n", - "2 alexis s\u00e1nchez 17.6 NaN 12 7 29 \n", - "3 yaya tour\u00e9 16.6 18 7 1 19 \n", - "6 david silva 14.3 15 6 2 11 \n", - "7 cesc f\u00e0bregas 14.0 20 2 14 10 \n", - "8 saido berahino 13.8 21 9 0 20 \n", - "9 steven gerrard 13.8 20 5 1 11 \n", - "\n", - " points_per_game points position team \n", - "0 13.12 209.98 forward manchester city \n", - "1 13.05 274.04 midfield chelsea \n", - "2 11.19 223.86 forward arsenal \n", - "3 10.99 197.91 midfield manchester city \n", - "6 10.35 155.26 midfield manchester city \n", - "7 10.47 209.49 midfield chelsea \n", - "8 7.02 147.43 forward west brom \n", - "9 7.50 150.01 midfield liverpool " - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Filling NaN Rows" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Filling NaN cells with default value 0\n", - "\n", - "df.fillna(value=0, inplace=True)\n", - "df" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    0 sergio ag\u00fcero 19.2 16 14 3 34 13.12 209.98 forward manchester city
    1 eden hazard 18.9 21 8 4 17 13.05 274.04 midfield chelsea
    2 alexis s\u00e1nchez 17.6 0 12 7 29 11.19 223.86 forward arsenal
    3 yaya tour\u00e9 16.6 18 7 1 19 10.99 197.91 midfield manchester city
    4 \u00e1ngel di mar\u00eda 15.0 13 3 0 13 10.17 132.23 midfield manchester united
    5 santiago cazorla 14.8 20 4 0 20 9.97 0.00 midfield arsenal
    6 david silva 14.3 15 6 2 11 10.35 155.26 midfield manchester city
    7 cesc f\u00e0bregas 14.0 20 2 14 10 10.47 209.49 midfield chelsea
    8 saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    9 steven gerrard 13.8 20 5 1 11 7.50 150.01 midfield liverpool
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 12, - "text": [ - " player salary games goals assists shots_on_target \\\n", - "0 sergio ag\u00fcero 19.2 16 14 3 34 \n", - "1 eden hazard 18.9 21 8 4 17 \n", - "2 alexis s\u00e1nchez 17.6 0 12 7 29 \n", - "3 yaya tour\u00e9 16.6 18 7 1 19 \n", - "4 \u00e1ngel di mar\u00eda 15.0 13 3 0 13 \n", - "5 santiago cazorla 14.8 20 4 0 20 \n", - "6 david silva 14.3 15 6 2 11 \n", - "7 cesc f\u00e0bregas 14.0 20 2 14 10 \n", - "8 saido berahino 13.8 21 9 0 20 \n", - "9 steven gerrard 13.8 20 5 1 11 \n", - "\n", - " points_per_game points position team \n", - "0 13.12 209.98 forward manchester city \n", - "1 13.05 274.04 midfield chelsea \n", - "2 11.19 223.86 forward arsenal \n", - "3 10.99 197.91 midfield manchester city \n", - "4 10.17 132.23 midfield manchester united \n", - "5 9.97 0.00 midfield arsenal \n", - "6 10.35 155.26 midfield manchester city \n", - "7 10.47 209.49 midfield chelsea \n", - "8 7.02 147.43 forward west brom \n", - "9 7.50 150.01 midfield liverpool " - ] - } - ], - "prompt_number": 12 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Appending Rows to a DataFrame" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to section overview](#Sections)]" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Adding an \"empty\" row to the DataFrame\n", - "\n", - "import numpy as np\n", - "\n", - "df = df.append(pd.Series(\n", - " [np.nan]*len(df.columns), # Fill cells with NaNs\n", - " index=df.columns), \n", - " ignore_index=True)\n", - "\n", - "df.tail(3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    8 saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    9 steven gerrard 13.8 20 5 1 11 7.50 150.01 midfield liverpool
    10 NaN NaNNaNNaNNaNNaN NaN NaN NaN NaN
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 13, - "text": [ - " player salary games goals assists shots_on_target \\\n", - "8 saido berahino 13.8 21 9 0 20 \n", - "9 steven gerrard 13.8 20 5 1 11 \n", - "10 NaN NaN NaN NaN NaN NaN \n", - "\n", - " points_per_game points position team \n", - "8 7.02 147.43 forward west brom \n", - "9 7.50 150.01 midfield liverpool \n", - "10 NaN NaN NaN NaN " - ] - } - ], - "prompt_number": 13 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Filling cells with data\n", - "\n", - "df.loc[df.index[-1], 'player'] = 'new player'\n", - "df.loc[df.index[-1], 'salary'] = 12.3\n", - "df.tail(3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    8 saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    9 steven gerrard 13.8 20 5 1 11 7.50 150.01 midfield liverpool
    10 new player 12.3NaNNaNNaNNaN NaN NaN NaN NaN
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 14, - "text": [ - " player salary games goals assists shots_on_target \\\n", - "8 saido berahino 13.8 21 9 0 20 \n", - "9 steven gerrard 13.8 20 5 1 11 \n", - "10 new player 12.3 NaN NaN NaN NaN \n", - "\n", - " points_per_game points position team \n", - "8 7.02 147.43 forward west brom \n", - "9 7.50 150.01 midfield liverpool \n", - "10 NaN NaN NaN NaN " - ] - } - ], - "prompt_number": 14 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Sorting and Reindexing DataFrames" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to section overview](#Sections)]" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Sorting the DataFrame by a certain column (from highest to lowest)\n", - "\n", - "df.sort('goals', ascending=False, inplace=True)\n", - "df.head()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    0 sergio ag\u00fcero 19.2 16 14 3 34 13.12 209.98 forward manchester city
    2 alexis s\u00e1nchez 17.6 0 12 7 29 11.19 223.86 forward arsenal
    8 saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    1 eden hazard 18.9 21 8 4 17 13.05 274.04 midfield chelsea
    3 yaya tour\u00e9 16.6 18 7 1 19 10.99 197.91 midfield manchester city
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 15, - "text": [ - " player salary games goals assists shots_on_target \\\n", - "0 sergio ag\u00fcero 19.2 16 14 3 34 \n", - "2 alexis s\u00e1nchez 17.6 0 12 7 29 \n", - "8 saido berahino 13.8 21 9 0 20 \n", - "1 eden hazard 18.9 21 8 4 17 \n", - "3 yaya tour\u00e9 16.6 18 7 1 19 \n", - "\n", - " points_per_game points position team \n", - "0 13.12 209.98 forward manchester city \n", - "2 11.19 223.86 forward arsenal \n", - "8 7.02 147.43 forward west brom \n", - "1 13.05 274.04 midfield chelsea \n", - "3 10.99 197.91 midfield manchester city " - ] - } - ], - "prompt_number": 15 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Optional reindexing of the DataFrame after sorting\n", - "\n", - "df.index = range(1,len(df.index)+1)\n", - "df.head()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    1 sergio ag\u00fcero 19.2 16 14 3 34 13.12 209.98 forward manchester city
    2 alexis s\u00e1nchez 17.6 0 12 7 29 11.19 223.86 forward arsenal
    3 saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    4 eden hazard 18.9 21 8 4 17 13.05 274.04 midfield chelsea
    5 yaya tour\u00e9 16.6 18 7 1 19 10.99 197.91 midfield manchester city
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 16, - "text": [ - " player salary games goals assists shots_on_target \\\n", - "1 sergio ag\u00fcero 19.2 16 14 3 34 \n", - "2 alexis s\u00e1nchez 17.6 0 12 7 29 \n", - "3 saido berahino 13.8 21 9 0 20 \n", - "4 eden hazard 18.9 21 8 4 17 \n", - "5 yaya tour\u00e9 16.6 18 7 1 19 \n", - "\n", - " points_per_game points position team \n", - "1 13.12 209.98 forward manchester city \n", - "2 11.19 223.86 forward arsenal \n", - "3 7.02 147.43 forward west brom \n", - "4 13.05 274.04 midfield chelsea \n", - "5 10.99 197.91 midfield manchester city " - ] - } - ], - "prompt_number": 16 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Updating Columns" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to section overview](#Sections)]" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Creating a dummy DataFrame with changes in the `salary` column\n", - "\n", - "df_2 = df.copy()\n", - "df_2.loc[0:2, 'salary'] = [20.0, 15.0]\n", - "df_2.head(3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    1 sergio ag\u00fcero 20 16 14 3 34 13.12 209.98 forward manchester city
    2 alexis s\u00e1nchez 15 0 12 7 29 11.19 223.86 forward arsenal
    3 saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 17, - "text": [ - " player salary games goals assists shots_on_target \\\n", - "1 sergio ag\u00fcero 20 16 14 3 34 \n", - "2 alexis s\u00e1nchez 15 0 12 7 29 \n", - "3 saido berahino 13.8 21 9 0 20 \n", - "\n", - " points_per_game points position team \n", - "1 13.12 209.98 forward manchester city \n", - "2 11.19 223.86 forward arsenal \n", - "3 7.02 147.43 forward west brom " - ] - } - ], - "prompt_number": 17 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Temporarily use the `player` columns as indices to \n", - "# apply the update functions\n", - "\n", - "df.set_index('player', inplace=True)\n", - "df_2.set_index('player', inplace=True)\n", - "df.head(3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    salarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    player
    sergio ag\u00fcero 19.2 16 14 3 34 13.12 209.98 forward manchester city
    alexis s\u00e1nchez 17.6 0 12 7 29 11.19 223.86 forward arsenal
    saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 18, - "text": [ - " salary games goals assists shots_on_target \\\n", - "player \n", - "sergio ag\u00fcero 19.2 16 14 3 34 \n", - "alexis s\u00e1nchez 17.6 0 12 7 29 \n", - "saido berahino 13.8 21 9 0 20 \n", - "\n", - " points_per_game points position team \n", - "player \n", - "sergio ag\u00fcero 13.12 209.98 forward manchester city \n", - "alexis s\u00e1nchez 11.19 223.86 forward arsenal \n", - "saido berahino 7.02 147.43 forward west brom " - ] - } - ], - "prompt_number": 18 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Update the `salary` column\n", - "df.update(other=df_2['salary'], overwrite=True)\n", - "df.head(3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    salarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    player
    sergio ag\u00fcero 20 16 14 3 34 13.12 209.98 forward manchester city
    alexis s\u00e1nchez 15 0 12 7 29 11.19 223.86 forward arsenal
    saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 19, - "text": [ - " salary games goals assists shots_on_target \\\n", - "player \n", - "sergio ag\u00fcero 20 16 14 3 34 \n", - "alexis s\u00e1nchez 15 0 12 7 29 \n", - "saido berahino 13.8 21 9 0 20 \n", - "\n", - " points_per_game points position team \n", - "player \n", - "sergio ag\u00fcero 13.12 209.98 forward manchester city \n", - "alexis s\u00e1nchez 11.19 223.86 forward arsenal \n", - "saido berahino 7.02 147.43 forward west brom " - ] - } - ], - "prompt_number": 19 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Reset the indices\n", - "df.reset_index(inplace=True)\n", - "df.head(3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    0 sergio ag\u00fcero 20 16 14 3 34 13.12 209.98 forward manchester city
    1 alexis s\u00e1nchez 15 0 12 7 29 11.19 223.86 forward arsenal
    2 saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 20, - "text": [ - " player salary games goals assists shots_on_target \\\n", - "0 sergio ag\u00fcero 20 16 14 3 34 \n", - "1 alexis s\u00e1nchez 15 0 12 7 29 \n", - "2 saido berahino 13.8 21 9 0 20 \n", - "\n", - " points_per_game points position team \n", - "0 13.12 209.98 forward manchester city \n", - "1 11.19 223.86 forward arsenal \n", - "2 7.02 147.43 forward west brom " - ] - } - ], - "prompt_number": 20 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Chaining Conditions - Using Bitwise Operators" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to section overview](#Sections)]" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Selecting only those players that either playing for Arsenal or Chelsea\n", + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Back to the GitHub repository](https://github.com/rasbt/python_reference)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sebastian Raschka 28/01/2015 \n", "\n", - "df[ (df['team'] == 'arsenal') | (df['team'] == 'chelsea') ]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    1 alexis s\u00e1nchez 15 0 12 7 29 11.19 223.86 forward arsenal
    3 eden hazard 18.9 21 8 4 17 13.05 274.04 midfield chelsea
    7 santiago cazorla 14.8 20 4 0 20 9.97 0.00 midfield arsenal
    9 cesc f\u00e0bregas 14.0 20 2 14 10 10.47 209.49 midfield chelsea
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 21, - "text": [ - " player salary games goals assists shots_on_target \\\n", - "1 alexis s\u00e1nchez 15 0 12 7 29 \n", - "3 eden hazard 18.9 21 8 4 17 \n", - "7 santiago cazorla 14.8 20 4 0 20 \n", - "9 cesc f\u00e0bregas 14.0 20 2 14 10 \n", - "\n", - " points_per_game points position team \n", - "1 11.19 223.86 forward arsenal \n", - "3 13.05 274.04 midfield chelsea \n", - "7 9.97 0.00 midfield arsenal \n", - "9 10.47 209.49 midfield chelsea " - ] - } - ], - "prompt_number": 21 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Selecting forwards from Arsenal only\n", + "CPython 3.4.2\n", + "IPython 2.3.1\n", "\n", - "df[ (df['team'] == 'arsenal') & (df['position'] == 'forward') ]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    1 alexis s\u00e1nchez 15 0 12 7 29 11.19 223.86 forward arsenal
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 22, - "text": [ - " player salary games goals assists shots_on_target \\\n", - "1 alexis s\u00e1nchez 15 0 12 7 29 \n", - "\n", - " points_per_game points position team \n", - "1 11.19 223.86 forward arsenal " - ] - } - ], - "prompt_number": 22 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Column Types" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to section overview](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Printing Column Types" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "types = df.columns.to_series().groupby(df.dtypes).groups\n", - "types" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 23, - "text": [ - "{dtype('float64'): ['games',\n", - " 'goals',\n", - " 'assists',\n", - " 'shots_on_target',\n", - " 'points_per_game',\n", - " 'points'],\n", - " dtype('O'): ['player', 'salary', 'position', 'team']}" - ] - } - ], - "prompt_number": 23 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " + "pandas 0.15.2\n" ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Selecting by Column Type" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# select string columns\n", - "df.loc[:, (df.dtypes == np.dtype('O')).values].head()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "html": [ - "
    \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
    playersalarypositionteam
    0 sergio ag\u00fcero 20 forward manchester city
    1 alexis s\u00e1nchez 15 forward arsenal
    2 saido berahino 13.8 forward west brom
    3 eden hazard 18.9 midfield chelsea
    4 yaya tour\u00e9 16.6 midfield manchester city
    \n", - "
    " - ], - "metadata": {}, - "output_type": "pyout", - "prompt_number": 24, - "text": [ - " player salary position team\n", - "0 sergio ag\u00fcero 20 forward manchester city\n", - "1 alexis s\u00e1nchez 15 forward arsenal\n", - "2 saido berahino 13.8 forward west brom\n", - "3 eden hazard 18.9 midfield chelsea\n", - "4 yaya tour\u00e9 16.6 midfield manchester city" - ] - } - ], - "prompt_number": 24 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Converting Column Types" + } + ], + "source": [ + "%load_ext watermark\n", + "%watermark -a 'Sebastian Raschka' -v -d -p pandas" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[More information](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/ipython_magic/watermark.ipynb) about the `watermark` magic command extension." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Things in Pandas I Wish I'd Known Earlier" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is just a small but growing collection of pandas snippets that I find occasionally and particularly useful -- consider it as my personal notebook. Suggestions, tips, and contributions are very, very welcome!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sections" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- [Loading Some Example Data](#Loading-Some-Example-Data)\n", + "- [Renaming Columns](#Renaming-Columns)\n", + " - [Converting Column Names to Lowercase](#Converting-Column-Names-to-Lowercase)\n", + " - [Renaming Particular Columns](#Renaming-Particular-Columns)\n", + "- [Applying Computations Rows-wise](#Applying-Computations-Rows-wise)\n", + " - [Changing Values in a Column](#Changing-Values-in-a-Column)\n", + " - [Adding a New Column](#Adding-a-New-Column)\n", + " - [Applying Functions to Multiple Columns](#Applying-Functions-to-Multiple-Columns)\n", + "- [Missing Values aka NaNs](#Missing-Values-aka-NaNs)\n", + " - [Counting Rows with NaNs](#Counting-Rows-with-NaNs)\n", + " - [Selecting NaN Rows](#Selecting-NaN-Rows)\n", + " - [Selecting non-NaN Rows](#Selecting-non-NaN-Rows)\n", + " - [Filling NaN Rows](#Filling-NaN-Rows)\n", + "- [Appending Rows to a DataFrame](#Appending-Rows-to-a-DataFrame)\n", + "- [Sorting and Reindexing DataFrames](#Sorting-and-Reindexing-DataFrames)\n", + "- [Updating Columns](#Updating-Columns)\n", + "- [Chaining Conditions - Using Bitwise Operators](#Chaining-Conditions---Using-Bitwise-Operators)\n", + "- [Column Types](#Column-Types)\n", + " - [Printing Column Types](#Printing-Column-Types)\n", + " - [Selecting by Column Type](#Selecting-by-Column-Type)\n", + " - [Converting Column Types](#Converting-Column-Types)\n", + "- [If-tests](#If-tests)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Loading Some Example Data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I am heavily into sports prediction (via a machine learning approach) these days. So, let us use a (very) small subset of the soccer data that I am just working with." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    PLAYERSALARYGPGASOTPPGP
    0 Sergio Agüero\\n Forward — Manchester City $19.2m 16 14 3 34 13.12 209.98
    1 Eden Hazard\\n Midfield — Chelsea $18.9m 21 8 4 17 13.05 274.04
    2 Alexis Sánchez\\n Forward — Arsenal $17.6mNaN 12 7 29 11.19 223.86
    3 Yaya Touré\\n Midfield — Manchester City $16.6m 18 7 1 19 10.99 197.91
    4 Ángel Di María\\n Midfield — Manchester United $15.0m 13 3NaN 13 10.17 132.23
    5 Santiago Cazorla\\n Midfield — Arsenal $14.8m 20 4NaN 20 9.97 NaN
    6 David Silva\\n Midfield — Manchester City $14.3m 15 6 2 11 10.35 155.26
    7 Cesc Fàbregas\\n Midfield — Chelsea $14.0m 20 2 14 10 10.47 209.49
    8 Saido Berahino\\n Forward — West Brom $13.8m 21 9 0 20 7.02 147.43
    9 Steven Gerrard\\n Midfield — Liverpool $13.8m 20 5 1 11 7.50 150.01
    \n", + "
    " + ], + "text/plain": [ + " PLAYER SALARY GP G A SOT \\\n", + "0 Sergio Agüero\\n Forward — Manchester City $19.2m 16 14 3 34 \n", + "1 Eden Hazard\\n Midfield — Chelsea $18.9m 21 8 4 17 \n", + "2 Alexis Sánchez\\n Forward — Arsenal $17.6m NaN 12 7 29 \n", + "3 Yaya Touré\\n Midfield — Manchester City $16.6m 18 7 1 19 \n", + "4 Ángel Di María\\n Midfield — Manchester United $15.0m 13 3 NaN 13 \n", + "5 Santiago Cazorla\\n Midfield — Arsenal $14.8m 20 4 NaN 20 \n", + "6 David Silva\\n Midfield — Manchester City $14.3m 15 6 2 11 \n", + "7 Cesc Fàbregas\\n Midfield — Chelsea $14.0m 20 2 14 10 \n", + "8 Saido Berahino\\n Forward — West Brom $13.8m 21 9 0 20 \n", + "9 Steven Gerrard\\n Midfield — Liverpool $13.8m 20 5 1 11 \n", + "\n", + " PPG P \n", + "0 13.12 209.98 \n", + "1 13.05 274.04 \n", + "2 11.19 223.86 \n", + "3 10.99 197.91 \n", + "4 10.17 132.23 \n", + "5 9.97 NaN \n", + "6 10.35 155.26 \n", + "7 10.47 209.49 \n", + "8 7.02 147.43 \n", + "9 7.50 150.01 " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "df = pd.read_csv('https://raw.githubusercontent.com/rasbt/python_reference/master/Data/some_soccer_data.csv')\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Renaming Columns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Converting Column Names to Lowercase" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygpgasotppgp
    7 Cesc Fàbregas\\n Midfield — Chelsea $14.0m 20 2 14 10 10.47 209.49
    8 Saido Berahino\\n Forward — West Brom $13.8m 21 9 0 20 7.02 147.43
    9 Steven Gerrard\\n Midfield — Liverpool $13.8m 20 5 1 11 7.50 150.01
    \n", + "
    " + ], + "text/plain": [ + " player salary gp g a sot ppg \\\n", + "7 Cesc Fàbregas\\n Midfield — Chelsea $14.0m 20 2 14 10 10.47 \n", + "8 Saido Berahino\\n Forward — West Brom $13.8m 21 9 0 20 7.02 \n", + "9 Steven Gerrard\\n Midfield — Liverpool $13.8m 20 5 1 11 7.50 \n", + "\n", + " p \n", + "7 209.49 \n", + "8 147.43 \n", + "9 150.01 " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Converting column names to lowercase\n", + "\n", + "df.columns = [c.lower() for c in df.columns]\n", + "\n", + "# or\n", + "# df.rename(columns=lambda x : x.lower())\n", + "\n", + "df.tail(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Renaming Particular Columns" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepoints
    7 Cesc Fàbregas\\n Midfield — Chelsea $14.0m 20 2 14 10 10.47 209.49
    8 Saido Berahino\\n Forward — West Brom $13.8m 21 9 0 20 7.02 147.43
    9 Steven Gerrard\\n Midfield — Liverpool $13.8m 20 5 1 11 7.50 150.01
    \n", + "
    " + ], + "text/plain": [ + " player salary games goals assists \\\n", + "7 Cesc Fàbregas\\n Midfield — Chelsea $14.0m 20 2 14 \n", + "8 Saido Berahino\\n Forward — West Brom $13.8m 21 9 0 \n", + "9 Steven Gerrard\\n Midfield — Liverpool $13.8m 20 5 1 \n", + "\n", + " shots_on_target points_per_game points \n", + "7 10 10.47 209.49 \n", + "8 20 7.02 147.43 \n", + "9 11 7.50 150.01 " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = df.rename(columns={'p': 'points', \n", + " 'gp': 'games',\n", + " 'sot': 'shots_on_target',\n", + " 'g': 'goals',\n", + " 'ppg': 'points_per_game',\n", + " 'a': 'assists',})\n", + "\n", + "df.tail(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Applying Computations Rows-wise" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Changing Values in a Column" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepoints
    5 Santiago Cazorla\\n Midfield — Arsenal 14.8 20 4NaN 20 9.97 NaN
    6 David Silva\\n Midfield — Manchester City 14.3 15 6 2 11 10.35 155.26
    7 Cesc Fàbregas\\n Midfield — Chelsea 14.0 20 2 14 10 10.47 209.49
    8 Saido Berahino\\n Forward — West Brom 13.8 21 9 0 20 7.02 147.43
    9 Steven Gerrard\\n Midfield — Liverpool 13.8 20 5 1 11 7.50 150.01
    \n", + "
    " + ], + "text/plain": [ + " player salary games goals assists \\\n", + "5 Santiago Cazorla\\n Midfield — Arsenal 14.8 20 4 NaN \n", + "6 David Silva\\n Midfield — Manchester City 14.3 15 6 2 \n", + "7 Cesc Fàbregas\\n Midfield — Chelsea 14.0 20 2 14 \n", + "8 Saido Berahino\\n Forward — West Brom 13.8 21 9 0 \n", + "9 Steven Gerrard\\n Midfield — Liverpool 13.8 20 5 1 \n", + "\n", + " shots_on_target points_per_game points \n", + "5 20 9.97 NaN \n", + "6 11 10.35 155.26 \n", + "7 10 10.47 209.49 \n", + "8 20 7.02 147.43 \n", + "9 11 7.50 150.01 " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Processing `salary` column\n", + "\n", + "df['salary'] = df['salary'].apply(lambda x: x.strip('$m'))\n", + "df.tail()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Adding a New Column" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    7 Cesc Fàbregas\\n Midfield — Chelsea 14.0 20 2 14 10 10.47 209.49
    8 Saido Berahino\\n Forward — West Brom 13.8 21 9 0 20 7.02 147.43
    9 Steven Gerrard\\n Midfield — Liverpool 13.8 20 5 1 11 7.50 150.01
    \n", + "
    " + ], + "text/plain": [ + " player salary games goals assists \\\n", + "7 Cesc Fàbregas\\n Midfield — Chelsea 14.0 20 2 14 \n", + "8 Saido Berahino\\n Forward — West Brom 13.8 21 9 0 \n", + "9 Steven Gerrard\\n Midfield — Liverpool 13.8 20 5 1 \n", + "\n", + " shots_on_target points_per_game points position team \n", + "7 10 10.47 209.49 \n", + "8 20 7.02 147.43 \n", + "9 11 7.50 150.01 " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['team'] = pd.Series('', index=df.index)\n", + "\n", + "# or\n", + "df.insert(loc=8, column='position', value='') \n", + "\n", + "df.tail(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    7 Cesc Fàbregas 14.0 20 2 14 10 10.47 209.49 Midfield Chelsea
    8 Saido Berahino 13.8 21 9 0 20 7.02 147.43 Forward West Brom
    9 Steven Gerrard 13.8 20 5 1 11 7.50 150.01 Midfield Liverpool
    \n", + "
    " + ], + "text/plain": [ + " player salary games goals assists shots_on_target \\\n", + "7 Cesc Fàbregas 14.0 20 2 14 10 \n", + "8 Saido Berahino 13.8 21 9 0 20 \n", + "9 Steven Gerrard 13.8 20 5 1 11 \n", + "\n", + " points_per_game points position team \n", + "7 10.47 209.49 Midfield Chelsea \n", + "8 7.02 147.43 Forward West Brom \n", + "9 7.50 150.01 Midfield Liverpool " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Processing `player` column\n", + "\n", + "def process_player_col(text):\n", + " name, rest = text.split('\\n')\n", + " position, team = [x.strip() for x in rest.split(' — ')]\n", + " return pd.Series([name, team, position])\n", + "\n", + "df[['player', 'team', 'position']] = df.player.apply(process_player_col)\n", + "\n", + "# modified after tip from reddit.com/user/hharison\n", + "#\n", + "# Alternative (inferior) approach:\n", + "#\n", + "#for idx,row in df.iterrows():\n", + "# name, position, team = process_player_col(row['player'])\n", + "# df.ix[idx, 'player'], df.ix[idx, 'position'], df.ix[idx, 'team'] = name, position, team\n", + " \n", + "df.tail(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Applying Functions to Multiple Columns" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    0 sergio agüero 19.2 16 14 3 34 13.12 209.98 forward manchester city
    1 eden hazard 18.9 21 8 4 17 13.05 274.04 midfield chelsea
    2 alexis sánchez 17.6NaN 12 7 29 11.19 223.86 forward arsenal
    3 yaya touré 16.6 18 7 1 19 10.99 197.91 midfield manchester city
    4 ángel di maría 15.0 13 3NaN 13 10.17 132.23 midfield manchester united
    \n", + "
    " + ], + "text/plain": [ + " player salary games goals assists shots_on_target \\\n", + "0 sergio agüero 19.2 16 14 3 34 \n", + "1 eden hazard 18.9 21 8 4 17 \n", + "2 alexis sánchez 17.6 NaN 12 7 29 \n", + "3 yaya touré 16.6 18 7 1 19 \n", + "4 ángel di maría 15.0 13 3 NaN 13 \n", + "\n", + " points_per_game points position team \n", + "0 13.12 209.98 forward manchester city \n", + "1 13.05 274.04 midfield chelsea \n", + "2 11.19 223.86 forward arsenal \n", + "3 10.99 197.91 midfield manchester city \n", + "4 10.17 132.23 midfield manchester united " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cols = ['player', 'position', 'team']\n", + "df[cols] = df[cols].applymap(lambda x: x.lower())\n", + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Missing Values aka NaNs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Counting Rows with NaNs" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3 rows have missing values\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "df['salary'] = df['salary'].astype(float)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 25 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "types = df.columns.to_series().groupby(df.dtypes).groups\n", - "types" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 26, - "text": [ - "{dtype('float64'): ['salary',\n", - " 'games',\n", - " 'goals',\n", - " 'assists',\n", - " 'shots_on_target',\n", - " 'points_per_game',\n", - " 'points'],\n", - " dtype('O'): ['player', 'position', 'team']}" - ] - } - ], - "prompt_number": 26 } ], - "metadata": {} + "source": [ + "nans = df.shape[0] - df.dropna().shape[0]\n", + "\n", + "print('%d rows have missing values' % nans)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Selecting NaN Rows" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    4 ángel di maría 15.0 13 3NaN 13 10.17 132.23 midfield manchester united
    5 santiago cazorla 14.8 20 4NaN 20 9.97 NaN midfield arsenal
    \n", + "
    " + ], + "text/plain": [ + " player salary games goals assists shots_on_target \\\n", + "4 ángel di maría 15.0 13 3 NaN 13 \n", + "5 santiago cazorla 14.8 20 4 NaN 20 \n", + "\n", + " points_per_game points position team \n", + "4 10.17 132.23 midfield manchester united \n", + "5 9.97 NaN midfield arsenal " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Selecting all rows that have NaNs in the `assists` column\n", + "\n", + "df[df['assists'].isnull()]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Selecting non-NaN Rows" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    0 sergio agüero 19.2 16 14 3 34 13.12 209.98 forward manchester city
    1 eden hazard 18.9 21 8 4 17 13.05 274.04 midfield chelsea
    2 alexis sánchez 17.6NaN 12 7 29 11.19 223.86 forward arsenal
    3 yaya touré 16.6 18 7 1 19 10.99 197.91 midfield manchester city
    6 david silva 14.3 15 6 2 11 10.35 155.26 midfield manchester city
    7 cesc fàbregas 14.0 20 2 14 10 10.47 209.49 midfield chelsea
    8 saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    9 steven gerrard 13.8 20 5 1 11 7.50 150.01 midfield liverpool
    \n", + "
    " + ], + "text/plain": [ + " player salary games goals assists shots_on_target \\\n", + "0 sergio agüero 19.2 16 14 3 34 \n", + "1 eden hazard 18.9 21 8 4 17 \n", + "2 alexis sánchez 17.6 NaN 12 7 29 \n", + "3 yaya touré 16.6 18 7 1 19 \n", + "6 david silva 14.3 15 6 2 11 \n", + "7 cesc fàbregas 14.0 20 2 14 10 \n", + "8 saido berahino 13.8 21 9 0 20 \n", + "9 steven gerrard 13.8 20 5 1 11 \n", + "\n", + " points_per_game points position team \n", + "0 13.12 209.98 forward manchester city \n", + "1 13.05 274.04 midfield chelsea \n", + "2 11.19 223.86 forward arsenal \n", + "3 10.99 197.91 midfield manchester city \n", + "6 10.35 155.26 midfield manchester city \n", + "7 10.47 209.49 midfield chelsea \n", + "8 7.02 147.43 forward west brom \n", + "9 7.50 150.01 midfield liverpool " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[df['assists'].notnull()]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Filling NaN Rows" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    0 sergio agüero 19.2 16 14 3 34 13.12 209.98 forward manchester city
    1 eden hazard 18.9 21 8 4 17 13.05 274.04 midfield chelsea
    2 alexis sánchez 17.6 0 12 7 29 11.19 223.86 forward arsenal
    3 yaya touré 16.6 18 7 1 19 10.99 197.91 midfield manchester city
    4 ángel di maría 15.0 13 3 0 13 10.17 132.23 midfield manchester united
    5 santiago cazorla 14.8 20 4 0 20 9.97 0.00 midfield arsenal
    6 david silva 14.3 15 6 2 11 10.35 155.26 midfield manchester city
    7 cesc fàbregas 14.0 20 2 14 10 10.47 209.49 midfield chelsea
    8 saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    9 steven gerrard 13.8 20 5 1 11 7.50 150.01 midfield liverpool
    \n", + "
    " + ], + "text/plain": [ + " player salary games goals assists shots_on_target \\\n", + "0 sergio agüero 19.2 16 14 3 34 \n", + "1 eden hazard 18.9 21 8 4 17 \n", + "2 alexis sánchez 17.6 0 12 7 29 \n", + "3 yaya touré 16.6 18 7 1 19 \n", + "4 ángel di maría 15.0 13 3 0 13 \n", + "5 santiago cazorla 14.8 20 4 0 20 \n", + "6 david silva 14.3 15 6 2 11 \n", + "7 cesc fàbregas 14.0 20 2 14 10 \n", + "8 saido berahino 13.8 21 9 0 20 \n", + "9 steven gerrard 13.8 20 5 1 11 \n", + "\n", + " points_per_game points position team \n", + "0 13.12 209.98 forward manchester city \n", + "1 13.05 274.04 midfield chelsea \n", + "2 11.19 223.86 forward arsenal \n", + "3 10.99 197.91 midfield manchester city \n", + "4 10.17 132.23 midfield manchester united \n", + "5 9.97 0.00 midfield arsenal \n", + "6 10.35 155.26 midfield manchester city \n", + "7 10.47 209.49 midfield chelsea \n", + "8 7.02 147.43 forward west brom \n", + "9 7.50 150.01 midfield liverpool " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Filling NaN cells with default value 0\n", + "\n", + "df.fillna(value=0, inplace=True)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Appending Rows to a DataFrame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    8 saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    9 steven gerrard 13.8 20 5 1 11 7.50 150.01 midfield liverpool
    10 NaN NaNNaNNaNNaNNaN NaN NaN NaN NaN
    \n", + "
    " + ], + "text/plain": [ + " player salary games goals assists shots_on_target \\\n", + "8 saido berahino 13.8 21 9 0 20 \n", + "9 steven gerrard 13.8 20 5 1 11 \n", + "10 NaN NaN NaN NaN NaN NaN \n", + "\n", + " points_per_game points position team \n", + "8 7.02 147.43 forward west brom \n", + "9 7.50 150.01 midfield liverpool \n", + "10 NaN NaN NaN NaN " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Adding an \"empty\" row to the DataFrame\n", + "\n", + "import numpy as np\n", + "\n", + "df = df.append(pd.Series(\n", + " [np.nan]*len(df.columns), # Fill cells with NaNs\n", + " index=df.columns), \n", + " ignore_index=True)\n", + "\n", + "df.tail(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    8 saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    9 steven gerrard 13.8 20 5 1 11 7.50 150.01 midfield liverpool
    10 new player 12.3NaNNaNNaNNaN NaN NaN NaN NaN
    \n", + "
    " + ], + "text/plain": [ + " player salary games goals assists shots_on_target \\\n", + "8 saido berahino 13.8 21 9 0 20 \n", + "9 steven gerrard 13.8 20 5 1 11 \n", + "10 new player 12.3 NaN NaN NaN NaN \n", + "\n", + " points_per_game points position team \n", + "8 7.02 147.43 forward west brom \n", + "9 7.50 150.01 midfield liverpool \n", + "10 NaN NaN NaN NaN " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Filling cells with data\n", + "\n", + "df.loc[df.index[-1], 'player'] = 'new player'\n", + "df.loc[df.index[-1], 'salary'] = 12.3\n", + "df.tail(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Sorting and Reindexing DataFrames" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    0 sergio agüero 19.2 16 14 3 34 13.12 209.98 forward manchester city
    2 alexis sánchez 17.6 0 12 7 29 11.19 223.86 forward arsenal
    8 saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    1 eden hazard 18.9 21 8 4 17 13.05 274.04 midfield chelsea
    3 yaya touré 16.6 18 7 1 19 10.99 197.91 midfield manchester city
    \n", + "
    " + ], + "text/plain": [ + " player salary games goals assists shots_on_target \\\n", + "0 sergio agüero 19.2 16 14 3 34 \n", + "2 alexis sánchez 17.6 0 12 7 29 \n", + "8 saido berahino 13.8 21 9 0 20 \n", + "1 eden hazard 18.9 21 8 4 17 \n", + "3 yaya touré 16.6 18 7 1 19 \n", + "\n", + " points_per_game points position team \n", + "0 13.12 209.98 forward manchester city \n", + "2 11.19 223.86 forward arsenal \n", + "8 7.02 147.43 forward west brom \n", + "1 13.05 274.04 midfield chelsea \n", + "3 10.99 197.91 midfield manchester city " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Sorting the DataFrame by a certain column (from highest to lowest)\n", + "\n", + "df.sort('goals', ascending=False, inplace=True)\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    1 sergio agüero 19.2 16 14 3 34 13.12 209.98 forward manchester city
    2 alexis sánchez 17.6 0 12 7 29 11.19 223.86 forward arsenal
    3 saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    4 eden hazard 18.9 21 8 4 17 13.05 274.04 midfield chelsea
    5 yaya touré 16.6 18 7 1 19 10.99 197.91 midfield manchester city
    \n", + "
    " + ], + "text/plain": [ + " player salary games goals assists shots_on_target \\\n", + "1 sergio agüero 19.2 16 14 3 34 \n", + "2 alexis sánchez 17.6 0 12 7 29 \n", + "3 saido berahino 13.8 21 9 0 20 \n", + "4 eden hazard 18.9 21 8 4 17 \n", + "5 yaya touré 16.6 18 7 1 19 \n", + "\n", + " points_per_game points position team \n", + "1 13.12 209.98 forward manchester city \n", + "2 11.19 223.86 forward arsenal \n", + "3 7.02 147.43 forward west brom \n", + "4 13.05 274.04 midfield chelsea \n", + "5 10.99 197.91 midfield manchester city " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Optional reindexing of the DataFrame after sorting\n", + "\n", + "df.index = range(1,len(df.index)+1)\n", + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Updating Columns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    1 sergio agüero 20 16 14 3 34 13.12 209.98 forward manchester city
    2 alexis sánchez 15 0 12 7 29 11.19 223.86 forward arsenal
    3 saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    \n", + "
    " + ], + "text/plain": [ + " player salary games goals assists shots_on_target \\\n", + "1 sergio agüero 20 16 14 3 34 \n", + "2 alexis sánchez 15 0 12 7 29 \n", + "3 saido berahino 13.8 21 9 0 20 \n", + "\n", + " points_per_game points position team \n", + "1 13.12 209.98 forward manchester city \n", + "2 11.19 223.86 forward arsenal \n", + "3 7.02 147.43 forward west brom " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Creating a dummy DataFrame with changes in the `salary` column\n", + "\n", + "df_2 = df.copy()\n", + "df_2.loc[0:2, 'salary'] = [20.0, 15.0]\n", + "df_2.head(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    salarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    player
    sergio agüero 19.2 16 14 3 34 13.12 209.98 forward manchester city
    alexis sánchez 17.6 0 12 7 29 11.19 223.86 forward arsenal
    saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    \n", + "
    " + ], + "text/plain": [ + " salary games goals assists shots_on_target \\\n", + "player \n", + "sergio agüero 19.2 16 14 3 34 \n", + "alexis sánchez 17.6 0 12 7 29 \n", + "saido berahino 13.8 21 9 0 20 \n", + "\n", + " points_per_game points position team \n", + "player \n", + "sergio agüero 13.12 209.98 forward manchester city \n", + "alexis sánchez 11.19 223.86 forward arsenal \n", + "saido berahino 7.02 147.43 forward west brom " + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Temporarily use the `player` columns as indices to \n", + "# apply the update functions\n", + "\n", + "df.set_index('player', inplace=True)\n", + "df_2.set_index('player', inplace=True)\n", + "df.head(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    salarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    player
    sergio agüero 20 16 14 3 34 13.12 209.98 forward manchester city
    alexis sánchez 15 0 12 7 29 11.19 223.86 forward arsenal
    saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    \n", + "
    " + ], + "text/plain": [ + " salary games goals assists shots_on_target \\\n", + "player \n", + "sergio agüero 20 16 14 3 34 \n", + "alexis sánchez 15 0 12 7 29 \n", + "saido berahino 13.8 21 9 0 20 \n", + "\n", + " points_per_game points position team \n", + "player \n", + "sergio agüero 13.12 209.98 forward manchester city \n", + "alexis sánchez 11.19 223.86 forward arsenal \n", + "saido berahino 7.02 147.43 forward west brom " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Update the `salary` column\n", + "df.update(other=df_2['salary'], overwrite=True)\n", + "df.head(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    0 sergio agüero 20 16 14 3 34 13.12 209.98 forward manchester city
    1 alexis sánchez 15 0 12 7 29 11.19 223.86 forward arsenal
    2 saido berahino 13.8 21 9 0 20 7.02 147.43 forward west brom
    \n", + "
    " + ], + "text/plain": [ + " player salary games goals assists shots_on_target \\\n", + "0 sergio agüero 20 16 14 3 34 \n", + "1 alexis sánchez 15 0 12 7 29 \n", + "2 saido berahino 13.8 21 9 0 20 \n", + "\n", + " points_per_game points position team \n", + "0 13.12 209.98 forward manchester city \n", + "1 11.19 223.86 forward arsenal \n", + "2 7.02 147.43 forward west brom " + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Reset the indices\n", + "df.reset_index(inplace=True)\n", + "df.head(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chaining Conditions - Using Bitwise Operators" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    1 alexis sánchez 15 0 12 7 29 11.19 223.86 forward arsenal
    3 eden hazard 18.9 21 8 4 17 13.05 274.04 midfield chelsea
    7 santiago cazorla 14.8 20 4 0 20 9.97 0.00 midfield arsenal
    9 cesc fàbregas 14.0 20 2 14 10 10.47 209.49 midfield chelsea
    \n", + "
    " + ], + "text/plain": [ + " player salary games goals assists shots_on_target \\\n", + "1 alexis sánchez 15 0 12 7 29 \n", + "3 eden hazard 18.9 21 8 4 17 \n", + "7 santiago cazorla 14.8 20 4 0 20 \n", + "9 cesc fàbregas 14.0 20 2 14 10 \n", + "\n", + " points_per_game points position team \n", + "1 11.19 223.86 forward arsenal \n", + "3 13.05 274.04 midfield chelsea \n", + "7 9.97 0.00 midfield arsenal \n", + "9 10.47 209.49 midfield chelsea " + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Selecting only those players that either playing for Arsenal or Chelsea\n", + "\n", + "df[ (df['team'] == 'arsenal') | (df['team'] == 'chelsea') ]" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarygamesgoalsassistsshots_on_targetpoints_per_gamepointspositionteam
    1 alexis sánchez 15 0 12 7 29 11.19 223.86 forward arsenal
    \n", + "
    " + ], + "text/plain": [ + " player salary games goals assists shots_on_target \\\n", + "1 alexis sánchez 15 0 12 7 29 \n", + "\n", + " points_per_game points position team \n", + "1 11.19 223.86 forward arsenal " + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Selecting forwards from Arsenal only\n", + "\n", + "df[ (df['team'] == 'arsenal') & (df['position'] == 'forward') ]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Column Types" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Printing Column Types" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{dtype('float64'): ['games',\n", + " 'goals',\n", + " 'assists',\n", + " 'shots_on_target',\n", + " 'points_per_game',\n", + " 'points'],\n", + " dtype('O'): ['player', 'salary', 'position', 'team']}" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "types = df.columns.to_series().groupby(df.dtypes).groups\n", + "types" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Selecting by Column Type" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    playersalarypositionteam
    0 sergio agüero 20 forward manchester city
    1 alexis sánchez 15 forward arsenal
    2 saido berahino 13.8 forward west brom
    3 eden hazard 18.9 midfield chelsea
    4 yaya touré 16.6 midfield manchester city
    \n", + "
    " + ], + "text/plain": [ + " player salary position team\n", + "0 sergio agüero 20 forward manchester city\n", + "1 alexis sánchez 15 forward arsenal\n", + "2 saido berahino 13.8 forward west brom\n", + "3 eden hazard 18.9 midfield chelsea\n", + "4 yaya touré 16.6 midfield manchester city" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# select string columns\n", + "df.loc[:, (df.dtypes == np.dtype('O')).values].head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Converting Column Types" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df['salary'] = df['salary'].astype(float)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{dtype('float64'): ['salary',\n", + " 'games',\n", + " 'goals',\n", + " 'assists',\n", + " 'shots_on_target',\n", + " 'points_per_game',\n", + " 'points'],\n", + " dtype('O'): ['player', 'position', 'team']}" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "types = df.columns.to_series().groupby(df.dtypes).groups\n", + "types" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# If-tests" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to section overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I was recently asked how to do an if-test in pandas, that is, how to create an array of 1s and 0s depending on a condition, e.g., if `val` less than 0.5 -> 0, else -> 1. Using the boolean mask, that's pretty simple since `True` and `False` are integers after all." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "int(True)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    0123
    02.00.304.005
    10.80.030.025
    \n", + "
    " + ], + "text/plain": [ + " 0 1 2 3\n", + "0 2.0 0.30 4.00 5\n", + "1 0.8 0.03 0.02 5" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "a = [[2., .3, 4., 5.], [.8, .03, 0.02, 5.]]\n", + "df = pd.DataFrame(a)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    0123
    0FalseFalseFalseFalse
    1FalseTrueTrueFalse
    \n", + "
    " + ], + "text/plain": [ + " 0 1 2 3\n", + "0 False False False False\n", + "1 False True True False" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = df <= 0.05\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    0123
    00000
    10110
    \n", + "
    " + ], + "text/plain": [ + " 0 1 2 3\n", + "0 0 0 0 0\n", + "1 0 1 1 0" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.astype(int)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } - ] -} \ No newline at end of file + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.4.3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From 3fc278cae3ca6645bab14d30ee24e089371a3dd2 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 27 Jan 2016 22:54:10 -0500 Subject: [PATCH 230/248] remove redundant files --- ...ey_differences_between_python_2_and_3.html | 4242 ----------------- .../key_differences_between_python_2_and_3.md | 416 -- tutorials/scope_resolution_legb_rule.md | 579 --- tutorials/table_of_contents_ipython.md | 125 - 4 files changed, 5362 deletions(-) delete mode 100644 tutorials/key_differences_between_python_2_and_3.html delete mode 100644 tutorials/key_differences_between_python_2_and_3.md delete mode 100644 tutorials/scope_resolution_legb_rule.md delete mode 100644 tutorials/table_of_contents_ipython.md diff --git a/tutorials/key_differences_between_python_2_and_3.html b/tutorials/key_differences_between_python_2_and_3.html deleted file mode 100644 index 2a5a0c5..0000000 --- a/tutorials/key_differences_between_python_2_and_3.html +++ /dev/null @@ -1,4242 +0,0 @@ - - - - - -Notebook - - - - - - - - - - - - - - - - - - - - - - -
    \n",
    -      "4 -> i in global\n",
    -      "
    "
    +    }
    +   ],
    +   "source": [
    +    "for a in range(5):\n",
    +    "    if a == 4:\n",
    +    "        print(a, '-> a in for-loop')\n",
    +    "print(a, '-> a in global')"
    +   ]
    +  },
    +  {
    +   "cell_type": "markdown",
    +   "metadata": {},
    +   "source": [
    +    "**This also applies if we explicitly defined the `for-loop` variable in the global namespace before!** In this case it will rebind the existing variable:"
    +   ]
    +  },
    +  {
    +   "cell_type": "code",
    +   "execution_count": 9,
    +   "metadata": {
    +    "collapsed": false
    +   },
    +   "outputs": [
    +    {
    +     "name": "stdout",
    +     "output_type": "stream",
    +     "text": [
    +      "4 -> b in for-loop\n",
    +      "4 -> b in global\n"
          ]
    -    },
    -    {
    -     "cell_type": "markdown",
    -     "metadata": {},
    -     "source": [
    -      "This goes back to a change that was made in Python 3.x and is described in [What\u2019s New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html) as follows:\n",
    -      "\n",
    -      "\"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope.\""
    +    }
    +   ],
    +   "source": [
    +    "b = 1\n",
    +    "for b in range(5):\n",
    +    "    if b == 4:\n",
    +    "        print(b, '-> b in for-loop')\n",
    +    "print(b, '-> b in global')"
    +   ]
    +  },
    +  {
    +   "cell_type": "markdown",
    +   "metadata": {},
    +   "source": [
    +    "However, in **Python 3.x**, we can use closures to prevent the for-loop variable to cut into the global namespace. Here is an example (exectuted in Python 3.4):"
    +   ]
    +  },
    +  {
    +   "cell_type": "code",
    +   "execution_count": 1,
    +   "metadata": {
    +    "collapsed": false
    +   },
    +   "outputs": [
    +    {
    +     "name": "stdout",
    +     "output_type": "stream",
    +     "text": [
    +      "[0, 1, 2, 3, 4]\n",
    +      "1 -> i in global\n"
          ]
    -    },
    -    {
    -     "cell_type": "code",
    -     "collapsed": false,
    -     "input": [],
    -     "language": "python",
    -     "metadata": {},
    -     "outputs": []
         }
        ],
    -   "metadata": {}
    +   "source": [
    +    "i = 1\n",
    +    "print([i for i in range(5)])\n",
    +    "print(i, '-> i in global')"
    +   ]
    +  },
    +  {
    +   "cell_type": "markdown",
    +   "metadata": {},
    +   "source": [
    +    "Why did I mention \"Python 3.x\"? Well, as it happens, the same code executed in Python 2.x would print:\n",
    +    "\n",
    +    "
    \n",
    +    "4 -> i in global\n",
    +    "
    "
    +   ]
    +  },
    +  {
    +   "cell_type": "markdown",
    +   "metadata": {},
    +   "source": [
    +    "This goes back to a change that was made in Python 3.x and is described in [What’s New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html) as follows:\n",
    +    "\n",
    +    "\"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope.\""
    +   ]
    +  },
    +  {
    +   "cell_type": "code",
    +   "execution_count": null,
    +   "metadata": {
    +    "collapsed": false
    +   },
    +   "outputs": [],
    +   "source": []
       }
    - ]
    + ],
    + "metadata": {
    +  "kernelspec": {
    +   "display_name": "Python 3",
    +   "language": "python",
    +   "name": "python3"
    +  },
    +  "language_info": {
    +   "codemirror_mode": {
    +    "name": "ipython",
    +    "version": 3
    +   },
    +   "file_extension": ".py",
    +   "mimetype": "text/x-python",
    +   "name": "python",
    +   "nbconvert_exporter": "python",
    +   "pygments_lexer": "ipython3",
    +   "version": "3.5.1"
    +  }
    + },
    + "nbformat": 4,
    + "nbformat_minor": 0
     }
    
    From 4797e5d32790dff54f0418f77d5fa0bace5f8df8 Mon Sep 17 00:00:00 2001
    From: rasbt 
    Date: Sun, 10 Apr 2016 18:50:40 -0400
    Subject: [PATCH 232/248] How to Make Mistakes in Python
    
    ---
     other/python_book_reviews.md                  |  104 +-
     ...y_differences_between_python_2_and_3.ipynb | 4160 ++++----
     tutorials/not_so_obvious_python_stuff.ipynb   | 8504 ++++++++---------
     tutorials/scope_resolution_legb_rule.ipynb    |    2 +-
     4 files changed, 6347 insertions(+), 6423 deletions(-)
    
    diff --git a/other/python_book_reviews.md b/other/python_book_reviews.md
    index bc1105f..4b762ea 100644
    --- a/other/python_book_reviews.md
    +++ b/other/python_book_reviews.md
    @@ -3,14 +3,13 @@
     
     # Python Book Reviews
     
    -- [Matplotlib Plotting Cookbook](#Matplotlib-Plotting-Cookbook)
    -- [Python High Performance Programming](#Python-High-Performance-Programming)
    -- [Learning Ipython for Interactive Computing and Data Visualization](#Learning-Ipython-for-Interactive-Computing-and-Data-Visualization)
    -- [The Practice of Computing Using Python (2nd Edition)](#The-Practice-of-Computing-Using-Python-(2nd-Edition))
    +- [Matplotlib Plotting Cookbook](#matplotlib-plotting-cookbook)
    +- [Python High Performance Programming](#python-high-performance-programming)
    +- [Learning IPython for Interactive Computing and Data Visualization](#learning-ipython-for-interactive-computing-and-data-visualization)
    +- [The Practice of Computing Using Python (2nd Edition)](#the-practice-of-computing-using-python-(2nd-Edition))
    +- [How to Make Mistakes in Python](#how-to-make-mistakes-in-python)
     
     
    -
    - **Where are the links?** I decided to **not** post any links to any online shop here - I don't want to advertise anything but merely want to leave my brief thoughts in hope that it might be helpful to one or the other. @@ -18,25 +17,20 @@ I decided to **not** post any links to any online shop here - I don't want to ad **About the rating scale/review scores** -Most popular review sites provide some sort of rating, e.g., 7/10, 90/100, 3 starts out of 5 etc. +Most popular review sites provide some sort of rating, e.g., 7/10, 90/100, 3 stars out of 5 etc. I have to admit that I am not a big fan of those review scores - and you won't find them here. Based on my experience, review scores are just kindling all sorts of arguments, destructive debates, and hate-mails. Let's be honest, every opinion is subjective, and I think that boiling it down to a final score is just an annoyance for everyone. -
    - - -
    +--- +### Matplotlib Plotting Cookbook - -### Matplotlib Plotting Cookbook -[[back to top](#table-of-contents)] ***by Alexandre Devert*** - -Paperback: 222 pages -Release Date: March 2014 -ISBN: 1849513260 -ISBN 13: 9781849513265 +- Paperback: 222 pages +- Release Date: March 2014 +- ISBN: 1849513260 +- ISBN 13: 9781849513265 +- Publisher: Packt **A good alternative to the official matplotlib documentation** @@ -56,42 +50,41 @@ But to it's defense, my hard copy of the "Gnuplot in Action" is also presented i Not a real point of criticism but more like a suggestion for future editions: as big fan of it, I was actually looking for this section that mentions how to use it in IPython notebooks (%pylab inline vs. matplotlib inline), and maybe also plotly for additional value :) -
    +--- - ### Python High Performance Programming -[[back to top](#table-of-contents)] ***by Gabriele Lanaro*** - -Paperback: 108 pages -Release Date: December 2013 -ISBN: 1783288450 -ISBN 13: 9781783288458 + +- Paperback: 108 pages +- Release Date: December 2013 +- ISBN: 1783288450 +- ISBN 13: 9781783288458 +- Publisher: Packt **Really recommended book for Python beginners** A really nice read! It covered 4 important topics: how to profile & benchmark Python code, NumPy, C-extensions via Cython, and parallel programming. However, I found it a little bit too brief on all of the topics, a little bit more depth would have been nice. -Also, I missed a few parts, like general Python tricks for better performance (e.g., in-place operators for mutable types and many many others that I started to create benchmarks for here: https://github.com/rasbt/One-Python-benchmark-per-day) +Also, I missed a few parts, like general Python tricks for better performance (e.g., in-place operators for mutable types and many many others that I started to create benchmarks for here: https://github.com/rasbt/One-Python-benchmark-per-day) And another thing that I think would be worth adding in a future addition would be the JIT (just-in-time) compilers, such as parakeet or Numba, especially since Numexpr was briefly mentioned in the NumPy section. But overall I think it is a very recommended read for Python beginners! -
    +--- + +### Learning Ipython for Interactive Computing and Data Visualization + - -###Learning Ipython for Interactive Computing and Data Visualization -[[back to top](#table-of-contents)] - ***by Cyrille Rossant*** - -Paperback: 138 pages -Release Date: April 2013 -ISBN: 1782169938 -ISBN 13: 9781782169932 + +- Paperback: 138 pages +- Release Date: April 2013 +- ISBN: 1782169938 +- ISBN 13: 9781782169932 +- Publisher: Packt @@ -100,23 +93,38 @@ ISBN 13: 9781782169932
    It's a brief but good book that provides a good introduction to the IPython environment. I think the high-performance chapter that explained the usage of NumPy among others was a little bit redundant, since it is a general Python topic and is not necessarily specific to IPython. And on the other hand, the chapters on customizing IPython and especially writing own IPython magic extensions were way too brief - when I wrote my own extensions, I needed to look more closely at the IPython extension source code to be able to handle this task. But still, this is a nice book that I would recommend to people who are fairly new to Python and people who want to get a taste of IPython! -
    +--- + +### The Practice of Computing Using Python (2nd Edition) - -###The Practice of Computing Using Python (2nd Edition) -[[back to top](#table-of-contents)] ***by William F. Punch and Richard Enbody*** - -Paperback: 792 pages -Release Date: February 25, 2012 -ISBN-10: 013280557X -ISBN-13: 978-0132805575 +- Paperback: 792 pages +- Release Date: February 25, 2012 +- ISBN-10: 013280557X +- ISBN-13: 978-0132805575 +- Publisher: Pearson **A great first Python book** This was actually my first Python book. It is not meant to be a thorough coverage of all the greatest Python features and capabilities, but it provides a great introduction to computing and programming in general by using the Python language. It is maybe a little bit to trivial for programmers who just want to pick up the syntax Python language, but I would really recommend this book as a first introduction to people who have never programmed before - I think that Python is a very nice language to pick up this valuable skill. -I am a big fan of books that contains self-assessments: from short exercises up to bigger project assignments, and this book comes with a huge abundance of valuable material, which is a big bonus point. \ No newline at end of file +I am a big fan of books that contains self-assessments: from short exercises up to bigger project assignments, and this book comes with a huge abundance of valuable material, which is a big bonus point. + + +--- + +### How to Make Mistakes in Python + + +***by Mike Pirnat*** + + +- e-Book: 154 pages +- Release Date: October, 2015 +- Publisher: O'Reilly + + +Although I already have many years of experience with coding in Python, I thought that it couldn't hurt to read through this book -- I got the free copy via O'Reilly, and it's relatively short. Sure, many topics throughout this book are trivial for an experienced Python programmer, but I believe that it's a great summary for someone who just got started with this programming language. Although the author doesn't go into technical depths regarding e.g., pylint, unit testing, etc., I think that his descriptions are sufficient, and a reader can always look at the online documentation of the respective tools. What's more important is that the author gives good reasons WHY we should use/do certain things, and I really like the use of paraphrased examples from real-world use cases. It's a solid book overall! diff --git a/tutorials/key_differences_between_python_2_and_3.ipynb b/tutorials/key_differences_between_python_2_and_3.ipynb index f3e2067..0f74195 100644 --- a/tutorials/key_differences_between_python_2_and_3.ipynb +++ b/tutorials/key_differences_between_python_2_and_3.ipynb @@ -1,2194 +1,2118 @@ { - "metadata": { - "name": "", - "signature": "sha256:1a71ccc70829239143d02cebcb97bec031b45e676ebad340fc04c9bd4a5760bf" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ + "cells": [ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[Sebastian Raschka](http://sebastianraschka.com) \n", - "\n", - "last updated 05/27/2014\n", - "\n", - "- [Open in IPython nbviewer](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/key_differences_between_python_2_and_3.ipynb?create=1) \n", - "\n", - "- [Link to this IPython notebook on Github](https://github.com/rasbt/python_reference/blob/master/tutorials/key_differences_between_python_2_and_3.ipynb) \n", - "\n", - "- [Link to the GitHub repository python_reference](https://github.com/rasbt/python_reference)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "I would be happy to hear your comments and suggestions. \n", - "Please feel free to drop me a note via\n", - "[twitter](https://twitter.com/rasbt), [email](mailto:bluewoodtree@gmail.com), or [google+](https://plus.google.com/118404394130788869227).\n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Key differences between Python 2.7.x and Python 3.x" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "Many beginning Python users are wondering with which version of Python they should start. My answer to this question is usually something along the lines \"just go with the version your favorite tutorial was written in, and check out the differences later on.\"\n", - "\n", - "But what if you are starting a new project and have the choice to pick? I would say there is currently no \"right\" or \"wrong\" as long as both Python 2.7.x and Python 3.x support the libraries that you are planning to use. However, it is worthwhile to have a look at the major differences between those two most popular versions of Python to avoid common pitfalls when writing the code for either one of them, or if you are planning to port your project." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Sebastian Raschka](http://sebastianraschka.com) \n", + "\n", + "last updated 05/27/2014\n", + "\n", + "- [Open in IPython nbviewer](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/key_differences_between_python_2_and_3.ipynb?create=1) \n", + "\n", + "- [Link to this IPython notebook on Github](https://github.com/rasbt/python_reference/blob/master/tutorials/key_differences_between_python_2_and_3.ipynb) \n", + "\n", + "- [Link to the GitHub repository python_reference](https://github.com/rasbt/python_reference)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "I would be happy to hear your comments and suggestions. \n", + "Please feel free to drop me a note via\n", + "[twitter](https://twitter.com/rasbt), [email](mailto:bluewoodtree@gmail.com), or [google+](https://plus.google.com/118404394130788869227).\n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Key differences between Python 2.7.x and Python 3.x" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "Many beginning Python users are wondering with which version of Python they should start. My answer to this question is usually something along the lines \"just go with the version your favorite tutorial was written in, and check out the differences later on.\"\n", + "\n", + "But what if you are starting a new project and have the choice to pick? I would say there is currently no \"right\" or \"wrong\" as long as both Python 2.7.x and Python 3.x support the libraries that you are planning to use. However, it is worthwhile to have a look at the major differences between those two most popular versions of Python to avoid common pitfalls when writing the code for either one of them, or if you are planning to port your project." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sections" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "- [Using the `__future__` module](#future_module)\n", + "\n", + "- [The print function](#The-print-function)\n", + "\n", + "- [Integer division](#Integer-division)\n", + "\n", + "- [Unicode](#Unicode)\n", + "\n", + "- [xrange](#xrange)\n", + "\n", + "- [Raising exceptions](#Raising-exceptions)\n", + "\n", + "- [Handling exceptions](#Handling-exceptions)\n", + "\n", + "- [The next() function and .next() method](#The-next-function-and-next-method)\n", + "\n", + "- [For-loop variables and the global namespace leak](#For-loop-variables-and-the-global-namespace-leak)\n", + "\n", + "- [Comparing unorderable types](#Comparing-unorderable-types)\n", + "\n", + "- [Parsing user inputs via input()](#Parsing-user-inputs-via-input)\n", + "\n", + "- [Returning iterable objects instead of lists](#Returning-iterable-objects-instead-of-lists)\n", + "\n", + "- [More articles about Python 2 and Python 3](#More-articles-about-Python-2-and-Python-3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The `__future__` module" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python 3.x introduced some Python 2-incompatible keywords and features that can be imported via the in-built `__future__` module in Python 2. It is recommended to use `__future__` imports it if you are planning Python 3.x support for your code. For example, if we want Python 3.x's integer division behavior in Python 2, we can import it via\n", + "\n", + " from __future__ import division\n", + " \n", + "More features that can be imported from the `__future__` module are listed in the table below:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    featureoptional inmandatory ineffect
    nested_scopes2.1.0b12.2PEP 227:\n", + "Statically Nested Scopes
    generators2.2.0a12.3PEP 255:\n", + "Simple Generators
    division2.2.0a23.0PEP 238:\n", + "Changing the Division Operator
    absolute_import2.5.0a13.0PEP 328:\n", + "Imports: Multi-Line and Absolute/Relative
    with_statement2.5.0a12.6PEP 343:\n", + "The “with” Statement
    print_function2.6.0a23.0PEP 3105:\n", + "Make print a function
    unicode_literals2.6.0a23.0PEP 3112:\n", + "Bytes literals in Python 3000
    \n", + "
    \n", + "
    (Source: [https://docs.python.org/2/library/__future__.html](https://docs.python.org/2/library/__future__.html#module-__future__))
    " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from platform import python_version" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The print function" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Very trivial, and the change in the print-syntax is probably the most widely known change, but still it is worth mentioning: Python 2's print statement has been replaced by the `print()` function, meaning that we have to wrap the object that we want to print in parantheses. \n", + "\n", + "Python 2 doesn't have a problem with additional parantheses, but in contrast, Python 3 would raise a `SyntaxError` if we called the print function the Python 2-way without the parentheses. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 2.7.6\n", + "Hello, World!\n", + "Hello, World!\n", + "text print more text on the same line\n" ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Sections" + } + ], + "source": [ + "print 'Python', python_version()\n", + "print 'Hello, World!'\n", + "print('Hello, World!')\n", + "print \"text\", ; print 'print more text on the same line'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 3.4.1\n", + "Hello, World!\n", + "some text, print more text on the same line\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "- [Using the `__future__` module](#future_module)\n", - "\n", - "- [The print function](#The-print-function)\n", - "\n", - "- [Integer division](#Integer-division)\n", - "\n", - "- [Unicode](#Unicode)\n", - "\n", - "- [xrange](#xrange)\n", - "\n", - "- [Raising exceptions](#Raising-exceptions)\n", - "\n", - "- [Handling exceptions](#Handling-exceptions)\n", - "\n", - "- [The next() function and .next() method](#The-next-function-and-next-method)\n", - "\n", - "- [For-loop variables and the global namespace leak](#For-loop-variables-and-the-global-namespace-leak)\n", - "\n", - "- [Comparing unorderable types](#Comparing-unorderable-types)\n", - "\n", - "- [Parsing user inputs via input()](#Parsing-user-inputs-via-input)\n", - "\n", - "- [Returning iterable objects instead of lists](#Returning-iterable-objects-instead-of-lists)\n", - "\n", - "- [More articles about Python 2 and Python 3](#More-articles-about-Python-2-and-Python-3)" + } + ], + "source": [ + "print('Python', python_version())\n", + "print('Hello, World!')\n", + "\n", + "print(\"some text,\", end=\"\") \n", + "print(' print more text on the same line')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (, line 1)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m print 'Hello, World!'\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" + } + ], + "source": [ + "print 'Hello, World!'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note:**\n", + "\n", + "Printing \"Hello, World\" above via Python 2 looked quite \"normal\". However, if we have multiple objects inside the parantheses, we will create a tuple, since `print` is a \"statement\" in Python 2, not a function call." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 2.7.7\n", + "('a', 'b')\n", + "a b\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " + } + ], + "source": [ + "print 'Python', python_version()\n", + "print('a', 'b')\n", + "print 'a', 'b'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Integer division" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This change is particularly dangerous if you are porting code, or if you are executing Python 3 code in Python 2, since the change in integer-division behavior can often go unnoticed (it doesn't raise a `SyntaxError`). \n", + "So, I still tend to use a `float(3)/2` or `3/2.0` instead of a `3/2` in my Python 3 scripts to save the Python 2 guys some trouble (and vice versa, I recommend a `from __future__ import division` in your Python 2 scripts)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 2.7.6\n", + "3 / 2 = 1\n", + "3 // 2 = 1\n", + "3 / 2.0 = 1.5\n", + "3 // 2.0 = 1.0\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### The `__future__` module" + } + ], + "source": [ + "print 'Python', python_version()\n", + "print '3 / 2 =', 3 / 2\n", + "print '3 // 2 =', 3 // 2\n", + "print '3 / 2.0 =', 3 / 2.0\n", + "print '3 // 2.0 =', 3 // 2.0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 3.4.1\n", + "3 / 2 = 1.5\n", + "3 // 2 = 1\n", + "3 / 2.0 = 1.5\n", + "3 // 2.0 = 1.0\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Python 3.x introduced some Python 2-incompatible keywords and features that can be imported via the in-built `__future__` module in Python 2. It is recommended to use `__future__` imports it if you are planning Python 3.x support for your code. For example, if we want Python 3.x's integer division behavior in Python 2, we can import it via\n", - "\n", - " from __future__ import division\n", - " \n", - "More features that can be imported from the `__future__` module are listed in the table below:" + } + ], + "source": [ + "print('Python', python_version())\n", + "print('3 / 2 =', 3 / 2)\n", + "print('3 // 2 =', 3 // 2)\n", + "print('3 / 2.0 =', 3 / 2.0)\n", + "print('3 // 2.0 =', 3 // 2.0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Unicode" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python 2 has ASCII `str()` types, separate `unicode()`, but no `byte` type. \n", + "\n", + "Now, in Python 3, we finally have Unicode (utf-8) `str`ings, and 2 byte classes: `byte` and `bytearray`s." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 2.7.6\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
    featureoptional inmandatory ineffect
    nested_scopes2.1.0b12.2PEP 227:\n", - "Statically Nested Scopes
    generators2.2.0a12.3PEP 255:\n", - "Simple Generators
    division2.2.0a23.0PEP 238:\n", - "Changing the Division Operator
    absolute_import2.5.0a13.0PEP 328:\n", - "Imports: Multi-Line and Absolute/Relative
    with_statement2.5.0a12.6PEP 343:\n", - "The “with” Statement
    print_function2.6.0a23.0PEP 3105:\n", - "Make print a function
    unicode_literals2.6.0a23.0PEP 3112:\n", - "Bytes literals in Python 3000
    \n", - "
    \n", - "
    (Source: [https://docs.python.org/2/library/__future__.html](https://docs.python.org/2/library/__future__.html#module-__future__))
    " + } + ], + "source": [ + "print 'Python', python_version()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from platform import python_version" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " + } + ], + "source": [ + "print type(unicode('this is like a python3 str type'))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "The print function" + } + ], + "source": [ + "print type(b'byte type does not exist')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "they are really the same\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to the section-overview](#Sections)]" + } + ], + "source": [ + "print 'they are really' + b' the same'" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Very trivial, and the change in the print-syntax is probably the most widely known change, but still it is worth mentioning: Python 2's print statement has been replaced by the `print()` function, meaning that we have to wrap the object that we want to print in parantheses. \n", - "\n", - "Python 2 doesn't have a problem with additional parantheses, but in contrast, Python 3 would raise a `SyntaxError` if we called the print function the Python 2-way without the parentheses. \n" + } + ], + "source": [ + "print type(bytearray(b'bytearray oddly does exist though'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 3.4.1\n", + "strings are now utf-8 μnicoΔé!\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 2" + } + ], + "source": [ + "print('Python', python_version())\n", + "print('strings are now utf-8 \\u03BCnico\\u0394é!')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 3.4.1 has \n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'Python', python_version()\n", - "print 'Hello, World!'\n", - "print('Hello, World!')\n", - "print \"text\", ; print 'print more text on the same line'" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 2.7.6\n", - "Hello, World!\n", - "Hello, World!\n", - "text print more text on the same line\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " + } + ], + "source": [ + "print('Python', python_version(), end=\"\")\n", + "print(' has', type(b' bytes for storing data'))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "and Python 3.4.1 also has \n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 3" + } + ], + "source": [ + "print('and Python', python_version(), end=\"\")\n", + "print(' also has', type(bytearray(b'bytearrays')))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "TypeError", + "evalue": "Can't convert 'bytes' object to str implicitly", + "output_type": "error", + "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[0;32m----> 1\u001b[0;31m \u001b[0;34m'note that we cannot add a string'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34mb'bytes for data'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m: Can't convert 'bytes' object to str implicitly" ] - }, + } + ], + "source": [ + "'note that we cannot add a string' + b'bytes for data'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## xrange" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " \n", + "The usage of `xrange()` is very popular in Python 2.x for creating an iterable object, e.g., in a for-loop or list/set-dictionary-comprehension. \n", + "The behavior was quite similar to a generator (i.e., \"lazy evaluation\"), but here the xrange-iterable is not exhaustible - meaning, you could iterate over it infinitely. \n", + "\n", + "\n", + "Thanks to its \"lazy-evaluation\", the advantage of the regular `range()` is that `xrange()` is generally faster if you have to iterate over it only once (e.g., in a for-loop). However, in contrast to 1-time iterations, it is not recommended if you repeat the iteration multiple times, since the generation happens every time from scratch! \n", + "\n", + "In Python 3, the `range()` was implemented like the `xrange()` function so that a dedicated `xrange()` function does not exist anymore (`xrange()` raises a `NameError` in Python 3)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import timeit\n", + "\n", + "n = 10000\n", + "def test_range(n):\n", + " return for i in range(n):\n", + " pass\n", + " \n", + "def test_xrange(n):\n", + " for i in xrange(n):\n", + " pass " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Python', python_version())\n", - "print('Hello, World!')\n", + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 2.7.6\n", "\n", - "print(\"some text,\", end=\"\") \n", - "print(' print more text on the same line')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 3.4.1\n", - "Hello, World!\n", - "some text, print more text on the same line\n" - ] - } - ], - "prompt_number": 2 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'Hello, World!'" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "SyntaxError", - "evalue": "invalid syntax (, line 1)", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m print 'Hello, World!'\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Note:**\n", + "timing range()\n", + "1000 loops, best of 3: 433 µs per loop\n", "\n", - "Printing \"Hello, World\" above via Python 2 looked quite \"normal\". However, if we have multiple objects inside the parantheses, we will create a tuple, since `print` is a \"statement\" in Python 2, not a function call." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'Python', python_version()\n", - "print('a', 'b')\n", - "print 'a', 'b'" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 2.7.7\n", - "('a', 'b')\n", - "a b\n" - ] - } - ], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Integer division" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to the section-overview](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This change is particularly dangerous if you are porting code, or if you are executing Python 3 code in Python 2, since the change in integer-division behavior can often go unnoticed (it doesn't raise a `SyntaxError`). \n", - "So, I still tend to use a `float(3)/2` or `3/2.0` instead of a `3/2` in my Python 3 scripts to save the Python 2 guys some trouble (and vice versa, I recommend a `from __future__ import division` in your Python 2 scripts)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 2" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'Python', python_version()\n", - "print '3 / 2 =', 3 / 2\n", - "print '3 // 2 =', 3 // 2\n", - "print '3 / 2.0 =', 3 / 2.0\n", - "print '3 // 2.0 =', 3 // 2.0" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 2.7.6\n", - "3 / 2 = 1\n", - "3 // 2 = 1\n", - "3 / 2.0 = 1.5\n", - "3 // 2.0 = 1.0\n" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 3" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Python', python_version())\n", - "print('3 / 2 =', 3 / 2)\n", - "print('3 // 2 =', 3 // 2)\n", - "print('3 / 2.0 =', 3 / 2.0)\n", - "print('3 // 2.0 =', 3 // 2.0)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 3.4.1\n", - "3 / 2 = 1.5\n", - "3 // 2 = 1\n", - "3 / 2.0 = 1.5\n", - "3 // 2.0 = 1.0\n" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Unicode" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to the section-overview](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Python 2 has ASCII `str()` types, separate `unicode()`, but no `byte` type. \n", "\n", - "Now, in Python 3, we finally have Unicode (utf-8) `str`ings, and 2 byte classes: `byte` and `bytearray`s." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 2" + "timing xrange()\n", + "1000 loops, best of 3: 350 µs per loop\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'Python', python_version()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 2.7.6\n" - ] - } - ], - "prompt_number": 2 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print type(unicode('this is like a python3 str type'))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print type(b'byte type does not exist')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'they are really' + b' the same'" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "they are really the same\n" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print type(bytearray(b'bytearray oddly does exist though'))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 3" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Python', python_version())\n", - "print('strings are now utf-8 \\u03BCnico\\u0394\u00e9!')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 3.4.1\n", - "strings are now utf-8 \u03bcnico\u0394\u00e9!\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Python', python_version(), end=\"\")\n", - "print(' has', type(b' bytes for storing data'))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 3.4.1 has \n" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('and Python', python_version(), end=\"\")\n", - "print(' also has', type(bytearray(b'bytearrays')))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "and Python 3.4.1 also has \n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "'note that we cannot add a string' + b'bytes for data'" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "Can't convert 'bytes' object to str implicitly", - "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[0;32m----> 1\u001b[0;31m \u001b[0;34m'note that we cannot add a string'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34mb'bytes for data'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m: Can't convert 'bytes' object to str implicitly" - ] - } - ], - "prompt_number": 13 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "xrange" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to the section-overview](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " \n", - "The usage of `xrange()` is very popular in Python 2.x for creating an iterable object, e.g., in a for-loop or list/set-dictionary-comprehension. \n", - "The behavior was quite similar to a generator (i.e., \"lazy evaluation\"), but here the xrange-iterable is not exhaustible - meaning, you could iterate over it infinitely. \n", - "\n", - "\n", - "Thanks to its \"lazy-evaluation\", the advantage of the regular `range()` is that `xrange()` is generally faster if you have to iterate over it only once (e.g., in a for-loop). However, in contrast to 1-time iterations, it is not recommended if you repeat the iteration multiple times, since the generation happens every time from scratch! \n", - "\n", - "In Python 3, the `range()` was implemented like the `xrange()` function so that a dedicated `xrange()` function does not exist anymore (`xrange()` raises a `NameError` in Python 3)." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "n = 10000\n", - "def test_range(n):\n", - " return for i in range(n):\n", - " pass\n", - " \n", - "def test_xrange(n):\n", - " for i in xrange(n):\n", - " pass " - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 5 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 2" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'Python', python_version()\n", - "\n", - "print '\\ntiming range()'\n", - "%timeit test_range(n)\n", - "\n", - "print '\\n\\ntiming xrange()'\n", - "%timeit test_xrange(n)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 2.7.6\n", - "\n", - "timing range()\n", - "1000 loops, best of 3: 433 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "\n", - "timing xrange()\n", - "1000 loops, best of 3: 350 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 3" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Python', python_version())\n", - "\n", - "print('\\ntiming range()')\n", - "%timeit test_range(n)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 3.4.1\n", - "\n", - "timing range()\n", - "1000 loops, best of 3: 520 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print(xrange(10))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'xrange' 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[0;32m----> 1\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mNameError\u001b[0m: name 'xrange' is not defined" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    \n" - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "The `__contains__` method for `range` objects in Python 3" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Another thing worth mentioning is that `range` got a \"new\" `__contains__` method in Python 3.x (thanks to [Yuchen Ying](https://github.com/yegle), who pointed this out). The `__contains__` method can speedup \"look-ups\" in Python 3.x `range` significantly for integer and Boolean types.\n" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "x = 10000000" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 3 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def val_in_range(x, val):\n", - " return val in range(x)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 4 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def val_in_xrange(x, val):\n", - " return val in xrange(x)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 5 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Python', python_version())\n", - "assert(val_in_range(x, x/2) == True)\n", - "assert(val_in_range(x, x//2) == True)\n", - "%timeit val_in_range(x, x/2)\n", - "%timeit val_in_range(x, x//2)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 3.4.1\n", - "1 loops, best of 3: 742 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1000000 loops, best of 3: 1.19 \u00b5s per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Based on the `timeit` results above, you see that the execution for the \"look up\" was about 60,000 faster when it was of an integer type rather than a float. However, since Python 2.x's `range` or `xrange` doesn't have a `__contains__` method, the \"look-up speed\" wouldn't be that much different for integers or floats:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'Python', python_version()\n", - "assert(val_in_xrange(x, x/2.0) == True)\n", - "assert(val_in_xrange(x, x/2) == True)\n", - "assert(val_in_range(x, x/2) == True)\n", - "assert(val_in_range(x, x//2) == True)\n", - "%timeit val_in_xrange(x, x/2.0)\n", - "%timeit val_in_xrange(x, x/2)\n", - "%timeit val_in_range(x, x/2.0)\n", - "%timeit val_in_range(x, x/2)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 2.7.7\n", - "1 loops, best of 3: 285 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1 loops, best of 3: 179 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1 loops, best of 3: 658 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "1 loops, best of 3: 556 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Below the \"proofs\" that the `__contain__` method wasn't added to Python 2.x yet:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Python', python_version())\n", - "range.__contains__" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 3.4.1\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 8, - "text": [ - "" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'Python', python_version()\n", - "range.__contains__" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 2.7.7\n" - ] - }, - { - "ename": "AttributeError", - "evalue": "'builtin_function_or_method' object has no attribute '__contains__'", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mAttributeError\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[0;32mprint\u001b[0m \u001b[0;34m'Python'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpython_version\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mrange\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__contains__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m: 'builtin_function_or_method' object has no attribute '__contains__'" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'Python', python_version()\n", - "xrange.__contains__" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 2.7.7\n" - ] - }, - { - "ename": "AttributeError", - "evalue": "type object 'xrange' has no attribute '__contains__'", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mAttributeError\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[0;32mprint\u001b[0m \u001b[0;34m'Python'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpython_version\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mxrange\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__contains__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m: type object 'xrange' has no attribute '__contains__'" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 4, - "metadata": {}, - "source": [ - "Note about the speed differences in Python 2 and 3" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Some people pointed out the speed difference between Python 3's `range()` and Python2's `xrange()`. Since they are implemented the same way one would expect the same speed. However the difference here just comes from the fact that Python 3 generally tends to run slower than Python 2. " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def test_while():\n", - " i = 0\n", - " while i < 20000:\n", - " i += 1\n", - " return" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 3 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Python', python_version())\n", - "%timeit test_while()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 3.4.1\n", - "100 loops, best of 3: 2.68 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'Python', python_version()\n", - "%timeit test_while()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 2.7.6\n", - "1000 loops, best of 3: 1.72 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Raising exceptions" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to the section-overview](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "Where Python 2 accepts both notations, the 'old' and the 'new' syntax, Python 3 chokes (and raises a `SyntaxError` in turn) if we don't enclose the exception argument in parentheses:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 2" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'Python', python_version()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 2.7.6\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "raise IOError, \"file error\"" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "IOError", - "evalue": "file error", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mIOError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mIOError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"file error\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mIOError\u001b[0m: file error" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "raise IOError(\"file error\")" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "IOError", - "evalue": "file error", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mIOError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mIOError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"file error\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mIOError\u001b[0m: file error" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 3" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Python', python_version())" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 3.4.1\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "raise IOError, \"file error\"" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "SyntaxError", - "evalue": "invalid syntax (, line 1)", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m raise IOError, \"file error\"\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The proper way to raise an exception in Python 3:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Python', python_version())\n", - "raise IOError(\"file error\")" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 3.4.1\n" - ] - }, - { - "ename": "OSError", - "evalue": "file error", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mOSError\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[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Python'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpython_version\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mIOError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"file error\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mOSError\u001b[0m: file error" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Handling exceptions" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to the section-overview](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Also the handling of exceptions has slightly changed in Python 3. In Python 3 we have to use the \"`as`\" keyword now" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 2" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'Python', python_version()\n", - "try:\n", - " let_us_cause_a_NameError\n", - "except NameError, err:\n", - " print err, '--> our error message'" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 2.7.6\n", - "name 'let_us_cause_a_NameError' is not defined --> our error message\n" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 3" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Python', python_version())\n", - "try:\n", - " let_us_cause_a_NameError\n", - "except NameError as err:\n", - " print(err, '--> our error message')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 3.4.1\n", - "name 'let_us_cause_a_NameError' is not defined --> our error message\n" - ] - } - ], - "prompt_number": 12 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "The next() function and .next() method" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to the section-overview](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Since `next()` (`.next()`) is such a commonly used function (method), this is another syntax change (or rather change in implementation) that is worth mentioning: where you can use both the function and method syntax in Python 2.7.5, the `next()` function is all that remains in Python 3 (calling the `.next()` method raises an `AttributeError`)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 2" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'Python', python_version()\n", - "\n", - "my_generator = (letter for letter in 'abcdefg')\n", - "\n", - "next(my_generator)\n", - "my_generator.next()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 2.7.6\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 11, - "text": [ - "'b'" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 3" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Python', python_version())\n", - "\n", - "my_generator = (letter for letter in 'abcdefg')\n", - "\n", - "next(my_generator)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 3.4.1\n" - ] - }, - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 13, - "text": [ - "'a'" - ] - } - ], - "prompt_number": 13 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_generator.next()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "AttributeError", - "evalue": "'generator' object has no attribute 'next'", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmy_generator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m: 'generator' object has no attribute 'next'" - ] - } - ], - "prompt_number": 14 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "For-loop variables and the global namespace leak" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to the section-overview](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Good news is: In Python 3.x for-loop variables don't leak into the global namespace anymore!\n", - "\n", - "This goes back to a change that was made in Python 3.x and is described in [What\u2019s New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html) as follows:\n", - "\n", - "\"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope.\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 2" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'Python', python_version()\n", - "\n", - "i = 1\n", - "print 'before: i =', i\n", - "\n", - "print 'comprehension: ', [i for i in range(5)]\n", - "\n", - "print 'after: i =', i" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 2.7.6\n", - "before: i = 1\n", - "comprehension: [0, 1, 2, 3, 4]\n", - "after: i = 4\n" - ] - } - ], - "prompt_number": 12 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 3" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Python', python_version())\n", - "\n", - "i = 1\n", - "print('before: i =', i)\n", - "\n", - "print('comprehension:', [i for i in range(5)])\n", - "\n", - "print('after: i =', i)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 3.4.1\n", - "before: i = 1\n", - "comprehension: [0, 1, 2, 3, 4]\n", - "after: i = 1\n" - ] - } - ], - "prompt_number": 15 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Comparing unorderable types" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to the section-overview](#Sections)]" - ] - }, + } + ], + "source": [ + "print 'Python', python_version()\n", + "\n", + "print '\\ntiming range()'\n", + "%timeit test_range(n)\n", + "\n", + "print '\\n\\ntiming xrange()'\n", + "%timeit test_xrange(n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Another nice change in Python 3 is that a `TypeError` is raised as warning if we try to compare unorderable types." + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 3.4.1\n", + "\n", + "timing range()\n", + "1000 loops, best of 3: 520 µs per loop\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 2" + } + ], + "source": [ + "print('Python', python_version())\n", + "\n", + "print('\\ntiming range()')\n", + "%timeit test_range(n)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'xrange' is not defined", + "output_type": "error", + "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[0;32m----> 1\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mNameError\u001b[0m: name 'xrange' is not defined" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'Python', python_version()\n", - "print \"[1, 2] > 'foo' = \", [1, 2] > 'foo'\n", - "print \"(1, 2) > 'foo' = \", (1, 2) > 'foo'\n", - "print \"[1, 2] > (1, 2) = \", [1, 2] > (1, 2)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 2.7.6\n", - "[1, 2] > 'foo' = False\n", - "(1, 2) > 'foo' = True\n", - "[1, 2] > (1, 2) = False\n" - ] - } - ], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " + } + ], + "source": [ + "print(xrange(10))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The `__contains__` method for `range` objects in Python 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another thing worth mentioning is that `range` got a \"new\" `__contains__` method in Python 3.x (thanks to [Yuchen Ying](https://github.com/yegle), who pointed this out). The `__contains__` method can speedup \"look-ups\" in Python 3.x `range` significantly for integer and Boolean types.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x = 10000000" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def val_in_range(x, val):\n", + " return val in range(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def val_in_xrange(x, val):\n", + " return val in xrange(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 3.4.1\n", + "1 loops, best of 3: 742 ms per loop\n", + "1000000 loops, best of 3: 1.19 µs per loop\n" ] - }, + } + ], + "source": [ + "print('Python', python_version())\n", + "assert(val_in_range(x, x/2) == True)\n", + "assert(val_in_range(x, x//2) == True)\n", + "%timeit val_in_range(x, x/2)\n", + "%timeit val_in_range(x, x//2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Based on the `timeit` results above, you see that the execution for the \"look up\" was about 60,000 faster when it was of an integer type rather than a float. However, since Python 2.x's `range` or `xrange` doesn't have a `__contains__` method, the \"look-up speed\" wouldn't be that much different for integers or floats:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 2.7.7\n", + "1 loops, best of 3: 285 ms per loop\n", + "1 loops, best of 3: 179 ms per loop\n", + "1 loops, best of 3: 658 ms per loop\n", + "1 loops, best of 3: 556 ms per loop\n" + ] + } + ], + "source": [ + "print 'Python', python_version()\n", + "assert(val_in_xrange(x, x/2.0) == True)\n", + "assert(val_in_xrange(x, x/2) == True)\n", + "assert(val_in_range(x, x/2) == True)\n", + "assert(val_in_range(x, x//2) == True)\n", + "%timeit val_in_xrange(x, x/2.0)\n", + "%timeit val_in_xrange(x, x/2)\n", + "%timeit val_in_range(x, x/2.0)\n", + "%timeit val_in_range(x, x/2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Below the \"proofs\" that the `__contain__` method wasn't added to Python 2.x yet:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 3" + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 3.4.1\n" ] }, { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Python', python_version())\n", - "print(\"[1, 2] > 'foo' = \", [1, 2] > 'foo')\n", - "print(\"(1, 2) > 'foo' = \", (1, 2) > 'foo')\n", - "print(\"[1, 2] > (1, 2) = \", [1, 2] > (1, 2))" - ], - "language": "python", + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 8, "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 3.4.1\n" - ] - }, - { - "ename": "TypeError", - "evalue": "unorderable types: list() > str()", - "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[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Python'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpython_version\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"[1, 2] > 'foo' = \"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m'foo'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"(1, 2) > 'foo' = \"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m'foo'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"[1, 2] > (1, 2) = \"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mTypeError\u001b[0m: unorderable types: list() > str()" - ] - } - ], - "prompt_number": 16 - }, + "output_type": "execute_result" + } + ], + "source": [ + "print('Python', python_version())\n", + "range.__contains__" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 2.7.7\n" ] }, { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" + "ename": "AttributeError", + "evalue": "'builtin_function_or_method' object has no attribute '__contains__'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mAttributeError\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[0;32mprint\u001b[0m \u001b[0;34m'Python'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpython_version\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mrange\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__contains__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m: 'builtin_function_or_method' object has no attribute '__contains__'" ] - }, + } + ], + "source": [ + "print 'Python', python_version()\n", + "range.__contains__" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Parsing user inputs via input()" + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 2.7.7\n" ] }, { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to the section-overview](#Sections)]" + "ename": "AttributeError", + "evalue": "type object 'xrange' has no attribute '__contains__'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mAttributeError\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[0;32mprint\u001b[0m \u001b[0;34m'Python'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpython_version\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mxrange\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__contains__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m: type object 'xrange' has no attribute '__contains__'" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Fortunately, the `input()` function was fixed in Python 3 so that it always stores the user inputs as `str` objects. In order to avoid the dangerous behavior in Python 2 to read in other types than `strings`, we have to use `raw_input()` instead." + } + ], + "source": [ + "print 'Python', python_version()\n", + "xrange.__contains__" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Note about the speed differences in Python 2 and 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Some people pointed out the speed difference between Python 3's `range()` and Python2's `xrange()`. Since they are implemented the same way one would expect the same speed. However the difference here just comes from the fact that Python 3 generally tends to run slower than Python 2. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def test_while():\n", + " i = 0\n", + " while i < 20000:\n", + " i += 1\n", + " return" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 3.4.1\n", + "100 loops, best of 3: 2.68 ms per loop\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 2" + } + ], + "source": [ + "print('Python', python_version())\n", + "%timeit test_while()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 2.7.6\n", + "1000 loops, best of 3: 1.72 ms per loop\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    Python 2.7.6 \n",
    -      "[GCC 4.0.1 (Apple Inc. build 5493)] on darwin\n",
    -      "Type "help", "copyright", "credits" or "license" for more information.\n",
    -      "\n",
    -      ">>> my_input = input('enter a number: ')\n",
    -      "\n",
    -      "enter a number: 123\n",
    -      "\n",
    -      ">>> type(my_input)\n",
    -      "<type 'int'>\n",
    -      "\n",
    -      ">>> my_input = raw_input('enter a number: ')\n",
    -      "\n",
    -      "enter a number: 123\n",
    -      "\n",
    -      ">>> type(my_input)\n",
    -      "<type 'str'>\n",
    -      "
    \n" + } + ], + "source": [ + "print 'Python', python_version()\n", + "%timeit test_while()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Raising exceptions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "Where Python 2 accepts both notations, the 'old' and the 'new' syntax, Python 3 chokes (and raises a `SyntaxError` in turn) if we don't enclose the exception argument in parentheses:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 2.7.6\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " + } + ], + "source": [ + "print 'Python', python_version()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "IOError", + "evalue": "file error", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mIOError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mIOError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"file error\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mIOError\u001b[0m: file error" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 3" + } + ], + "source": [ + "raise IOError, \"file error\"" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "IOError", + "evalue": "file error", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mIOError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mIOError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"file error\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mIOError\u001b[0m: file error" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    Python 3.4.1 \n",
    -      "[GCC 4.2.1 (Apple Inc. build 5577)] on darwin\n",
    -      "Type "help", "copyright", "credits" or "license" for more information.\n",
    -      "\n",
    -      ">>> my_input = input('enter a number: ')\n",
    -      "\n",
    -      "enter a number: 123\n",
    -      "\n",
    -      ">>> type(my_input)\n",
    -      "<class 'str'>\n",
    -      "
    \n" + } + ], + "source": [ + "raise IOError(\"file error\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 3.4.1\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " + } + ], + "source": [ + "print('Python', python_version())" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (, line 1)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m raise IOError, \"file error\"\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] - }, + } + ], + "source": [ + "raise IOError, \"file error\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The proper way to raise an exception in Python 3:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Returning iterable objects instead of lists" + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 3.4.1\n" ] }, { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to the section-overview](#Sections)]" + "ename": "OSError", + "evalue": "file error", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mOSError\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[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Python'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpython_version\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mIOError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"file error\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mOSError\u001b[0m: file error" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As we have already seen in the [`xrange`](#xrange) section, some functions and methods return iterable objects in Python 3 now - instead of lists in Python 2. \n", - "\n", - "Since we usually iterate over those only once anyway, I think this change makes a lot of sense to save memory. However, it is also possible - in contrast to generators - to iterate over those multiple times if needed, it is aonly not so efficient.\n", - "\n", - "And for those cases where we really need the `list`-objects, we can simply convert the iterable object into a `list` via the `list()` function." + } + ], + "source": [ + "print('Python', python_version())\n", + "raise IOError(\"file error\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Handling exceptions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Also the handling of exceptions has slightly changed in Python 3. In Python 3 we have to use the \"`as`\" keyword now" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 2.7.6\n", + "name 'let_us_cause_a_NameError' is not defined --> our error message\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 2" + } + ], + "source": [ + "print 'Python', python_version()\n", + "try:\n", + " let_us_cause_a_NameError\n", + "except NameError, err:\n", + " print err, '--> our error message'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 3.4.1\n", + "name 'let_us_cause_a_NameError' is not defined --> our error message\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print 'Python', python_version() \n", - "\n", - "print range(3) \n", - "print type(range(3))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 2.7.6\n", - "[0, 1, 2]\n", - "\n" - ] - } - ], - "prompt_number": 2 - }, + } + ], + "source": [ + "print('Python', python_version())\n", + "try:\n", + " let_us_cause_a_NameError\n", + "except NameError as err:\n", + " print(err, '--> our error message')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The next() function and .next() method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since `next()` (`.next()`) is such a commonly used function (method), this is another syntax change (or rather change in implementation) that is worth mentioning: where you can use both the function and method syntax in Python 2.7.5, the `next()` function is all that remains in Python 3 (calling the `.next()` method raises an `AttributeError`)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 3" + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 2.7.6\n" ] }, { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Python', python_version())\n", - "\n", - "print(range(3))\n", - "print(type(range(3)))\n", - "print(list(range(3)))" - ], - "language": "python", + "data": { + "text/plain": [ + "'b'" + ] + }, + "execution_count": 11, "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Python 3.4.1\n", - "range(0, 3)\n", - "\n", - "[0, 1, 2]\n" - ] - } - ], - "prompt_number": 7 - }, + "output_type": "execute_result" + } + ], + "source": [ + "print 'Python', python_version()\n", + "\n", + "my_generator = (letter for letter in 'abcdefg')\n", + "\n", + "next(my_generator)\n", + "my_generator.next()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    " + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 3.4.1\n" ] }, { - "cell_type": "markdown", + "data": { + "text/plain": [ + "'a'" + ] + }, + "execution_count": 13, "metadata": {}, - "source": [ - "**Some more commonly used functions and methods that don't return lists anymore in Python 3:**\n", - "\n", - "- `zip()`\n", - "\n", - "- `map()`\n", - "\n", - "- `filter()`\n", - "\n", - "- dictionary's `.keys()` method\n", - "\n", - "- dictionary's `.values()` method\n", - "\n", - "- dictionary's `.items()` method\n" + "output_type": "execute_result" + } + ], + "source": [ + "print('Python', python_version())\n", + "\n", + "my_generator = (letter for letter in 'abcdefg')\n", + "\n", + "next(my_generator)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'generator' object has no attribute 'next'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmy_generator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m: 'generator' object has no attribute 'next'" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " + } + ], + "source": [ + "my_generator.next()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## For-loop variables and the global namespace leak" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Good news is: In Python 3.x for-loop variables don't leak into the global namespace anymore!\n", + "\n", + "This goes back to a change that was made in Python 3.x and is described in [What’s New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html) as follows:\n", + "\n", + "\"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 2.7.6\n", + "before: i = 1\n", + "comprehension: [0, 1, 2, 3, 4]\n", + "after: i = 4\n" ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "More articles about Python 2 and Python 3" + } + ], + "source": [ + "print 'Python', python_version()\n", + "\n", + "i = 1\n", + "print 'before: i =', i\n", + "\n", + "print 'comprehension: ', [i for i in range(5)]\n", + "\n", + "print 'after: i =', i" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 3.4.1\n", + "before: i = 1\n", + "comprehension: [0, 1, 2, 3, 4]\n", + "after: i = 1\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to the section-overview](#Sections)]" + } + ], + "source": [ + "print('Python', python_version())\n", + "\n", + "i = 1\n", + "print('before: i =', i)\n", + "\n", + "print('comprehension:', [i for i in range(5)])\n", + "\n", + "print('after: i =', i)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Comparing unorderable types" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another nice change in Python 3 is that a `TypeError` is raised as warning if we try to compare unorderable types." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 2.7.6\n", + "[1, 2] > 'foo' = False\n", + "(1, 2) > 'foo' = True\n", + "[1, 2] > (1, 2) = False\n" ] - }, + } + ], + "source": [ + "print 'Python', python_version()\n", + "print \"[1, 2] > 'foo' = \", [1, 2] > 'foo'\n", + "print \"(1, 2) > 'foo' = \", (1, 2) > 'foo'\n", + "print \"[1, 2] > (1, 2) = \", [1, 2] > (1, 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here is a list of some good articles concerning Python 2 and 3 that I would recommend as a follow-up.\n", - "\n", - "\n", - "**// Porting to Python 3** \n", - "\n", - "- [Should I use Python 2 or Python 3 for my development activity?](https://wiki.python.org/moin/Python2orPython3)\n", - "\n", - "- [What\u2019s New In Python 3.0](https://docs.python.org/3.0/whatsnew/3.0.html)\n", - "\n", - "- [Porting to Python 3](http://python3porting.com/differences.html)\n", - "\n", - "- [Porting Python 2 Code to Python 3](https://docs.python.org/3/howto/pyporting.html) \n", - "\n", - "- [How keep Python 3 moving forward](http://nothingbutsnark.svbtle.com/my-view-on-the-current-state-of-python-3)\n", - "\n", - "**// Pro and anti Python 3**\n", - "\n", - "- [10 awesome features of Python that you can't use because you refuse to upgrade to Python 3](http://asmeurer.github.io/python3-presentation/slides.html#1)\n", - "\n", - "- [Everything you did not want to know about Unicode in Python 3](http://lucumr.pocoo.org/2014/5/12/everything-about-unicode/)\n", - "\n", - "- [Python 3 is killing Python](https://medium.com/@deliciousrobots/5d2ad703365d/)\n", - "\n", - "- [Python 3 can revive Python](https://medium.com/p/2a7af4788b10)\n", - "\n", - "- [Python 3 is fine](http://sealedabstract.com/rants/python-3-is-fine/)\n" + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 3.4.1\n" ] }, { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [] + "ename": "TypeError", + "evalue": "unorderable types: list() > str()", + "output_type": "error", + "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[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Python'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpython_version\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"[1, 2] > 'foo' = \"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m'foo'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"(1, 2) > 'foo' = \"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m'foo'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"[1, 2] > (1, 2) = \"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: unorderable types: list() > str()" + ] + } + ], + "source": [ + "print('Python', python_version())\n", + "print(\"[1, 2] > 'foo' = \", [1, 2] > 'foo')\n", + "print(\"(1, 2) > 'foo' = \", (1, 2) > 'foo')\n", + "print(\"[1, 2] > (1, 2) = \", [1, 2] > (1, 2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Parsing user inputs via input()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Fortunately, the `input()` function was fixed in Python 3 so that it always stores the user inputs as `str` objects. In order to avoid the dangerous behavior in Python 2 to read in other types than `strings`, we have to use `raw_input()` instead." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    Python 2.7.6 \n",
    +    "[GCC 4.0.1 (Apple Inc. build 5493)] on darwin\n",
    +    "Type "help", "copyright", "credits" or "license" for more information.\n",
    +    "\n",
    +    ">>> my_input = input('enter a number: ')\n",
    +    "\n",
    +    "enter a number: 123\n",
    +    "\n",
    +    ">>> type(my_input)\n",
    +    "<type 'int'>\n",
    +    "\n",
    +    ">>> my_input = raw_input('enter a number: ')\n",
    +    "\n",
    +    "enter a number: 123\n",
    +    "\n",
    +    ">>> type(my_input)\n",
    +    "<type 'str'>\n",
    +    "
    \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    Python 3.4.1 \n",
    +    "[GCC 4.2.1 (Apple Inc. build 5577)] on darwin\n",
    +    "Type "help", "copyright", "credits" or "license" for more information.\n",
    +    "\n",
    +    ">>> my_input = input('enter a number: ')\n",
    +    "\n",
    +    "enter a number: 123\n",
    +    "\n",
    +    ">>> type(my_input)\n",
    +    "<class 'str'>\n",
    +    "
    \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Returning iterable objects instead of lists" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we have already seen in the [`xrange`](#xrange) section, some functions and methods return iterable objects in Python 3 now - instead of lists in Python 2. \n", + "\n", + "Since we usually iterate over those only once anyway, I think this change makes a lot of sense to save memory. However, it is also possible - in contrast to generators - to iterate over those multiple times if needed, it is aonly not so efficient.\n", + "\n", + "And for those cases where we really need the `list`-objects, we can simply convert the iterable object into a `list` via the `list()` function." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 2.7.6\n", + "[0, 1, 2]\n", + "\n" + ] + } + ], + "source": [ + "print 'Python', python_version() \n", + "\n", + "print range(3) \n", + "print type(range(3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 3.4.1\n", + "range(0, 3)\n", + "\n", + "[0, 1, 2]\n" + ] } ], - "metadata": {} + "source": [ + "print('Python', python_version())\n", + "\n", + "print(range(3))\n", + "print(type(range(3)))\n", + "print(list(range(3)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Some more commonly used functions and methods that don't return lists anymore in Python 3:**\n", + "\n", + "- `zip()`\n", + "\n", + "- `map()`\n", + "\n", + "- `filter()`\n", + "\n", + "- dictionary's `.keys()` method\n", + "\n", + "- dictionary's `.values()` method\n", + "\n", + "- dictionary's `.items()` method\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## More articles about Python 2 and Python 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is a list of some good articles concerning Python 2 and 3 that I would recommend as a follow-up.\n", + "\n", + "\n", + "**// Porting to Python 3** \n", + "\n", + "- [Should I use Python 2 or Python 3 for my development activity?](https://wiki.python.org/moin/Python2orPython3)\n", + "\n", + "- [What’s New In Python 3.0](https://docs.python.org/3.0/whatsnew/3.0.html)\n", + "\n", + "- [Porting to Python 3](http://python3porting.com/differences.html)\n", + "\n", + "- [Porting Python 2 Code to Python 3](https://docs.python.org/3/howto/pyporting.html) \n", + "\n", + "- [How keep Python 3 moving forward](http://nothingbutsnark.svbtle.com/my-view-on-the-current-state-of-python-3)\n", + "\n", + "**// Pro and anti Python 3**\n", + "\n", + "- [10 awesome features of Python that you can't use because you refuse to upgrade to Python 3](http://asmeurer.github.io/python3-presentation/slides.html#1)\n", + "\n", + "- [Everything you did not want to know about Unicode in Python 3](http://lucumr.pocoo.org/2014/5/12/everything-about-unicode/)\n", + "\n", + "- [Python 3 is killing Python](https://medium.com/@deliciousrobots/5d2ad703365d/)\n", + "\n", + "- [Python 3 can revive Python](https://medium.com/p/2a7af4788b10)\n", + "\n", + "- [Python 3 is fine](http://sealedabstract.com/rants/python-3-is-fine/)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.0" } - ] -} \ No newline at end of file + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/tutorials/not_so_obvious_python_stuff.ipynb b/tutorials/not_so_obvious_python_stuff.ipynb index a3188b0..15569ba 100644 --- a/tutorials/not_so_obvious_python_stuff.ipynb +++ b/tutorials/not_so_obvious_python_stuff.ipynb @@ -1,4361 +1,4353 @@ { - "metadata": { - "name": "", - "signature": "sha256:5dd675ee714d0dbd00f7be378f1379f4dceaa728c56476124c1bf493d70c569e" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ + "cells": [ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[Sebastian Raschka](http://sebastianraschka.com) \n", - "\n", - "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/tutorials/not_so_obvious_python_stuff.ipynb) \n", - "- [Link to the GitHub repository](https://github.com/rasbt/python_reference) \n", - "\n" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%load_ext watermark" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 1 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%watermark -d -u -v" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Last updated: 16/07/2014 \n", - "\n", - "CPython 3.4.1\n", - "IPython 2.0.0\n" - ] - } - ], - "prompt_number": 2 - }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Sebastian Raschka](http://sebastianraschka.com) \n", + "\n", + "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/tutorials/not_so_obvious_python_stuff.ipynb) \n", + "- [Link to the GitHub repository](https://github.com/rasbt/python_reference) \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%load_ext watermark" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[More information](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/ipython_magic/watermark.ipynb) about the `watermark` magic command extension.\n", + "name": "stdout", + "output_type": "stream", + "text": [ + "Last updated: 16/07/2014 \n", "\n", - "([Changelog](#changelog))" + "CPython 3.4.1\n", + "IPython 2.0.0\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# A collection of not-so-obvious Python stuff you should know!" + } + ], + "source": [ + "%watermark -d -u -v" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[More information](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/ipython_magic/watermark.ipynb) about the `watermark` magic command extension.\n", + "\n", + "([Changelog](#changelog))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# A collection of not-so-obvious Python stuff you should know!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "I am really looking forward to your comments and suggestions to improve and \n", + "extend this little collection! Just send me a quick note \n", + "via Twitter: [@rasbt](https://twitter.com/rasbt) \n", + "or Email: [bluewoodtree@gmail.com](mailto:bluewoodtree@gmail.com)\n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Sections\n", + "- [The C3 class resolution algorithm for multiple class inheritance](#c3_class_res)\n", + "\n", + "- [Assignment operators and lists - simple-add vs. add-AND operators](#pm_in_lists)\n", + "\n", + "- [`True` and `False` in the datetime module](#datetime_module)\n", + "\n", + "- [Python reuses objects for small integers - always use \"==\" for equality, \"is\" for identity](#python_small_int)\n", + "\n", + "- [Shallow vs. deep copies if list contains other structures and objects](#shallow_vs_deep)\n", + "\n", + "- [Picking `True` values from logical `and`s and `or`s](#false_true_expressions)\n", + "\n", + "- [Don't use mutable objects as default arguments for functions!](#def_mutable_func)\n", + "\n", + "- [Be aware of the consuming generator](#consuming_generator)\n", + "\n", + "- [`bool` is a subclass of `int`](#bool_int)\n", + "\n", + "- [About lambda-in-closures and-a-loop pitfall](#lambda_closure)\n", + "\n", + "- [Python's LEGB scope resolution and the keywords `global` and `nonlocal`](#python_legb)\n", + "\n", + "- [When mutable contents of immutable tuples aren't so mutable](#immutable_tuple)\n", + "\n", + "- [List comprehensions are fast, but generators are faster!?](#list_generator)\n", + "\n", + "- [Public vs. private class methods and name mangling](#private_class)\n", + "\n", + "- [The consequences of modifying a list when looping through it](#looping_pitfall)\n", + "\n", + "- [Dynamic binding and typos in variable names](#dynamic_binding)\n", + "\n", + "- [List slicing using indexes that are \"out of range](#out_of_range_slicing)\n", + "\n", + "- [Reusing global variable names and UnboundLocalErrors](#unboundlocalerror)\n", + "\n", + "- [Creating copies of mutable objects](#copy_mutable)\n", + "\n", + "- [Key differences between Python 2 and 3](#python_differences)\n", + "\n", + "- [Function annotations - What are those `->`'s in my Python code?](#function_annotation)\n", + "\n", + "- [Abortive statements in `finally` blocks](#finally_blocks)\n", + "\n", + "- [Assigning types to variables as values](#variable_types)\n", + "\n", + "- [Only the first clause of generators is evaluated immediately](#generator_rhs)\n", + "\n", + "- [Keyword argument unpacking syntax - `*args` and `**kwargs`](#splat_op)\n", + "\n", + "- [Metaclasses - What creates a new instance of a class?](#new_instance)\n", + "\n", + "- [Else-clauses: \"conditional else\" and \"completion else\"](#else_clauses)\n", + "\n", + "- [Interning of compile-time constants vs. run-time expressions](#string_interning)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The C3 class resolution algorithm for multiple class inheritance" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we are dealing with multiple inheritance, according to the newer C3 class resolution algorithm, the following applies: \n", + "Assuming that child class C inherits from two parent classes A and B, \"class A should be checked before class B\".\n", + "\n", + "If you want to learn more, please read the [original blog](http://python-history.blogspot.ru/2010/06/method-resolution-order.html) post by Guido van Rossum.\n", + "\n", + "(Original source: [http://gistroll.com/rolls/21/horizontal_assessments/new](http://gistroll.com/rolls/21/horizontal_assessments/new))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "class A\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "I am really looking forward to your comments and suggestions to improve and \n", - "extend this little collection! Just send me a quick note \n", - "via Twitter: [@rasbt](https://twitter.com/rasbt) \n", - "or Email: [bluewoodtree@gmail.com](mailto:bluewoodtree@gmail.com)\n", - "
    " + } + ], + "source": [ + "class A(object):\n", + " def foo(self):\n", + " print(\"class A\")\n", + "\n", + "class B(object):\n", + " def foo(self):\n", + " print(\"class B\")\n", + "\n", + "class C(A, B):\n", + " pass\n", + "\n", + "C().foo()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So what actually happened above was that class `C` looked in the scope of the parent class `A` for the method `.foo()` first (and found it)!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I received an email containing a suggestion which uses a more nested example to illustrate Guido van Rossum's point a little bit better:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "class C\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" + } + ], + "source": [ + "class A(object):\n", + " def foo(self):\n", + " print(\"class A\")\n", + "\n", + "class B(A):\n", + " pass\n", + "\n", + "class C(A):\n", + " def foo(self):\n", + " print(\"class C\")\n", + "\n", + "class D(B,C):\n", + " pass\n", + "\n", + "D().foo()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, class `D` searches in `B` first, which in turn inherits from `A` (note that class `C` also inherits from `A`, but has its own `.foo()` method) so that we come up with the search order: `D, B, C, A`. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Assignment operators and lists - simple-add vs. add-AND operators" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python `list`s are mutable objects as we all know. So, if we are using the `+=` operator on `list`s, we extend the `list` by directly modifying the object directly. \n", + "\n", + "However, if we use the assigment via `my_list = my_list + ...`, we create a new list object, which can be demonstrated by the following code:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ID: 4366496544\n", + "ID (+=): 4366496544\n", + "ID (list = list + ...): 4366495472\n" ] - }, + } + ], + "source": [ + "a_list = []\n", + "print('ID:', id(a_list))\n", + "\n", + "a_list += [1]\n", + "print('ID (+=):', id(a_list))\n", + "\n", + "a_list = a_list + [2]\n", + "print('ID (list = list + ...):', id(a_list))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Just for reference, the `.append()` and `.extends()` methods are modifying the `list` object in place, just as expected." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Sections\n", - "- [The C3 class resolution algorithm for multiple class inheritance](#c3_class_res)\n", - "\n", - "- [Assignment operators and lists - simple-add vs. add-AND operators](#pm_in_lists)\n", - "\n", - "- [`True` and `False` in the datetime module](#datetime_module)\n", - "\n", - "- [Python reuses objects for small integers - always use \"==\" for equality, \"is\" for identity](#python_small_int)\n", + "name": "stdout", + "output_type": "stream", + "text": [ + "[] \n", + "ID (initial): 140704077653128 \n", "\n", - "- [Shallow vs. deep copies if list contains other structures and objects](#shallow_vs_deep)\n", + "[1] \n", + "ID (append): 140704077653128 \n", "\n", - "- [Picking `True` values from logical `and`s and `or`s](#false_true_expressions)\n", - "\n", - "- [Don't use mutable objects as default arguments for functions!](#def_mutable_func)\n", - "\n", - "- [Be aware of the consuming generator](#consuming_generator)\n", - "\n", - "- [`bool` is a subclass of `int`](#bool_int)\n", - "\n", - "- [About lambda-in-closures and-a-loop pitfall](#lambda_closure)\n", - "\n", - "- [Python's LEGB scope resolution and the keywords `global` and `nonlocal`](#python_legb)\n", - "\n", - "- [When mutable contents of immutable tuples aren't so mutable](#immutable_tuple)\n", - "\n", - "- [List comprehensions are fast, but generators are faster!?](#list_generator)\n", - "\n", - "- [Public vs. private class methods and name mangling](#private_class)\n", - "\n", - "- [The consequences of modifying a list when looping through it](#looping_pitfall)\n", - "\n", - "- [Dynamic binding and typos in variable names](#dynamic_binding)\n", - "\n", - "- [List slicing using indexes that are \"out of range](#out_of_range_slicing)\n", - "\n", - "- [Reusing global variable names and UnboundLocalErrors](#unboundlocalerror)\n", - "\n", - "- [Creating copies of mutable objects](#copy_mutable)\n", - "\n", - "- [Key differences between Python 2 and 3](#python_differences)\n", - "\n", - "- [Function annotations - What are those `->`'s in my Python code?](#function_annotation)\n", - "\n", - "- [Abortive statements in `finally` blocks](#finally_blocks)\n", - "\n", - "- [Assigning types to variables as values](#variable_types)\n", - "\n", - "- [Only the first clause of generators is evaluated immediately](#generator_rhs)\n", - "\n", - "- [Keyword argument unpacking syntax - `*args` and `**kwargs`](#splat_op)\n", - "\n", - "- [Metaclasses - What creates a new instance of a class?](#new_instance)\n", - "\n", - "- [Else-clauses: \"conditional else\" and \"completion else\"](#else_clauses)\n", - "\n", - "- [Interning of compile-time constants vs. run-time expressions](#string_interning)" + "[1, 2] \n", + "ID (extend): 140704077653128\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " + } + ], + "source": [ + "a_list = []\n", + "print(a_list, '\\nID (initial):',id(a_list), '\\n')\n", + "\n", + "a_list.append(1)\n", + "print(a_list, '\\nID (append):',id(a_list), '\\n')\n", + "\n", + "a_list.extend([2])\n", + "print(a_list, '\\nID (extend):',id(a_list))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## `True` and `False` in the datetime module\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\"It often comes as a big surprise for programmers to find (sometimes by way of a hard-to-reproduce bug) that, unlike any other time value, midnight (i.e. `datetime.time(0,0,0)`) is False. A long discussion on the python-ideas mailing list shows that, while surprising, that behavior is desirable—at least in some quarters.\" \n", + "\n", + "(Original source: [http://lwn.net/SubscriberLink/590299/bf73fe823974acea/](http://lwn.net/SubscriberLink/590299/bf73fe823974acea/))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\"datetime.time(0,0,0)\" (Midnight) -> False\n", + "\"datetime.time(1,0,0)\" (1 am) -> True\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## The C3 class resolution algorithm for multiple class inheritance" + } + ], + "source": [ + "import datetime\n", + "\n", + "print('\"datetime.time(0,0,0)\" (Midnight) ->', bool(datetime.time(0,0,0)))\n", + "\n", + "print('\"datetime.time(1,0,0)\" (1 am) ->', bool(datetime.time(1,0,0)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Python reuses objects for small integers - use \"==\" for equality, \"is\" for identity\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This oddity occurs, because Python keeps an array of small integer objects (i.e., integers between -5 and 256, [see the doc](https://docs.python.org/2/c-api/int.html#PyInt_FromLong))." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a is b True\n", + "c is d False\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" + } + ], + "source": [ + "a = 1\n", + "b = 1\n", + "print('a is b', bool(a is b))\n", + "True\n", + "\n", + "c = 999\n", + "d = 999\n", + "print('c is d', bool(c is d))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(*I received a comment that this is in fact a CPython artefact and **must not necessarily be true** in all implementations of Python!*)\n", + "\n", + "So the take home message is: always use \"==\" for equality, \"is\" for identity!\n", + "\n", + "Here is a [nice article](http://python.net/%7Egoodger/projects/pycon/2007/idiomatic/handout.html#other-languages-have-variables) explaining it by comparing \"boxes\" (C language) with \"name tags\" (Python)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This example demonstrates that this applies indeed for integers in the range in -5 to 256:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "256 is 257-1 True\n", + "257 is 258-1 False\n", + "-5 is -6+1 True\n", + "-7 is -6-1 False\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we are dealing with multiple inheritance, according to the newer C3 class resolution algorithm, the following applies: \n", - "Assuming that child class C inherits from two parent classes A and B, \"class A should be checked before class B\".\n", - "\n", - "If you want to learn more, please read the [original blog](http://python-history.blogspot.ru/2010/06/method-resolution-order.html) post by Guido van Rossum.\n", - "\n", - "(Original source: [http://gistroll.com/rolls/21/horizontal_assessments/new](http://gistroll.com/rolls/21/horizontal_assessments/new))" + } + ], + "source": [ + "print('256 is 257-1', 256 is 257-1)\n", + "print('257 is 258-1', 257 is 258 - 1)\n", + "print('-5 is -6+1', -5 is -6+1)\n", + "print('-7 is -6-1', -7 is -6-1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### And to illustrate the test for equality (`==`) vs. identity (`is`):" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a is b, False\n", + "a == b, True\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "class A(object):\n", - " def foo(self):\n", - " print(\"class A\")\n", - "\n", - "class B(object):\n", - " def foo(self):\n", - " print(\"class B\")\n", - "\n", - "class C(A, B):\n", - " pass\n", - "\n", - "C().foo()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "class A\n" - ] - } - ], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "So what actually happened above was that class `C` looked in the scope of the parent class `A` for the method `.foo()` first (and found it)!" + } + ], + "source": [ + "a = 'hello world!'\n", + "b = 'hello world!'\n", + "print('a is b,', a is b)\n", + "print('a == b,', a == b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We would think that identity would always imply equality, but this is not always true, as we can see in the next example:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a is a, True\n", + "a == a, False\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "I received an email containing a suggestion which uses a more nested example to illustrate Guido van Rossum's point a little bit better:" + } + ], + "source": [ + "a = float('nan')\n", + "print('a is a,', a is a)\n", + "print('a == a,', a == a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Shallow vs. deep copies if list contains other structures and objects\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Shallow copy**: \n", + "If we use the assignment operator to assign one list to another list, we just create a new name reference to the original list. If we want to create a new list object, we have to make a copy of the original list. This can be done via `a_list[:]` or `a_list.copy()`." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "IDs:\n", + "list1: 4346366472\n", + "list2: 4346366472\n", + "list3: 4346366408\n", + "list4: 4346366536\n", + "\n", + "list1: [3, 2]\n", + "list1: [3, 2]\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "class A(object):\n", - " def foo(self):\n", - " print(\"class A\")\n", - "\n", - "class B(A):\n", - " pass\n", - "\n", - "class C(A):\n", - " def foo(self):\n", - " print(\"class C\")\n", - "\n", - "class D(B,C):\n", - " pass\n", - "\n", - "D().foo()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "class C\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here, class `D` searches in `B` first, which in turn inherits from `A` (note that class `C` also inherits from `A`, but has its own `.foo()` method) so that we come up with the search order: `D, B, C, A`. " + } + ], + "source": [ + "list1 = [1,2]\n", + "list2 = list1 # reference\n", + "list3 = list1[:] # shallow copy\n", + "list4 = list1.copy() # shallow copy\n", + "\n", + "print('IDs:\\nlist1: {}\\nlist2: {}\\nlist3: {}\\nlist4: {}\\n'\n", + " .format(id(list1), id(list2), id(list3), id(list4)))\n", + "\n", + "list2[0] = 3\n", + "print('list1:', list1)\n", + "\n", + "list3[0] = 4\n", + "list4[1] = 4\n", + "print('list1:', list1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Deep copy** \n", + "As we have seen above, a shallow copy works fine if we want to create a new list with contents of the original list which we want to modify independently. \n", + "\n", + "However, if we are dealing with compound objects (e.g., lists that contain other lists, [read here](https://docs.python.org/2/library/copy.html) for more information) it becomes a little trickier.\n", + "\n", + "In the case of compound objects, a shallow copy would create a new compound object, but it would just insert the references to the contained objects into the new compound object. In contrast, a deep copy would go \"deeper\" and create also new objects \n", + "for the objects found in the original compound object. \n", + "If you follow the code, the concept should become more clear:" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "IDs:\n", + "list1: 4377956296\n", + "list2: 4377961752\n", + "list3: 4377954928\n", + "\n", + "list1: [[3], [2]]\n", + "list1: [[3], [2]]\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " + } + ], + "source": [ + "from copy import deepcopy\n", + "\n", + "list1 = [[1],[2]]\n", + "list2 = list1.copy() # shallow copy\n", + "list3 = deepcopy(list1) # deep copy\n", + "\n", + "print('IDs:\\nlist1: {}\\nlist2: {}\\nlist3: {}\\n'\n", + " .format(id(list1), id(list2), id(list3)))\n", + "\n", + "list2[0][0] = 3\n", + "print('list1:', list1)\n", + "\n", + "list3[0][0] = 5\n", + "print('list1:', list1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Picking `True` values from logical `and`s and `or`s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Logical `or`:** \n", + "\n", + "`a or b == a if a else b` \n", + "- If both values in `or` expressions are `True`, Python will select the first value (e.g., select `\"a\"` in `\"a\" or \"b\"`), and the second one in `and` expressions. \n", + "This is also called **short-circuiting** - we already know that the logical `or` must be `True` if the first value is `True` and therefore can omit the evaluation of the second value.\n", + "\n", + "**Logical `and`:** \n", + "\n", + "`a and b == b if a else a` \n", + "- If both values in `and` expressions are `True`, Python will select the second value, since for a logical `and`, both values must be true.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2 * 7 = 14\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Assignment operators and lists - simple-add vs. add-AND operators" + } + ], + "source": [ + "result = (2 or 3) * (5 and 7)\n", + "print('2 * 7 =', result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Don't use mutable objects as default arguments for functions!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Don't use mutable objects (e.g., dictionaries, lists, sets, etc.) as default arguments for functions! You might expect that a new list is created every time when we call the function without providing an argument for the default parameter, but this is not the case: **Python will create the mutable object (default parameter) the first time the function is defined - not when it is called**, see the following code:\n", + "\n", + "(Original source: [http://docs.python-guide.org/en/latest/writing/gotchas/](http://docs.python-guide.org/en/latest/writing/gotchas/)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1]\n", + "[1, 2]\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" + } + ], + "source": [ + "def append_to_list(value, def_list=[]):\n", + " def_list.append(value)\n", + " return def_list\n", + "\n", + "my_list = append_to_list(1)\n", + "print(my_list)\n", + "\n", + "my_other_list = append_to_list(2)\n", + "print(my_other_list)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another good example showing that demonstrates that default arguments are created when the function is created (**and not when it is called!**):" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1397764090.456688\n", + "1397764090.456688\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Python `list`s are mutable objects as we all know. So, if we are using the `+=` operator on `list`s, we extend the `list` by directly modifying the object directly. \n", - "\n", - "However, if we use the assigment via `my_list = my_list + ...`, we create a new list object, which can be demonstrated by the following code:" + } + ], + "source": [ + "import time\n", + "def report_arg(my_default=time.time()):\n", + " print(my_default)\n", + "\n", + "report_arg()\n", + "\n", + "time.sleep(5)\n", + "\n", + "report_arg()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Be aware of the consuming generator" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Be aware of what is happening when combining \"`in`\" checks with generators, since they won't evaluate from the beginning once a position is \"consumed\"." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2 in gen, True\n", + "3 in gen, True\n", + "1 in gen, False\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_list = []\n", - "print('ID:', id(a_list))\n", - "\n", - "a_list += [1]\n", - "print('ID (+=):', id(a_list))\n", - "\n", - "a_list = a_list + [2]\n", - "print('ID (list = list + ...):', id(a_list))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "ID: 4366496544\n", - "ID (+=): 4366496544\n", - "ID (list = list + ...): 4366495472\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Just for reference, the `.append()` and `.extends()` methods are modifying the `list` object in place, just as expected." + } + ], + "source": [ + "gen = (i for i in range(5))\n", + "print('2 in gen,', 2 in gen)\n", + "print('3 in gen,', 3 in gen)\n", + "print('1 in gen,', 1 in gen) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Although this defeats the purpose of an generator (in most cases), we can convert a generator into a list to circumvent the problem. " + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2 in l, True\n", + "3 in l, True\n", + "1 in l, True\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_list = []\n", - "print(a_list, '\\nID (initial):',id(a_list), '\\n')\n", - "\n", - "a_list.append(1)\n", - "print(a_list, '\\nID (append):',id(a_list), '\\n')\n", - "\n", - "a_list.extend([2])\n", - "print(a_list, '\\nID (extend):',id(a_list))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[] \n", - "ID (initial): 140704077653128 \n", - "\n", - "[1] \n", - "ID (append): 140704077653128 \n", - "\n", - "[1, 2] \n", - "ID (extend): 140704077653128\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" + } + ], + "source": [ + "gen = (i for i in range(5))\n", + "a_list = list(gen)\n", + "print('2 in l,', 2 in a_list)\n", + "print('3 in l,', 3 in a_list)\n", + "print('1 in l,', 1 in a_list) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## `bool` is a subclass of `int`\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Chicken or egg? In the history of Python (Python 2.2 to be specific) truth values were implemented via 1 and 0 (similar to the old C). In order to avoid syntax errors in old (but perfectly working) Python code, `bool` was added as a subclass of `int` in Python 2.3.\n", + "\n", + "Original source: [http://www.peterbe.com/plog/bool-is-int](http://www.peterbe.com/plog/bool-is-int)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "isinstance(True, int): True\n", + "True + True: 2\n", + "3*True + True: 4\n", + "3*True - False: 3\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## `True` and `False` in the datetime module\n", - "\n" + } + ], + "source": [ + "print('isinstance(True, int):', isinstance(True, int))\n", + "print('True + True:', True + True)\n", + "print('3*True + True:', 3*True + True)\n", + "print('3*True - False:', 3*True - False)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## About lambda-in-closures-and-a-loop pitfall" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Remember the section about the [\"consuming generators\"](consuming_generators)? This example is somewhat related, but the result might still come unexpected. \n", + "\n", + "(Original source: [http://openhome.cc/eGossip/Blog/UnderstandingLambdaClosure3.html](http://openhome.cc/eGossip/Blog/UnderstandingLambdaClosure3.html))\n", + "\n", + "In the first example below, we call a `lambda` function in a list comprehension, and the value `i` will be dereferenced every time we call `lambda` within the scope of the list comprehension. Since the list comprehension has already been constructed and evaluated when we for-loop through the list, the closure-variable will be set to the last value 4." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4\n", + "4\n", + "4\n", + "4\n", + "4\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\"It often comes as a big surprise for programmers to find (sometimes by way of a hard-to-reproduce bug) that, unlike any other time value, midnight (i.e. `datetime.time(0,0,0)`) is False. A long discussion on the python-ideas mailing list shows that, while surprising, that behavior is desirable\u2014at least in some quarters.\" \n", - "\n", - "(Original source: [http://lwn.net/SubscriberLink/590299/bf73fe823974acea/](http://lwn.net/SubscriberLink/590299/bf73fe823974acea/))" + } + ], + "source": [ + "my_list = [lambda: i for i in range(5)]\n", + "for l in my_list:\n", + " print(l())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, by using a generator expression, we can make use of its stepwise evaluation (note that the returned variable still stems from the same closure, but the value changes as we iterate over the generator)." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "1\n", + "2\n", + "3\n", + "4\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" + } + ], + "source": [ + "my_gen = (lambda: n for n in range(5))\n", + "for l in my_gen:\n", + " print(l())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And if you are really keen on using lists, there is a nifty trick that circumvents this problem as a reader nicely pointed out in the comments: We can simply pass the loop variable `i` as a default argument to the lambdas." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "1\n", + "2\n", + "3\n", + "4\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import datetime\n", - "\n", - "print('\"datetime.time(0,0,0)\" (Midnight) ->', bool(datetime.time(0,0,0)))\n", - "\n", - "print('\"datetime.time(1,0,0)\" (1 am) ->', bool(datetime.time(1,0,0)))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\"datetime.time(0,0,0)\" (Midnight) -> False\n", - "\"datetime.time(1,0,0)\" (1 am) -> True\n" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" + } + ], + "source": [ + "my_list = [lambda x=i: x for i in range(5)]\n", + "for l in my_list:\n", + " print(l())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Python's LEGB scope resolution and the keywords `global` and `nonlocal`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There is nothing particularly surprising about Python's LEGB scope resolution (Local -> Enclosed -> Global -> Built-in), but it is still useful to take a look at some examples!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `global` vs. `local`\n", + "\n", + "According to the LEGB rule, Python will first look for a variable in the local scope. So if we set the variable `x = 1` `local`ly in the function's scope, it won't have an effect on the `global` `x`." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "in_func: 1\n", + "global: 0\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## Python reuses objects for small integers - use \"==\" for equality, \"is\" for identity\n", - "\n" + } + ], + "source": [ + "x = 0\n", + "def in_func():\n", + " x = 1\n", + " print('in_func:', x)\n", + " \n", + "in_func()\n", + "print('global:', x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we want to modify the `global` x via a function, we can simply use the `global` keyword to import the variable into the function's scope:" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "in_func: 1\n", + "global: 1\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" + } + ], + "source": [ + "x = 0\n", + "def in_func():\n", + " global x\n", + " x = 1\n", + " print('in_func:', x)\n", + " \n", + "in_func()\n", + "print('global:', x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### `local` vs. `enclosed`\n", + "\n", + "Now, let us take a look at `local` vs. `enclosed`. Here, we set the variable `x = 1` in the `outer` function and set `x = 1` in the enclosed function `inner`. Since `inner` looks in the local scope first, it won't modify `outer`'s `x`." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "outer before: 1\n", + "inner: 2\n", + "outer after: 1\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This oddity occurs, because Python keeps an array of small integer objects (i.e., integers between -5 and 256, [see the doc](https://docs.python.org/2/c-api/int.html#PyInt_FromLong))." + } + ], + "source": [ + "def outer():\n", + " x = 1\n", + " print('outer before:', x)\n", + " def inner():\n", + " x = 2\n", + " print(\"inner:\", x)\n", + " inner()\n", + " print(\"outer after:\", x)\n", + "outer()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is where the `nonlocal` keyword comes in handy - it allows us to modify the `x` variable in the `enclosed` scope:" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "outer before: 1\n", + "inner: 2\n", + "outer after: 2\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a = 1\n", - "b = 1\n", - "print('a is b', bool(a is b))\n", - "True\n", - "\n", - "c = 999\n", - "d = 999\n", - "print('c is d', bool(c is d))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "a is b True\n", - "c is d False\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "(*I received a comment that this is in fact a CPython artefact and **must not necessarily be true** in all implementations of Python!*)\n", - "\n", - "So the take home message is: always use \"==\" for equality, \"is\" for identity!\n", - "\n", - "Here is a [nice article](http://python.net/%7Egoodger/projects/pycon/2007/idiomatic/handout.html#other-languages-have-variables) explaining it by comparing \"boxes\" (C language) with \"name tags\" (Python)." + } + ], + "source": [ + "def outer():\n", + " x = 1\n", + " print('outer before:', x)\n", + " def inner():\n", + " nonlocal x\n", + " x = 2\n", + " print(\"inner:\", x)\n", + " inner()\n", + " print(\"outer after:\", x)\n", + "outer()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## When mutable contents of immutable tuples aren't so mutable" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we all know, tuples are immutable objects in Python, right!? But what happens if they contain mutable objects? \n", + "\n", + "First, let us have a look at the expected behavior: a `TypeError` is raised if we try to modify immutable types in a tuple: " + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'tuple' object does not support item assignment", + "output_type": "error", + "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[0mtup\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mtup\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" ] - }, + } + ], + "source": [ + "tup = (1,)\n", + "tup[0] += 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### But what if we put a mutable object into the immutable tuple? Well, modification works, but we **also** get a `TypeError` at the same time." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This example demonstrates that this applies indeed for integers in the range in -5 to 256:" + "name": "stdout", + "output_type": "stream", + "text": [ + "tup before: ([],)\n" ] }, { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('256 is 257-1', 256 is 257-1)\n", - "print('257 is 258-1', 257 is 258 - 1)\n", - "print('-5 is -6+1', -5 is -6+1)\n", - "print('-7 is -6-1', -7 is -6-1)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "256 is 257-1 True\n", - "257 is 258-1 False\n", - "-5 is -6+1 True\n", - "-7 is -6-1 False\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### And to illustrate the test for equality (`==`) vs. identity (`is`):" + "ename": "TypeError", + "evalue": "'tuple' object does not support item assignment", + "output_type": "error", + "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[0mtup\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'tup before: '\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtup\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mtup\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+=\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[0m", + "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a = 'hello world!'\n", - "b = 'hello world!'\n", - "print('a is b,', a is b)\n", - "print('a == b,', a == b)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "a is b, False\n", - "a == b, True\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We would think that identity would always imply equality, but this is not always true, as we can see in the next example:" + } + ], + "source": [ + "tup = ([],)\n", + "print('tup before: ', tup)\n", + "tup[0] += [1]" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tup after: ([1],)\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a = float('nan')\n", - "print('a is a,', a is a)\n", - "print('a == a,', a == a)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "a is a, True\n", - "a == a, False\n" - ] - } - ], - "prompt_number": 12 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" + } + ], + "source": [ + "print('tup after: ', tup)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "However, **there are ways** to modify the mutable contents of the tuple without raising the `TypeError`, the solution is the `.extend()` method, or alternatively `.append()` (for lists):" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tup before: ([],)\n", + "tup after: ([1],)\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Shallow vs. deep copies if list contains other structures and objects\n", - "\n" + } + ], + "source": [ + "tup = ([],)\n", + "print('tup before: ', tup)\n", + "tup[0].extend([1])\n", + "print('tup after: ', tup)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tup before: ([],)\n", + "tup after: ([1],)\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" + } + ], + "source": [ + "tup = ([],)\n", + "print('tup before: ', tup)\n", + "tup[0].append(1)\n", + "print('tup after: ', tup)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Explanation\n", + "\n", + "**A. Jesse Jiryu Davis** has a nice explanation for this phenomenon (Original source: [http://emptysqua.re/blog/python-increment-is-weird-part-ii/](http://emptysqua.re/blog/python-increment-is-weird-part-ii/))\n", + "\n", + "If we try to extend the list via `+=` *\"then the statement executes `STORE_SUBSCR`, which calls the C function `PyObject_SetItem`, which checks if the object supports item assignment. In our case the object is a tuple, so `PyObject_SetItem` throws the `TypeError`. Mystery solved.\"*" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### One more note about the `immutable` status of tuples. Tuples are famous for being immutable. However, how comes that this code works?" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1, 4, 5)\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Shallow copy**: \n", - "If we use the assignment operator to assign one list to another list, we just create a new name reference to the original list. If we want to create a new list object, we have to make a copy of the original list. This can be done via `a_list[:]` or `a_list.copy()`." + } + ], + "source": [ + "my_tup = (1,)\n", + "my_tup += (4,)\n", + "my_tup = my_tup + (5,)\n", + "print(my_tup)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What happens \"behind\" the curtains is that the tuple is not modified, but every time a new object is generated, which will inherit the old \"name tag\":" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4337381840\n", + "4357415496\n", + "4357289952\n" ] - }, + } + ], + "source": [ + "my_tup = (1,)\n", + "print(id(my_tup))\n", + "my_tup += (4,)\n", + "print(id(my_tup))\n", + "my_tup = my_tup + (5,)\n", + "print(id(my_tup))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## List comprehensions are fast, but generators are faster!?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\"List comprehensions are fast, but generators are faster!?\" - No, not really (or significantly, see the benchmarks below). So what's the reason to prefer one over the other?\n", + "- use lists if you want to use the plethora of list methods \n", + "- use generators when you are dealing with huge collections to avoid memory issues" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import timeit\n", + "\n", + "def plainlist(n=100000):\n", + " my_list = []\n", + " for i in range(n):\n", + " if i % 5 == 0:\n", + " my_list.append(i)\n", + " return my_list\n", + "\n", + "def listcompr(n=100000):\n", + " my_list = [i for i in range(n) if i % 5 == 0]\n", + " return my_list\n", + "\n", + "def generator(n=100000):\n", + " my_gen = (i for i in range(n) if i % 5 == 0)\n", + " return my_gen\n", + "\n", + "def generator_yield(n=100000):\n", + " for i in range(n):\n", + " if i % 5 == 0:\n", + " yield i" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### To be fair to the list, let us exhaust the generators:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "code", - "collapsed": false, - "input": [ - "list1 = [1,2]\n", - "list2 = list1 # reference\n", - "list3 = list1[:] # shallow copy\n", - "list4 = list1.copy() # shallow copy\n", + "name": "stdout", + "output_type": "stream", + "text": [ + "plain_list: 10 loops, best of 3: 22.4 ms per loop\n", "\n", - "print('IDs:\\nlist1: {}\\nlist2: {}\\nlist3: {}\\nlist4: {}\\n'\n", - " .format(id(list1), id(list2), id(list3), id(list4)))\n", + "listcompr: 10 loops, best of 3: 20.8 ms per loop\n", "\n", - "list2[0] = 3\n", - "print('list1:', list1)\n", + "generator: 10 loops, best of 3: 22 ms per loop\n", "\n", - "list3[0] = 4\n", - "list4[1] = 4\n", - "print('list1:', list1)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "IDs:\n", - "list1: 4346366472\n", - "list2: 4346366472\n", - "list3: 4346366408\n", - "list4: 4346366536\n", - "\n", - "list1: [3, 2]\n", - "list1: [3, 2]\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Deep copy** \n", - "As we have seen above, a shallow copy works fine if we want to create a new list with contents of the original list which we want to modify independently. \n", - "\n", - "However, if we are dealing with compound objects (e.g., lists that contain other lists, [read here](https://docs.python.org/2/library/copy.html) for more information) it becomes a little trickier.\n", - "\n", - "In the case of compound objects, a shallow copy would create a new compound object, but it would just insert the references to the contained objects into the new compound object. In contrast, a deep copy would go \"deeper\" and create also new objects \n", - "for the objects found in the original compound object. \n", - "If you follow the code, the concept should become more clear:" + "generator_yield: 10 loops, best of 3: 21.9 ms per loop\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from copy import deepcopy\n", - "\n", - "list1 = [[1],[2]]\n", - "list2 = list1.copy() # shallow copy\n", - "list3 = deepcopy(list1) # deep copy\n", - "\n", - "print('IDs:\\nlist1: {}\\nlist2: {}\\nlist3: {}\\n'\n", - " .format(id(list1), id(list2), id(list3)))\n", - "\n", - "list2[0][0] = 3\n", - "print('list1:', list1)\n", - "\n", - "list3[0][0] = 5\n", - "print('list1:', list1)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "IDs:\n", - "list1: 4377956296\n", - "list2: 4377961752\n", - "list3: 4377954928\n", - "\n", - "list1: [[3], [2]]\n", - "list1: [[3], [2]]\n" - ] - } - ], - "prompt_number": 25 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" + } + ], + "source": [ + "def test_plainlist(plain_list):\n", + " for i in plain_list():\n", + " pass\n", + "\n", + "def test_listcompr(listcompr):\n", + " for i in listcompr():\n", + " pass\n", + "\n", + "def test_generator(generator):\n", + " for i in generator():\n", + " pass\n", + "\n", + "def test_generator_yield(generator_yield):\n", + " for i in generator_yield():\n", + " pass\n", + "\n", + "print('plain_list: ', end = '')\n", + "%timeit test_plainlist(plainlist)\n", + "print('\\nlistcompr: ', end = '')\n", + "%timeit test_listcompr(listcompr)\n", + "print('\\ngenerator: ', end = '')\n", + "%timeit test_generator(generator)\n", + "print('\\ngenerator_yield: ', end = '')\n", + "%timeit test_generator_yield(generator_yield)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Public vs. private class methods and name mangling\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Who has not stumbled across this quote \"we are all consenting adults here\" in the Python community, yet? Unlike in other languages like C++ (sorry, there are many more, but that's one I am most familiar with), we can't really protect class methods from being used outside the class (i.e., by the API user). \n", + "All we can do is to indicate methods as private to make clear that they are better not used outside the class, but it is really up to the class user, since \"we are all consenting adults here\"! \n", + "So, when we want to mark a class method as private, we can put a single underscore in front of it. \n", + "If we additionally want to avoid name clashes with other classes that might use the same method names, we can prefix the name with a double-underscore to invoke the name mangling.\n", + "\n", + "This doesn't prevent the class user to access this class member though, but he has to know the trick and also knows that it his own risk...\n", + "\n", + "Let the following example illustrate what I mean:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello public world!\n", + "Hello private world!\n", + "Hello private world!\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Picking `True` values from logical `and`s and `or`s" + } + ], + "source": [ + "class my_class():\n", + " def public_method(self):\n", + " print('Hello public world!')\n", + " def __private_method(self):\n", + " print('Hello private world!')\n", + " def call_private_method_in_class(self):\n", + " self.__private_method()\n", + " \n", + "my_instance = my_class()\n", + "\n", + "my_instance.public_method()\n", + "my_instance._my_class__private_method()\n", + "my_instance.call_private_method_in_class()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The consequences of modifying a list when looping through it" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It can be really dangerous to modify a list when iterating through it - this is a very common pitfall that can cause unintended behavior! \n", + "Look at the following examples, and for a fun exercise: try to figure out what is going on before you skip to the solution!" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 3, 5]\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" + } + ], + "source": [ + "a = [1, 2, 3, 4, 5]\n", + "for i in a:\n", + " if not i % 2:\n", + " a.remove(i)\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[4, 5]\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Logical `or`:** \n", - "\n", - "`a or b == a if a else b` \n", - "- If both values in `or` expressions are `True`, Python will select the first value (e.g., select `\"a\"` in `\"a\" or \"b\"`), and the second one in `and` expressions. \n", - "This is also called **short-circuiting** - we already know that the logical `or` must be `True` if the first value is `True` and therefore can omit the evaluation of the second value.\n", - "\n", - "**Logical `and`:** \n", + } + ], + "source": [ + "b = [2, 4, 5, 6]\n", + "for i in b:\n", + " if not i % 2:\n", + " b.remove(i)\n", + "print(b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "**The solution** is that we are iterating through the list index by index, and if we remove one of the items in-between, we inevitably mess around with the indexing, look at the following example, and it will become clear:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 2\n", + "1 5\n", + "2 6\n", + "[4, 5]\n" + ] + } + ], + "source": [ + "b = [2, 4, 5, 6]\n", + "for index, item in enumerate(b):\n", + " print(index, item)\n", + " if not item % 2:\n", + " b.remove(item)\n", + "print(b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dynamic binding and typos in variable names\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Be careful, dynamic binding is convenient, but can also quickly become dangerous!" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "first list:\n", + "0\n", + "1\n", + "2\n", "\n", - "`a and b == b if a else a` \n", - "- If both values in `and` expressions are `True`, Python will select the second value, since for a logical `and`, both values must be true.\n" + "second list:\n", + "2\n", + "2\n", + "2\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "result = (2 or 3) * (5 and 7)\n", - "print('2 * 7 =', result)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "2 * 7 = 14\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" + } + ], + "source": [ + "print('first list:')\n", + "for i in range(3):\n", + " print(i)\n", + " \n", + "print('\\nsecond list:')\n", + "for j in range(3):\n", + " print(i) # I (intentionally) made typo here!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## List slicing using indexes that are \"out of range\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we have all encountered it 1 (x10000) time(s) in our live, the infamous `IndexError`:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "IndexError", + "evalue": "list index out of range", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mIndexError\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[0mmy_list\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m5\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmy_list\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mIndexError\u001b[0m: list index out of range" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Don't use mutable objects as default arguments for functions!" + } + ], + "source": [ + "my_list = [1, 2, 3, 4, 5]\n", + "print(my_list[5])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But suprisingly, it is not raised when we are doing list slicing, which can be a really pain for debugging:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[]\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" + } + ], + "source": [ + "my_list = [1, 2, 3, 4, 5]\n", + "print(my_list[5:])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Reusing global variable names and `UnboundLocalErrors`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Usually, it is no problem to access global variables in the local scope of a function:" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "global\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Don't use mutable objects (e.g., dictionaries, lists, sets, etc.) as default arguments for functions! You might expect that a new list is created every time when we call the function without providing an argument for the default parameter, but this is not the case: **Python will create the mutable object (default parameter) the first time the function is defined - not when it is called**, see the following code:\n", - "\n", - "(Original source: [http://docs.python-guide.org/en/latest/writing/gotchas/](http://docs.python-guide.org/en/latest/writing/gotchas/)" + } + ], + "source": [ + "def my_func():\n", + " print(var)\n", + "\n", + "var = 'global'\n", + "my_func()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And is also no problem to use the same variable name in the local scope without affecting the local counterpart: " + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "global\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def append_to_list(value, def_list=[]):\n", - " def_list.append(value)\n", - " return def_list\n", - "\n", - "my_list = append_to_list(1)\n", - "print(my_list)\n", - "\n", - "my_other_list = append_to_list(2)\n", - "print(my_other_list)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[1]\n", - "[1, 2]\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Another good example showing that demonstrates that default arguments are created when the function is created (**and not when it is called!**):" + } + ], + "source": [ + "def my_func():\n", + " var = 'locally changed'\n", + "\n", + "var = 'global'\n", + "my_func()\n", + "print(var)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But we have to be careful if we use a variable name that occurs in the global scope, and we want to access it in the local function scope if we want to reuse this name:" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "UnboundLocalError", + "evalue": "local variable 'var' referenced before assignment", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mUnboundLocalError\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 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mvar\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'global'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mmy_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36mmy_func\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmy_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# want to access global variable\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mvar\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'locally changed'\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[0mvar\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'global'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mUnboundLocalError\u001b[0m: local variable 'var' referenced before assignment" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import time\n", - "def report_arg(my_default=time.time()):\n", - " print(my_default)\n", - "\n", - "report_arg()\n", - "\n", - "time.sleep(5)\n", - "\n", - "report_arg()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1397764090.456688\n", - "1397764090.456688" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "\n" + } + ], + "source": [ + "def my_func():\n", + " print(var) # want to access global variable\n", + " var = 'locally changed' # but Python thinks we forgot to define the local variable!\n", + " \n", + "var = 'global'\n", + "my_func()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this case, we have to use the `global` keyword!" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "global\n", + "locally changed\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Be aware of the consuming generator" + } + ], + "source": [ + "def my_func():\n", + " global var\n", + " print(var) # want to access global variable\n", + " var = 'locally changed' # changes the gobal variable\n", + "\n", + "var = 'global'\n", + "\n", + "my_func()\n", + "print(var)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Creating copies of mutable objects\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's assume a scenario where we want to duplicate sub`list`s of values stored in another list. If we want to create independent sub`list` object, using the arithmetic multiplication operator could lead to rather unexpected (or undesired) results:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "initially ---> [[1, 2, 3], [1, 2, 3]]\n", + "after my_list1[1][0] = 'a' ---> [['a', 2, 3], ['a', 2, 3]]\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" + } + ], + "source": [ + "my_list1 = [[1, 2, 3]] * 2\n", + "\n", + "print('initially ---> ', my_list1)\n", + "\n", + "# modify the 1st element of the 2nd sublist\n", + "my_list1[1][0] = 'a'\n", + "print(\"after my_list1[1][0] = 'a' ---> \", my_list1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "In this case, we should better create \"new\" objects:" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "initially: ---> [[1, 2, 3], [1, 2, 3]]\n", + "after my_list2[1][0] = 'a': ---> [[1, 2, 3], ['a', 2, 3]]\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Be aware of what is happening when combining \"`in`\" checks with generators, since they won't evaluate from the beginning once a position is \"consumed\"." + } + ], + "source": [ + "my_list2 = [[1, 2, 3] for i in range(2)]\n", + "\n", + "print('initially: ---> ', my_list2)\n", + "\n", + "# modify the 1st element of the 2nd sublist\n", + "my_list2[1][0] = 'a'\n", + "print(\"after my_list2[1][0] = 'a': ---> \", my_list2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "And here is the proof:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "id my_list1: 4350764680, id my_list2: 4350766472\n", + "id my_list1: 4350764680, id my_list2: 4350766664\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "gen = (i for i in range(5))\n", - "print('2 in gen,', 2 in gen)\n", - "print('3 in gen,', 3 in gen)\n", - "print('1 in gen,', 1 in gen) " - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "2 in gen, True\n", - "3 in gen, True\n", - "1 in gen, False\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Although this defeats the purpose of an generator (in most cases), we can convert a generator into a list to circumvent the problem. " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "gen = (i for i in range(5))\n", - "a_list = list(gen)\n", - "print('2 in l,', 2 in a_list)\n", - "print('3 in l,', 3 in a_list)\n", - "print('1 in l,', 1 in a_list) " - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "2 in l, True\n", - "3 in l, True\n", - "1 in l, True\n" - ] - } - ], - "prompt_number": 27 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## `bool` is a subclass of `int`\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Chicken or egg? In the history of Python (Python 2.2 to be specific) truth values were implemented via 1 and 0 (similar to the old C). In order to avoid syntax errors in old (but perfectly working) Python code, `bool` was added as a subclass of `int` in Python 2.3.\n", - "\n", - "Original source: [http://www.peterbe.com/plog/bool-is-int](http://www.peterbe.com/plog/bool-is-int)" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('isinstance(True, int):', isinstance(True, int))\n", - "print('True + True:', True + True)\n", - "print('3*True + True:', 3*True + True)\n", - "print('3*True - False:', 3*True - False)\n" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "isinstance(True, int): True\n", - "True + True: 2\n", - "3*True + True: 4\n", - "3*True - False: 3\n" - ] - } - ], - "prompt_number": 28 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## About lambda-in-closures-and-a-loop pitfall" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Remember the section about the [\"consuming generators\"](consuming_generators)? This example is somewhat related, but the result might still come unexpected. \n", - "\n", - "(Original source: [http://openhome.cc/eGossip/Blog/UnderstandingLambdaClosure3.html](http://openhome.cc/eGossip/Blog/UnderstandingLambdaClosure3.html))\n", - "\n", - "In the first example below, we call a `lambda` function in a list comprehension, and the value `i` will be dereferenced every time we call `lambda` within the scope of the list comprehension. Since the list comprehension has already been constructed and evaluated when we for-loop through the list, the closure-variable will be set to the last value 4." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_list = [lambda: i for i in range(5)]\n", - "for l in my_list:\n", - " print(l())" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "4\n", - "4\n", - "4\n", - "4\n", - "4\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "However, by using a generator expression, we can make use of its stepwise evaluation (note that the returned variable still stems from the same closure, but the value changes as we iterate over the generator)." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_gen = (lambda: n for n in range(5))\n", - "for l in my_gen:\n", - " print(l())" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0\n", - "1\n", - "2\n", - "3\n", - "4\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And if you are really keen on using lists, there is a nifty trick that circumvents this problem as a reader nicely pointed out in the comments: We can simply pass the loop variable `i` as a default argument to the lambdas." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_list = [lambda x=i: x for i in range(5)]\n", - "for l in my_list:\n", - " print(l())" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0\n", - "1\n", - "2\n", - "3\n", - "4\n" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Python's LEGB scope resolution and the keywords `global` and `nonlocal`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "There is nothing particularly surprising about Python's LEGB scope resolution (Local -> Enclosed -> Global -> Built-in), but it is still useful to take a look at some examples!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### `global` vs. `local`\n", - "\n", - "According to the LEGB rule, Python will first look for a variable in the local scope. So if we set the variable `x = 1` `local`ly in the function's scope, it won't have an effect on the `global` `x`." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "x = 0\n", - "def in_func():\n", - " x = 1\n", - " print('in_func:', x)\n", - " \n", - "in_func()\n", - "print('global:', x)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "in_func: 1\n", - "global: 0\n" - ] - } - ], - "prompt_number": 31 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we want to modify the `global` x via a function, we can simply use the `global` keyword to import the variable into the function's scope:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "x = 0\n", - "def in_func():\n", - " global x\n", - " x = 1\n", - " print('in_func:', x)\n", - " \n", - "in_func()\n", - "print('global:', x)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "in_func: 1\n", - "global: 1\n" - ] - } - ], - "prompt_number": 34 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### `local` vs. `enclosed`\n", - "\n", - "Now, let us take a look at `local` vs. `enclosed`. Here, we set the variable `x = 1` in the `outer` function and set `x = 1` in the enclosed function `inner`. Since `inner` looks in the local scope first, it won't modify `outer`'s `x`." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def outer():\n", - " x = 1\n", - " print('outer before:', x)\n", - " def inner():\n", - " x = 2\n", - " print(\"inner:\", x)\n", - " inner()\n", - " print(\"outer after:\", x)\n", - "outer()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "outer before: 1\n", - "inner: 2\n", - "outer after: 1\n" - ] - } - ], - "prompt_number": 36 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here is where the `nonlocal` keyword comes in handy - it allows us to modify the `x` variable in the `enclosed` scope:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def outer():\n", - " x = 1\n", - " print('outer before:', x)\n", - " def inner():\n", - " nonlocal x\n", - " x = 2\n", - " print(\"inner:\", x)\n", - " inner()\n", - " print(\"outer after:\", x)\n", - "outer()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "outer before: 1\n", - "inner: 2\n", - "outer after: 2\n" - ] - } - ], - "prompt_number": 35 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## When mutable contents of immutable tuples aren't so mutable" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As we all know, tuples are immutable objects in Python, right!? But what happens if they contain mutable objects? \n", - "\n", - "First, let us have a look at the expected behavior: a `TypeError` is raised if we try to modify immutable types in a tuple: " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "tup = (1,)\n", - "tup[0] += 1" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "'tuple' object does not support item assignment", - "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[0mtup\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mtup\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" - ] - } - ], - "prompt_number": 41 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### But what if we put a mutable object into the immutable tuple? Well, modification works, but we **also** get a `TypeError` at the same time." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "tup = ([],)\n", - "print('tup before: ', tup)\n", - "tup[0] += [1]" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "tup before: ([],)\n" - ] - }, - { - "ename": "TypeError", - "evalue": "'tuple' object does not support item assignment", - "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[0mtup\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'tup before: '\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtup\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mtup\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+=\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[0m", - "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" - ] - } - ], - "prompt_number": 42 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('tup after: ', tup)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "tup after: ([1],)\n" - ] - } - ], - "prompt_number": 43 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "However, **there are ways** to modify the mutable contents of the tuple without raising the `TypeError`, the solution is the `.extend()` method, or alternatively `.append()` (for lists):" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "tup = ([],)\n", - "print('tup before: ', tup)\n", - "tup[0].extend([1])\n", - "print('tup after: ', tup)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "tup before: ([],)\n", - "tup after: ([1],)\n" - ] - } - ], - "prompt_number": 44 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "tup = ([],)\n", - "print('tup before: ', tup)\n", - "tup[0].append(1)\n", - "print('tup after: ', tup)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "tup before: ([],)\n", - "tup after: ([1],)\n" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Explanation\n", - "\n", - "**A. Jesse Jiryu Davis** has a nice explanation for this phenomenon (Original source: [http://emptysqua.re/blog/python-increment-is-weird-part-ii/](http://emptysqua.re/blog/python-increment-is-weird-part-ii/))\n", - "\n", - "If we try to extend the list via `+=` *\"then the statement executes `STORE_SUBSCR`, which calls the C function `PyObject_SetItem`, which checks if the object supports item assignment. In our case the object is a tuple, so `PyObject_SetItem` throws the `TypeError`. Mystery solved.\"*" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### One more note about the `immutable` status of tuples. Tuples are famous for being immutable. However, how comes that this code works?" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_tup = (1,)\n", - "my_tup += (4,)\n", - "my_tup = my_tup + (5,)\n", - "print(my_tup)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "(1, 4, 5)\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "What happens \"behind\" the curtains is that the tuple is not modified, but every time a new object is generated, which will inherit the old \"name tag\":" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_tup = (1,)\n", - "print(id(my_tup))\n", - "my_tup += (4,)\n", - "print(id(my_tup))\n", - "my_tup = my_tup + (5,)\n", - "print(id(my_tup))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "4337381840\n", - "4357415496\n", - "4357289952\n" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## List comprehensions are fast, but generators are faster!?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\"List comprehensions are fast, but generators are faster!?\" - No, not really (or significantly, see the benchmarks below). So what's the reason to prefer one over the other?\n", - "- use lists if you want to use the plethora of list methods \n", - "- use generators when you are dealing with huge collections to avoid memory issues" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "def plainlist(n=100000):\n", - " my_list = []\n", - " for i in range(n):\n", - " if i % 5 == 0:\n", - " my_list.append(i)\n", - " return my_list\n", - "\n", - "def listcompr(n=100000):\n", - " my_list = [i for i in range(n) if i % 5 == 0]\n", - " return my_list\n", - "\n", - "def generator(n=100000):\n", - " my_gen = (i for i in range(n) if i % 5 == 0)\n", - " return my_gen\n", - "\n", - "def generator_yield(n=100000):\n", - " for i in range(n):\n", - " if i % 5 == 0:\n", - " yield i" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### To be fair to the list, let us exhaust the generators:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def test_plainlist(plain_list):\n", - " for i in plain_list():\n", - " pass\n", - "\n", - "def test_listcompr(listcompr):\n", - " for i in listcompr():\n", - " pass\n", - "\n", - "def test_generator(generator):\n", - " for i in generator():\n", - " pass\n", - "\n", - "def test_generator_yield(generator_yield):\n", - " for i in generator_yield():\n", - " pass\n", - "\n", - "print('plain_list: ', end = '')\n", - "%timeit test_plainlist(plainlist)\n", - "print('\\nlistcompr: ', end = '')\n", - "%timeit test_listcompr(listcompr)\n", - "print('\\ngenerator: ', end = '')\n", - "%timeit test_generator(generator)\n", - "print('\\ngenerator_yield: ', end = '')\n", - "%timeit test_generator_yield(generator_yield)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "plain_list: 10 loops, best of 3: 22.4 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "listcompr: 10 loops, best of 3: 20.8 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "generator: 10 loops, best of 3: 22 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - "generator_yield: 10 loops, best of 3: 21.9 ms per loop" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 13 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Public vs. private class methods and name mangling\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Who has not stumbled across this quote \"we are all consenting adults here\" in the Python community, yet? Unlike in other languages like C++ (sorry, there are many more, but that's one I am most familiar with), we can't really protect class methods from being used outside the class (i.e., by the API user). \n", - "All we can do is to indicate methods as private to make clear that they are better not used outside the class, but it is really up to the class user, since \"we are all consenting adults here\"! \n", - "So, when we want to mark a class method as private, we can put a single underscore in front of it. \n", - "If we additionally want to avoid name clashes with other classes that might use the same method names, we can prefix the name with a double-underscore to invoke the name mangling.\n", - "\n", - "This doesn't prevent the class user to access this class member though, but he has to know the trick and also knows that it his own risk...\n", - "\n", - "Let the following example illustrate what I mean:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "class my_class():\n", - " def public_method(self):\n", - " print('Hello public world!')\n", - " def __private_method(self):\n", - " print('Hello private world!')\n", - " def call_private_method_in_class(self):\n", - " self.__private_method()\n", - " \n", - "my_instance = my_class()\n", - "\n", - "my_instance.public_method()\n", - "my_instance._my_class__private_method()\n", - "my_instance.call_private_method_in_class()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Hello public world!\n", - "Hello private world!\n", - "Hello private world!\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## The consequences of modifying a list when looping through it" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "It can be really dangerous to modify a list when iterating through it - this is a very common pitfall that can cause unintended behavior! \n", - "Look at the following examples, and for a fun exercise: try to figure out what is going on before you skip to the solution!" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a = [1, 2, 3, 4, 5]\n", - "for i in a:\n", - " if not i % 2:\n", - " a.remove(i)\n", - "print(a)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[1, 3, 5]\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "b = [2, 4, 5, 6]\n", - "for i in b:\n", - " if not i % 2:\n", - " b.remove(i)\n", - "print(b)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[4, 5]\n" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "**The solution** is that we are iterating through the list index by index, and if we remove one of the items in-between, we inevitably mess around with the indexing, look at the following example, and it will become clear:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "b = [2, 4, 5, 6]\n", - "for index, item in enumerate(b):\n", - " print(index, item)\n", - " if not item % 2:\n", - " b.remove(item)\n", - "print(b)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0 2\n", - "1 5\n", - "2 6\n", - "[4, 5]\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Dynamic binding and typos in variable names\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Be careful, dynamic binding is convenient, but can also quickly become dangerous!" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('first list:')\n", - "for i in range(3):\n", - " print(i)\n", - " \n", - "print('\\nsecond list:')\n", - "for j in range(3):\n", - " print(i) # I (intentionally) made typo here!" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "first list:\n", - "0\n", - "1\n", - "2\n", - "\n", - "second list:\n", - "2\n", - "2\n", - "2\n" - ] - } - ], - "prompt_number": 14 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## List slicing using indexes that are \"out of range\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As we have all encountered it 1 (x10000) time(s) in our live, the infamous `IndexError`:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_list = [1, 2, 3, 4, 5]\n", - "print(my_list[5])" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "IndexError", - "evalue": "list index out of range", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mIndexError\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[0mmy_list\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m5\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmy_list\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mIndexError\u001b[0m: list index out of range" - ] - } - ], - "prompt_number": 15 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "But suprisingly, it is not raised when we are doing list slicing, which can be a really pain for debugging:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_list = [1, 2, 3, 4, 5]\n", - "print(my_list[5:])" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[]\n" - ] - } - ], - "prompt_number": 16 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## Reusing global variable names and `UnboundLocalErrors`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Usually, it is no problem to access global variables in the local scope of a function:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def my_func():\n", - " print(var)\n", - "\n", - "var = 'global'\n", - "my_func()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "global\n" - ] - } - ], - "prompt_number": 37 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And is also no problem to use the same variable name in the local scope without affecting the local counterpart: " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def my_func():\n", - " var = 'locally changed'\n", - "\n", - "var = 'global'\n", - "my_func()\n", - "print(var)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "global\n" - ] - } - ], - "prompt_number": 38 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "But we have to be careful if we use a variable name that occurs in the global scope, and we want to access it in the local function scope if we want to reuse this name:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def my_func():\n", - " print(var) # want to access global variable\n", - " var = 'locally changed' # but Python thinks we forgot to define the local variable!\n", - " \n", - "var = 'global'\n", - "my_func()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "UnboundLocalError", - "evalue": "local variable 'var' referenced before assignment", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mUnboundLocalError\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 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mvar\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'global'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mmy_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m\u001b[0m in \u001b[0;36mmy_func\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmy_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# want to access global variable\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mvar\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'locally changed'\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[0mvar\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'global'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mUnboundLocalError\u001b[0m: local variable 'var' referenced before assignment" - ] - } - ], - "prompt_number": 40 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this case, we have to use the `global` keyword!" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def my_func():\n", - " global var\n", - " print(var) # want to access global variable\n", - " var = 'locally changed' # changes the gobal variable\n", - "\n", - "var = 'global'\n", - "\n", - "my_func()\n", - "print(var)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "global\n", - "locally changed\n" - ] - } - ], - "prompt_number": 43 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Creating copies of mutable objects\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's assume a scenario where we want to duplicate sub`list`s of values stored in another list. If we want to create independent sub`list` object, using the arithmetic multiplication operator could lead to rather unexpected (or undesired) results:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_list1 = [[1, 2, 3]] * 2\n", - "\n", - "print('initially ---> ', my_list1)\n", - "\n", - "# modify the 1st element of the 2nd sublist\n", - "my_list1[1][0] = 'a'\n", - "print(\"after my_list1[1][0] = 'a' ---> \", my_list1)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "initially ---> [[1, 2, 3], [1, 2, 3]]\n", - "after my_list1[1][0] = 'a' ---> [['a', 2, 3], ['a', 2, 3]]\n" - ] - } - ], - "prompt_number": 24 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "In this case, we should better create \"new\" objects:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "my_list2 = [[1, 2, 3] for i in range(2)]\n", - "\n", - "print('initially: ---> ', my_list2)\n", - "\n", - "# modify the 1st element of the 2nd sublist\n", - "my_list2[1][0] = 'a'\n", - "print(\"after my_list2[1][0] = 'a': ---> \", my_list2)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "initially: ---> [[1, 2, 3], [1, 2, 3]]\n", - "after my_list2[1][0] = 'a': ---> [[1, 2, 3], ['a', 2, 3]]\n" - ] - } - ], - "prompt_number": 25 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "And here is the proof:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "for a,b in zip(my_list1, my_list2):\n", - " print('id my_list1: {}, id my_list2: {}'.format(id(a), id(b)))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "id my_list1: 4350764680, id my_list2: 4350766472\n", - "id my_list1: 4350764680, id my_list2: 4350766664\n" - ] - } - ], - "prompt_number": 26 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## Key differences between Python 2 and 3\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "There are some good articles already that are summarizing the differences between Python 2 and 3, e.g., \n", - "- [https://wiki.python.org/moin/Python2orPython3](https://wiki.python.org/moin/Python2orPython3)\n", - "- [https://docs.python.org/3.0/whatsnew/3.0.html](https://docs.python.org/3.0/whatsnew/3.0.html)\n", - "- [http://python3porting.com/differences.html](http://python3porting.com/differences.html)\n", - "- [https://docs.python.org/3/howto/pyporting.html](https://docs.python.org/3/howto/pyporting.html) \n", - "etc.\n", - "\n", - "But it might be still worthwhile, especially for Python newcomers, to take a look at some of those!\n", - "(Note: the the code was executed in Python 3.4.0 and Python 2.7.5 and copied from interactive shell sessions.)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Overview - Key differences between Python 2 and 3" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "- [Unicode](#unicode)\n", - "- [The print statement](#print)\n", - "- [Integer division](#integer_div)\n", - "- [xrange()](#xrange)\n", - "- [Raising exceptions](#raising_exceptions)\n", - "- [Handling exceptions](#handling_exceptions)\n", - "- [next() function and .next() method](#next_next)\n", - "- [Loop variables and leaking into the global scope](#loop_leak)\n", - "- [Comparing unorderable types](#compare_unorder)\n", - "\n", - "
    \n", - "
    \n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Unicode..." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to Python 2.x vs 3.x overview](#py23_overview)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "####- Python 2: \n", - "We have ASCII `str()` types, separate `unicode()`, but no `byte` type\n", - "####- Python 3: \n", - "Now, we finally have Unicode (utf-8) `str`ings, and 2 byte classes: `byte` and `bytearray`s" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "#############\n", - "# Python 2\n", - "#############\n", - "\n", - ">>> type(unicode('is like a python3 str()'))\n", - "\n", - "\n", - ">>> type(b'byte type does not exist')\n", - "\n", - "\n", - ">>> 'they are really' + b' the same'\n", - "'they are really the same'\n", - "\n", - ">>> type(bytearray(b'bytearray oddly does exist though'))\n", - "\n", - "\n", - "#############\n", - "# Python 3\n", - "#############\n", - "\n", - ">>> print('strings are now utf-8 \\u03BCnico\\u0394\u00e9!')\n", - "strings are now utf-8 \u03bcnico\u0394\u00e9!\n", - "\n", - "\n", - ">>> type(b' and we have byte types for storing data')\n", - "\n", - "\n", - ">>> type(bytearray(b'but also bytearrays for those who prefer them over strings'))\n", - "\n", - "\n", - ">>> 'string' + b'bytes for data'\n", - "Traceback (most recent call last):s\n", - " File \"\", line 1, in \n", - "TypeError: Can't convert 'bytes' object to str implicitly" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### The print statement" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to Python 2.x vs 3.x overview](#py23_overview)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Very trivial, but this change makes sense, Python 3 now only accepts `print`s with proper parentheses - just like the other function calls ..." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Python 2\n", - ">>> print 'Hello, World!'\n", - "Hello, World!\n", - ">>> print('Hello, World!')\n", - "Hello, World!\n", - "\n", - "# Python 3\n", - ">>> print('Hello, World!')\n", - "Hello, World!\n", - ">>> print 'Hello, World!'\n", - " File \"\", line 1\n", - " print 'Hello, World!'\n", - " ^\n", - "SyntaxError: invalid syntax" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And if we want to print the output of 2 consecutive print functions on the same line, you would use a comma in Python 2, and a `end=\"\"` in Python 3:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Python 2\n", - ">>> print \"line 1\", ; print 'same line'\n", - "line 1 same line\n", - "\n", - "# Python 3\n", - ">>> print(\"line 1\", end=\"\") ; print (\" same line\")\n", - "line 1 same line" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Integer division" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to Python 2.x vs 3.x overview](#py23_overview)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is a pretty dangerous thing if you are porting code, or executing Python 3 code in Python 2 since the change in integer-division behavior can often go unnoticed. \n", - "So, I still tend to use a `float(3)/2` or `3/2.0` instead of a `3/2` in my Python 3 scripts to save the Python 2 guys some trouble ... (PS: and vice versa, you can `from __future__ import division` in your Python 2 scripts)." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Python 2\n", - ">>> 3 / 2\n", - "1\n", - ">>> 3 // 2\n", - "1\n", - ">>> 3 / 2.0\n", - "1.5\n", - ">>> 3 // 2.0\n", - "1.0\n", - "\n", - "# Python 3\n", - ">>> 3 / 2\n", - "1.5\n", - ">>> 3 // 2\n", - "1\n", - ">>> 3 / 2.0\n", - "1.5\n", - ">>> 3 // 2.0\n", - "1.0" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "###`xrange()` " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to Python 2.x vs 3.x overview](#py23_overview)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " \n", - "`xrange()` was pretty popular in Python 2.x if you wanted to create an iterable object. The behavior was quite similar to a generator ('lazy evaluation'), but you could iterate over it infinitely. The advantage was that it was generally faster than `range()` (e.g., in a for-loop) - not if you had to iterate over the list multiple times, since the generation happens every time from scratch! \n", - "In Python 3, the `range()` was implemented like the `xrange()` function so that a dedicated `xrange()` function does not exist anymore." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Python 2\n", - "> python -m timeit 'for i in range(1000000):' ' pass'\n", - "10 loops, best of 3: 66 msec per loop\n", - "\n", - " > python -m timeit 'for i in xrange(1000000):' ' pass'\n", - "10 loops, best of 3: 27.8 msec per loop\n", - "\n", - "# Python 3\n", - "> python3 -m timeit 'for i in range(1000000):' ' pass'\n", - "10 loops, best of 3: 51.1 msec per loop\n", - "\n", - "> python3 -m timeit 'for i in xrange(1000000):' ' pass'\n", - "Traceback (most recent call last):\n", - " File \"/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py\", line 292, in main\n", - " x = t.timeit(number)\n", - " File \"/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py\", line 178, in timeit\n", - " timing = self.inner(it, self.timer)\n", - " File \"\", line 6, in inner\n", - " for i in xrange(1000000):\n", - "NameError: name 'xrange' is not defined" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Raising exceptions" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to Python 2.x vs 3.x overview](#py23_overview)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "Where Python 2 accepts both notations, the 'old' and the 'new' way, Python 3 chokes (and raises a `SyntaxError` in turn) if we don't enclose the exception argument in parentheses:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Python 2\n", - ">>> raise IOError, \"file error\"\n", - "Traceback (most recent call last):\n", - " File \"\", line 1, in \n", - "IOError: file error\n", - ">>> raise IOError(\"file error\")\n", - "Traceback (most recent call last):\n", - " File \"\", line 1, in \n", - "IOError: file error\n", - "\n", - " \n", - "# Python 3 \n", - ">>> raise IOError, \"file error\"\n", - " File \"\", line 1\n", - " raise IOError, \"file error\"\n", - " ^\n", - "SyntaxError: invalid syntax\n", - ">>> raise IOError(\"file error\")\n", - "Traceback (most recent call last):\n", - " File \"\", line 1, in \n", - "OSError: file error" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Handling exceptions" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to Python 2.x vs 3.x overview](#py23_overview)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "Also the handling of exceptions has slightly changed in Python 3. Now, we have to use the `as` keyword!" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Python 2\n", - ">>> try:\n", - "... blabla\n", - "... except NameError, err:\n", - "... print err, '--> our error msg'\n", - "... \n", - "name 'blabla' is not defined --> our error msg\n", - "\n", - "# Python 3\n", - ">>> try:\n", - "... blabla\n", - "... except NameError as err:\n", - "... print(err, '--> our error msg')\n", - "... \n", - "name 'blabla' is not defined --> our error msg" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "\n", - "
    \n", - "
    " - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### The `next()` function and `.next()` method" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to Python 2.x vs 3.x overview](#py23_overview)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "Where you can use both function and method in Python 2.7.5, the `next()` function is all that remain in Python 3!" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Python 2\n", - ">>> my_generator = (letter for letter in 'abcdefg')\n", - ">>> my_generator.next()\n", - "'a'\n", - ">>> next(my_generator)\n", - "'b'\n", - "\n", - "# Python 3\n", - ">>> my_generator = (letter for letter in 'abcdefg')\n", - ">>> next(my_generator)\n", - "'a'\n", - ">>> my_generator.next()\n", - "Traceback (most recent call last):\n", - " File \"\", line 1, in \n", - "AttributeError: 'generator' object has no attribute 'next'" - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### In Python 3.x for-loop variables don't leak into the global namespace anymore" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to Python 2.x vs 3.x overview](#py23_overview)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This goes back to a change that was made in Python 3.x and is described in [What\u2019s New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html) as follows:\n", - "\n", - "\"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope.\"" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from platform import python_version\n", - "print('This code cell was executed in Python', python_version())\n", - "\n", - "i = 1\n", - "print([i for i in range(5)])\n", - "print(i, '-> i in global')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "This code cell was executed in Python 3.3.5\n", - "[0, 1, 2, 3, 4]\n", - "1 -> i in global\n" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from platform import python_version\n", - "print 'This code cell was executed in Python', python_version()\n", - "\n", - "i = 1\n", - "print [i for i in range(5)]\n", - "print i, '-> i in global' " - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "This code cell was executed in Python 2.7.6\n", - "[0, 1, 2, 3, 4]\n", - "4 -> i in global\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Python 3.x prevents us from comparing unorderable types" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to Python 2.x vs 3.x overview](#py23_overview)]" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from platform import python_version\n", - "print 'This code cell was executed in Python', python_version()\n", - "\n", - "print [1, 2] > 'foo'\n", - "print (1, 2) > 'foo'\n", - "print [1, 2] > (1, 2)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "This code cell was executed in Python 2.7.6\n", - "False\n", - "True\n", - "False\n" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from platform import python_version\n", - "print('This code cell was executed in Python', python_version())\n", - "\n", - "print([1, 2] > 'foo')\n", - "print((1, 2) > 'foo')\n", - "print([1, 2] > (1, 2))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "This code cell was executed in Python 3.3.5\n" - ] - }, - { - "ename": "TypeError", - "evalue": "unorderable types: list() > str()", - "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 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'This code cell was executed in Python'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpython_version\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m'foo'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m'foo'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mTypeError\u001b[0m: unorderable types: list() > str()" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## Function annotations - What are those `->`'s in my Python code?\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Have you ever seen any Python code that used colons inside the parantheses of a function definition?" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def foo1(x: 'insert x here', y: 'insert x^2 here'):\n", - " print('Hello, World')\n", - " return" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And what about the fancy arrow here?" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def foo2(x, y) -> 'Hi!':\n", - " print('Hello, World')\n", - " return" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 10 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Q: Is this valid Python syntax? \n", - "A: Yes!\n", - " \n", - " \n", - "Q: So, what happens if I *just call* the function? \n", - "A: Nothing!\n", - " \n", - "Here is the proof!" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "foo1(1,2)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Hello, World\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "foo2(1,2) " - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Hello, World\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**So, those are function annotations ... ** \n", - "- the colon for the function parameters \n", - "- the arrow for the return value \n", - "\n", - "You probably will never make use of them (or at least very rarely). Usually, we write good function documentations below the function as a docstring - or at least this is how I would do it (okay this case is a little bit extreme, I have to admit):" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def is_palindrome(a):\n", - " \"\"\"\n", - " Case-and punctuation insensitive check if a string is a palindrom.\n", - " \n", - " Keyword arguments:\n", - " a (str): The string to be checked if it is a palindrome.\n", - " \n", - " Returns `True` if input string is a palindrome, else False.\n", - " \n", - " \"\"\"\n", - " stripped_str = [l for l in my_str.lower() if l.isalpha()]\n", - " return stripped_str == stripped_str[::-1]\n", - " " - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "However, function annotations can be useful to indicate that work is still in progress in some cases. But they are optional and I see them very very rarely.\n", - "\n", - "As it is stated in [PEP3107](http://legacy.python.org/dev/peps/pep-3107/#fundamentals-of-function-annotations):\n", - "\n", - "1. Function annotations, both for parameters and return values, are completely optional.\n", - "\n", - "2. Function annotations are nothing more than a way of associating arbitrary Python expressions with various parts of a function at compile-time.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The nice thing about function annotations is their `__annotations__` attribute, which is dictionary of all the parameters and/or the `return` value you annotated." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "foo1.__annotations__" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 17, - "text": [ - "{'y': 'insert x^2 here', 'x': 'insert x here'}" - ] - } - ], - "prompt_number": 17 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "foo2.__annotations__" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 18, - "text": [ - "{'return': 'Hi!'}" - ] - } - ], - "prompt_number": 18 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**When are they useful?**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Function annotations can be useful for a couple of things \n", - "- Documentation in general\n", - "- pre-condition testing\n", - "- [type checking](http://legacy.python.org/dev/peps/pep-0362/#annotation-checker)\n", - " \n", - "..." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Abortive statements in `finally` blocks" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Python's `try-except-finally` blocks are very handy for catching and handling errors. The `finally` block is always executed whether an `exception` has been raised or not as illustrated in the following example." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def try_finally1():\n", - " try:\n", - " print('in try:')\n", - " print('do some stuff')\n", - " float('abc')\n", - " except ValueError:\n", - " print('an error occurred')\n", - " else:\n", - " print('no error occurred')\n", - " finally:\n", - " print('always execute finally')\n", - " \n", - "try_finally1()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "in try:\n", - "do some stuff\n", - "an error occurred\n", - "always execute finally\n" - ] - } - ], - "prompt_number": 24 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "But can you also guess what will be printed in the next code cell?" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def try_finally2():\n", - " try:\n", - " print(\"do some stuff in try block\")\n", - " return \"return from try block\"\n", - " finally:\n", - " print(\"do some stuff in finally block\")\n", - " return \"always execute finally\"\n", - " \n", - "print(try_finally2())" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "do some stuff in try block\n", - "do some stuff in finally block\n", - "always execute finally\n" - ] - } - ], - "prompt_number": 21 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "Here, the abortive `return` statement in the `finally` block simply overrules the `return` in the `try` block, since **`finally` is guaranteed to always be executed.** So, be careful using abortive statements in `finally` blocks!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#Assigning types to variables as values" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "I am not yet sure in which context this can be useful, but it is a nice fun fact to know that we can assign types as values to variables." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_var = str\n", - "a_var(123)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "pyout", - "prompt_number": 1, - "text": [ - "'123'" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from random import choice\n", - "\n", - "a, b, c = float, int, str\n", - "for i in range(5):\n", - " j = choice([a,b,c])(i)\n", - " print(j, type(j))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0 \n", - "1 \n", - "2.0 \n", - "3 \n", - "4 \n" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Only the first clause of generators is evaluated immediately" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The main reason why we love to use generators in certain cases (i.e., when we are dealing with large numbers of computations) is that it only computes the next value when it is needed, which is also known as \"lazy\" evaluation.\n", - "However, the first clause of an generator is already checked upon it's creation, as the following example demonstrates:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "gen_fails = (i for i in 1/0)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "ZeroDivisionError", - "evalue": "division by zero", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgen_fails\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mZeroDivisionError\u001b[0m: division by zero" - ] - } - ], - "prompt_number": 18 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Certainly, this is a nice feature, since it notifies us about syntax erros immediately. However, this is (unfortunately) not the case if we have multiple cases in our generator." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "gen_succeeds = (i for i in range(5) for j in 1/0)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 19 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('But obviously fails when we iterate ...')\n", - "for i in gen_succeeds:\n", - " print(i)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "ZeroDivisionError", - "evalue": "division by zero", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mZeroDivisionError\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[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'But obviously fails when we iterate ...'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mgen_succeeds\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgen_succeeds\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mj\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mZeroDivisionError\u001b[0m: division by zero" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "But obviously fails when we iterate ...\n" - ] - } - ], - "prompt_number": 20 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " + } + ], + "source": [ + "for a,b in zip(my_list1, my_list2):\n", + " print('id my_list1: {}, id my_list2: {}'.format(id(a), id(b)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Key differences between Python 2 and 3\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are some good articles already that are summarizing the differences between Python 2 and 3, e.g., \n", + "- [https://wiki.python.org/moin/Python2orPython3](https://wiki.python.org/moin/Python2orPython3)\n", + "- [https://docs.python.org/3.0/whatsnew/3.0.html](https://docs.python.org/3.0/whatsnew/3.0.html)\n", + "- [http://python3porting.com/differences.html](http://python3porting.com/differences.html)\n", + "- [https://docs.python.org/3/howto/pyporting.html](https://docs.python.org/3/howto/pyporting.html) \n", + "etc.\n", + "\n", + "But it might be still worthwhile, especially for Python newcomers, to take a look at some of those!\n", + "(Note: the the code was executed in Python 3.4.0 and Python 2.7.5 and copied from interactive shell sessions.)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Overview - Key differences between Python 2 and 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "- [Unicode](#unicode)\n", + "- [The print statement](#print)\n", + "- [Integer division](#integer_div)\n", + "- [xrange()](#xrange)\n", + "- [Raising exceptions](#raising_exceptions)\n", + "- [Handling exceptions](#handling_exceptions)\n", + "- [next() function and .next() method](#next_next)\n", + "- [Loop variables and leaking into the global scope](#loop_leak)\n", + "- [Comparing unorderable types](#compare_unorder)\n", + "\n", + "
    \n", + "
    \n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Unicode..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to Python 2.x vs 3.x overview](#py23_overview)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "####- Python 2: \n", + "We have ASCII `str()` types, separate `unicode()`, but no `byte` type\n", + "####- Python 3: \n", + "Now, we finally have Unicode (utf-8) `str`ings, and 2 byte classes: `byte` and `bytearray`s" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#############\n", + "# Python 2\n", + "#############\n", + "\n", + ">>> type(unicode('is like a python3 str()'))\n", + "\n", + "\n", + ">>> type(b'byte type does not exist')\n", + "\n", + "\n", + ">>> 'they are really' + b' the same'\n", + "'they are really the same'\n", + "\n", + ">>> type(bytearray(b'bytearray oddly does exist though'))\n", + "\n", + "\n", + "#############\n", + "# Python 3\n", + "#############\n", + "\n", + ">>> print('strings are now utf-8 \\u03BCnico\\u0394é!')\n", + "strings are now utf-8 μnicoΔé!\n", + "\n", + "\n", + ">>> type(b' and we have byte types for storing data')\n", + "\n", + "\n", + ">>> type(bytearray(b'but also bytearrays for those who prefer them over strings'))\n", + "\n", + "\n", + ">>> 'string' + b'bytes for data'\n", + "Traceback (most recent call last):s\n", + " File \"\", line 1, in \n", + "TypeError: Can't convert 'bytes' object to str implicitly" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The print statement" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to Python 2.x vs 3.x overview](#py23_overview)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Very trivial, but this change makes sense, Python 3 now only accepts `print`s with proper parentheses - just like the other function calls ..." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Python 2\n", + ">>> print 'Hello, World!'\n", + "Hello, World!\n", + ">>> print('Hello, World!')\n", + "Hello, World!\n", + "\n", + "# Python 3\n", + ">>> print('Hello, World!')\n", + "Hello, World!\n", + ">>> print 'Hello, World!'\n", + " File \"\", line 1\n", + " print 'Hello, World!'\n", + " ^\n", + "SyntaxError: invalid syntax" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And if we want to print the output of 2 consecutive print functions on the same line, you would use a comma in Python 2, and a `end=\"\"` in Python 3:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Python 2\n", + ">>> print \"line 1\", ; print 'same line'\n", + "line 1 same line\n", + "\n", + "# Python 3\n", + ">>> print(\"line 1\", end=\"\") ; print (\" same line\")\n", + "line 1 same line" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Integer division" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to Python 2.x vs 3.x overview](#py23_overview)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is a pretty dangerous thing if you are porting code, or executing Python 3 code in Python 2 since the change in integer-division behavior can often go unnoticed. \n", + "So, I still tend to use a `float(3)/2` or `3/2.0` instead of a `3/2` in my Python 3 scripts to save the Python 2 guys some trouble ... (PS: and vice versa, you can `from __future__ import division` in your Python 2 scripts)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Python 2\n", + ">>> 3 / 2\n", + "1\n", + ">>> 3 // 2\n", + "1\n", + ">>> 3 / 2.0\n", + "1.5\n", + ">>> 3 // 2.0\n", + "1.0\n", + "\n", + "# Python 3\n", + ">>> 3 / 2\n", + "1.5\n", + ">>> 3 // 2\n", + "1\n", + ">>> 3 / 2.0\n", + "1.5\n", + ">>> 3 // 2.0\n", + "1.0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###`xrange()` " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to Python 2.x vs 3.x overview](#py23_overview)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " \n", + "`xrange()` was pretty popular in Python 2.x if you wanted to create an iterable object. The behavior was quite similar to a generator ('lazy evaluation'), but you could iterate over it infinitely. The advantage was that it was generally faster than `range()` (e.g., in a for-loop) - not if you had to iterate over the list multiple times, since the generation happens every time from scratch! \n", + "In Python 3, the `range()` was implemented like the `xrange()` function so that a dedicated `xrange()` function does not exist anymore." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Python 2\n", + "> python -m timeit 'for i in range(1000000):' ' pass'\n", + "10 loops, best of 3: 66 msec per loop\n", + "\n", + " > python -m timeit 'for i in xrange(1000000):' ' pass'\n", + "10 loops, best of 3: 27.8 msec per loop\n", + "\n", + "# Python 3\n", + "> python3 -m timeit 'for i in range(1000000):' ' pass'\n", + "10 loops, best of 3: 51.1 msec per loop\n", + "\n", + "> python3 -m timeit 'for i in xrange(1000000):' ' pass'\n", + "Traceback (most recent call last):\n", + " File \"/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py\", line 292, in main\n", + " x = t.timeit(number)\n", + " File \"/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py\", line 178, in timeit\n", + " timing = self.inner(it, self.timer)\n", + " File \"\", line 6, in inner\n", + " for i in xrange(1000000):\n", + "NameError: name 'xrange' is not defined" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Raising exceptions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to Python 2.x vs 3.x overview](#py23_overview)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "Where Python 2 accepts both notations, the 'old' and the 'new' way, Python 3 chokes (and raises a `SyntaxError` in turn) if we don't enclose the exception argument in parentheses:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Python 2\n", + ">>> raise IOError, \"file error\"\n", + "Traceback (most recent call last):\n", + " File \"\", line 1, in \n", + "IOError: file error\n", + ">>> raise IOError(\"file error\")\n", + "Traceback (most recent call last):\n", + " File \"\", line 1, in \n", + "IOError: file error\n", + "\n", + " \n", + "# Python 3 \n", + ">>> raise IOError, \"file error\"\n", + " File \"\", line 1\n", + " raise IOError, \"file error\"\n", + " ^\n", + "SyntaxError: invalid syntax\n", + ">>> raise IOError(\"file error\")\n", + "Traceback (most recent call last):\n", + " File \"\", line 1, in \n", + "OSError: file error" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Handling exceptions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to Python 2.x vs 3.x overview](#py23_overview)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "Also the handling of exceptions has slightly changed in Python 3. Now, we have to use the `as` keyword!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Python 2\n", + ">>> try:\n", + "... blabla\n", + "... except NameError, err:\n", + "... print err, '--> our error msg'\n", + "... \n", + "name 'blabla' is not defined --> our error msg\n", + "\n", + "# Python 3\n", + ">>> try:\n", + "... blabla\n", + "... except NameError as err:\n", + "... print(err, '--> our error msg')\n", + "... \n", + "name 'blabla' is not defined --> our error msg" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The `next()` function and `.next()` method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to Python 2.x vs 3.x overview](#py23_overview)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "Where you can use both function and method in Python 2.7.5, the `next()` function is all that remain in Python 3!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Python 2\n", + ">>> my_generator = (letter for letter in 'abcdefg')\n", + ">>> my_generator.next()\n", + "'a'\n", + ">>> next(my_generator)\n", + "'b'\n", + "\n", + "# Python 3\n", + ">>> my_generator = (letter for letter in 'abcdefg')\n", + ">>> next(my_generator)\n", + "'a'\n", + ">>> my_generator.next()\n", + "Traceback (most recent call last):\n", + " File \"\", line 1, in \n", + "AttributeError: 'generator' object has no attribute 'next'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### In Python 3.x for-loop variables don't leak into the global namespace anymore" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to Python 2.x vs 3.x overview](#py23_overview)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This goes back to a change that was made in Python 3.x and is described in [What’s New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html) as follows:\n", + "\n", + "\"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope.\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This code cell was executed in Python 3.3.5\n", + "[0, 1, 2, 3, 4]\n", + "1 -> i in global\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##Keyword argument unpacking syntax - `*args` and `**kwargs`" + } + ], + "source": [ + "from platform import python_version\n", + "print('This code cell was executed in Python', python_version())\n", + "\n", + "i = 1\n", + "print([i for i in range(5)])\n", + "print(i, '-> i in global')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This code cell was executed in Python 2.7.6\n", + "[0, 1, 2, 3, 4]\n", + "4 -> i in global\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" + } + ], + "source": [ + "from platform import python_version\n", + "print 'This code cell was executed in Python', python_version()\n", + "\n", + "i = 1\n", + "print [i for i in range(5)]\n", + "print i, '-> i in global' " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3.x prevents us from comparing unorderable types" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to Python 2.x vs 3.x overview](#py23_overview)]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This code cell was executed in Python 2.7.6\n", + "False\n", + "True\n", + "False\n" ] - }, + } + ], + "source": [ + "from platform import python_version\n", + "print 'This code cell was executed in Python', python_version()\n", + "\n", + "print [1, 2] > 'foo'\n", + "print (1, 2) > 'foo'\n", + "print [1, 2] > (1, 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Python has a very convenient \"keyword argument unpacking syntax\" (often also referred to as \"splat\"-operators). This is particularly useful, if we want to define a function that can take a arbitrary number of input arguments." + "name": "stdout", + "output_type": "stream", + "text": [ + "This code cell was executed in Python 3.3.5\n" ] }, { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Single-asterisk (*args)" + "ename": "TypeError", + "evalue": "unorderable types: list() > str()", + "output_type": "error", + "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 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'This code cell was executed in Python'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpython_version\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m'foo'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m'foo'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: unorderable types: list() > str()" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def a_func(*args):\n", - " print('type of args:', type(args))\n", - " print('args contents:', args)\n", - " print('1st argument:', args[0])\n", - "\n", - "a_func(0, 1, 'a', 'b', 'c')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "type of args: \n", - "args contents: (0, 1, 'a', 'b', 'c')\n", - "1st argument: 0\n" - ] - } - ], - "prompt_number": 55 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Double-asterisk (**kwargs)" + } + ], + "source": [ + "from platform import python_version\n", + "print('This code cell was executed in Python', python_version())\n", + "\n", + "print([1, 2] > 'foo')\n", + "print((1, 2) > 'foo')\n", + "print([1, 2] > (1, 2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Function annotations - What are those `->`'s in my Python code?\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Have you ever seen any Python code that used colons inside the parantheses of a function definition?" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def foo1(x: 'insert x here', y: 'insert x^2 here'):\n", + " print('Hello, World')\n", + " return" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And what about the fancy arrow here?" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def foo2(x, y) -> 'Hi!':\n", + " print('Hello, World')\n", + " return" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Q: Is this valid Python syntax? \n", + "A: Yes!\n", + " \n", + " \n", + "Q: So, what happens if I *just call* the function? \n", + "A: Nothing!\n", + " \n", + "Here is the proof!" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello, World\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def b_func(**kwargs):\n", - " print('type of kwargs:', type(kwargs))\n", - " print('kwargs contents: ', kwargs)\n", - " print('value of argument a:', kwargs['a'])\n", - " \n", - "b_func(a=1, b=2, c=3, d=4)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "type of kwargs: \n", - "kwargs contents: {'d': 4, 'a': 1, 'c': 3, 'b': 2}\n", - "value of argument a: 1\n" - ] - } - ], - "prompt_number": 56 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### (Partially) unpacking of iterables\n", - "Another useful application of the \"unpacking\"-operator is the unpacking of lists and other other iterables." + } + ], + "source": [ + "foo1(1,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello, World\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "val1, *vals = [1, 2, 3, 4, 5]\n", - "print('val1:', val1)\n", - "print('vals:', vals)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "val1: 1\n", - "vals: [2, 3, 4, 5]\n" - ] - } - ], - "prompt_number": 57 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " + } + ], + "source": [ + "foo2(1,2) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**So, those are function annotations ... ** \n", + "- the colon for the function parameters \n", + "- the arrow for the return value \n", + "\n", + "You probably will never make use of them (or at least very rarely). Usually, we write good function documentations below the function as a docstring - or at least this is how I would do it (okay this case is a little bit extreme, I have to admit):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def is_palindrome(a):\n", + " \"\"\"\n", + " Case-and punctuation insensitive check if a string is a palindrom.\n", + " \n", + " Keyword arguments:\n", + " a (str): The string to be checked if it is a palindrome.\n", + " \n", + " Returns `True` if input string is a palindrome, else False.\n", + " \n", + " \"\"\"\n", + " stripped_str = [l for l in my_str.lower() if l.isalpha()]\n", + " return stripped_str == stripped_str[::-1]\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, function annotations can be useful to indicate that work is still in progress in some cases. But they are optional and I see them very very rarely.\n", + "\n", + "As it is stated in [PEP3107](http://legacy.python.org/dev/peps/pep-3107/#fundamentals-of-function-annotations):\n", + "\n", + "1. Function annotations, both for parameters and return values, are completely optional.\n", + "\n", + "2. Function annotations are nothing more than a way of associating arbitrary Python expressions with various parts of a function at compile-time.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The nice thing about function annotations is their `__annotations__` attribute, which is dictionary of all the parameters and/or the `return` value you annotated." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'y': 'insert x^2 here', 'x': 'insert x here'}" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "foo1.__annotations__" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'return': 'Hi!'}" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "foo2.__annotations__" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**When are they useful?**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Function annotations can be useful for a couple of things \n", + "- Documentation in general\n", + "- pre-condition testing\n", + "- [type checking](http://legacy.python.org/dev/peps/pep-0362/#annotation-checker)\n", + " \n", + "..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Abortive statements in `finally` blocks" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python's `try-except-finally` blocks are very handy for catching and handling errors. The `finally` block is always executed whether an `exception` has been raised or not as illustrated in the following example." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "in try:\n", + "do some stuff\n", + "an error occurred\n", + "always execute finally\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Metaclasses - What creates a new instance of a class?" + } + ], + "source": [ + "def try_finally1():\n", + " try:\n", + " print('in try:')\n", + " print('do some stuff')\n", + " float('abc')\n", + " except ValueError:\n", + " print('an error occurred')\n", + " else:\n", + " print('no error occurred')\n", + " finally:\n", + " print('always execute finally')\n", + " \n", + "try_finally1()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "But can you also guess what will be printed in the next code cell?" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "do some stuff in try block\n", + "do some stuff in finally block\n", + "always execute finally\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" + } + ], + "source": [ + "def try_finally2():\n", + " try:\n", + " print(\"do some stuff in try block\")\n", + " return \"return from try block\"\n", + " finally:\n", + " print(\"do some stuff in finally block\")\n", + " return \"always execute finally\"\n", + " \n", + "print(try_finally2())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "Here, the abortive `return` statement in the `finally` block simply overrules the `return` in the `try` block, since **`finally` is guaranteed to always be executed.** So, be careful using abortive statements in `finally` blocks!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#Assigning types to variables as values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I am not yet sure in which context this can be useful, but it is a nice fun fact to know that we can assign types as values to variables." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'123'" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a_var = str\n", + "a_var(123)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 \n", + "1 \n", + "2.0 \n", + "3 \n", + "4 \n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Usually, it is the `__init__` method when we think of instanciating a new object from a class. However, it is the static method `__new__` (it is not a class method!) that creates and returns a new instance before `__init__()` is called. \n", - "More specifically, this is what is returned: \n", - "`return super(, cls).__new__(subcls, *args, **kwargs)` \n", - "\n", - "For more information about the `__new__` method, please see the [documentation](https://www.python.org/download/releases/2.2/descrintro/#__new__).\n", - "\n", - "As a little experiment, let us screw with `__new__` so that it returns `None` and see if `__init__` will be executed:" + } + ], + "source": [ + "from random import choice\n", + "\n", + "a, b, c = float, int, str\n", + "for i in range(5):\n", + " j = choice([a,b,c])(i)\n", + " print(j, type(j))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Only the first clause of generators is evaluated immediately" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The main reason why we love to use generators in certain cases (i.e., when we are dealing with large numbers of computations) is that it only computes the next value when it is needed, which is also known as \"lazy\" evaluation.\n", + "However, the first clause of an generator is already checked upon it's creation, as the following example demonstrates:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "ZeroDivisionError", + "evalue": "division by zero", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgen_fails\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mZeroDivisionError\u001b[0m: division by zero" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "class a_class(object):\n", - " def __new__(clss, *args, **kwargs):\n", - " print('excecuted __new__')\n", - " return None\n", - " def __init__(self, an_arg):\n", - " print('excecuted __init__')\n", - " self.an_arg = an_arg\n", - " \n", - "a_object = a_class(1)\n", - "print('Type of a_object:', type(a_object))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "excecuted __new__\n", - "Type of a_object: \n" - ] - } - ], - "prompt_number": 53 - }, + } + ], + "source": [ + "gen_fails = (i for i in 1/0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Certainly, this is a nice feature, since it notifies us about syntax erros immediately. However, this is (unfortunately) not the case if we have multiple cases in our generator." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "gen_succeeds = (i for i in range(5) for j in 1/0)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As we can see in the code above, `__init__` requires the returned instance from `__new__` in order to called. So, here we just created a `NoneType` object. \n", - "Let us override the `__new__`, now and let us confirm that `__init__` is called now to instantiate the new object\":" + "ename": "ZeroDivisionError", + "evalue": "division by zero", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mZeroDivisionError\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[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'But obviously fails when we iterate ...'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mgen_succeeds\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgen_succeeds\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mj\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mZeroDivisionError\u001b[0m: division by zero" ] }, { - "cell_type": "code", - "collapsed": false, - "input": [ - "class a_class(object):\n", - " def __new__(cls, *args, **kwargs):\n", - " print('excecuted __new__')\n", - " inst = super(a_class, cls).__new__(cls)\n", - " return inst\n", - " def __init__(self, an_arg):\n", - " print('excecuted __init__')\n", - " self.an_arg = an_arg\n", - " \n", - "a_object = a_class(1)\n", - "print('Type of a_object:', type(a_object))\n", - "print('a_object.an_arg: ', a_object.an_arg)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "excecuted __new__\n", - "excecuted __init__\n", - "Type of a_object: \n", - "a_object.an_arg: 1\n" - ] - } - ], - "prompt_number": 54 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "for i in range(5):\n", - " if i == 1:\n", - " print('in for')\n", - "else:\n", - " print('in else')\n", - "print('after for-loop')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "in for\n", - "in else\n", - "after for-loop\n" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "for i in range(5):\n", - " if i == 1:\n", - " break\n", - "else:\n", - " print('in else')\n", - "print('after for-loop')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "after for-loop\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " + "name": "stdout", + "output_type": "stream", + "text": [ + "But obviously fails when we iterate ...\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Else-clauses: \"conditional else\" and \"completion else\"" + } + ], + "source": [ + "print('But obviously fails when we iterate ...')\n", + "for i in gen_succeeds:\n", + " print(i)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Keyword argument unpacking syntax - `*args` and `**kwargs`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python has a very convenient \"keyword argument unpacking syntax\" (often also referred to as \"splat\"-operators). This is particularly useful, if we want to define a function that can take a arbitrary number of input arguments." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Single-asterisk (*args)" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "type of args: \n", + "args contents: (0, 1, 'a', 'b', 'c')\n", + "1st argument: 0\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" + } + ], + "source": [ + "def a_func(*args):\n", + " print('type of args:', type(args))\n", + " print('args contents:', args)\n", + " print('1st argument:', args[0])\n", + "\n", + "a_func(0, 1, 'a', 'b', 'c')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Double-asterisk (**kwargs)" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "type of kwargs: \n", + "kwargs contents: {'d': 4, 'a': 1, 'c': 3, 'b': 2}\n", + "value of argument a: 1\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "I would claim that the conditional \"else\" is every programmer's daily bread and butter. However, there is a second flavor of \"else\"-clauses in Python, which I will call \"completion else\" (for reason that will become clear later). \n", - "But first, let us take a look at our \"traditional\" conditional else that we all are familiar with. \n" + } + ], + "source": [ + "def b_func(**kwargs):\n", + " print('type of kwargs:', type(kwargs))\n", + " print('kwargs contents: ', kwargs)\n", + " print('value of argument a:', kwargs['a'])\n", + " \n", + "b_func(a=1, b=2, c=3, d=4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### (Partially) unpacking of iterables\n", + "Another useful application of the \"unpacking\"-operator is the unpacking of lists and other other iterables." + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "val1: 1\n", + "vals: [2, 3, 4, 5]\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "###Conditional else:" + } + ], + "source": [ + "val1, *vals = [1, 2, 3, 4, 5]\n", + "print('val1:', val1)\n", + "print('vals:', vals)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Metaclasses - What creates a new instance of a class?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Usually, it is the `__init__` method when we think of instanciating a new object from a class. However, it is the static method `__new__` (it is not a class method!) that creates and returns a new instance before `__init__()` is called. \n", + "More specifically, this is what is returned: \n", + "`return super(, cls).__new__(subcls, *args, **kwargs)` \n", + "\n", + "For more information about the `__new__` method, please see the [documentation](https://www.python.org/download/releases/2.2/descrintro/#__new__).\n", + "\n", + "As a little experiment, let us screw with `__new__` so that it returns `None` and see if `__init__` will be executed:" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "excecuted __new__\n", + "Type of a_object: \n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# conditional else\n", - "\n", - "a_list = [1,2]\n", - "if a_list[0] == 1:\n", - " print('Hello, World!')\n", - "else:\n", - " print('Bye, World!')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Hello, World!\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# conditional else\n", - "\n", - "a_list = [1,2]\n", - "if a_list[0] == 2:\n", - " print('Hello, World!')\n", - "else:\n", - " print('Bye, World!')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Bye, World!\n" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Why am I showing those simple examples? I think they are good to highlight some of the key points: It is **either** the code under the `if` clause that is executed, **or** the code under the `else` block, but not both. \n", - "If the condition of the `if` clause evaluates to `True`, the `if`-block is exectured, and if it evaluated to `False`, it is the `else` block. \n", - "\n", - "### Completion else\n", - "**In contrast** to the **either...or*** situation that we know from the conditional `else`, the completion `else` is executed if a code block finished. \n", - "To show you an example, let us use `else` for error-handling:" + } + ], + "source": [ + "class a_class(object):\n", + " def __new__(clss, *args, **kwargs):\n", + " print('excecuted __new__')\n", + " return None\n", + " def __init__(self, an_arg):\n", + " print('excecuted __init__')\n", + " self.an_arg = an_arg\n", + " \n", + "a_object = a_class(1)\n", + "print('Type of a_object:', type(a_object))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we can see in the code above, `__init__` requires the returned instance from `__new__` in order to called. So, here we just created a `NoneType` object. \n", + "Let us override the `__new__`, now and let us confirm that `__init__` is called now to instantiate the new object\":" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "excecuted __new__\n", + "excecuted __init__\n", + "Type of a_object: \n", + "a_object.an_arg: 1\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Completion else (try-except)" + } + ], + "source": [ + "class a_class(object):\n", + " def __new__(cls, *args, **kwargs):\n", + " print('excecuted __new__')\n", + " inst = super(a_class, cls).__new__(cls)\n", + " return inst\n", + " def __init__(self, an_arg):\n", + " print('excecuted __init__')\n", + " self.an_arg = an_arg\n", + " \n", + "a_object = a_class(1)\n", + "print('Type of a_object:', type(a_object))\n", + "print('a_object.an_arg: ', a_object.an_arg)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "in for\n", + "in else\n", + "after for-loop\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "try:\n", - " print('first element:', a_list[0])\n", - "except IndexError:\n", - " print('raised IndexError')\n", - "else:\n", - " print('no error in try-block')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "first element: 1\n", - "no error in try-block\n" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "try:\n", - " print('third element:', a_list[2])\n", - "except IndexError:\n", - " print('raised IndexError')\n", - "else:\n", - " print('no error in try-block')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "raised IndexError\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "In the code above, we can see that the code under the **`else`-clause is only executed if the `try-block` was executed without encountering an error, i.e., if the `try`-block is \"complete\".** \n", - "The same rule applies to the \"completion\" `else` in while- and for-loops, which you can confirm in the following samples below." + } + ], + "source": [ + "for i in range(5):\n", + " if i == 1:\n", + " print('in for')\n", + "else:\n", + " print('in else')\n", + "print('after for-loop')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "after for-loop\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Completion else (while-loop)" + } + ], + "source": [ + "for i in range(5):\n", + " if i == 1:\n", + " break\n", + "else:\n", + " print('in else')\n", + "print('after for-loop')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Else-clauses: \"conditional else\" and \"completion else\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I would claim that the conditional \"else\" is every programmer's daily bread and butter. However, there is a second flavor of \"else\"-clauses in Python, which I will call \"completion else\" (for reason that will become clear later). \n", + "But first, let us take a look at our \"traditional\" conditional else that we all are familiar with. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###Conditional else:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello, World!\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "i = 0\n", - "while i < 2:\n", - " print(i)\n", - " i += 1\n", - "else:\n", - " print('in else')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0\n", - "1\n", - "in else\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "i = 0\n", - "while i < 2:\n", - " print(i)\n", - " i += 1\n", - " break\n", - "else:\n", - " print('completed while-loop')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0\n" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Completion else (for-loop)" + } + ], + "source": [ + "# conditional else\n", + "\n", + "a_list = [1,2]\n", + "if a_list[0] == 1:\n", + " print('Hello, World!')\n", + "else:\n", + " print('Bye, World!')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Bye, World!\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "for i in range(2):\n", - " print(i)\n", - "else:\n", - " print('completed for-loop')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0\n", - "1\n", - "completed for-loop\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "for i in range(2):\n", - " print(i)\n", - " break\n", - "else:\n", - " print('completed for-loop')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0\n" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " + } + ], + "source": [ + "# conditional else\n", + "\n", + "a_list = [1,2]\n", + "if a_list[0] == 2:\n", + " print('Hello, World!')\n", + "else:\n", + " print('Bye, World!')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Why am I showing those simple examples? I think they are good to highlight some of the key points: It is **either** the code under the `if` clause that is executed, **or** the code under the `else` block, but not both. \n", + "If the condition of the `if` clause evaluates to `True`, the `if`-block is exectured, and if it evaluated to `False`, it is the `else` block. \n", + "\n", + "### Completion else\n", + "**In contrast** to the **either...or*** situation that we know from the conditional `else`, the completion `else` is executed if a code block finished. \n", + "To show you an example, let us use `else` for error-handling:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Completion else (try-except)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "first element: 1\n", + "no error in try-block\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Interning of compile-time constants vs. run-time expressions" + } + ], + "source": [ + "try:\n", + " print('first element:', a_list[0])\n", + "except IndexError:\n", + " print('raised IndexError')\n", + "else:\n", + " print('no error in try-block')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "raised IndexError\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" + } + ], + "source": [ + "try:\n", + " print('third element:', a_list[2])\n", + "except IndexError:\n", + " print('raised IndexError')\n", + "else:\n", + " print('no error in try-block')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "In the code above, we can see that the code under the **`else`-clause is only executed if the `try-block` was executed without encountering an error, i.e., if the `try`-block is \"complete\".** \n", + "The same rule applies to the \"completion\" `else` in while- and for-loops, which you can confirm in the following samples below." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Completion else (while-loop)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "1\n", + "in else\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This might not be particularly useful, but it is nonetheless interesting: Python's interpreter is interning compile-time constants but not run-time expressions (note that this is implementation-specific).\n", - "\n", - "(Original source: [Stackoverflow](http://stackoverflow.com/questions/15541404/python-string-interning))" + } + ], + "source": [ + "i = 0\n", + "while i < 2:\n", + " print(i)\n", + " i += 1\n", + "else:\n", + " print('in else')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let us have a look at the simple example below. Here we are creating 3 variables and assign the value \"Hello\" to them in different ways before we test them for identity." + } + ], + "source": [ + "i = 0\n", + "while i < 2:\n", + " print(i)\n", + " i += 1\n", + " break\n", + "else:\n", + " print('completed while-loop')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Completion else (for-loop)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "1\n", + "completed for-loop\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "hello1 = 'Hello'\n", - "\n", - "hello2 = 'Hell' + 'o'\n", - "\n", - "hello3 = 'Hell'\n", - "hello3 = hello3 + 'o'\n", - "\n", - "print('hello1 is hello2:', hello1 is hello2)\n", - "print('hello1 is hello3:', hello1 is hello3)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "hello1 is hello2: True\n", - "hello1 is hello3: False\n" - ] - } - ], - "prompt_number": 34 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, how does it come that the first expression evaluates to true, but the second does not? To answer this question, we need to take a closer look at the underlying byte codes:" + } + ], + "source": [ + "for i in range(2):\n", + " print(i)\n", + "else:\n", + " print('completed for-loop')" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import dis\n", - "def hello1_func():\n", - " s = 'Hello'\n", - " return s\n", - "dis.dis(hello1_func)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - " 3 0 LOAD_CONST 1 ('Hello')\n", - " 3 STORE_FAST 0 (s)\n", - "\n", - " 4 6 LOAD_FAST 0 (s)\n", - " 9 RETURN_VALUE\n" - ] - } - ], - "prompt_number": 38 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def hello2_func():\n", - " s = 'Hell' + 'o'\n", - " return s\n", - "dis.dis(hello2_func)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - " 2 0 LOAD_CONST 3 ('Hello')\n", - " 3 STORE_FAST 0 (s)\n", - "\n", - " 3 6 LOAD_FAST 0 (s)\n", - " 9 RETURN_VALUE\n" - ] - } - ], - "prompt_number": 39 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def hello3_func():\n", - " s = 'Hell'\n", - " s = s + 'o'\n", - " return s\n", - "dis.dis(hello3_func)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - " 2 0 LOAD_CONST 1 ('Hell')\n", - " 3 STORE_FAST 0 (s)\n", - "\n", - " 3 6 LOAD_FAST 0 (s)\n", - " 9 LOAD_CONST 2 ('o')\n", - " 12 BINARY_ADD\n", - " 13 STORE_FAST 0 (s)\n", - "\n", - " 4 16 LOAD_FAST 0 (s)\n", - " 19 RETURN_VALUE\n" - ] - } - ], - "prompt_number": 40 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "It looks like that `'Hello'` and `'Hell'` + `'o'` are both evaluated and stored as `'Hello'` at compile-time, whereas the third version \n", - "`s = 'Hell'` \n", - "`s = s + 'o'` seems to be not interned. Let us quickly confirm the behavior with the following code:" + } + ], + "source": [ + "for i in range(2):\n", + " print(i)\n", + " break\n", + "else:\n", + " print('completed for-loop')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Interning of compile-time constants vs. run-time expressions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This might not be particularly useful, but it is nonetheless interesting: Python's interpreter is interning compile-time constants but not run-time expressions (note that this is implementation-specific).\n", + "\n", + "(Original source: [Stackoverflow](http://stackoverflow.com/questions/15541404/python-string-interning))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us have a look at the simple example below. Here we are creating 3 variables and assign the value \"Hello\" to them in different ways before we test them for identity." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello1 is hello2: True\n", + "hello1 is hello3: False\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print(hello1_func() is hello2_func())\n", - "print(hello1_func() is hello3_func())" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "True\n", - "False\n" - ] - } - ], - "prompt_number": 42 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally, to show that this hypothesis is the answer to this rather unexpected observation, let us `intern` the value manually:" + } + ], + "source": [ + "hello1 = 'Hello'\n", + "\n", + "hello2 = 'Hell' + 'o'\n", + "\n", + "hello3 = 'Hell'\n", + "hello3 = hello3 + 'o'\n", + "\n", + "print('hello1 is hello2:', hello1 is hello2)\n", + "print('hello1 is hello3:', hello1 is hello3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, how does it come that the first expression evaluates to true, but the second does not? To answer this question, we need to take a closer look at the underlying byte codes:" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 3 0 LOAD_CONST 1 ('Hello')\n", + " 3 STORE_FAST 0 (s)\n", + "\n", + " 4 6 LOAD_FAST 0 (s)\n", + " 9 RETURN_VALUE\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import sys\n", - "\n", - "print(hello1_func() is sys.intern(hello3_func()))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "True\n" - ] - } - ], - "prompt_number": 45 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    \n", - "
    \n", - "
    \n" + } + ], + "source": [ + "import dis\n", + "def hello1_func():\n", + " s = 'Hello'\n", + " return s\n", + "dis.dis(hello1_func)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 2 0 LOAD_CONST 3 ('Hello')\n", + " 3 STORE_FAST 0 (s)\n", + "\n", + " 3 6 LOAD_FAST 0 (s)\n", + " 9 RETURN_VALUE\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Changelog" + } + ], + "source": [ + "def hello2_func():\n", + " s = 'Hell' + 'o'\n", + " return s\n", + "dis.dis(hello2_func)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 2 0 LOAD_CONST 1 ('Hell')\n", + " 3 STORE_FAST 0 (s)\n", + "\n", + " 3 6 LOAD_FAST 0 (s)\n", + " 9 LOAD_CONST 2 ('o')\n", + " 12 BINARY_ADD\n", + " 13 STORE_FAST 0 (s)\n", + "\n", + " 4 16 LOAD_FAST 0 (s)\n", + " 19 RETURN_VALUE\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#sections)]" + } + ], + "source": [ + "def hello3_func():\n", + " s = 'Hell'\n", + " s = s + 'o'\n", + " return s\n", + "dis.dis(hello3_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "It looks like that `'Hello'` and `'Hell'` + `'o'` are both evaluated and stored as `'Hello'` at compile-time, whereas the third version \n", + "`s = 'Hell'` \n", + "`s = s + 'o'` seems to be not interned. Let us quickly confirm the behavior with the following code:" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n", + "False\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 07/16/2014\n", - "- slight change of wording in the [lambda-closure section](#lambda_closure)\n", - "\n", - "#### 05/24/2014\n", - "- new section: unorderable types in Python 2\n", - "- table of contents for the Python 2 vs. Python 3 topic\n", - " \n", - "#### 05/03/2014\n", - "- new section: else clauses: conditional vs. completion\n", - "- new section: Interning of compile-time constants vs. run-time expressions\n", - "\n", - "#### 05/02/2014\n", - "- new section in Python 3.x and Python 2.x key differences: for-loop leak\n", - "- new section: Metaclasses - What creates a new instance of a class? \n", - "\n", - "#### 05/01/2014\n", - "- new section: keyword argument unpacking syntax\n", - "\n", - "#### 04/27/2014\n", - "- minor fixes of typos \n", - "- new section: \"Only the first clause of generators is evaluated immediately\"" + } + ], + "source": [ + "print(hello1_func() is hello2_func())\n", + "print(hello1_func() is hello3_func())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, to show that this hypothesis is the answer to this rather unexpected observation, let us `intern` the value manually:" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [] } ], - "metadata": {} + "source": [ + "import sys\n", + "\n", + "print(hello1_func() is sys.intern(hello3_func()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    \n", + "
    \n", + "
    \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Changelog" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 07/16/2014\n", + "- slight change of wording in the [lambda-closure section](#lambda_closure)\n", + "\n", + "#### 05/24/2014\n", + "- new section: unorderable types in Python 2\n", + "- table of contents for the Python 2 vs. Python 3 topic\n", + " \n", + "#### 05/03/2014\n", + "- new section: else clauses: conditional vs. completion\n", + "- new section: Interning of compile-time constants vs. run-time expressions\n", + "\n", + "#### 05/02/2014\n", + "- new section in Python 3.x and Python 2.x key differences: for-loop leak\n", + "- new section: Metaclasses - What creates a new instance of a class? \n", + "\n", + "#### 05/01/2014\n", + "- new section: keyword argument unpacking syntax\n", + "\n", + "#### 04/27/2014\n", + "- minor fixes of typos \n", + "- new section: \"Only the first clause of generators is evaluated immediately\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.0" } - ] -} \ No newline at end of file + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/tutorials/scope_resolution_legb_rule.ipynb b/tutorials/scope_resolution_legb_rule.ipynb index 18ff06c..58adb8a 100644 --- a/tutorials/scope_resolution_legb_rule.ipynb +++ b/tutorials/scope_resolution_legb_rule.ipynb @@ -1151,7 +1151,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.1" + "version": "3.5.0" } }, "nbformat": 4, From 6432318c5aaf063c3b351aaf5cee5ec263e9f8c2 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sun, 10 Apr 2016 18:53:57 -0400 Subject: [PATCH 233/248] fix links in readme --- README.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 42903d5..a1af37a 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,6 @@ - Installing Scientific Packages for Python3 on MacOS 10.9 Mavericks [[Markdown](./tutorials/installing_scientific_packages.md)] - - Sorting CSV files using the Python csv module [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb)] - Using Cython with and without IPython magic [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/running_cython.ipynb)] @@ -65,7 +64,7 @@ - Creating internal links in IPython Notebooks and Markdown docs [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/table_of_contents_ipython.ipynb)] -- Converting Markdown to HTML and adding Python syntax highlighting [[Markdown](./tutorials/markdown_syntax_highlighting/README.md)] +- Converting Markdown to HTML and adding Python syntax highlighting [[Markdown](./tutorials/markdown_syntax_highlighting/README.md)]
    @@ -124,10 +123,10 @@ - Vectorizing a classic for-loop in NumPy [[IPython nb](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day16_numpy_vectorization.ipynb)] -
    +
    -###// Python and "Data Science" +###// Python and "Data Science" [[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] *The "data science"-related posts have been moved to a separate GitHub repository [pattern_classification](https://github.com/rasbt/pattern_classification)* @@ -162,6 +161,12 @@
    +###// Other + +- [Python book reviews](./other/python_book_reviews.md) +- [Happy Mother's Day Plot](./other/happy_mothers_day.ipynb) + +
    ###// Links [[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] @@ -220,5 +225,3 @@ - [Numba](http://numba.pydata.org) - A just-in-time specializing compiler which compiles annotated Python and NumPy code to LLVM (through decorators) - [scikit-learn](http://scikit-learn.org/stable/) - A powerful machine learning library for Python and tools for efficient data mining and analysis. - - From 4e92886d30dcb67ea0c1a21c45671971c2fb3c62 Mon Sep 17 00:00:00 2001 From: rasbt Date: Mon, 9 May 2016 21:41:40 -0400 Subject: [PATCH 234/248] singly linked list --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index a1af37a..fa44730 100644 --- a/README.md +++ b/README.md @@ -68,11 +68,10 @@
    -###// Algorithms +###// Algorithms and Data Structures [[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] -*The algorithms category has been moved to a separate GitHub repository [rasbt/algorithms_in_ipython_notebooks](https://github.com/rasbt/algorithms_in_ipython_notebooks)* - +*This category has been moved to a separate GitHub repository [rasbt/algorithms_in_ipython_notebooks](https://github.com/rasbt/algorithms_in_ipython_notebooks)* - Sorting Algorithms [[IPython nb](http://nbviewer.ipython.org/github/rasbt/algorithms_in_ipython_notebooks/blob/master/ipython_nbs/sorting/sorting_algorithms.ipynb?create=1)] @@ -81,10 +80,10 @@ - Dixon's Q test to identify outliers for small sample sizes [[IPython nb](http://nbviewer.ipython.org/github/rasbt/algorithms_in_ipython_notebooks/blob/master/ipython_nbs/statistics/dixon_q_test.ipynb?create=1)] -- Sequential Selection Algorithms [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb)] - - Counting points inside a hypercube [[IPython nb](http://nbviewer.ipython.org/github/rasbt/algorithms_in_ipython_notebooks/blob/master/ipython_nbs/geometry/points_in_hybercube.ipynb)] +- Singly Linked List [[ IPython nbviewer ](http://nbviewer.ipython.org/github/rasbt/algorithms_in_ipython_notebooks/blob/master/ipython_nbs/data-structures/singly-linked-list.ipynb)] +
    ###// Plotting and Visualization [[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] From e1033b709efe22f73c2fcfee6a898b738cee1366 Mon Sep 17 00:00:00 2001 From: rasbt Date: Sat, 2 Jul 2016 02:41:01 -0400 Subject: [PATCH 235/248] banker's rounding --- ...y_differences_between_python_2_and_3.ipynb | 185 +++++++++++++++++- 1 file changed, 179 insertions(+), 6 deletions(-) diff --git a/tutorials/key_differences_between_python_2_and_3.ipynb b/tutorials/key_differences_between_python_2_and_3.ipynb index 0f74195..7928cb9 100644 --- a/tutorials/key_differences_between_python_2_and_3.ipynb +++ b/tutorials/key_differences_between_python_2_and_3.ipynb @@ -6,7 +6,7 @@ "source": [ "[Sebastian Raschka](http://sebastianraschka.com) \n", "\n", - "last updated 05/27/2014\n", + "last updated 07/02/2016\n", "\n", "- [Open in IPython nbviewer](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/key_differences_between_python_2_and_3.ipynb?create=1) \n", "\n", @@ -87,6 +87,8 @@ "\n", "- [Returning iterable objects instead of lists](#Returning-iterable-objects-instead-of-lists)\n", "\n", + "- [Banker's Rounding](#Banker's-Rounding)\n", + "\n", "- [More articles about Python 2 and Python 3](#More-articles-about-Python-2-and-Python-3)" ] }, @@ -2038,6 +2040,177 @@ "
    " ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Banker's Rounding" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to the section-overview](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python 3 adopted the now standard way of rounding decimals when it results in a tie (.5) at the last significant digits. Now, in Python 3, decimals are rounded to the next even number. Although it's an inconvenience for code portability, it's supposedly a better way of rounding compared to rounding up as it avoids the bias towards large numbers. For more information, see the excellent Wikipedia articles and paragraphs:\n", + "- [https://en.wikipedia.org/wiki/Rounding#Round_half_to_even](https://en.wikipedia.org/wiki/Rounding#Round_half_to_even)\n", + "- [https://en.wikipedia.org/wiki/IEEE_floating_point#Roundings_to_nearest](https://en.wikipedia.org/wiki/IEEE_floating_point#Roundings_to_nearest)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 2" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 2.7.12\n" + ] + } + ], + "source": [ + "print 'Python', python_version()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "16.0" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "round(15.5)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "17.0" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "round(16.5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Python 3" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 3.5.1\n" + ] + } + ], + "source": [ + "print('Python', python_version())" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "16" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "round(15.5)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "16" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "round(16.5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -2096,21 +2269,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 2", "language": "python", - "name": "python3" + "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 3 + "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.5.0" + "pygments_lexer": "ipython2", + "version": "2.7.12" } }, "nbformat": 4, From 3a59a6b66a8964a38269a68db9a02fc8ad7766df Mon Sep 17 00:00:00 2001 From: rasbt Date: Tue, 6 Dec 2016 23:57:04 -0500 Subject: [PATCH 236/248] update recommended resources --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fa44730..4eaf0b6 100644 --- a/README.md +++ b/README.md @@ -194,8 +194,6 @@ **// Resources for learning Python** -- [Learn Python The Hard Way](http://learnpythonthehardway.org/book/) - The popular and probably most recommended resource for learning Python. - - [Dive Into Python](http://www.diveintopython.net) / [Dive Into Python 3](http://getpython3.com/diveintopython3/) - A free Python book for experienced programmers. - [The Hitchhiker’s Guide to Python](http://docs.python-guide.org/en/latest/) - A free best-practice handbook for both novices and experts. @@ -204,6 +202,8 @@ - [Python Patterns](http://matthiaseisen.com/pp/) - A directory of proven, reusable solutions to common programming problems. +- [Intro to Computer Science - Build a Search Engine & a Social Network](https://www.udacity.com/course/intro-to-computer-science--cs101) - A great, free course for learning Python if you haven't programmed before. +
    **// My favorite Python projects and packages** From f7dd31f1b58612b7133d9d7a5a747c01ecf2fbdf Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 1 Mar 2017 21:52:45 -0500 Subject: [PATCH 237/248] next should be nearest --- tutorials/key_differences_between_python_2_and_3.ipynb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tutorials/key_differences_between_python_2_and_3.ipynb b/tutorials/key_differences_between_python_2_and_3.ipynb index 7928cb9..68feac3 100644 --- a/tutorials/key_differences_between_python_2_and_3.ipynb +++ b/tutorials/key_differences_between_python_2_and_3.ipynb @@ -2058,7 +2058,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Python 3 adopted the now standard way of rounding decimals when it results in a tie (.5) at the last significant digits. Now, in Python 3, decimals are rounded to the next even number. Although it's an inconvenience for code portability, it's supposedly a better way of rounding compared to rounding up as it avoids the bias towards large numbers. For more information, see the excellent Wikipedia articles and paragraphs:\n", + "Python 3 adopted the now standard way of rounding decimals when it results in a tie (.5) at the last significant digits. Now, in Python 3, decimals are rounded to the nearest even number. Although it's an inconvenience for code portability, it's supposedly a better way of rounding compared to rounding up as it avoids the bias towards large numbers. For more information, see the excellent Wikipedia articles and paragraphs:\n", "- [https://en.wikipedia.org/wiki/Rounding#Round_half_to_even](https://en.wikipedia.org/wiki/Rounding#Round_half_to_even)\n", "- [https://en.wikipedia.org/wiki/IEEE_floating_point#Roundings_to_nearest](https://en.wikipedia.org/wiki/IEEE_floating_point#Roundings_to_nearest)" ] @@ -2268,6 +2268,7 @@ } ], "metadata": { + "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 2", "language": "python", From 774859799ed53103167cc3b7ca084aff29288665 Mon Sep 17 00:00:00 2001 From: Frenchhorn Date: Mon, 24 Apr 2017 17:59:01 +0800 Subject: [PATCH 238/248] Update README.md udpate anchors --- README.md | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 4eaf0b6..05c8419 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -### A collection of useful scripts, tutorials, and other Python-related things +

    A collection of useful scripts, tutorials, and other Python-related things


    @@ -12,8 +12,8 @@ - [// Plotting and Visualization](#-plotting-and-visualization) - [// Benchmarks](#-benchmarks) - [// Python and "Data Science"](#-python-and-data-science) -- [// Other](#-other) - [// Useful scripts and snippets](#-useful-scripts-and-snippets) +- [// Other](#-other) - [// Links](#-links) @@ -21,8 +21,7 @@
    -###// Python tips and tutorials -[[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] +Python tips and tutorials [back to top] - A collection of not so obvious Python stuff you should know! [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/not_so_obvious_python_stuff.ipynb?create=1)] @@ -59,8 +58,7 @@
    -###// Python and the web -[[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] +Python and the web [back to top] - Creating internal links in IPython Notebooks and Markdown docs [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/table_of_contents_ipython.ipynb)] @@ -68,8 +66,7 @@
    -###// Algorithms and Data Structures -[[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] +Algorithms and Data Structures [back to top] *This category has been moved to a separate GitHub repository [rasbt/algorithms_in_ipython_notebooks](https://github.com/rasbt/algorithms_in_ipython_notebooks)* @@ -85,8 +82,7 @@ - Singly Linked List [[ IPython nbviewer ](http://nbviewer.ipython.org/github/rasbt/algorithms_in_ipython_notebooks/blob/master/ipython_nbs/data-structures/singly-linked-list.ipynb)]
    -###// Plotting and Visualization -[[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] +Plotting and Visualization [back to top] *The matplotlib-gallery in IPython notebooks has been moved to a separate GitHub repository [matplotlib-gallery](https://github.com/rasbt/matplotlib-gallery)* @@ -99,8 +95,7 @@
    -###// Benchmarks -[[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] +Benchmarks [back to top] - Simple tricks to speed up the sum calculation in pandas [[IPython nb](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/benchmarks/pandas_sum_tricks.ipynb)] @@ -125,8 +120,7 @@
    -###// Python and "Data Science" -[[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] +Python and "Data Science" [back to top] *The "data science"-related posts have been moved to a separate GitHub repository [pattern_classification](https://github.com/rasbt/pattern_classification)* @@ -145,8 +139,7 @@
    -###// Useful scripts and snippets -[[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] +Useful scripts and snippets [back to top] - [watermark](https://github.com/rasbt/watermark) - An IPython magic extension for printing date and time stamps, version numbers, and hardware information. @@ -160,15 +153,14 @@
    -###// Other +Other [back to top] - [Python book reviews](./other/python_book_reviews.md) - [Happy Mother's Day Plot](./other/happy_mothers_day.ipynb)
    -###// Links -[[back to top](#a-collection-of-useful-scripts-tutorials-and-other-python-related-things)] +Links [back to top] From a78df233015d84c4daea6e1fd509ebedfcdd746f Mon Sep 17 00:00:00 2001 From: rasbt Date: Thu, 17 Aug 2017 09:53:32 -0400 Subject: [PATCH 239/248] typo fix --- tutorials/multiprocessing_intro.ipynb | 2208 ++++++++++++------------- 1 file changed, 1081 insertions(+), 1127 deletions(-) diff --git a/tutorials/multiprocessing_intro.ipynb b/tutorials/multiprocessing_intro.ipynb index a3b0916..126f8c2 100644 --- a/tutorials/multiprocessing_intro.ipynb +++ b/tutorials/multiprocessing_intro.ipynb @@ -1,1151 +1,1105 @@ { - "metadata": { - "name": "", - "signature": "sha256:a96ed2f762cf56d93a4e5345428c7db5ec576916158ce54446dfdf837ec7e505" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ + "cells": [ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[Sebastian Raschka](http://sebastianraschka.com) \n", - "\n", - "- [Open in IPython nbviewer](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/multiprocessing_intro.ipynb?create=1) \n", - "\n", - "- [Link to this IPython notebook on Github](https://github.com/rasbt/python_reference/blob/master/tutorials/multiprocessing_intro.ipynb) \n", - "\n", - "- [Link to the GitHub Repository python_reference](https://github.com/rasbt/python_reference)\n" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import time\n", - "print('Last updated: %s' %time.strftime('%d/%m/%Y'))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Last updated: 20/06/2014\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "I would be happy to hear your comments and suggestions. \n", - "Please feel free to drop me a note via\n", - "[twitter](https://twitter.com/rasbt), [email](mailto:bluewoodtree@gmail.com), or [google+](https://plus.google.com/+SebastianRaschka).\n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Parallel processing via the `multiprocessing` module" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "CPUs with multiple cores have become the standard in the recent development of modern computer architectures and we can not only find them in supercomputer facilities but also in our desktop machines at home, and our laptops; even Apple's iPhone 5S got a 1.3 Ghz Dual-core processor in 2013.\n", - "\n", - "However, the default Python interpreter was designed with simplicity in mind and has a thread-safe mechanism, the so-called \"GIL\" (Global Interpreter Lock). In order to prevent conflicts between threads, it executes only one statement at a time (so-called serial processing, or single-threading).\n", - "\n", - "In this introduction to Python's `multiprocessing` module, we will see how we can spawn multiple subprocesses to avoid some of the GIL's disadvantages." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Sections" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- [An introduction to parallel programming using Python's `multiprocessing` module](#An-introduction-to-parallel-programming-using-Python's-`multiprocessing`-module)\n", - " - [Multi-Threading vs. Multi-Processing](#Multi-Threading-vs.-Multi-Processing)\n", - "- [Introduction to the `multiprocessing` module](#Introduction-to-the-multiprocessing-module)\n", - " - [The `Process` class](#The-Process-class)\n", - " - [How to retrieve results in a particular order](#How-to-retrieve-results-in-a-particular-order)\n", - " - [The `Pool` class](#The-Pool-class)\n", - "- [Kernel density estimation as benchmarking function](#Kernel-density-estimation-as-benchmarking-function)\n", - " - [The Parzen-window method in a nutshell](#The-Parzen-window-method-in-a-nutshell)\n", - " - [Sample data and `timeit` benchmarks](#Sample-data-and-timeit-benchmarks)\n", - " - [Benchmarking functions](#Benchmarking-functions)\n", - " - [Preparing the plotting of the results](#Preparing-the-plotting-of-the-results)\n", - "- [Results](#Results)\n", - "- [Conclusion](#Conclusion)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "\n", - "Multi-Threading vs. Multi-Processing\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Depending on the application, two common approaches in parallel programming are either to run code via threads or multiple processes, respectively. If we submit \"jobs\" to different threads, those jobs can be pictured as \"sub-tasks\" of a single process and those threads will usually have access to the same memory areas (i.e., shared memory). This approach can easily lead to conflicts in case of improper synchronization, for example, if processes are writing to the same memory location at the same time. \n", - "\n", - "A safer approach (although it comes with an additional overhead due to the communication overhead between separate processes) is to submit multiple processes to completely separate memory locations (i.e., distributed memory): Every process will run completely independent from each other.\n", - "\n", - "Here, we will take a look at Python's [`multiprocessing`](https://docs.python.org/dev/library/multiprocessing.html) module and how we can use it to submit multiple processes that can run independently from each other in order to make best use of our CPU cores." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/multiprocessing_scheme.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Introduction to the `multiprocessing` module" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The [multiprocessing](https://docs.python.org/dev/library/multiprocessing.html) module in Python's Standard Library has a lot of powerful features. If you want to read about all the nitty-gritty tips, tricks, and details, I would recommend to use the [official documentation](https://docs.python.org/dev/library/multiprocessing.html) as an entry point. \n", - "\n", - "In the following sections, I want to provide a brief overview of different approaches to show how the `multiprocessing` module can be used for parallel programming." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "The `Process` class" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The most basic approach is probably to use the `Process` class from the `multiprocessing` module. \n", - "Here, we will use a simple queue function to compute the cubes for the 6 numbers 1, 2, 3, 4, 5, and 6 in 6 parallel processes." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import multiprocessing as mp\n", - "import random\n", - "import string\n", - "\n", - "random.seed(123)\n", - "\n", - "# Define an output queue\n", - "output = mp.Queue()\n", - "\n", - "# define a example function\n", - "def rand_string(length, output):\n", - " \"\"\" Generates a random string of numbers, lower- and uppercase chars. \"\"\"\n", - " rand_str = ''.join(random.choice(\n", - " string.ascii_lowercase \n", - " + string.ascii_uppercase \n", - " + string.digits)\n", - " for i in range(length))\n", - " output.put(rand_str)\n", - "\n", - "# Setup a list of processes that we want to run\n", - "processes = [mp.Process(target=rand_string, args=(5, output)) for x in range(4)]\n", - "\n", - "# Run processes\n", - "for p in processes:\n", - " p.start()\n", - "\n", - "# Exit the completed processes\n", - "for p in processes:\n", - " p.join()\n", - "\n", - "# Get process results from the output queue\n", - "results = [output.get() for p in processes]\n", - "\n", - "print(results)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "['BJWNs', 'GOK0H', '7CTRJ', 'THDF3']\n" - ] - } - ], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "How to retrieve results in a particular order " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The order of the obtained results does not necessarily have to match the order of the processes (in the `processes` list). Since we eventually use the `.get()` method to retrieve the results from the `Queue` sequentially, the order in which the processes finished determines the order of our results. \n", - "E.g., if the second process has finished just before the first process, the order of the strings in the `results` list could have also been\n", - "`['PQpqM', 'yzQfA', 'SHZYV', 'PSNkD']` instead of `['yzQfA', 'PQpqM', 'SHZYV', 'PSNkD']`\n", - "\n", - "If our application required us to retrieve results in a particular order, one possibility would be to refer to the processes' `._identity` attribute. In this case, we could also simply use the values from our `range` object as position argument. The modified code would be:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Define an output queue\n", - "output = mp.Queue()\n", - "\n", - "# define a example function\n", - "def rand_string(length, pos, output):\n", - " \"\"\" Generates a random string of numbers, lower- and uppercase chars. \"\"\"\n", - " rand_str = ''.join(random.choice(\n", - " string.ascii_lowercase \n", - " + string.ascii_uppercase \n", - " + string.digits)\n", - " for i in range(length))\n", - " output.put((pos, rand_str))\n", - "\n", - "# Setup a list of processes that we want to run\n", - "processes = [mp.Process(target=rand_string, args=(5, x, output)) for x in range(4)]\n", - "\n", - "# Run processes\n", - "for p in processes:\n", - " p.start()\n", - "\n", - "# Exit the completed processes\n", - "for p in processes:\n", - " p.join()\n", - "\n", - "# Get process results from the output queue\n", - "results = [output.get() for p in processes]\n", - "\n", - "print(results)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[(0, 'h5hoV'), (1, 'fvdmN'), (2, 'rxGX4'), (3, '8hDJj')]\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And the retrieved results would be tuples, for example, `[(0, 'KAQo6'), (1, '5lUya'), (2, 'nj6Q0'), (3, 'QQvLr')]` \n", - "or `[(1, '5lUya'), (3, 'QQvLr'), (0, 'KAQo6'), (2, 'nj6Q0')]`\n", - "\n", - "To make sure that we retrieved the results in order, we could simply sort the results and optionally get rid of the position argument:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "results.sort()\n", - "results = [r[1] for r in results]\n", - "print(results)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "['h5hoV', 'fvdmN', 'rxGX4', '8hDJj']\n" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**A simpler way to to maintain an ordered list of results is to use the `Pool.apply` and `Pool.map` functions which we will discuss in the next section.**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "The `Pool` class" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Another and more convenient approach for simple parallel processing tasks is provided by the `Pool` class. \n", - "\n", - "There are four methods that are particularly interesing:\n", - "\n", - " - Pool.apply\n", - " \n", - " - Pool.map\n", - " \n", - " - Pool.apply_async\n", - " \n", - " - Pool.map_async\n", - " \n", - "The `Pool.apply` and `Pool.map` methods are basically equivalents to Python's in-built [`apply`](https://docs.python.org/2/library/functions.html#apply) and [`map`](https://docs.python.org/2/library/functions.html#map) functions." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Before we come to the `async` variants of the `Pool` methods, let us take a look at a simple example using `Pool.apply` and `Pool.map`. Here, we will set the number of processes to 4, which means that the `Pool` class will only allow 4 processes running at the same time." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def cube(x):\n", - " return x**3" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 5 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "pool = mp.Pool(processes=4)\n", - "results = [pool.apply(cube, args=(x,)) for x in range(1,7)]\n", - "print(results)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[1, 8, 27, 64, 125, 216]\n" - ] - } - ], - "prompt_number": 6 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "pool = mp.Pool(processes=4)\n", - "results = pool.map(cube, range(1,7))\n", - "print(results)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[1, 8, 27, 64, 125, 216]\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The `Pool.map` and `Pool.apply` will lock the main program until all a process is finished, which is quite useful if we want to obtain resuls in a particular order for certain applications. \n", - "In contrast, the `async` variants will submit all processes at once and retrieve the results as soon as they are finished. \n", - "One more difference is that we need to use the `get` method after the `apply_async()` call in order to obtain the `return` values of the finished processes." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "pool = mp.Pool(processes=4)\n", - "results = [pool.apply_async(cube, args=(x,)) for x in range(1,7)]\n", - "output = [p.get() for p in results]\n", - "print(output)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[1, 8, 27, 64, 125, 216]\n" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Kernel density estimation as benchmarking function" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the following approach, I want to do a simple comparison of a serial vs. multiprocessing approach where I will use a slightly more complex function than the `cube` example, which he have been using above. \n", - "\n", - "Here, I define a function for performing a Kernel density estimation for probability density functions using the Parzen-window technique. \n", - "I don't want to go into much detail about the theory of this technique, since we are mostly interested to see how `multiprocessing` can be used for performance improvements, but you are welcome to read my more detailed article about the [Parzen-window method here](http://sebastianraschka.com/Articles/2014_parzen_density_est.html). " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import numpy as np\n", - "\n", - "def parzen_estimation(x_samples, point_x, h):\n", - " \"\"\"\n", - " Implementation of a hypercube kernel for Parzen-window estimation.\n", - "\n", - " Keyword arguments:\n", - " x_sample:training sample, 'd x 1'-dimensional numpy array\n", - " x: point x for density estimation, 'd x 1'-dimensional numpy array\n", - " h: window width\n", - " \n", - " Returns the predicted pdf as float.\n", - "\n", - " \"\"\"\n", - " k_n = 0\n", - " for row in x_samples:\n", - " x_i = (point_x - row[:,np.newaxis]) / (h)\n", - " for row in x_i:\n", - " if np.abs(row) > (1/2):\n", - " break\n", - " else: # \"completion-else\"*\n", - " k_n += 1\n", - " return (k_n / len(x_samples)) / (h**point_x.shape[1])" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "**A quick note about the \"completion else**\n", - "\n", - "Sometimes I receive comments about whether I used this for-else combination intentionally or if it happened by mistake. That is a legitimate question, since this \"completion-else\" is rarely used (that's what I call it, I am not aware if there is an \"official\" name for this, if so, please let me know). \n", - "I have a more detailed explanation [here](http://sebastianraschka.com/Articles/2014_deep_python.html#else_clauses) in one of my blog-posts, but in a nutshell: In contrast to a conditional else (in combination with if-statements), the \"completion else\" is only executed if the preceding code block (here the `for`-loop) has finished.\n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "The Parzen-window method in a nutshell" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "So what this function does in a nutshell: It counts points in a defined region (the so-called window), and divides the number of those points inside by the number of total points to estimate the probability of a single point being in a certain region.\n", - "\n", - "Below is a simple example where our window is represented by a hypercube centered at the origin, and we want to get an estimate of the probability for a point being in the center of the plot based on the hypercube." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%matplotlib inline" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 10 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from mpl_toolkits.mplot3d import Axes3D\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "from itertools import product, combinations\n", - "fig = plt.figure(figsize=(7,7))\n", - "ax = fig.gca(projection='3d')\n", - "ax.set_aspect(\"equal\")\n", - "\n", - "# Plot Points\n", - "\n", - "# samples within the cube\n", - "X_inside = np.array([[0,0,0],[0.2,0.2,0.2],[0.1, -0.1, -0.3]])\n", - "\n", - "X_outside = np.array([[-1.2,0.3,-0.3],[0.8,-0.82,-0.9],[1, 0.6, -0.7],\n", - " [0.8,0.7,0.2],[0.7,-0.8,-0.45],[-0.3, 0.6, 0.9],\n", - " [0.7,-0.6,-0.8]])\n", - "\n", - "for row in X_inside:\n", - " ax.scatter(row[0], row[1], row[2], color=\"r\", s=50, marker='^')\n", - "\n", - "for row in X_outside: \n", - " ax.scatter(row[0], row[1], row[2], color=\"k\", s=50)\n", - "\n", - "# Plot Cube\n", - "h = [-0.5, 0.5]\n", - "for s, e in combinations(np.array(list(product(h,h,h))), 2):\n", - " if np.sum(np.abs(s-e)) == h[1]-h[0]:\n", - " ax.plot3D(*zip(s,e), color=\"g\")\n", - " \n", - "ax.set_xlim(-1.5, 1.5)\n", - "ax.set_ylim(-1.5, 1.5)\n", - "ax.set_zlim(-1.5, 1.5)\n", - "\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\n", - "text": [ - "" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "point_x = np.array([[0],[0],[0]])\n", - "X_all = np.vstack((X_inside,X_outside))\n", - "\n", - "print('p(x) =', parzen_estimation(X_all, point_x, h=1))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "p(x) = 0.3\n" - ] - } - ], - "prompt_number": 12 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Sample data and `timeit` benchmarks" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the section below, we will create a random dataset from a bivariate Gaussian distribution with a mean vector centered at the origin and a identity matrix as covariance matrix. " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import numpy as np\n", - "\n", - "np.random.seed(123)\n", - "\n", - "# Generate random 2D-patterns\n", - "mu_vec = np.array([0,0])\n", - "cov_mat = np.array([[1,0],[0,1]])\n", - "x_2Dgauss = np.random.multivariate_normal(mu_vec, cov_mat, 10000)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 13 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The expected probability of a point at the center of the distribution is ~ 0.15915 as we can see below. \n", - "And our goal is here to use the Parzen-window approach to predict this density based on the sample data set that we have created above. \n", - "\n", - "\n", - "In order to make a \"good\" prediction via the Parzen-window technique, it is - among other things - crucial to select an appropriate window with. Here, we will use multiple processes to predict the density at the center of the bivariate Gaussian distribution using different window widths." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from scipy.stats import multivariate_normal\n", - "var = multivariate_normal(mean=[0,0], cov=[[1,0],[0,1]])\n", - "print('actual probability density:', var.pdf([0,0]))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "actual probability density: 0.159154943092\n" - ] - } - ], - "prompt_number": 14 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Sebastian Raschka](http://sebastianraschka.com) \n", + "\n", + "- [Open in IPython nbviewer](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/multiprocessing_intro.ipynb?create=1) \n", + "\n", + "- [Link to this IPython notebook on Github](https://github.com/rasbt/python_reference/blob/master/tutorials/multiprocessing_intro.ipynb) \n", + "\n", + "- [Link to the GitHub Repository python_reference](https://github.com/rasbt/python_reference)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Last updated: 20/06/2014\n" ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Benchmarking functions" + } + ], + "source": [ + "import time\n", + "print('Last updated: %s' %time.strftime('%d/%m/%Y'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "I would be happy to hear your comments and suggestions. \n", + "Please feel free to drop me a note via\n", + "[twitter](https://twitter.com/rasbt), [email](mailto:bluewoodtree@gmail.com), or [google+](https://plus.google.com/+SebastianRaschka).\n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Parallel processing via the `multiprocessing` module" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "CPUs with multiple cores have become the standard in the recent development of modern computer architectures and we can not only find them in supercomputer facilities but also in our desktop machines at home, and our laptops; even Apple's iPhone 5S got a 1.3 Ghz Dual-core processor in 2013.\n", + "\n", + "However, the default Python interpreter was designed with simplicity in mind and has a thread-safe mechanism, the so-called \"GIL\" (Global Interpreter Lock). In order to prevent conflicts between threads, it executes only one statement at a time (so-called serial processing, or single-threading).\n", + "\n", + "In this introduction to Python's `multiprocessing` module, we will see how we can spawn multiple subprocesses to avoid some of the GIL's disadvantages." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sections" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- [An introduction to parallel programming using Python's `multiprocessing` module](#An-introduction-to-parallel-programming-using-Python's-`multiprocessing`-module)\n", + " - [Multi-Threading vs. Multi-Processing](#Multi-Threading-vs.-Multi-Processing)\n", + "- [Introduction to the `multiprocessing` module](#Introduction-to-the-multiprocessing-module)\n", + " - [The `Process` class](#The-Process-class)\n", + " - [How to retrieve results in a particular order](#How-to-retrieve-results-in-a-particular-order)\n", + " - [The `Pool` class](#The-Pool-class)\n", + "- [Kernel density estimation as benchmarking function](#Kernel-density-estimation-as-benchmarking-function)\n", + " - [The Parzen-window method in a nutshell](#The-Parzen-window-method-in-a-nutshell)\n", + " - [Sample data and `timeit` benchmarks](#Sample-data-and-timeit-benchmarks)\n", + " - [Benchmarking functions](#Benchmarking-functions)\n", + " - [Preparing the plotting of the results](#Preparing-the-plotting-of-the-results)\n", + "- [Results](#Results)\n", + "- [Conclusion](#Conclusion)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Multi-Threading vs. Multi-Processing" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Depending on the application, two common approaches in parallel programming are either to run code via threads or multiple processes, respectively. If we submit \"jobs\" to different threads, those jobs can be pictured as \"sub-tasks\" of a single process and those threads will usually have access to the same memory areas (i.e., shared memory). This approach can easily lead to conflicts in case of improper synchronization, for example, if processes are writing to the same memory location at the same time. \n", + "\n", + "A safer approach (although it comes with an additional overhead due to the communication overhead between separate processes) is to submit multiple processes to completely separate memory locations (i.e., distributed memory): Every process will run completely independent from each other.\n", + "\n", + "Here, we will take a look at Python's [`multiprocessing`](https://docs.python.org/dev/library/multiprocessing.html) module and how we can use it to submit multiple processes that can run independently from each other in order to make best use of our CPU cores." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/multiprocessing_scheme.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Introduction to the `multiprocessing` module" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The [multiprocessing](https://docs.python.org/dev/library/multiprocessing.html) module in Python's Standard Library has a lot of powerful features. If you want to read about all the nitty-gritty tips, tricks, and details, I would recommend to use the [official documentation](https://docs.python.org/dev/library/multiprocessing.html) as an entry point. \n", + "\n", + "In the following sections, I want to provide a brief overview of different approaches to show how the `multiprocessing` module can be used for parallel programming." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The `Process` class" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The most basic approach is probably to use the `Process` class from the `multiprocessing` module. \n", + "Here, we will use a simple queue function to generate four random strings in parallel." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['BJWNs', 'GOK0H', '7CTRJ', 'THDF3']\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#Sections)]" + } + ], + "source": [ + "import multiprocessing as mp\n", + "import random\n", + "import string\n", + "\n", + "random.seed(123)\n", + "\n", + "# Define an output queue\n", + "output = mp.Queue()\n", + "\n", + "# define a example function\n", + "def rand_string(length, output):\n", + " \"\"\" Generates a random string of numbers, lower- and uppercase chars. \"\"\"\n", + " rand_str = ''.join(random.choice(\n", + " string.ascii_lowercase \n", + " + string.ascii_uppercase \n", + " + string.digits)\n", + " for i in range(length))\n", + " output.put(rand_str)\n", + "\n", + "# Setup a list of processes that we want to run\n", + "processes = [mp.Process(target=rand_string, args=(5, output)) for x in range(4)]\n", + "\n", + "# Run processes\n", + "for p in processes:\n", + " p.start()\n", + "\n", + "# Exit the completed processes\n", + "for p in processes:\n", + " p.join()\n", + "\n", + "# Get process results from the output queue\n", + "results = [output.get() for p in processes]\n", + "\n", + "print(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### How to retrieve results in a particular order " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The order of the obtained results does not necessarily have to match the order of the processes (in the `processes` list). Since we eventually use the `.get()` method to retrieve the results from the `Queue` sequentially, the order in which the processes finished determines the order of our results. \n", + "E.g., if the second process has finished just before the first process, the order of the strings in the `results` list could have also been\n", + "`['PQpqM', 'yzQfA', 'SHZYV', 'PSNkD']` instead of `['yzQfA', 'PQpqM', 'SHZYV', 'PSNkD']`\n", + "\n", + "If our application required us to retrieve results in a particular order, one possibility would be to refer to the processes' `._identity` attribute. In this case, we could also simply use the values from our `range` object as position argument. The modified code would be:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[(0, 'h5hoV'), (1, 'fvdmN'), (2, 'rxGX4'), (3, '8hDJj')]\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Below, we will set up benchmarking functions for our serial and multiprocessing approach that we can pass to our `timeit` benchmark function. \n", - "We will be using the `Pool.apply_async` function to take advantage of firing up processes simultaneously: Here, we don't care about the order in which the results for the different window widths are computed, we just need to associate each result with the input window width. \n", - "Thus we add a little tweak to our Parzen-density-estimation function by returning a tuple of 2 values: window width and the estimated density, which will allow us to to sort our list of results later." + } + ], + "source": [ + "# Define an output queue\n", + "output = mp.Queue()\n", + "\n", + "# define a example function\n", + "def rand_string(length, pos, output):\n", + " \"\"\" Generates a random string of numbers, lower- and uppercase chars. \"\"\"\n", + " rand_str = ''.join(random.choice(\n", + " string.ascii_lowercase \n", + " + string.ascii_uppercase \n", + " + string.digits)\n", + " for i in range(length))\n", + " output.put((pos, rand_str))\n", + "\n", + "# Setup a list of processes that we want to run\n", + "processes = [mp.Process(target=rand_string, args=(5, x, output)) for x in range(4)]\n", + "\n", + "# Run processes\n", + "for p in processes:\n", + " p.start()\n", + "\n", + "# Exit the completed processes\n", + "for p in processes:\n", + " p.join()\n", + "\n", + "# Get process results from the output queue\n", + "results = [output.get() for p in processes]\n", + "\n", + "print(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And the retrieved results would be tuples, for example, `[(0, 'KAQo6'), (1, '5lUya'), (2, 'nj6Q0'), (3, 'QQvLr')]` \n", + "or `[(1, '5lUya'), (3, 'QQvLr'), (0, 'KAQo6'), (2, 'nj6Q0')]`\n", + "\n", + "To make sure that we retrieved the results in order, we could simply sort the results and optionally get rid of the position argument:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['h5hoV', 'fvdmN', 'rxGX4', '8hDJj']\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def parzen_estimation(x_samples, point_x, h):\n", - " k_n = 0\n", - " for row in x_samples:\n", - " x_i = (point_x - row[:,np.newaxis]) / (h)\n", - " for row in x_i:\n", - " if np.abs(row) > (1/2):\n", - " break\n", - " else: # \"completion-else\"*\n", - " k_n += 1\n", - " return (h, (k_n / len(x_samples)) / (h**point_x.shape[1]))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 15 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def serial(samples, x, widths):\n", - " return [parzen_estimation(samples, x, w) for w in widths]\n", - "\n", - "def multiprocess(processes, samples, x, widths):\n", - " pool = mp.Pool(processes=processes)\n", - " results = [pool.apply_async(parzen_estimation, args=(samples, x, w)) for w in widths]\n", - " results = [p.get() for p in results]\n", - " results.sort() # to sort the results by input window width\n", - " return results" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 16 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Just to get an idea what the results would look like (i.e., the predicted densities for different window widths):" + } + ], + "source": [ + "results.sort()\n", + "results = [r[1] for r in results]\n", + "print(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**A simpler way to to maintain an ordered list of results is to use the `Pool.apply` and `Pool.map` functions which we will discuss in the next section.**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The `Pool` class" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another and more convenient approach for simple parallel processing tasks is provided by the `Pool` class. \n", + "\n", + "There are four methods that are particularly interesing:\n", + "\n", + " - Pool.apply\n", + " \n", + " - Pool.map\n", + " \n", + " - Pool.apply_async\n", + " \n", + " - Pool.map_async\n", + " \n", + "The `Pool.apply` and `Pool.map` methods are basically equivalents to Python's in-built [`apply`](https://docs.python.org/2/library/functions.html#apply) and [`map`](https://docs.python.org/2/library/functions.html#map) functions." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before we come to the `async` variants of the `Pool` methods, let us take a look at a simple example using `Pool.apply` and `Pool.map`. Here, we will set the number of processes to 4, which means that the `Pool` class will only allow 4 processes running at the same time." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def cube(x):\n", + " return x**3" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 8, 27, 64, 125, 216]\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "widths = np.arange(0.1, 1.3, 0.1)\n", - "point_x = np.array([[0],[0]])\n", - "results = []\n", - "\n", - "results = multiprocess(4, x_2Dgauss, point_x, widths)\n", - "\n", - "for r in results:\n", - " print('h = %s, p(x) = %s' %(r[0], r[1]))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "h = 0.1, p(x) = 0.016\n", - "h = 0.2, p(x) = 0.0305\n", - "h = 0.3, p(x) = 0.045\n", - "h = 0.4, p(x) = 0.06175\n", - "h = 0.5, p(x) = 0.078\n", - "h = 0.6, p(x) = 0.0911666666667\n", - "h = 0.7, p(x) = 0.106\n", - "h = 0.8, p(x) = 0.117375\n", - "h = 0.9, p(x) = 0.132666666667\n", - "h = 1.0, p(x) = 0.1445\n", - "h = 1.1, p(x) = 0.157090909091\n", - "h = 1.2, p(x) = 0.1685\n" - ] - } - ], - "prompt_number": 17 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Based on the results, we can say that the best window-width would be h=1.1, since the estimated result is close to the actual result ~0.15915. \n", - "Thus, for the benchmark, let us create 100 evenly spaced window width in the range of 1.0 to 1.2." + } + ], + "source": [ + "pool = mp.Pool(processes=4)\n", + "results = [pool.apply(cube, args=(x,)) for x in range(1,7)]\n", + "print(results)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 8, 27, 64, 125, 216]\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " + } + ], + "source": [ + "pool = mp.Pool(processes=4)\n", + "results = pool.map(cube, range(1,7))\n", + "print(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `Pool.map` and `Pool.apply` will lock the main program until all a process is finished, which is quite useful if we want to obtain resuls in a particular order for certain applications. \n", + "In contrast, the `async` variants will submit all processes at once and retrieve the results as soon as they are finished. \n", + "One more difference is that we need to use the `get` method after the `apply_async()` call in order to obtain the `return` values of the finished processes." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 8, 27, 64, 125, 216]\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "widths = np.linspace(1.0, 1.2, 100)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 18 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import timeit\n", - "\n", - "mu_vec = np.array([0,0])\n", - "cov_mat = np.array([[1,0],[0,1]])\n", - "n = 10000\n", - "\n", - "x_2Dgauss = np.random.multivariate_normal(mu_vec, cov_mat, n)\n", - "\n", - "benchmarks = []\n", - "\n", - "benchmarks.append(timeit.Timer('serial(x_2Dgauss, point_x, widths)', \n", - " 'from __main__ import serial, x_2Dgauss, point_x, widths').timeit(number=1))\n", - "\n", - "benchmarks.append(timeit.Timer('multiprocess(2, x_2Dgauss, point_x, widths)', \n", - " 'from __main__ import multiprocess, x_2Dgauss, point_x, widths').timeit(number=1))\n", - "\n", - "benchmarks.append(timeit.Timer('multiprocess(3, x_2Dgauss, point_x, widths)', \n", - " 'from __main__ import multiprocess, x_2Dgauss, point_x, widths').timeit(number=1))\n", - "\n", - "benchmarks.append(timeit.Timer('multiprocess(4, x_2Dgauss, point_x, widths)', \n", - " 'from __main__ import multiprocess, x_2Dgauss, point_x, widths').timeit(number=1))\n", - "\n", - "benchmarks.append(timeit.Timer('multiprocess(6, x_2Dgauss, point_x, widths)', \n", - " 'from __main__ import multiprocess, x_2Dgauss, point_x, widths').timeit(number=1))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 19 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " + } + ], + "source": [ + "pool = mp.Pool(processes=4)\n", + "results = [pool.apply_async(cube, args=(x,)) for x in range(1,7)]\n", + "output = [p.get() for p in results]\n", + "print(output)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Kernel density estimation as benchmarking function" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the following approach, I want to do a simple comparison of a serial vs. multiprocessing approach where I will use a slightly more complex function than the `cube` example, which he have been using above. \n", + "\n", + "Here, I define a function for performing a Kernel density estimation for probability density functions using the Parzen-window technique. \n", + "I don't want to go into much detail about the theory of this technique, since we are mostly interested to see how `multiprocessing` can be used for performance improvements, but you are welcome to read my more detailed article about the [Parzen-window method here](http://sebastianraschka.com/Articles/2014_parzen_density_est.html). " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "def parzen_estimation(x_samples, point_x, h):\n", + " \"\"\"\n", + " Implementation of a hypercube kernel for Parzen-window estimation.\n", + "\n", + " Keyword arguments:\n", + " x_sample:training sample, 'd x 1'-dimensional numpy array\n", + " x: point x for density estimation, 'd x 1'-dimensional numpy array\n", + " h: window width\n", + " \n", + " Returns the predicted pdf as float.\n", + "\n", + " \"\"\"\n", + " k_n = 0\n", + " for row in x_samples:\n", + " x_i = (point_x - row[:,np.newaxis]) / (h)\n", + " for row in x_i:\n", + " if np.abs(row) > (1/2):\n", + " break\n", + " else: # \"completion-else\"*\n", + " k_n += 1\n", + " return (k_n / len(x_samples)) / (h**point_x.shape[1])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "**A quick note about the \"completion else**\n", + "\n", + "Sometimes I receive comments about whether I used this for-else combination intentionally or if it happened by mistake. That is a legitimate question, since this \"completion-else\" is rarely used (that's what I call it, I am not aware if there is an \"official\" name for this, if so, please let me know). \n", + "I have a more detailed explanation [here](http://sebastianraschka.com/Articles/2014_deep_python.html#else_clauses) in one of my blog-posts, but in a nutshell: In contrast to a conditional else (in combination with if-statements), the \"completion else\" is only executed if the preceding code block (here the `for`-loop) has finished.\n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The Parzen-window method in a nutshell" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So what this function does in a nutshell: It counts points in a defined region (the so-called window), and divides the number of those points inside by the number of total points to estimate the probability of a single point being in a certain region.\n", + "\n", + "Below is a simple example where our window is represented by a hypercube centered at the origin, and we want to get an estimate of the probability for a point being in the center of the plot based on the hypercube." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZQAAAGUCAYAAAASxdSgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXeUVOX9/9/3Tp/ZQpG6LCxNQUXEgCJIEVgWUIkRCwqK\nDdFEjTExNiwYG/zUX+QY2/fYYn5BiFEhAZYOFiKgIUG/iqgUkaZI2d2pt/3+WJ/rnbv3ztyZuW1m\nn9c5niO7s3eeO+V5P5/OSJIkgUKhUCiUAmGdXgCFQqFQSgMqKBQKhUIxBSooFAqFQjEFKigUCoVC\nMQUqKBQKhUIxBSooFAqFQjEFKigUCoVCMQUqKBQKhUIxBSooFAqFQjEFKigUCoVCMQUqKBQKhUIx\nBSooFAqFQjEFKigUCoVCMQUqKBQKhUIxBSooFAqFQjEFKigUCoVCMQUqKBQKhUIxBSooFAqFQjEF\nKigUCoVCMQUqKBQKhUIxBSooFAqFQjEFKigUCoVCMQUqKBQKhUIxBSooFAqFQjEFKigUCoVCMQUq\nKBQKhUIxBSooFAqFQjEFKigUCoVCMQUqKBQKhUIxBSooFAqFQjEFr9MLoFD0kCQJqVQKPM/D7/fD\n4/GAYRgwDOP00igUigaMJEmS04ugUNSIogiO4+T/iIiIoohAICALDMtSI5tCcQvUQqG4CkmSIAgC\nGhoa4Pf7wbKs/J8kSYjH42AYBhzHAQBYloXX64XP56MCQ6E4DBUUimuQJAkcx0EQBNnNpYRYKcT1\nRYzrVCqFVCoFgAoMheIkVFAorkAURaRSKUiSJMdJRFFEPB6HIAjwer3weDxpf6MUGKBZkEjchQoM\nhWI/NIZCcRTi4iJxEiISx44dgyRJspVCHicIAliWhcfjkf/TC9ITgVF+xFmWhc/nkwWKCgyFYh5U\nUCiOQawJURRlMSFxkkQigVAoBL/fD47j5I2/qakJgUCACgyF4kKoy4viCFouLkEQ0NTUlCYQahiG\nSdv4lcJCxElPYNQpx0RckskkkskkACowFEohUEGh2IokSeB5HjzPg2EYecNOpVKIRqMIBoMIBoNo\namoydD2GYeD1euH1euXrmykwHo9Hjr94vV5aA0OhZIAKCsU2SG2J2sUVi8XAcRzKy8tlYSDkuoEb\nFRilBZJJYERRRGNjIwDIwqK0YKjAUCg/QQWFYjnKwDvw08bN8zyi0Sg8Hg8qKyst2ZwzCUwymYQo\nimnWi5bAkP9YloUoikgkEvL1qcBQKD9BBYViKWoXF7FKEokE4vE4wuEw/H6/bRtxPgKj/FstC4YK\nDIXSDBUUimXo1ZZEo1GIooiKigrNwDvBjgREIwJDrBOSUZbNRUYFhtJaoYJCMR11bQk55XMch2g0\nCp/Ph7Kysoyba6bfWSk0WgKTSCTkYL0RF5lynVRgKK0JKigUU9GrLUkkEkgkEohEIi1aquSC3Rsw\nEUSGYeD3+yGKIkRRBM/z4DgOkiTlLDCkHxlABYZSWlBBoZgGyYiSJAnBYFB2cZEU4MrKyqKv6yCN\nKokFI4qi7CIzKjDKGhoqMJRSggoKpWCUgXdRFAE0b57q2pJS3ByJwPh8PgAtBYY8RikQRgVGEAT4\nfD74/X4qMJSigAoKpSC0XFyiKCIWiyGVSqGsrEzebPO5drGRSWBIw0p1kaWewKRSKVlYyGNIfIcK\nDMWNUEGh5A2JIwBIE5NUKgWv14uKioq8XVylslEWIjDAT0kCQMtkBwBpnZSpwFCchgoKJWe0aksA\nyC1LvF5v1iyu1opSYEirFz2BUVtoWi4yMjuGQATG6/WmxW8oFDuggkLJCb32KdFoFDzPIxgMynUn\nZlGqm6JSILQERhRFJJNJ8DxvuNCSCIwkSXIPMyowFLuggkIxhLp9CtnYeJ5HU1MTvF4vKisrkUwm\nIQiCk0stWtQCE4vF5IaUPM8jmUzK3ZZzFRjye2UMhgoMxWyooFCyohzNq7RKksmk3D4lEAjYup7W\nABEX4sYiWWBEJPIRGHXciwoMxUyooFAykmv7FCI2haJ3nda84SnFA0BGgdHKAqMCQ7EaKigUTfTm\nlpD2KX6/nwbeLSabMGcSGI7jkEgkMk6z1BOYeDwOAHLshQoMxShUUCgtyDSaN5lMFtw+JZ/1tNaN\nLJf7NktgyPvNMAw4jmthwZA0ZSowFDVUUChpaNWWCIKAaDQKIHv7FLNcXsrr0U0rP8wQGKU7k8TS\nqMBQ9KCCQgGgX1vSGtqnGKEUEgGMCgx5rNoyNCIwyj5kVGBaH1RQKHIDR5JRRDaTTKN5rcZsS4fS\nEj2BIW36o9FozhZMKpWSkwOUAkM+V1RgShsqKK0YZW1JKpWSJycKgoCmpiZ4PJ6C2qdQigulwBAx\nUFbxi6KYt8AAkOtrqMCULlRQWimZaktisRhCoRACgUDOX/hStCxK8Z6MoEwjBtKnWRYqMEoLhsRg\nqMAUP1RQWiFatSUA5JOkEy6uTLTmLC83YURg9GbBkL9XuteA5hgd6WGmbhVDBab4cM+uQbEcvdoS\nnuflDsHl5eWu+xKrN6XWaC24kUwCY2RcMoAWAkPa+JDHq7PIKO6GCkorIdtoXq/XK8dQCsHMSnky\nrItSHJghMADSxENtwVCBcTdUUFoByvG06vYpkiShoqICyWTSlSd/0t2YbiD2QToVF0o+AqP8W6Cl\nBUMFxt1QQSlhMrVPaWpqQiAQQCgUcp2LiyAIAhoaGsCyrFzrQKBB3OIjk8AkEglZNEh35GwuMmJ1\nKwVGXQdDsRcqKCWK3twS0j6lkNG8VkM2Cp7nUV5eLt+DKIpIJBLy3HUAuidcivtRCkwgEJBHRxNX\nrCRJGV1k6j5kJEtRK02Zfj7sgQpKiaGeW6Jsn0KKF7Xap1jdJdgopM2LKIrw+/3wer1pJ1CSCeT1\netMsMJKKSjYPOg63+CCC4ff7wbJs2rhk4rKlAuNuqKCUEFq1JUDxtE9RrpNhmLTRtmrI/ZEmlbn2\nqSoGWnu6tHJcMoAWAgOgxfubi8CQFGVq4ZoHFZQSQau2JNf2KU4F5bVcceRLbxS9NiIkJZoU4dE+\nU9lxMjkjk4hmEhhixeYiMMSFSlAWWpI6GEpuUEEpcjLVlkSjUXg8HlRWVmb9cjj15SF9xIDsnYxz\nQUtgjKawUopjkJlSYIgFUojAJBIJcBwnH7yURZbFaOE6ARWUIkavtkQ5mteM2pJcyCWGko8rLt8Y\njZEMI7Lx0Crt4oO8X7kIjF6assfj0bRgqMBkhwpKkSIIAmKxmOwmUtaWaI3mzYadFehuyDbTyjAi\nm486g8yN9TmliBVzdHIRGK2/V66NCkx2qKAUGUoXF/k3wzDyaF6fz+fq0by5uLjs3MgzuU+Ur7XS\ngqFYgxWvrZbAkEMEyRIkkPdZbcFQgckOFZQiIlNtSSKRsH00rxaZLB1SUGnExeXkl1G9+ZAuAizL\nyptPsWeQtXa0YmyxWCztPVY+hgqMMaigFAF6tSXKnxca0LbS5eUGF1chkI2glFOUlbRGFx/5TpHN\nX8uCydaqX0tg4vF4Wnym1AWGCorLyTaal2EYV3YIJliVxeUkmTLIjLRxLwacWK+b6m700tCNHiKU\nVq7y70tdYKiguBi92pJ4PI5UKoVwOJz2AXUTRAiLoWdYoWTKIKMpysVDJkGzWmDIcweDwaIWGCoo\nLkTpylJ+CJXtUyoqKkzPijGr9QoAU1xcxep6UQtMtgrvUrDaWhtmC4yyjxl53Pz583H//ffbf3MF\nQD/JLoPUlhAxIR+uZDKJhoYGBAIBlJWVyadct226ZIYJz/OorKzMW0wync7cds/ZIMH9YDCISCSC\nUCgEj8cjpyhHo1G5qI7OgHGOQlxuRGD8fj9CoRAikYg8QptkYJI0f57nNT/DyhgOy7JYuXJlobdk\nO9RCcRF6Lq5oNCp33rVyNG+hGzXJ4gIgi54ZqE92xSYoatQpynrBX5K+3FpwUwylUIzE2ZQWjPq+\nBUEoSsuVCooLyNQ+hYxE1WqfYubmWsgXWTn5MRKJIBqNmrKm1kAm1wnQ7Dq0O4OslDZ2o1gt3Jni\nbERggGZPxM6dO9G+fXuEQiFL12QFxSeBJYZy9ofSKkkkEmhsbEQoFCqKQkWSuux0HUyxo3SdAJDb\n5wA/ZfaRpAxBEFqVBWMHdn3PiMAEAgGEw+G0uqyHHnoIp512GrZv346HHnoI7777bsZmqddeey06\ndeqEAQMGaP5+/fr1qKysxKBBgzBo0CA8/PDDltwTQAXFMYhVQgZGETEhG3QymURFRQUCgYChaxVK\nPtYOx3FoaGiAx+NBeXm56SY63SxbbjyRSER2lSWTSSowJQTLsggEAliwYAFWrVqFvn37oqmpCb/9\n7W/RvXt32WpVc80116C+vj7jtUeNGoWtW7di69atmD17thXLB0BdXo6gV1tCgnd+v9+QVeKU1aJ2\ncVlhlbjVInMaPdcJz/PyECr1kLFieS1bo6tND5Zl0bNnT8ybNw9As+tTrzffiBEjsHv37ozXs+ug\nQS0UmyG1CWoXVywWQ1NTE8LhMMLhsGu/WEoXV0VFhaaYmB04p6dufYjAkAyycDiclkEWi8VoBpkB\nnBYz9fPHYjGEw2H534XEUxiGwcaNGzFw4EBMmjQJn332WUFrzQS1UGyCnCRJxlZZWRmAn0beAvlV\nkiuLogrBiAgoLahSLlQsZvSaXKr7UxVz8VxrIB6PIxKJmHKtM844A3v37kU4HMby5ctx4YUXYseO\nHaZcWw21UGxAXVtCSKVSaGhogM/nsyQGYRakOr8YLCjKTygbXJLaiGAwCJZlM9ZGOH1adwKn71n9\n/NFoNM1CKYTy8nL5WhMnTgTHcThy5Igp11ZDLRSL0aotIXNLOI4ruFmi1XUZhcxYobiLTCnKytoI\noNlyttuCcXpTdxNkQJ4ZHDp0CB07dgTDMNi8eTMkSUK7du1MubYaKigWoVdbQuack/YpbrFKtISJ\n1MEYTRLIdK1816OMMykFmVI4SoHx+/2yeyyRSJRMk8tiQf19ycXldfnll2PDhg04fPgwqqurMWfO\nHLnFz6xZs/Dmm2/iueeeg9frRTgcxhtvvGH6+glUUCxAbzRvKpWSC9UikYgpX04rLBQ7srgo7oME\n+IGfgsCtZUyyG6wjtcurU6dOhv5uwYIFGX//q1/9Cr/61a8KWptRqKCYDEnfBJB2oo7FYhAEAeFw\nGIlEwvEPrx5ktDB1cVGUKcrZxiSb0eTSDZu6W4jH40VZKU8FxST0akuI28jn86GiokK3OKnQ5y4U\nst7GxsaCxwiXQr+t1kqm9y3TmGT1jHY6Jjk3yERQQiwWkzNBiwkqKCagN5pXy21k9mZrxpeWVF0D\nza4OI9X5lNLGSFGtMoss1wmHbsNt1pGZQXk7oYJSAOrRvMrAezQahSRJtriNChEoZRYXANeM5yXC\nS2JPSv9+a4C8p27a5DJR6HyQ1k62wsZiofV8Q01GkiRwHAdBEFq0T8k0pdBNForSHVdWVoZjx46Z\nti4zkCQJDQ0N8v+TwjyGYeT23nRTcidG2rer4y9OWgluc9FSC6UVkWk0b6FTCu2AbM4kNdHsLC4z\nRJNYfWRIEYF0ZlaP1i21rKNSI1P7dvJeEheaU4cFNxU20hhKK0CvtkQ5mjdb+xQrLJRcrqfMOFO7\n49wQTFcKMwAEg8E08SZuk2AwaHnWEcU61AIjiiKSyaQcewTQwj3Wmg4L1OVV4mjVlgDNA3FisRiC\nwWDaTAMj17P7C6LOOHPbF5Q0ngSa20U0Nja2eIxS9LSyjojgF1tQuLVD3kuGYeD3+9MOC+oMMisO\nC04H5dXPb2YvLzuhgmIAskmpXVyxWAwcx+U0mtfsD60Rq0Lp4gqHw5ZnceVj6Sir8kn+fS7XIO8L\ncd9ptRWhVd/ZcTqOQYSitR8WOI4ryoJiKigZIB/iY8eOpc1I53ke0WgUHo9HczSv0Wvb8SUgM+m1\nXFxqnHB56cVzzGjdotVWROmzV3fdLbVNqVTIdFgolQwyrf2g2O4BoIKii7K2hBQjqk/6fr8/rzfd\nzA9KJhFwu4srF7ErFC2fPS3KK070UpR5nk9rckkOC0asUXVhodM4HcvMFyooKjLVlsTjcVNaklht\nCRTi4rLrg0wSGTweT1axs+L1ysWlUqxf7mIjX6s9U4qyOhvQje5O9eermD9vVFAU6NWWAM0tSXLt\numsH6s22kFO/WfeVTQBSqRSi0ahcle/066nnUlGeeMlj3LghUdLRS1FWjkl245Ax5TqK1QVLBeVH\n9GpLSJfVUChkWrM2qyyUYnBxxeNxpFIpw4kMTpzW1CdecspVfh6Uc9vd5CoplGI+HethxN1JHqec\nCWMXWpZZsb4PrV5QMs0tISmsxDXiVkgOP8ldzzeLy0pXHHk9GYYxNAfGTWJIPheBQKBF111l/MVt\nJ958Kfb1Z0PL3RmPx2VXNzlQOPV+8jxftF2+W7Wg6NWWEJcMqS1pbGx0tBgxGzzP2xLYzhfSjibX\nWh23ot6QSi3jyCmcSFkm33uGYRAIBMCyrO3vp3oviMViRVmDArRiQSEfGL3aEmX7FDdUkGvB87w8\nW8VNLi7yelkxqMtt74WRjKN8AsJOF9q1VvTeT/WYZGLBmBVPU7ddKcYqeaAVCoqR9ilWj+Y1Y1Mk\nLi6l6LlhXQRJktDU1NTqBnVlyjjSailSSvGXUsRoPZOZGWTFOlwLaGWCojW3BPhpc9bLOnLTqZhk\ncfE8j/Ly8rQUZ7dAXmc3ZsXZjTIg3BriL8WKUYtQL4NMS2CMNizVagxJXV4uRl1bonRxKTdnvawj\nswUl3+spazdIhT7JPnILyWQSqVQKPp+v4C+Fm4TcLIzGX0g7d7tx8vUuRjdfpgyyfBuWUpeXi9Gr\nLSEptl6vN+/2KfmSz0apzOLKt0LfinURlPEnN9SWFAOZ3GPk8BOPx20vyKPvXf4oDwxA5o4MenNg\nqKC4FL3aklyryJ08KWdrQumGU7w6/kTakFNyQ3naJWMGfD6fXJAH0PiLVVhlHelZpMqODMokFoZh\nilpQSvITSQLvZKYGedNILUQymURFRYVjLUmMioAgCGhoaIAkSaisrLRlBG6u98lxHBoaGuR4SWvb\n5FauXIna2lrU1NTgzDPPxOuvvy6PUy4UIjDBYBCRSAShUAgejweCICAWiyEajSKZTMqdsCnuhlik\npKN2JBKR9yBJkvD9999j3LhxWLp0KQ4cOCC7zPS49tpr0alTJwwYMED3Mbfeeiv69u2LgQMHYuvW\nrabejxYl9+0XRRGJREIuUCKnDrLxkd5RTrQkyYVkMomGhgYEAgFEIhHdNZhpoeRyn6QYrKmpCWVl\nZWnjjq2IOTmN1v3Mnz8fV111FTZt2oQjR45g+/btuOOOO3DttddassGTky4RGFLTw3EcotEoYrEY\nkskkBEEoSoFxKobi1GuldHl6vV60adMG9957LwRBwLJly9ChQweMHTsWr7zyiubfX3PNNaivr9e9\n/rJly/DVV1/hyy+/xIsvvoibbrrJqluRKSmXF6kYP3bsGNq2bStvbGQCYL61EMS6MYtMG26+c1bs\nRBRFRKNR2XKyyipxgzuPrEPNDz/8gIcfflhOBSbEYjHU19fjww8/xNlnn23pmoq5IaIbcer1IULq\n9/tx7rnnYseOHZg0aRIuuOACvPvuu3K3czUjRozA7t27da+7ZMkSzJgxAwBw1lln4dixYzh06BA6\ndepkxW0AKCFBUfflIT+LRqMAUPDGZ8fGppXFZSdGNnD1ICw3rtEOli1bpvt5isfjWLBggaWCoiZb\nQ0TAWPylGDOtSg0S362oqMD555+f93X27duH6upq+d/dunXDt99+SwXFCOQEpmyfks9oXi3M/oJp\nWTzZamEyXcuODVZvEJaTa3ISMspAC5KO7iR66axunXjYmtOV1bNYzKxDUb+uVt9nyQgKkL6RxePx\ntPYpZl3XbIrBxWXnIKxiYcSIEbpfzrKyMowfP97mFWXGSP2L1+uVs42cwmlhcwNmZXlVVVVh7969\n8r+//fZbVFVVFXzdTJRUUJ5kRQEwTUysgAgUWS9pT5KPmJgdlFdfS/maOikmbrN4+vfvj5EjRyIY\nDKb93OfzoX379rjwwgsdWll2tLKNSFsR0miUjBlwW+FsKaK2kIjLq1AmT56MP//5zwCADz/8EG3a\ntLHU3QWUkIUiSRIaGhoQCoUQj8dNPelYYaGQjdotQ6a0cHoQlttdZ6+//jp+//vf44033oDX6wXH\ncRg5ciSee+65vEcIEOx0wyjdYyzLgud5eL3egqq9iwmnXV5qiFs5G5dffjk2bNiAw4cPo7q6GnPm\nzJHjZbNmzcKkSZOwbNky9OnTB5FIRDdbzExKRlBYlkWbNm3AMIzphXVmN01MpVKy+6hQF5cVm65y\nEFY+lp7bhcAsgsEg5s+fj0cffRT79u3DCSecgPbt2zu9rIJhGAY+ny9tXojV8Re3bep2ov6uRKNR\nQ4KyYMGCrI955pln8l5XPpSMoABIa2Pgxg2NZHERl4Pb4iUkWaCxsREALO+6XCqUlZXhpJNOcnoZ\npqDe2Emii1b8RdnOnTS3pOnJ+WGFy8sJ3LWjmYRbmjkqUbqPWJZtUb9QKGac8EiQNhgMOpISrIfT\ngWLKTxht567snuyWz5EebrOOjLq83EhJCorZmNU0kWRxmdkqwyx3QzKZRDKZhMfjMeV0ZNb9ET++\nJEmOduGlaJOp265eM0RKOmpB4zjOtQlF2SgpQSEbv1tcXnYN7VLed64oU4JDoZAps1XMOu0RMSYB\nbrJZAc2plWZPzaMUjta8djLQLlP8xUkrwW0WClC86dMlJSgEN7i81HPp1X5ptwheY2MjvF4vKioq\nXDOoS5KaRweLoohwOAyfzweO4+Q6iWg0Cr/fr+tmoadgd0DcXaQIViv+ohQWN3wnnMCNgpYvVFBy\nwMgbr8yQsrNQsZD5KsQCcMOXWtknTNmrSk02NwsRFzdUgVOayRR/4ThO/u60poOB+vumHLVRjJSk\noJiN0TfXqIvLyW68dlTm53t/xGLy+XwIh8Nytlk2jFaB0yyk7DhV/+LxeJBMJuX6F3X8hYzTtQI3\nWAjK53f6UFcIJSUoVrVPV15T74OXycXlFsg8GIZhXJcSTF4/o0PP9DDShVdpvbjpNWjtkENBpmFU\nbuo/RmlJSQkKwex28wQtkcqnCNCJGA/HcWhqasooeE64vLK5CAtdT6YspGQyKf+eblLuQutgIIoi\neJ5vEX8pZsuzlDK8gBIWFCssFDWkPX6+J347TG0S4E4kEq7rb6aMl2i9fla8NnrusVLapEqRTJZn\nIpGAJEl5W55ucHkRiJVerJSUoFj5oVCLVCEuLiva4WsJKNmwSfNJuxo7FsNcFSBzkJgUnio3MIp1\n5LqpKy3PQCCgW/+iLLB0I1qNIUOhkIMrKoySEhSC1e3mC+lzRSikdsQIZMP2+XwoKysz9Dx2uby0\nMszcgN4mxXEcRFGUa1/scI9RAcsNI4kZxRB/KeYqeYAKSk7XFAQBsVjMdUFt9f26dcM2I6XazkI4\nskkBzQJNal/sco85semphz0VI7nGX0iihhOoP8dmzUJxCiooBiHptmZlcVm5xnxTgs1ak9Z18s0w\nc8tJXc89pjVi18oUV0ruGIm/kM+Z05l/NIbiIqz4EpNTNWlN4kb/JrGe4vE4WJZ1ZB59JvKNl7jp\nHtQo3WN2tXgvZZyqfwkEAojFYmBZ1pHCWKuGazlFSQkKwayTNjlVA82T+Mw8uZhpoYiiKHcJdlsN\nDHG/ZZtDX8yQyma1D1/LxUKsFze9R60d9eFAL/5iR984M+fJOwEVFB3UdRuxWMw17hcCSQnmeR6B\nQKBg68lMkSM9tziOKzjDrNg2Xy0Xi3K0LlAcGUitESOFsWbGzmgMpQgoZGMkLq5kMmlp3Uahm7ey\nhsPv9zs2610Lcl8kXbnYg7yFwjAtJyCS2IvdJ+BsuO3QZAeZ3G3qwthMsTMz4i9UUFyE+kORq19W\n6eKqrKxM+3BYFUTPB3VMIhaLmb6ufDc1YtkBMJyunG0tdvDRgY8Q42IY2X2kpc+j1YFX6wTsZKNO\np7LLisFSs7rzQjweL+ox0iUlKIR8PphkIySuI/U1nGzoSCCDsEiuOtmUzMzOyhfl2sLhsNxBwKn1\n5MLOYzvx87//HDEuhtM6noaxNWMxrsc4DOkyBD6PtZ0F9DYoUvsSjUape8zFGK1/0bM+aWFjkWC0\ncNCp1iS5ioByEJadVe9GIOnKPM/LLi7ijnP7Brjhmw24btl1GNV9FKrLq3F+n/OxZvca3LX+Luw6\nvgvndDsHo6tHY1TVKPQL9rN8PWSDYhgGqVQKgUCAdk62GLM+p7nEX/RSy2lQ3kVoqX8mMrm4tK5t\nRcNJI5C2+B6PBxUVFZZbT/msjbTst2ODM6PLgCRJ+J///g/mfTgPL096Gf/57j84GD2IEdUjMKJ6\nBB4c8SC+j32PtXvWYtXOVZi3aR7KA+UY22MsxtWMw4jqESjzl5l4Vy0xskGVSufkUiioVKMVf1En\nZwCQiytZli36GEppvYMKsm02HMfh+PHj8Hq9KC8vN/RhtrtDMNDcM6yhoQGBQACRSMTyDTsXceI4\nDg0NDfD7/abES+wiJaRw2+rb8PJ/X8aqqaswsvtIMGh53x3CHXBZ/8vw3Pjn8MnVn+DP5/8Z1RXV\nePbfz+LEF07EpEWT8OTmJ/GfQ/+BKFl/2CAbVCAQQDgcRjgchsfjkTs4RKNRJJNJ8DzfKoPr+WKX\nJU2SM4LBIMLhsOxaF0URy5cvx+DBg7Fjxw58/PHHhmYB1dfXo1+/fujbty/mzp3b4vfr169HZWUl\nBg0ahEGDBuHhhx+24rbSKCkLBcg+V17p4sqlNsLuzTKXNiV2W0/KeInbOhhn43DsMKb/YzraBNtg\n1eWrUO4vB/Dj5wb6mzDLsDit42k4reNpuG3IbYhyUby39z2s2b0G1y67FseTx3Fu93MxtmYsxvQY\ng06RTpbfSzb/fT7prVSI7IEkZxCRqaurQ8eOHTF37lz89a9/xT333INBgwZhzpw5GDNmTIu/FwQB\nN998M1YioTvAAAAgAElEQVSvXo2qqioMGTIEkydPRv/+/dMeN2rUKCxZssSu2yo9QSHotf8gvv1s\nLi4j1zN7fQSlK87utNts92k0lmOGW8rs1/yT7z/BFYuvwCX9L8HsYbPBMumvay7PFfFFMKHXBEzo\nNQEAsOf4HqzdsxZLv1qKO9fdieqKaoztMRZja8ZiaNehCHit7amWrb0IYDy9tVgszVLC6/ViyJAh\niEQiePnll9G2bVu899576Natm+bjN2/ejD59+qCmpgYAMHXqVCxevLiFoNh9QChZQQHSX0yO4xCN\nRgtql27Hm5Mt20wLu2Io2WI5bmbxjsW4bc1teGLME5hy0pQWv89moWSjR2UPXHPaNbjmtGvAizw+\nOvARVu9ejQfffxA7juzA2VVny/GXPm37GEoWKVSM9dq7u7E1jFMJHE5bZFqFjZFIBOFwGHV1dbp/\nt2/fPlRXV8v/7tatGzZt2pT2GIZhsHHjRgwcOBBVVVV44okncPLJJ5t/EwpKVlDIm5Svi0vvemah\nFgG9lGC3QIQuFAohEAjY/uXP9/lEScTcD+fi9U9fx1sXvYVBnQZpX18jhpIvXtaLoVVDMbRqKGYP\nn40j8SNY/816rNm9Bk9/9DS8rFe2XkZ1H4XKQKUpz5sJo4PFlI0SWxNOCyrBaFDeyHrPOOMM7N27\nF+FwGMuXL8eFF16IHTt2mLFMXUpOUJSuFuI6kiTJlPYfVs5YKTQl2Ky1aQmdWyc+ZqMp1YSbVtyE\nA00HsO6KdRnjGgys21DahdrhopMuwkUnXQRJkrD9h+1Ys2cNXt72Mm6svxGndDhFFpgzOp0BD2tt\nSrjSPabunEze71LJHnM7agtFEARDXcKrqqqwd+9e+d979+5t4R4rLy+X/3/ixIn45S9/iSNHjqBd\nu3YmrFybkhMUAglq5+I6shMieIIgoLGxET6fL283klX3VojQOZnKDDTHNC5ffDkGdhqIpZcsNRTD\nKMTlZRSGYdD/hP7of0J/3PyzmxHn4ti4byPW7FmDm1fejIPRgzi3+7kYXT0aI6tGolewly1rIu6x\nWCwmHxpaQ+dkt9VKGW0cOnjwYHz55ZfYvXs3unbtioULF2LBggVpjzl06BA6duwIhmGwefNmSJJk\nqZgAJSgoREg4joPf7zctp9uKDVIQBDQ0NLhuEBbgjnhJvq/5xm83YsbSGbhtyG345aBfuioOpSbk\nC2FsTbN1glHA/sb9zbUvu1bhwQ8eRMdIR9l6GV41HCGftVXUkiTJVomdnZPdtrHbhfK+c/n8eb1e\nPPPMM6irq4MgCLjuuuvQv39/vPDCCwCAWbNm4c0338Rzzz0Hr9eLcDiMN954w5J7UMJIJeYwPXr0\nKDiOk1sdmNXGQBRFHD9+HG3bti34WpIkobGxUa4sL3RaHMdxiMfjqKioKHhtDQ0N8Pl8SCQSBcVL\njh07hvLy8oLcjPF4HJIkIRgMguM4eR2xWAyBQEDz2q9uexV/2PgHvDjhxeZN2iAvbH0BXxz5Ak+N\nfarF7ziOgyAICAaDed9LrnAchxSXwufHP8eaPWuwZvcafPr9pziz65kYVzMOY3qMQf/2/U3fhKPR\nKEKhkK6bS+keEwQBgDmDxTK9p1ZCsuCcqk5vamqS68skScLEiRPxwQcfOLIWMyg5C4UMwSKT2NyG\nMq6jrKJ1A+Q0aka8xKwTP2nrkkqlZL++1nU5gcPdG+7Guj3rUH9ZPfq27Zv7em1weeWCh/VgcJfB\nGNxlMO4ceieOJ4/j3W/exZo9a/DC1hfAiRzG9BiDsTVjMbr7aLQPWd9UUOkeU3ZOVrvH3NA52ShO\nrdGN+1OhuGc3Mwmv1wtBEEwv9jNjg1TOWGFZVp4O54a1kRodURQRDoddEXyXJEkWklAoJLtelIFj\nr9eLY8ljuHrp1fB7/Fh7xdq8sqYYMHCZnrSgMlCJC/pegAv6XgBJkvDVsa+wZvcavPHZG7h11a3o\n27Zvc2PLmubGll7W2q+30c7JRtxjrdXlBaQLWrG/BiUnKFaTzwdfK1OK4zjXnFCUiQHkZOk0yhNv\nJBIBx3HweDzw+XyIRqOyf/+/B/6LGctn4Pze5+OB4Q/A78s/LdxtFkomGIZB37Z90bdtX9w46EYk\n+SQ27d+ENXvW4I61d+Cbhm8wonpEc3ymx1j0qOxhy5qy9a5yW+dkNwlZKpVyxUGuEEpOUMiHww3t\n5oHCqvONUsi9plIpRKNROTHASA8hqyFjg30+n+aplqS9rty9Er9c+Us8MvIRXHLiJXJPq3yyksys\nQ3GCgDeAkd1HYmT3kZgzYg4ORQ9h7Z61WLtnLR7Z+Agq/BVy8H9EN+sbWwItB4tptXbP5MYsddRi\nRr6HxUzJCQrBiqydXNuJkEFYPp8P4XC4hWnr5JdIr1eYWevK5zrqNSkDv+rHPbXlKby07SUsunAR\nhnQZAgBZi/YyWV9uOaWaRadIJ1x+8uW4/OTLIUoiPvn+E6zZvQbPfPQMrlt6Hc7ofAZ6VPTA0Kqh\nuPLUK+W/s+rEnq1zMtB8kFC25m9tkFlCxQwVlBwxek1yyrYjJTjXe1VaTW4Z0au1Jp7nWzwuxsVw\n05qbsKdhD9ZevhZdy7um/V6raE/tdtGbqFdMLq9cYBkWAzsOxMCOA3H7mbejKdWEl7e9jAffexD/\ne/h/0wTFLtTuMZKiTg4CgP77ZCZOurzUz00FpZVhtFtrLBYDx3GGmifaTSarySmUMZxMa9rXuA9X\nLLkCvSp6YeklS1EWyO62yeZ2kVuOiJItLejdwLo96/B/t/xfnNfnPAzsONDp5cgQF2c291ixZI/l\nCnV5uRCrYihGrqksBqysrLT1Q2/kXo1YTWa+bkbnvZDah0x1Hpv3b8ZV/7wKN51xE2aePBNBb+41\nIXpuF5L2yvN8WtsRJzctq07Of/r3nzB/y3y8ddFbeOuLtyzPBMuHbJ2TScp9sbeG0WoMSQXFpdjt\n8lJujEaKAc1cn5HOtUZnq5iFkTVl6xFGXqPXP3kd96y7B8/WPYsJvSbIBY9mrFHuyOsPgPU0N1BU\nn4pLoWGiIAq4e8PdWP/Neqy6fBW6V3THos8XwcO4Z5S0HlZ2TnZTlhdpDFvMUEHJ8ZpqlJt1LsWA\nVqxP68vh5GwVPYz2CONFHrPfm41V36zCskuWod8J1s10J7NRtGoqlLUvhVaEO0GMi+G6ZdehMdWI\nlZetRJtgGwCAIAlpnwenRJM8r9HX1GjnZLe7x2iWVytHLQJu2az1vjAkXpLLDBirYzuiKKKxsTFr\nj7CjiaOY9s40CKKAd698F2Ue6+e3K4PyylMxSRDweDxFVxH+XfQ7XPrOpTip/Ul47fzX4Pf8VKcj\niAK8TMstwK33ooVe52Sjg8XcZHmWQlDe+eOqyVgZQ1HC8zwaGhpymkmvhVVrTCaTaGxslGeP271J\naL3+HMfh+PHj8Pv9cv8iLXb8sAMj/zwSJ7U7CQsvWIh2IWs7pALZ29eT4H4oFEIkEpFjUMlkEtFo\nVG5Iauco5mx88cMXGPfGOIzvOR7P1z2fJiZAs4Vidat8uyEHgUAggEgkglAoJB8EYrEYYrEYksmk\nbHWSv3ECrRgKdXm5FGUHT7M+MKSdSyKRKHgQltkfYuUGTrLM8o2XWCFyRl+zFV+vwPVLr8dDox7C\nFf2uAMdxpq9FD6P3rQ4au3Ea4vt738eMpTPw0IiHMO2UaZqPEUShKGIohaDlHlN2TmYYBizLQhAE\nxy3NeDyODh06OPb8ZlCyggKYM9dcDSnCKnRgF2D++kRRRCwWA8MwebvgzLbsjKZRS5KEpzc/jae3\nPI2FFy3EsG7DkEwmbXNJFNJ6JdumZaSw0kwWfb4Id62/Cy+f9zJGdx+t+zhBElyR5WVXYFwre4wk\neKjdY3bEybQsFLO6ozuF858mk7HqQ0By4lmWde089cbGRlcNFCNt+rMJXIJP4Ff1v8Kn332KDVdu\nQPfK7gDsd0WYlTmm3rSMFlYWiiRJeGLzE3h126v45yX/xMknZJ4fzou8nIzQGiHWCREQpzsnx+Nx\nlJVZ3xLHSkpOUJSYddomKcFmn1zMWh/JzQ+HwwXP7CBuvUIhp79sAneg6QAue+syVFdUY+30tYj4\nnfEhZ7NQ8n2fjBZWFpqRxAkcfrPmN9j23Tasvnw1upR1yfo3glT6Li+jkJ5xyiw/Ymnm2jnZKJIk\npR2yaB2KS1G6kgrZsNX1G27qEAyku5NIzYQbSKVShiZmfnTgI1z21mW4/vTrcdewuxy1qjI1hzTz\nAKFXWEliRcrTslEakg246p9Xwct6sezSZYYbP6pdXk7VZLip/QnBiKVpdudkKigupxBBISnBSneN\n2QHiQtfX2NgIlmVRWVmJhoYGU9eWD0oBJq3w9Zj+znQs3rEYdw+7G78b+rucvpCW1BjB/vb1ytRk\nUjxJxIXM9CEbm571sq9xHy5++2IM7ToU/2fM/8kpJiKIpZflZRVqS1P5XpEi2FzdY7SXVytBOQgr\nGAympSK7IS1Ub31OdQkmz00mUVZUVGStZi/3l+Ok9idh6VdL8fSWpzG6x2jU9a5DXa86VJVXpV3X\nDpzqraZ8fqXLhbhZMgWMt323DZe9cxluHHQjbh18a86nZKuzvARBwBdffAGGYXDSSSe5oqhWTT7v\nuZZ7TGuwWK6dk2kMxeXkukko24Fopbeavenks75kMqmZfuuku4j0MPN6vXLNS7b1nNzhZIR9YTxZ\n+yS+i36HVbtWof7resxeNxtdy7tiQu8JGNt9LE5re5ot95CtDsVuSMA4EAiktRshPv0N+zbglrW3\nYN7oeZjSb0pe77+VWV6LFi3CnXfeKYthJBLBU089hcmTJ1vyfIVQ6HdHaWkC6WnkmTonq7/7tFLe\npeQTQyEnbFEUTUkJNkKu6zPSrsRuiLVktIcZwct6wUvN7ek7Rjpi2qnTMO3U5sr4LQe2oP7retyz\n4R58ffRrnFtzLsb1GIfamtoW7erNxE3t69XuEGVq8ivbXsEjGx/BqxNfxeCOgxGNRvNqlmhVltey\nZctwyy23yLEGoHmznDlzJsrKyjBmzJi0x7upn5YZ6LWG0eoRp6QUXF7us0FNxOiGzfM8jh8/LqcE\nu63lvCAIcoxEb31mrc3odYg119TUhLKysjTXmxE8jAeC2HJ4lof1YGjVUDw48kG8O/1dbLxiIy7o\newHW7VmHs18/G8P+PAx/+NcfsHHfRnCCeTGtQupQ7EKURMx5fw6e/uhp1F9Wj5E1I+VOCGSWiF41\nuBbqLC+zPtv33XdfmpgQ4vE4HnjgAVOewyysFjMSAyPtj4hngcRhEokE1qxZg1deeQXBYNDQQbG+\nvh79+vVD3759MXfuXM3H3Hrrrejbty8GDhyIrVu3mn1bupSkhZILuQ7CstvlpRcvcRKSXcbzfN4C\n52E9EKSWgqKmY7jZernkxEsgSAI+Pvgxln+5HLPfm409DXswqvsojO85HuNqxhlKldWDAQM360mS\nT+KmFTfhm4ZvsHrqapwQPkH+nZHCSi1/viiJLVxehX6+4vE4du7cqfv7bdu2lZxFkgtK9xjP8wgE\nAvB4PFi/fj02btyIU045BXV1dRg/fjzGjBnTogxAEATcfPPNWL16NaqqqjBkyBBMnjwZ/fv3lx+z\nbNkyfPXVV/jyyy+xadMm3HTTTfjwww9tub+StFCM9PMiLqR4PI7y8nJDYmLnl4BkTBELIFuxopnW\nU6brkOyyQl2DHsYDXmw5kTHTWrysF2d1PQt3nXUX1k5diy1Xb8GEXhOwZvcanPXaWRj++nA8+N6D\n2PjtRkPXVuK0hcJu2QLPu+9q/u5I/Ah+/vefgxd5/OPif6SJiRpyIg4EAgiHw4hEIvB6vXK6azQa\nla0XXuRND8qTIVl6+P3+VismWrAsi9GjR+PVV1/FwIED8frrr6NTp06YN28evvvuuxaP37x5M/r0\n6YOamhr4fD5MnToVixcvTnvMkiVLMGPGDADAWWedhWPHjuHQoUO23E9JWyh6mywJIhMXl1Gfs11B\neSfjJZm+7KR7cSAQKNha8rDaLi+jawGa56ZPO2Uapp0yDbzI46MDH2Hl7pW4c/2d2HN8D0Z3H43a\nnrWGrJdMdSiWI4oIXXMNEIsh+sUXgGIEwq5ju3Dx2xdjYq+JeGjkQznHPPQKK1OpFFJ8CjzXbMnk\nWvuih9frRW1tLVasWNEiI9Lj8eDnP/95i79xYx2KE8/NMAwGDx6MwYMH4+6779b8m3379qG6ulr+\nd7du3bBp06asj/n222/RqVMnk++gJSVpoSjR6njb0NAAv9+PsrIy16UyGomXaGF1fEfZvdhoa5dM\n6/GyXkMuL0K25/OyXgytGor7h9+P96a/hy1Xb0FdrzrZejnn9XMw5/05+Ne+f2laL05aKN4lS8D8\n8AOYeBy+v/5V/vnHBz9G3cI63DjoRjw86uGCA+hKf344HAYYIOBvziCLx+Nyymu22Es25s6dizZt\n2qRlIfr9frRr1w4PPfRQQfdQKmi9vka+U0bFT319u0Sz5C0UgjIlOJdBWOrrWWmh5Dr10QrUa1J3\nC9AqVvzmm2+wcuVKSJKE8ePHo0ePHlnXrheUz2eNWqitly0HtmDVrlX4/brfY8/xPTi3x7morWm2\nXjqXdXYubVgUEZg9G0w0CgDwz5kD7oorsHTnUvx23W/x7IRnMbHXREuemhd5+L1+BINBuVCPdDko\nZI57TU0N/vWvf2H+/PlYvHgxGIbBlClTcMstt7iqm64bul7kWkNWVVWFvXv3yv/eu3cvunXrlvEx\n3377LaqqqmAHJSko6hiKKIqIRqOQJAmVlZV5WyVWWQFuFDsAaa+blmtQkiTcfvvteOWVV+Takzvu\nuANXXXUVHn/88YzXztVCKQQv68XZVWfj7Kqzcf859+Ng00Gs3r0aq3avwj0b7kGPyh7oXtEdRxJH\nwIu8rR14iXVCYOJxvPfYTNzVaSMWTl6IM7udadlzi5Iox1DI+8cwDEKhUFqxXj6deLt06YLHHnsM\njz32WNZ1OB2kd0NMJ5VKGRqFMXjwYHz55ZfYvXs3unbtioULF2LBggVpj5k8eTKeeeYZTJ06FR9+\n+CHatGlji7sLKFFBIZDKduLicksXXgJZH6l/KUTszEYQBDQ2NsLn8+kO6Hr++efx2muvyRsO4S9/\n+Qtqamowa9Ys3esbDcoDP/VRItlMhdK5rDOmnzod00+dDl7ksXn/Zvzp33/CJ999gl7P9cKYHmPk\n2EuniIVfRJV1AgBMNIqznl+MZR9tRPcTelv33NAubFQexrTmuBfbxEq3otW63shwLa/Xi2eeeQZ1\ndXUQBAHXXXcd+vfvjxdeeAEAMGvWLEyaNAnLli1Dnz59EIlE8Morr1h2Hy3WZ9sz2YwkSeA4DjzP\no6ysLO9BWErMtgJEUZRPJmVlZaZ0Ly0UpQhnS6WeN28eYrFYi5/HYjH88Y9/xMyZM3X/1mhQXim4\n5P5IFbkZJ1sv68WwbsNwOH4YkiThybFPYvXu1VixcwXuXn83aiprMLbHWIyuGo3hNcNNtV7U1gmh\nrRSAf/lGpK60VlByyfJSpyarW43kU1jpNE5bRkpymYUyceJETJyY7gZVH96eeeYZ09aWCyUpKCRL\niswBN0NM1Ncv9IOYSqWQTCbh9XpNGftphtiR1i6SJKG8vDyj643neRw8eFD394cPH5bbTmhhxOUl\nCAIkSZLfQyIwyWQSgiCkjRQodCMjzSG7lHXBladeiStPvRKcwGHzgc1Y8fUK3PXeXdhfv1+OvdTW\n1KJjpGPezwcAgQceAGIxSCwLUWrOiGIZFkwsjsgjjyA1fXpB189GviOAM7UaccvESrejZaEUe5U8\nUKKCQjaySCSieYLOFzO+GMogdzAYNLXZZKGt+kmqMkk1zYTH40FZWRkaGxs1fx8KhTIKeTaXF0lQ\nYBgG4XAYqVRKzlIim5TP55Nbihe6kWllefk8PgzvNhxndT4Ld595N47yR7F692rU76zH3evvRs82\nPTGupnlm++DOg3PenFO3347D33yOv372V5zWYSBGdx8lr5kLBgGLN2Kzug3nW1hJcJOl4BRUUFxM\nMBgEy7JpbhKzUPYJyxV1kJvjONMEpZAvJKnLISJhpBU+wzCYOXMmnn322RYxlGAwiKuvvjrjmvQq\n5ZUNMMPhsGYLD+Ua1DUWuWxkadcyUIfStbwrrhpwFa4acBU4gcOm/Zuwavcq/Gb1b7Cvad9PsZce\n4wxZL+vG9MaMpQ/hodmPYfgp06BsJJNMJi3PO7NiwJZS9IH0OSKZGiU6gZtqUIzGUNxOSQoKkHs6\nXi7XzeeapChQGeR2qjeYEnVrl1zWc99992Hjxo349NNP0dTUBAAoKytD//79cd9992VuvaJhoahb\nuuSCeiPTc8PoBZFzrUPxeXw4p/ocnFN9DuaMmIP9jfuxevdqLPtqGe5cdyd6tenV7BrrWatpvSz8\nfCHuXn+37tx3SZIsj0Wo29dbscFmKqwkok/cmq3ZUqEWiotRZqq4gVz7heVDPuKUSCQ0W+EbvU4o\nFMKaNWuwatUqvPnmmxBFERdffLGcgZJMJnX/Vm2hqAeakXiJcpPJZcPRc8PoBZELrUPRsl5W7lqJ\n21bfhgNNB2TrZWyPsXjt09fw2ievGZr7biVWtq/XQin6pEEiEReSQGP2FES3ov4sl0KnYaBEBYVg\nhQWQyzWzFQU6ZaEQS4DjuIJbu3g8HkyYMAETJkxI+7kgZA64e1mv7O4jKcqZUruVr1Wur5ue9aJM\ngSXuRzNOyUrr5aGRD2Ff4z6s3r0a//zqn/jVil8h5Avh46s/RueyzgU9T6FY0csrF0hwn+f5tIaJ\nhRZWGsVNFhF1eRURZn9wjGxm5MQNIKd+YflidJPVGm3sxHqIy4sE36203tRopcAyDANBFNJmixgp\n4DNCVXkVZgyYgRkDZuAP7/8BxxLHHBcTIP8sLysgqeBaUxDzKawsNqLRKMrLy51eRsGUtKBY8aEz\nck0SL8lWTGm3hWJ0XYD1pzcP4wEncIhGo3l3BzADckr2+XxgWRbhcLiF9UJqXsx4TYK+ICqQW3zI\nKqweAVwIpV5Yqf4sJRIJdO7s/CGjUEpSUNQdPM3cHLOJgB3xknzWZdQSsOOLKUkSuCQHTijc5WYW\npA5Fy3oh7rBYLJZ2Sg7eeSe4Sy+FOHiw4eeRJMk144bdZKFkw4rCSre5vGgMpQiwywpQxiX0mig6\nsTYjzR3tRHa5gQEYZBQTOy04recip2RCIBBoniPC8xA++gjlL7wAZtMmRNeuNXxKliDBJXpiS5aX\nEXJ93lIorNQKytMYiotRWiZWzzApJC5h5trU15IkCU1NTbrNHfUww6rTep2UwfeKsgrbmkMagVgo\nmVD6+IM/Nj30fvEFhLVrkRg2zFCGktssFDuzvKwi38JKaqGYT/F/mgxgpaDkEpfQupaZ61JCihW9\nXq9uc0c7IfUuxOXmTXhznqpoJbm8Pux//wvvpk1gJAlSLIbKRx5BdO3atAwldQBZTn2GewTF6Swv\nK8ilsNLJGjB1nREVlCLByo2UxEvUdRxGscqlQzZvJ+eqKCH1Lsrgu9GZ8nZitLAxcN99wI+ZRwwA\nz/bt8G3cCPacc5qv86OPn+d5udKfiIubTsVuiaFY+ZpkK6wkYq8WfruhLi+XY6XLi7RQMaOOw+x1\naW3e+VzLjNdM2aRT/Trl0r7eDhgwMKIn7H//C8+P1olMLIbA7NmIrV/ffC2Fj1+5iXEch2QqCQ/r\nkcfuOrWJiZIIBkzBUyCLCXVhJUlHJhMrARhyW5oBbb1SpFhhBZAuwZWVlaY1jCz0OiStNZlMukbk\nRFGEKIpy5bsSD+uRO+xmQytYbmZTTXJNIxaK0jqR/xYAu307PO+/D+FHK0V5XaULxufzgQGTtok5\n0duKF3lXWCdOQsScVO0T95hdhZVKqMurFUI+aF6v15T5JWZ9QInFBEBz886VQkWYxG8A6L5OXtZr\naB6KXRhpDsns2gXv+vWQysshqnuBJRLwP/kk4ipBUSNBgpf1yn3TtHpb2eHf16pBcZM7zm6U4gJY\nX1ipVYdCBaUIMMNCUXbAJTUcZte15Hs9ZVIAqfh2EmWzyWQyqbse17m8DFgoUnU1YsuXA7z2ukXV\nbG/Na+Cn91qrtxUJIAuCIFt4VlgvbsrwcjJdWS/z0e7CSjuagdqBOz5RFqD80po1J6SiokI2id2A\nMinA5/O1aCNvN8r4jcfjybieXIPyVtekiKKIpKDfzBIA4PVCGD7csjUoA8ixWEyus8inHX82SjHD\ny0rMLqxUi2ipWIclKyiEQjYi5ZwQ4kridU6ndq5Pq1jR6lqbbOtRN5vMFuPwMu5JGxYlEX/c8kds\n3r8ZV/7jSozvOR61NbXW9NuSYChtmPS28nq9LawXM4r3BEloVQF5LfLdxM0urHR6hIWZlLyg5It6\nTohZFk+hqId0qU9Ddp908i3qdEvacJyL48YVNyIhJLBpxiZ8fPBjrNy1EvduuBc1lTUY33M8xnYf\niwHtBpjyfEqXVy5opb/mO0wMaBZRt7i8ip18CivV31MnU5bNpOQ/UblmBEmShEQigUQioZt665Q1\nQCrNlUO6lNexm0zryYaRoDxgrYAfjh3G1MVT0b2iO5ZcvARBbxD92vfDtFOmpc00+fWaX+P72PcY\n13Mc6nrWYUyPMWgXapfXc5pRKa/OHMt1mBjgriyvUnH3AMYLK8nv5ILXErFSSlZQ8rEo1PESrdRb\nKz74RtZntLmjGV9OI6+ZsngyGAzmfA2ng/JfHvkSU96egov7XYzZw2a3cP8oZ5rcP+x+7DyyE+8e\neBeLti/Cr1f/Gqd2OBXje45HXc86nHLCKYZf83wtlEzkOkwM0B7/WyqBYaPYIWR6liXQnCr8yiuv\nQBRF2a1pdD1HjhzBZZddhj179qCmpgaLFi1CmzZtWjyupqZG3st8Ph82b95s6v2pKflPj1FBEQRB\nnjZC2BQAACAASURBVKWeqY7DikLJTJB4CWnz7nSnYKA5+N7U1ISysjJNMTECy7CQIBmuRTGT9/e+\njwmLJuCOs+7A/cPvNxRLqC6vxvUDr8eiCxfhq1lf4Xdn/g4Hmg7giiVX4OT/ORm/XvVrLP1qKZpS\nTRmvY3UvL3JCDgQCCIfDCIfD8Hg84HkesVgMsVgMyWQSHM9Rl5fNkPeGpCZHIhH069cPX3zxBT76\n6CPU1NRg1qxZePvtt7N6VR5//HHU1tZix44dGDt2LB5//HHd51y/fj22bt1quZgAJWyh5AI5/TvR\nqiSTQCktpsrKSsdPj1rB93xhGAYexgNBFMB6cruvQkT9jc/ewD0b7sFLk17CuT3OzesaIV8ItT2b\n58VLkoQvj36JlbtW4vmtz2Pm8pkY0nUI6nrWYXzP8ejTtk/a39rdy0svOymWiIGRGLnvmFNdqEvF\n1ZMPDMOgtrYWgwYNwrFjxzBv3jzU19fj7bffxoUXXpjxb5csWYINGzYAAGbMmIHRo0frioqdr3HJ\nCooRl5eReInWde14g7QyzOxam9Z18p1AmcmMJ4F5H6wfriVJEuZ+OBd/+d+/YOklS9H/hP6mXJdh\nGJzY7kSc2O5E3Pyzm9GQbMD6b9Zj5a6V+OOWPyLiizS7xnrVYXjVcEfjBcrsJH/AD6/HK1svyWRz\nyjRxe9k9tMqpOhQ3PC+pku/fvz/69zf2uTx06BA6deoEAOjUqRMOHTqk+TiGYTBu3Dh4PB7MmjUL\nM2fOLPwGMlCygkLQ22RJa3dRFHM6/Vvh8lJfTy/DzCnyCb4beYzRavlCX++UkMKtq27F5z98jjWX\nr0GnSKeCrpeJikAFJvedjMl9J0OSJGz7fhtW7FyBRzc+iu0/bEf7UHsM6DAA+xr3oaq8yrJ1ZIMU\nNir9+6QVTGsYuesm9BpD1tbW4uDBgy1+/sgjj6T9O1OG2AcffIAuXbrg+++/R21tLfr164cRI0aY\ns3ANWqWgKFu7m9FCxUxIcWA+HYytsFCyBd8LIZfAvCiKeZ0ojyaOYvqS6agIVGDZpcsQ8dnXgI9h\nGAzsOBADOw7E74f+Hj/Ef8ANy2/AruO7MOz1YehW3k0O7A/uMtjWmIa6sJFsSmQcMgkeKyvD7epr\nZRdOudv0LBQ1q1at0r1Gp06dcPDgQXTu3BkHDhxAx44dNR/XpUsXAECHDh3wi1/8Aps3b7ZUUEo+\nKK8mlUqhoaEBgUAAkUgk5y+GVRYKiZckEglUVFTk1Q7fbMwIvmfCwxirRSExLhJU5nlefs0ysevY\nLtS+UYsBHQfgLxf8xVYx0aJ9qD1ObHcipvafiq9v/BpPjnkSDBj8du1v0fv53rhm6TV447M38EP8\nB8vXote6nnwfyDCxUCgkH26IizgWiyGRSMjvQyE4nTLsBmEk2Zu5MHnyZLz22msAgNdee00z5hKL\nxdDY2Cg/x8qVKzFggDn1VHqUrIWijqEQkz6ZTBbU2p1g5hdBkiQ0NjbmXByoxiyxkyRJLsoqJPie\nrU+Zl/VmFBSSZqlsnCeKYosZ71rtxrcc2IIrllyB3535O8waNCuv9VsBSRv2sl4MrRqKoVVDcf85\n92N/436s3LUSS75cgt+t/R36tu2L8T3HY2LviRjYcaDpG58gGu/llRZ7UVTtZxsmRtFG/Z2Ix+M5\nC8pdd92FSy+9FC+99JKcNgwA+/fvx8yZM7F06VIcPHgQF110EYDmnn/Tpk3D+PHjzbsRDUpWUAhk\nUyOjcAvNljL7y0JOfYFAIOeJj1agzJMvRNyM4GH1XV7EYgN+6lgsCEJaUVgwGNSsSP7nzn/i9rW3\n49m6ZzGx10TL1p8PeoLftbwrrj7talx92tVI8kms27kOa79di2uXXYumVBNqa2pR16sOo7uPRkWg\nouB18CKfV+sVIhjqrrxaw8TcOs8dcFd2WT7Dtdq1a4fVq1e3+HnXrl2xdOlSAECvXr3wn//8x5Q1\nGqXkBUUQmk/ALMuaNgo328nbKKlUCqlUSg52m7WufCHBd1KMZXWasl5QXhRFNDY2pvnriT+ftHYn\nva78fr98auY4DvM/mo8Xt72IBZMWYFDnQRAEwXU+/2xrCXgDGNltJGp712KeZx6+Pvo1Vu5aiZe3\nvYwb62/EGZ3PkNOST2x3Yl73JkqiKc0hldaL1kwRt1svbsjyysfl5VZKWlCI7x2AqXPVC924lc0d\n3TCiF0gPvpPRqFbDMmwLC4WIGvHfNzQ0yKJAxIS0dud5Xk5xFSQBd757Jz7c/yFWX74aXSNdNavF\nrchYYvbvh//pp5F8/HEgW6GqwTHDSnq37Y2b2t6Em864CVEuig3fbMDKXStx4d8vhM/jk62XEd1G\nIOQLGbqmFe3rjVgv6mFiTsdQ3EAsFkNlZaXTyzCFkhUUsmmXl5ejsbHRNR9cpfutoqICqVRKtqLM\nun6uqMcGx+Nxy+pZlKiD8kTUSHsZ8rfxeFxOb+U4DoIgwO/3y26wo7GjmLliJiRIWH7JcrQJNbeg\nUPe6UmcsmXVq9j/8MHx/+Qv4sWMhZPFRF1opH/FFMKn3JEzqPQmSJOGzw59hxa4VeGrzU7hm6TUY\nVjUMdb2arZfuFd11r6PVvt5sN5DaetEaJsayrCPuJyf3A/VzJxIJVFU5l0JuJiUrKCzLygWBdtSO\nGEGZrmymxaRcVy6YWfmeD17WK7deUYsacZ2EQiHZnUUKK5XWxrcN3+Lity7Gzzr/DHNHzoXP40Mq\nlZItF+V/ymrxTKfmXGC+/Ra+N98EAzTPla+tzWilmFkpzzAMTulwCk7pcApuP/N2HE0cxdo9a7Fi\n5wo8svERdAh3kF1jQ7sOhc/zUyJKtiwvs1E2TSQuSkEQwHGcHC9zYhSyG4jFYgiFjFmWbqdkBQWA\nfPqxoro91+vp1XPYVXmvRm0pabXBtxoP6wEncIjFYkilUrKoEZcWiZNIkiRbFqFQSO6qu+mbTbhm\nxTW44fQbcPtZt8tzWMjfkzYjANLiMdlOzbm0gfc/+ijwY98ldu9eeFatymilWHkybhtsiyknTcGU\nk6ZAEAX8+9C/sXLXSsx+dzZ2HduF0d1Ho65XHWprajVHANsJeR8Yprn9SzAYLOh9KCa06lByDcq7\nlZIWFKvIZUMgm6Hy9G3luow2wsxkKdkVa/IyXjRGG8EHeNmaVIoJwzByejDLsnK2l9frxbp963DD\n8hvwxLlP4Pye5yMajcrJBMr0VjJGVykuRFiUg5AyDbHSuw/ZOvmxLTkTjWa1Uuzq5eVhPRjSZQiG\ndBmCe4fdi0PRQ1i1axVW7FyBu9ffjTJfGTjJ+cmjpNWLkffBTOvFLS5wIL+0YbfSKgTFKZeXsrlj\npnb4dlooVla+54IoioDU7HopLy+Xf6bMyhIEAdFoFH6/Py154cWtL+Lxfz2Ov/3ibzir6iwALQPA\nkiTJlghxdSktEqBZWImwkOfUajVO3DKJRCItHVZpnRCyWSlWtK83QqdIJ0w/dTqmnzod7+99H5ct\nvgwjq0favg4j6L0PpWK9EBElUAulSFBmkdjtViKpr8pYjtVku08ygz6bpWT168XzfLOF5GluUgg0\nb+7ki8YwDDiOQzweRzAYlLOGBFHAvRvuxYqdK7DmijXo2aZn2pqJgASDQbkAklyHzINQurvIc2az\nXjwejxyXIemwvoMHUaawTuR1ZLNSDI4AtorlO5fjlyt+iT+f/2eMrRnr2DqMooy9APkNE9PCTXUo\neq1XipGSFhQldlooPM+jsbHRUHNHO8ROmabsRPBdiXJQmN/jhyAJ8sZO3FypVEqujieFjDEuhuuW\nXoejiaNYc8WarBMTWZZFIBCQs8VIHQtxjRHLRVk/QdxtAFrUr6jTYf0vvgjwPMSyMvz4AFkmPNu3\nw7NxI4Thw1usyykLBQD+3//+Pzzw3gNYdOEiDOkypMXvnXAD5fqc+QwT08NNLi9qoRQRVmRT6YkA\nsQLyae5oxbqyBd/tXI86k4tlWCS5pGyZEOHjeR6RSEQWvkPRQ7j07UvRt21fvHr+qwh49YeM6a2D\nuFCU1ksikZCr74m4sCybFtgn/082L7nQcuZMSMOHt3ClkXsR+vWD58fHKyk0bThf5n80Hy9sfQFL\nL1mKk9qfZPvzW4Ge9aJMD8/HerEaGpQvcuy2AsrLyw0PLLJybfmmKZu9Jq30ZEFozjISJVEWk1gs\nBkmSEIlE5I3488OfY8pbUzDtlGm4Z9g9BW8KWpsQiZMQ15hSYIjvnqyZiIanVy8IvXunCYYH6TPE\nkz8mEyg3NbstFEmScP9796N+Zz1WTF2BbuXdbHtuu9EbJqZV3OqmoHwikaBpw8WA0l1hpcsr3+FT\nZkOyooD04LuT1fhqC0mZyUUGbCkzuZTCt27POlz9z6vx6KhHMe3UaZasT92+hdRGEHGTJAl+vx/B\nYFDXNZYpsE82NTJjhOf5vFvx5wov8rhl1S3YcWQH6i+rR/tQe0ufz00oY2pAS+uFuFedaM2jfu/d\nJG6FUtKCosQqQcln+JTetczCSbebmlgsJs+dAdIzuTxMcx1KU1NTi0yu1z99HfdtuA+vX/A6Rna3\nJxtJuQklk0kkEgn4/X4IgoCGhoa0rDG1a0xd8wIgrSI/EAg0CwkjQRRERKPRtD5XZh9C4lwcVy+9\nGpzIYcnFSxxv3a+HXZup2npJpVLged41w8SooBQRVrmVlAHmQCA3vz7B7LWRzCYz2s4XAgmC+/1+\n2T+szuTyMB5EY9G0TC5JkvCHD/6AhZ8tRP3UevRr36+gdeQK2WzImAPyGpJqfeUJN1PNC9kolVlj\nLMvCw3oQ8DfP4slUsV/IRns0cRRTF09FdXk1nqt7Lq1CnpI+TIwIvZ3DxJTvbSlZJ0ArEhTiojAL\njuOQTCZzipdYCSmglKTCW/QXChFaUqgGQDOTCxLg9XvlxyT5JG6svxG7ju3Cumnr0DGiPYXOKkit\nCc/zKCsrS3sNSZaX0jWWT80LaTWTrWIfaBblXK2XA00HcNFbF2Fk9Ug8NvqxnFrUl9rmZhTi9gSg\n6aa0uh1/Kb3uzu+EFmJFDIWcYHOdRa+HGWsjwXeySZkhJvmsSdkVoLy8XN5seZ5Pa6OSSCTAcRwC\nvgBIwtMP8R9w+TuXo0O4A5Zfttxw11yzUCYFZBsLXUjNi1I4yAalrhQnMSXyOKMn5q+OfoWL3roI\nMwbMwO1Dbi+ZTcoK9D7fyvdWab2o2/EXYr2UkoCoKWlBUWKGoFixcReKMvgun/wLJN8vCRnPq3S3\nkRb9yrRgURQRiUTgZb3gRR5fH/0aU/4+Bef1OQ9/GPWHvAY/FYJeUoBRcql5YVgGPq9P7jsGQJ7z\nog7uk5iSkRPzfw79B5e+cynuHXYvZgyYYe4LZCFObq5GnlfLeiECAxRuvair5oudViEoZnxgycYd\nDAbBsqwpGzfw09ry+WKpg+9mrSlXlJlc5eXl8ibo8/lk9xexxDweD8LhsByU//yHz/Gb1b/BvcPv\nxfWnX2/72kWxOUDu8/lMyYbLVvPC8zwkUcpY86K+XrYT8wcHPsANK27A/Nr5OL/P+QWtn6KP2k1J\nDg+5DBNTH2xJN4hSoaQFxSyXFynIU27cTrZu0Kt8N8u1l8t11LUuwE+ZXORkzvO8bAGQFGufz4dP\nv/8Uy3cux6vnv4oL+l5Q8LpzhayLWBdmo1XzwrBM2kRKdcW+KIry50vpKlRaL8oT89tfvI3frfsd\nXhj3AoZ1GYZkMum6Qj43UqhlQAQjl2Fi6r8HSqvtClDigkLId6PVKsgj17NifUau62Tluxp1ixmg\nZSYX2bRJJpeyXUbXSFcwEoPrl16PYVXDcF6f8zCpzyR0Le9q+dpJvCMUClnaAVqJ0pVVUVHRouaF\nrIPjOIRCobR2/EDLmpdXPnkFc/81F+9MeQcDOgzQbUNiJBXWiQPSwYMH8f777yMcDmPMmDFFfVLP\nlmShF3ehgtJKICdphmFQWVmZ9iGwo/JeCyNt5+1aF3FlEatNGXhWZnKpe3IpT+3LLl8GURTxQ/QH\nrNy5Est3LseD7z2I7hXdMbH3RJzX5zwM6jzIdAHXWpddkPb16sI7EiPh+eaRyKTDMXGfKdOReZ7H\nk1uexILPF2DpxUvRq20vQ21IjAT27bBqeJ7HbbfdhoULF8Ln88mf26effhqXXHKJ5c9vNcr3Qp0V\nSNzSyWQSX3zxBQDkLCh/+9vf8OCDD2L79u3YsmULzjjjDM3H1dfX47bbboMgCLj++utx5513FnZj\nBmgVgpLrRku64ZK55lZ/yYysz87K90zrIVlaiURCTpnWy+RKpVJpPbm0YFkWHco7YNrAabjitCuQ\n5JJ4/5v3sXznclz9j6sR5aOY0HMCzut7Hs7tcW5B2V8kC43juKzrsgotS5TUuIiiKMegiG9eXfPC\neljcteEubNy3EfWX1qNDqIOua0yrDYldqbCZeOCBB/C3v/0NyWQSyWRS/vnNN9+M6upqDB061PI1\n2JkMoDw8KOuY5syZgw8//BBdu3bF888/j0mTJqF7d/2xzYQBAwbg7bffxqxZs3QfIwgCbr75Zqxe\nvRpVVVUYMmQIJk+ejP79+5t5ay0onfQCDfKJoaRSKTQ2NiIUCulm/JhtCWS7XjKZRFNTEyKRSMbu\nxVZbKMQFSGI3Xq9XPnkRq4TEd0gtRy6bNsMwCPqDGNdnHJ6ofQJbr9uKxb9YjJryGjz14VOo+VMN\nprw5BS/95yUcaDqQ89q1Gk/ajXrAlnpdyvYt4XAY5eXlcp+n403HcdU7V2Hbd9vwjyn/QLc23eQO\nA6QYkrjRSIsX4KcNLRAIIBwOIxQKya34o9Eo4vG4nLVkNbFYDC+99JIcZ1ASj8fx+OOP27IOp1DG\nXv7+97/jpZdewoknnogPPvgAP/vZzzB9+vSs1+jXrx9OPPHEjI/ZvHkz+vTpg5qaGvh8PkydOhWL\nFy826zZ0oRbKjygD3dmKFe1yLeWyJqtRugArKioAQHe6IsMwiEQiBZ0Aidvg1C6n4tQup+K3w36L\n75u+x4qvV6B+Zz3uf/d+1FTWYFLvSTivz3kY2Gmg7vMRIQRQ8LoKRdkc0si6iBgkxASuWXUNQt4Q\n/n7h3+GFFw0NDYbmvJDsOqUVowwmk2aWQPOGb2WH3j179mSM+23bts3U53Mb6n2DZVkMHjwY999/\nPwRBwHfffWfK8+zbtw/V1dXyv7t164ZNmzaZcu1MtApBIeiZuU4HurUEKp81WZXllSmTSzldkfTt\nyjYDJh9YlkWnik64atBVuPL0KxFPxvH+3vex/OvlmL54OpJiUnaNje4xGkFvUF5nNBq1bF25IknN\nFookNU/zZFk2q1v1cOwwprw1BaeccArmj58PL+uVr5XrnBee59NcYkp3Gs/zCAQCeQf2jdC2bduM\n1lDbtm0Lfg4juKX+RRmU93g86NKlCwCgtrYWBw8ebPG3jz76KC64IHtGpFP31ioEJdOLm0+Ld6st\nFLImj8eTtWrbakgmFxkZrDwB62VyWQ3DMAgHwxjfdzxq+9RCEAR89t1nWP71cszbOA9X//NqjOg2\nAhN7T8TIziPRrU03Rzsut0CC/JnLJnJ7G/bi53/7OS7oewEeHPFgi+SQfOe8qJtZks+zGYH9THTu\n3Bmnn346tmzZ0qIdUigUwg033JDzNYsZvSyvVatWFXTdqqoq7N27V/733r170a2b9aMLSlpQtDKz\nlD8rdL66WaccpUApCyjzOVGbKXTqwslMmVx2pt8qIafy07qehtO6noY7ht+B7xq/Q/3X9aj/uh6z\nN8xG77a9ZdfYgI4DHBUWURKRTCYNFVJ+fvhzXPjmhbhl8C24efDNGa+rleVFrBetOS/qZpZ67fgz\nBfYz1Vlk4oUXXsDYsWMRi8XkWEokEsHPfvYzXHvttYavUwhOWSjq543FYmjXLvP00WzX02Lw4MH4\n8ssvsXv3bnTt2hULFy7EggUL8n4eo5S0oChRbtrKnlPZ5qvrXcsKCm07b/a6YrGYKZlcdsKyLNqF\n2uGiPhdh2oBpSAkpvP/N+1j29TJMfWcqeJGXU5JHdh8pu8bsgOd58BwvWxSZ2LRvE6a+MxWPnfsY\npp48NefnyjbnhYiLz+eT3ZUkPRnQnvNC4jSk35i6zkJpvWSiV69e+Pe//43XXnsNy5YtQ3l5Oa66\n6iqcd955rmi0aickfT0X3n77bdx66604fPgwzjvvPAwaNAjLly/H/v37MXPmTCxduhRerxfPPPMM\n6urqIAgCrrvuOsszvACAkZws+bYBUnV87NgxlJeXg2VZRKNRCIKQcxaSkqNHj5rW1bexsREA5DXl\n+6WSJAlHjx5F27Zt8xYX4ttPpVLy/ZGTrDqTSxRFuY2KGyCNO5PJZAuRI5vqp999iuVfL8eKXSuw\n/eh2jKoehUl9JmFi74mWdjcmhZQ3rb0Jv+j3C1zc72Ldx67YuQI3LL8BL058EXW96kxfi7IfFXF7\neb1eOftLPfYYQIvAvhJlYJ/EaIwG9kmnArsPJNFoVL5fOyH7EenMMHfuXAwbNgyTJk2ydR1W0WqO\nAyRwTGITZHpgIdczQ4uVJ/9CEwIKtVCUmVzKn6nFhASAnc6YUkIsJq3W88BPrrHTu56O07uejjuH\n34lDjYew/KvlWLZjGe5adxdObHciJvWehEl9JuHUDqeadm/KQkqGYTLOlH/jszdw97q7sejCRTir\n6ixTnl+NsucUqbciSSDKIL1eYF+ZjPH/2zvz6KiqdO0/VZlIJZUAgmkI+RjES6AbIQFJd2OYp5AR\nQQkgImCMtBr0gihLWxBtnJDlvYJcR4aFBklCBiEJU0tkSoKCCkhE8KabQSIIZK6qVKW+P3L38eTk\nnKpTVWeq1P6t1auXUNTZOTlnP3vv932fl69LJbtinwiRms2r+FAzKM+mubmZVsp7K42NjW7HJuSA\n7V5MHHnVHAu78+Tt27fb1TGQtGAtZUwRSPqt3e7cep6g1+vRK7wXFo1YhIWxC9FkbsJX//oKJT+X\n4IFdbdXa5GgsPioeQf7ueX2R4j2yY3LUU37D1xvw7tfvYs/sPRjSY4hb1xMLSaQwGAzMkS/Xj4oc\njZHjMfIMsM0syWKIHah3FNjXorgoCVfIqKB4GTqdjsl66dKlC1MkJsX3erJDYftgkfNqKcflyvdx\nkxPIz2UymdqllMpppOgunlrPA233LKRLCBIGJWDaf0yDzWbD6ZrTKL5YjFcOv4Lzt85j3P8bh8SB\niZh611T0NPR0+p1COyaSNsz97OrDq1H0UxEOzD2AqLAovq+UDCEfM3acRGyfF3bGGDk+c1axzzZQ\nJN+hpJmllk75Scy0s9DpBaWxsZFxYJU64Ofug8kNvpPVtRoIZXIZDAam5zbZqZAgr1aQ2noe+H1S\njYmMQUxkDFbetxK/1P2C0oulKKwqxPJ/LsfgOwa3ZY3dnYjBdwzucF12jIlUvzN/x6mUt7ZakbUv\nC2eun8H+OfvRw9DD45/BEa74mInp88Jugcx3NCYU2CdCQqr0ye5FbGBfCtTK8mL/bNQc0ssglhNS\nT9ruPIxCle9S1rWI/S6ygma3MWbHc8iLDbSJTlBQEGw2G+rq6todg6h1TKfUjkmv1yOyayQWj1iM\nRbGL0GhqRNm/ylDycwnSctLgr/dHwoAEJN6diPui7kOAPsBh9Tt792iymtr8yloaUTy7GKGBobL9\nHEDH4zdXEKp5IQsSsTUv7N0LCfKT41MS2Cc1L3JW7GsFkmnaWej0gkKaEkldjOjq96ldjc8dC8l0\nI8kJXBsVIn42m43JjiP/lm1cSIrdiLgo8eKrYT0PtP3OQ4NDkRidiOmDpsNms+G7a9+h+EIxVpWt\nwsXaixgTOQZT+09FcnQyQnQdjzLIDqXWXIvZ+bMRERKBbSnbEOgn785PyhRvd2pe2LsXIqok/Zw8\nc3yBfS2YWUoJXx0KPfLyIsgvT47qdrHfx26oxBc0JsFOKXD2c/J5cjnK5OKOl/vi8/X0IDsYOV58\nNa3n2ZBd3Ig+IzCizwistK7Ev278CwcuHcDui7ux8vBK/LHHH5mjsUHdB7XdW9hRa67F1OypGN1n\nNN6a+JasLY+dZb9JgSs1L0RciGAAbQsErh0MESxHfd3dbcOtlQwvoE3otRST9JROX4dCttHEtFCq\noDzpOujsYeA2oeJ7kEnSgBQrldra2rZ+7TyTLcnkIrb8QEcxcTeTi0wSxOmWtABmZwh5AilGbWlp\ngcFg0EwhJdB2XxsbG9vFGxpMDfiy+kuU/lyK/f/ajyD/ICQMSMCRK0dQ01CDx2Iew3N/eU7WiU0L\n9ULcmhf2YoNMpmSnQnYvABzWvJDvZNfQuFKxT2I3auwMuHU3CQkJOHz4sGYEzlM6/Q6FoMaRl9jK\nd6nHxvddfJlcXBsVT+ISQscg3Awhd+IujoLcasPnY6bT6WAMNiJlcAqSo5NhtVrx7bVvUXyxGD/e\n+BET+k7AsnuXyTou7j1Ta8Ji7zTIcanFYmFideT5c8XM0llnRGeBfS3tUDobPiUoUh0rOUMo+K4E\nfC8KETZiM8MnJlLHJbjHIEINo5ytKkmNCaC+9TwXMfeM/Kz3Rt2Le6PuxQvxL8BmbZsASTBb6gQH\nrd4zMg6SRUgWMWJqXrhmltyjMbYdjJRmllLDFjMioJ2JTi8ocsVQhL6PxB9aW1sVt53nGwsRtrCw\nMMZVlpxdk6MGT7J/xMAXd+FOJERguFX6WiykBNyP5fj7+cPfz7/dit0doRWCPH9ibPGVhggw+565\nWvPiKGtMbJdKraGl35GnaO/uegl8IsAOvpNWrmqNiytsQplccgds+cbHLp5jryjZ6ad6vR5NTU1M\nR0KtvHREgKXImHJXaIXwBgEWumdia164gX0iLI5qXriBffJvLBaL24F9d+Eet2npdyQFPiMocu0C\nCGKC70qNjQibXq+H0Whk/owrJuRYRM2eK3zZPBaLpZ1fFDkbVxs5BVioSl3s0ZgcRZ5S4UxMV40U\noQAAIABJREFUuLhS80IckrldKoGOuxcS4yI7IRKcB9y34vcE4hDQmej0giLnkReJyXhqOw9IawfR\n3NyMoKAgyTO55Ia8XCQrCQBvN0I1ahHYQW4lBJhvxS50NEZ+n1qzxQE8K6YEXKt5IUe4YswsSUEl\nO4WZBPal7lJJ4L7jzc3NbvVh0jKdXlDYyCEozc3N7arN3f0uKSArr8DAQBgMBt7gOzvFNTAwUDNi\nYrfzW89zV6nuHgd5OjYpg9y1tbX4+eefERERgd69ezv9vKOjMa3a4gBgjgal3M25UvPCDewT4WDP\nA3yCJXdgn3xHZytqBHxIUKSedNirICls5z0VO5PJhObm5nbVyXJnckmFs6Mk9kvvznGQJxDzSXJt\nT54jk8mEZ555Bjt37kRgYCDMZjNGjBiBTz75BFFR4gwh2Udj/v7+zDFXa2urZmxx2DVDcqZ5s+8F\nAN54HFtgiFg0NzdDr9ejpaUFdnv7Pi9iA/tS7JKbmpokq4vTCj4lKFLtUFpbW2EymWC32xEeHq7q\nKp+byUXGJZTJpXaFORey+rfbXbOeZx8HkWJKqa1gpI5LPPzwwzh48CBMJhMzQVVUVGDcuHH4/vvv\nXVqtksUBu4hVjqwxV2EvDpSuGeKreWHfC+KaTQL1AESbWXLT392p2OezXelMxpCADwiK1DEUq9WK\nhoYG+Pv7S2Y77+7YuP5g5HssFku7YjGlM7nEIpX1PN8RSGNjIwAwq1NXJ1Ru9bunnD9/nhET7nXq\n6+uxY8cOLF68WNR3CaUs8x2NKXlMSJ414vqg5rPGvRdsy3yy2BJT88KNvZBjRfKdxIXDHTPLztYL\nBfABQSFIISgWiwWNjY3MOTp5QNWA6w9G/owcZZGdCvB//T40VmEup/U8N1OKTHJirWBI9buUR4PH\njx8XvP+NjY3Yu3evKEERG+R25ThIiudCK5X5QpjNZiYex95pOKt54ZpZsv9fqEulUGCfu0Mhc0ln\nwmcEheCO7QJZebGD79zgnie4KnZklxQUFMRkiZCHnzzEbBNInU6H+vr6DgFLtVDCel4oO8iZFQxf\n8Z0UOPLS0ul+N+oUgh2XcGenyT0OYh8Teno0pmUxIfVY7BgYd1fLrnkB0G7hIbbmRUxgn/ue0yMv\nL4R95OUO5IEkVu/tmiVJXNciRuzILslgMDCTg5hMLim9tTxBrcQAMVYw5LgwNDRU8rqXqVOnMkct\nXIKDg/HQQw8J/lup4xJCx4TuHI1p1eYFEFfo6WnNC/mdignskyQAk8mEiooK1NfXuywoOTk5WL16\nNaqqqnDixAnExsbyfq5fv36MO0ZAQAAqKytdv4Fu0OkFhQ1ZIYh96NnHSiRGwf4uKcclBpLJ5Y4n\nl5gJVe6eJlqynueer5vNZmblSSqopYw1hIWFYf369Vi+fDkzAQNtO5dp06Zh7NixvP9O7voXMUdj\n7MZZ3LGRn8XdGJhcuFNrJUXNi9VqbScu7PtLMsssFgvWrl2LM2fOoH///ggNDUViYiL69OnjdIxD\nhw5Ffn4+MjMznf4shw4dQvfu3UXcLenwCUFhbzXF7iq4x0rcB1LqQklHkBe3paVF0JMLgOhMLqHg\nLbuniZQFhNw0Ui1UvbMhx5dGo7GdwDibUF1lwYIFGDhwIN58802cOXMGEREReOKJJzBnzhze+6zG\n6l/oaMxkMrXLoNPpdEwwWmueYVLF5zyteeGaWZLvDAsLw969e/Hee+/h3//+N44cOYIXXngBzzzz\nDF544QWHY4qOjhY9fqXmJzY+ISgEsQ8WO/iuVLGY0O6JL5NLSk8u9gqKnBWTQDYJLnqSGcQ9X9dS\nYoBQyjJfYydu8NZdURw9ejQKCwtFjY04BKi1+hc6GmtqamJsQ7SUgg7IZ0EjtJPjq4UiR2PsjDHy\nP/KO6fV6WK1WjB8/HrNmzYLNZkNDQ4MkYyXjnTRpEvz8/JCZmYmMjAzJvtsR2noaZMbZroIv+O7u\nd0kxNqFMLj5PLlfqOByNgbvl5xYQurJa1/L5OpmwHaUs8x0TKmEFw06n1srqn/y85NiGHPtYLBY0\nNzdLupNzFyX9zMTUvAQEBLQTY4vFAj8/P0ZcfvvtNyapxs/PD+Hh4QCAyZMn49q1ax2uuXbtWiQn\nJ4sa39GjR9GrVy9cv34dkydPRnR0NOLj46W7AQJQQfk/HAXfHeFO1pgYHGVyETEhL5Cfn58sq1ih\nAkIxq3Wt+oUB7p+v8wVvpa7x8Ib7xnWAdhZrUOJnYIuJ0v5YfEfIbNdoIiKBgYHMs/Prr79i9+7d\nmDBhQofv279/v8dj6tWrFwCgZ8+emDFjBiorK6mgSIWzGIqj4Luj75RrjNwjN0eZXErZuztKteSm\nnQpNPFpAivvG3skJWcG4s1rXsmOwownbWayBXeMhx8+kpphw4dZCkRR5nU6H27dv45FHHkF8fDz2\n7t2LDz74AOPGjXP7WkKL46amJthsNhiNRjQ2NmLfvn1YtWqV29dxBe0caCsA38NstVpRV1eHwMBA\nl49l5AjMm0wmNDY2wmg0CooJqQR3xypfCoiABAcHw2g0Mn5Ezc3NqK+vR0NDgyYnRSKAUt83spML\nCQlBWFgYAgICmB1mQ0MDU1jp6FkhZ+hkFaul+8YdmyPIhBocHIzQ0FAmbmY2m1FXV4fGxkbG1VcK\ntCQmXIh5bGBgIIxGI7p3746MjAwcOXIEly5dwqJFi5CVlYWTJ0+K/s78/HxERUWhvLwciYmJSEhI\nAABcvXoViYmJAIBr164hPj4ew4cPR1xcHJKSkjBlyhRZfkYuOrsaqQAKQ3ofsCc6wPPg++3bt2E0\nGiXJWqqtrYVer2fSQz3N5FIDcp7OztcXW50uN2rUv7BX6y0tLQD4rWD4+tJrBbKjk2Js7CQHkl7r\nydEYdyesJfh2m7W1tUhPT8cLL7yAyZMn48yZM9i9ezf+9Kc/iY6NaB2fEhQSbwgKCmKC76GhoW5P\nzFIJit1ux+3bt5mGWCQ+IpTJZTAYNJV6SwoCuZYg3AlELSdcLdS/sDPorFYrk0FHVu+k3cAXX3yB\nH3/8EZGRkZgxY4bTCno5kVJMuLCPTdliK/ZojCwQtdgDhmRmssWkvr4ec+bMwfLlyzF9+nS1hygb\nPiEoxMSNZPWQLAuj0ejRxFZbW9vO7dUdyHGC3W5HcHAwAgMDHWZyObLwUAOxVdzsTBir1SqpK7Aj\nPG3wJBetra1MvxAAuHDhAu6//36YTCY0NDQwHk+ffvopJk+erPj45PAzE4IrtjabzWEcSutiwrV6\naWxsRHp6OrKyspCamqr2EGXF5wTFYrEgICBAkjTWuro6j144dtvglpYWBAUFMT5c7EwuraWQEthC\n58r95B4FyZGCyy2m1JIIA+3b4ra2tmLQoEGoqanp8DmDwcAUQSqFkmLCh6OjMQCa7U7JJyZNTU2Y\nO3cuMjMzMXPmTLWHKDvaestkhBQh6fV6TdREWCwW1NfXIyQkBMHBwczOiS0mZPdCgpxqj5kNOULU\n6XRuJTOQn8loNDIpzySoT1wB3F3rkGJKNXpyiMFsNrfrsX7w4MF2dixsbDYbPv74Y4/uhyuQ7CyD\nwaBaEzaSNUaSHEjaemNjIxoaGhireC2thfnEpLm5GfPnz8fixYt9QkwAH0kbJpM3CQxLWT3r6kNN\njohMJhNTPGm326HX65mjI7YFvRYDtVKmtwql4LprfaL1Yko+x+ALFy4wR19czGYzqqqqZLGC4SKX\n07InkIxCUkRJdiXclgRqFlTyiYnZbMaCBQvw0EMPYfbs2aqMSw208dTIjE6ng9FoZI6+pMQVQSGT\nndVq7eDJRfL4ST2DzWZjDOiIVYMWkNt6nl1M6ar1idaPB4ViTX379mVaAnMJCgpCdHQ0QkNDZbGC\nIWghcUEIclxNYowER/dDqYJKtuMCEROLxYJHHnkEs2bNwty5c2Ufg5bwiRgK20GVrA6lgJuG7Ah2\nfxJHNipkjMHBwe2q09nVuEq9LFzU7EnPDepziynJi63FCnOunxl3bC0tLbjrrrvw22+/dfi3wcHB\n+P7779G7d+8O38nOkvIkDsWO52gpcQEQn2km5f0QC1tMyAKmpaUFixYtwrRp0/Doo49q6jlUAm0t\nRWRGCf8tPtixENL/wFEmF3sFy3UElttHSgi1V7DO7C1IRbYWxcTZEVxAQAAKCwuRmJjYrvhSp9Ph\n448/7iAmQEcrGO79EGsFo9UsOMC1tGUhaxy2yamU9VDk98oWE6vVioyMDEyYMMEnxQTwkR0KebjI\nCluq3H72uakQJJMrODiYaT/K58kl9qiGnWJJArVy9gpn75q0Vv8C/F79TmJRWiqm5FvBOqKxsRG5\nubk4ffo0+vbti/T0dPTs2dPl67KfD0cpuJ1FTJzBlzXmyVEhEROdTtdOTB5//HHExcUhKyvLJ8UE\noILiEeyHig8lPLnIypRMHlJOpuyjGq3VvwD8R3BaKaYkiwR2oFYN2MemLS0t7VpEu9PuQAmULKh0\ndbfP3nGS7ESbzYYnn3wSQ4cOxbJly3xWTAAfExSymiU20Z5Cjhe4bTzZNvikEp8tJuQFltpyg28y\ndTcjiO/F0RJijuDUKqbUqskjuR/s7pRSN1PzFHYAXsmCSvZuX2hBxvdOtLa2YunSpRg4cCCef/55\nTdxDNaExFInhs8EnL7JOp2MmdjliElzXVz67eTErdS1bqJMjOIvF4vSohi/uInccikyIWiy8A37v\nTkkSQ+SMM7iKkmICCKesC2WNNTc3A2gvJsuWLUPfvn2pmPwfPrFDIV5Tra2tqK2tRbdu3ST5XpIL\nT2wyXM3kUiomIZQhxbdSV9oW3xXE2ryI+R454lByHtV4irNMM/YuXo2jQrWr87lw3xlyTM1Omnn+\n+efRtWtXvPLKKx69J4sWLcKePXtw55134vTp0x3+/tChQ0hNTcWAAQMAADNnzsSLL77o9vXkxKd2\nKFLD3vHYbDameNJRJpca7XDFrtTJ+LQ+IUrZmVKKYkpAexMiG2diAnRspsbtQChnyroW7x07LZ1k\nX/r5+WHz5s147bXXMGTIEHTv3h2vvvqqx/dj4cKFeOqpp/Dwww8Lfmbs2LEoKiry6DpK4FOCIteR\nV0tLCxoaGkRncqlZwU0EhBxnkcmUvDRkhU5WZFpA7up3McWUjlbqatbnOMOdeye0AJGjYZYWxYRA\nhJjtVbdkyRL88ssv+Omnn2A2mxEVFYW4uDhs2bIFffr0ces68fHxqK6udjoWb8AnBIU89OT/pZos\n2X5bzjK5mpqaNBekJTEdMh6DwcC44JLxqp1+q3T1O18feUcrdaliYS0tLfjmm29gt9sRGxsrSfxF\nisQK9gIEaF8k7KkVjDeICXtXZ7fb8dprr8FsNqOgoAB6vR4NDQ3Yv38/7rzzTtnGotPpcOzYMQwb\nNgyRkZFYt24dhgwZItv1PMEnBIWNVKtvEpchwXelMrmkhB2TYKeP8q3U5fSQEkLtbClnK3Vi6Olp\nC4NPP/0Uzz77LLOjtdvtWLNmDR577DG3v9PVGhixkKNCd6xx2GhdTEiiAltM1q1bh+vXr2PTpk3M\nOxAaGooZM2bIOp7Y2FhcunQJBoMBJSUlSEtLw/nz52W9prv4RFAeaMuqstvtuHXrFsLDwz2aFMnL\nSgLc4eHhTIdCsish19SqPxK3Mt9ZMSW3lkFsxpi7aDlbikw4xL3ak6B+aWkpHnroISaDiBAcHIz3\n3nsPDz74oFvjk0NMnF2TW9/BFhf2GIiYaPW9YCfbEDH57//+b1y4cAEffPCBLIk01dXVSE5O5g3K\nc+nfvz+++eYbdO/eXfJxeIq2KpoUwNM4SmtrK+rr65mJGADTsIsdfCeOwp6uXuXAVet5nU6HwMBA\nGAwGxk6cHPXV19eL6pnuCqReKDg4WJNiYjabYbVaYTQaYTQamZbNFovF5b7pq1at6iAmQFuN06pV\nq1y+p+zOpEoaZBIBIS0JSLEvtyUB2x5fa++FkJi89957OHfunGxi4oyamhrmOaisrITdbtekmAA+\nfOTlDiSTKzAwEMHBwcwkSpyBuZlcWqxC9vQYSe7aDi1aqBO4Ew753XIzpLj1P+x7wv2+s2fPCl7v\nypUraGpqYhYuzlD7iJAglPhBjpH8/PyYpBWtvB/c41/yLn/00Uf49ttvsXXrVtnEZM6cOSgrK8ON\nGzcQFRWFl19+mWmLnJmZidzcXGzatInxAtyxY4cs45ACnzvyqq2tdat5EF8mFzmWIX5J/v7+zDGI\nFqvL5bSel6K2Q8veUmJSb/n+jTObj549ewo21woICMD169dFPataERMh2Jlw7GQHtuCq5aLNrg0j\nCwW73Y7Nmzfj8OHD2L59u+biPFpFW0tAGfEkGE8yWkJDQ9utzMmxFwnQm0wmAG0r1paWFlWb/nCR\nO7WVW9vBzQZylDHGfaG1KCbupC2zd3NCjsCzZs1CdnY2syIl+Pn5ISkpSbSYaLXHOsC/62Rn0ZEj\nTrncC5zBJybbt2/Hl19+iezsbComLuAzO5SWlhYm/hEUFCQq44qsSi0WC4xGI9N3QyiTi3wvWaWz\nnU2VNidko3ZygCOPMZ1OJ0n1u1zIFeAm4vLLL79gypQp+O2335gFSVBQEMLDw3H06FFe63ru92g1\neQEQf4TJ3uFarVbGCkYuF22CyWTqICY7duxAUVERdu7cqcl7qmV8TlDENsVie3IZjUbo9XqHmVx8\nK38+c0KpOuyJQQ2bFzFjYmeMAWCSA7QwPjZKeZrdunULH374IXbu3AmbzYbU1FRkZmYiIiLCocBq\n2eoF8CwepoQVDFdMACA3Nxeff/458vLyHLaloPDjM4JC2v+K6WFChIdUtZM/4/PkEmNSCAinVcp1\ndsw+89ei9bzdbmd8z/R6vWa6UhLUikmI9V3Tcn0TIG1yhStedGJhv7vk3SgoKMC2bduQn58v2JKC\n4hgqKBy4mVyAY08udyZrdnaUs5x9d5CiQlpO+Fb+fPdEjfN0QDvHSOx7QgwKySRKjjC1eL5PxESO\nXafQPXHFCoZPTHbv3o0PP/wQBQUForPqKB3xOUFx1BSLZHIZDAYmBZRPTEgAUYrJmrwgZAVGXhB3\nJ1ItW88D4tyMpcgY83R8Wlv5k3tCjjABMM+J3PfEFeQUEy7knvA1mBNKiCGZhOyU/r1792LDhg0o\nKCiA0WiUdcydHZ8TFKGmWI4yudgGj3JO1p5OpFq2ngfcP6aRsysl3/i0aAcCtD9GIpmE7BiD0tY4\nXEg8Ua14mLNWv3xicvDgQbz99tsoLCyUrPGeL+MzgsJO2SS1BIB7mVxKHYNwe4M7WpF6y5m6p5O1\nlF0p+canxYJKwPH4hKxxlEr+ANQXEy7cuAv5sy5dujD3paysDK+99hoKCws97pHkrKcJAGRlZaGk\npAQGgwFbtmxBTEyMR9fUIj4nKOxKZxIYttvtzKrF1UwupeCKC5lIAwICmCpkrU6GcqUtS+UxpnZa\ntTNcmaxd8dRSY3xqYDabYTKZEBAQgFOnTmHevHm47777cO7cOezfv99t23k2hw8fRmhoKB5++GFe\nQSkuLsaGDRtQXFyMiooKLF26FOXl5R5fV2toK/VHAUgcpLW1FXV1ddDpdDAajYzNvCNPLjWPQYi9\nR2hoKIxGIyMkdXV1aG5uRmBgoOYyuYDfX2Y5PM2k8BiTc3xS4Opk7cxTq7m5mTlOVWN8SmOxWJhj\nLoPBgNGjR+O//uu/cOPGDfTo0QNDhgxBamoqjh8/7tF14uPjHe5yioqKsGDBAgBAXFwcbt++jZqa\nGo+uqUW09wbJDImF1NXVISgoiMn2EsrkstlsmvPkIvUsRPzIRFpfX6+JQkqgfQ2MEvfPVY8xpcfn\nDp5a0XA9tVxxLxCDN4gJd3wnTpzAu+++i/z8fERERODWrVsoLi7uEFOVmitXriAqKor57z59+uDy\n5cuIiIiQ9bpK4zOCws7fJ1XZYjK5PG03Kwds63myuyJ/zm4IpXQhJXt8arQ6JgiZE7ItT4joaFVM\nSNGdlONz1MvE1cJBrYsJOQZmj+/kyZN4/vnnsWvXLmYi79atG+bNm6fImLi7Qq3NK1LgM4ICtL2k\nZrOZeanUyOTyFHYHQ27asrNVuhJFg+76XskFn8dYU1MTYy1vMplU70rJhs+oUA4cdabU6/UODRu1\nbOIJ8Kcuf/fdd1i2bBl27dqFXr16KT6myMhIXLp0ifnvy5cvIzIyUvFxyI32lmYywV5RAeiQyaXT\n6WC1WtHQ0MAUNWphgmHDFjtn4yOrdPZZOtl5NTQ0oLm5mSkMk3p8UtXoSA2Jien1eoSFhcFoNMLf\n35+JRbnSx0TO8cktJlzIYsNgMMBoNDJu2o2NjUzchTwr7NRbbxGTs2fPYunSpdi5c6dqk3hKSgq2\nbdsGACgvL0fXrl073XEX4ENZXq2trcxkUV9fz6yeyaQntxuvp0iVtsxX6+JJISVB6zs7Z+4BUmWM\neTI+bnMnteE+K0RoSWq6FsbIhi+1+ty5c1iyZAk+//xz9O/fX7Zrs3uaREREdOhpAgBPPvkkSktL\nERISgs2bNyM2Nla28aiFzwgKWV2R4DU7vkAClVrfwsshdmy7E3cr0rViVSKEq47BcnhHObueq71W\nlIZkwwUFBTFFwloopiTwicn58+eRkZGB7OxsDBw4UNXx+Qo+Iyitra1MxzigbRK0WCxM0ROxnlf7\nxeCiZI2EK4WUBK0XVHq6c5LbY4yICXFv0KqYcL2vyI5OqCpdSfh61F+8eBGLFi3C9u3bMWjQIEXH\n48toa/aUkS+++AIpKSn46KOP8Ouvv6KxsRHLli1DfX09goODGYfhhoYGmM1m1c7RCeQIhOyclKiR\n4Na68PVJZ68/SH/w4OBgTYsJaXDlzmTNjUWRSZ/bK92ddRk7W0+rYmIymTqICfB7DVBISAhTA0Tu\nN6kBkjpGxwefmFRXV2PRokXYunUrFROF8Zkdit1ux40bN5Cfn4/s7GxUVVVh1KhReO2119C3b18m\nXZjbv0SoH7jcY9WS9Tyf3YlOp2OCx1osCFTiGM4TjzEiJsSoVKti4mqCgJDZqStuwGLhE5NLly5h\n/vz5+PjjjzF06FDJrkURh88ICuGbb75BSkoKHn/8cURGRiI/Px/19fWYOnUqUlNT24kLn8W83OLi\nDdbzZKIBoJlCSjZqHMO54jEmVxdIKZEq20wuY08+I8+rV69i7ty5+OCDDzB8+HC3v5viPj4lKHa7\nHcnJyVi8eDFmzJjB/HltbS2++OIL5OXl4caNG5gyZQpSU1Nx1113ORUXKYO03pApxW7XS1Kt1d7R\nsdGCY7CjjDEAaGpqYupitPg7lqsOhk903enCyPc7vnbtGubMmYP33nsPI0aMkGzMFNfwKUEBwBQx\nClFfX489e/YgLy8PV69excSJE5GWloZBgwY5FBdPzfe0bj3vLBNJKdF1hBYdg7nHqHa7nRETpRuH\nOUOpokpyLaHFiKPnhbwnbDH59ddfkZ6ejnfeeQd//vOfZRszxTk+Jyiu0NjYiJKSEuTl5aG6uhrj\nxo3DjBkzMGTIEOj1eslqOrSeKeXqMZxQVz05uy9q3QqEJH2w409qdqXkoqSY8F1bTCYdn5jcuHED\n6enpeOuttzB69GjFxkzhhwqKSJqbm7Fv3z7k5eXhxx9/xJgxYzBjxgzcc889HomL1q3T2VYv7pz3\ny1VIyUbrViDkKJPsPgF1u1Jy4R5lqm0qyndf/Pz8OrQ9vnnzJmbPno21a9di7Nixqo2Z8jtUUNzA\nYrHg4MGDyM3NxenTpzF69GikpaVhxIgRzMvILRjkTqJ2u52x1tb6RBgQECDZMRx759La2urRJKrm\nqlosYrPNlOpKyUVLYsIHaXtssVgAABcuXMDp06cxZswYLFmyBKtXr8bEiRMluVZpaSmefvpp2Gw2\nPProo3juuefa/f2hQ4eQmpqKAQMGAABmzpyJF198UZJrdxaooHhIS0sLysrKkJOTg1OnTmHUqFFI\nS0tDXFwcIxLsyYJMolp3u1Ui7ZavkNKVtFstT4SA+/3p5epKyUWLdi9c2PfQ398fX3/9Nd566y18\n+eWXGDhwIBYuXNhukvfkOoMGDcKBAwcQGRmJe++9F9nZ2Rg8eDDzmUOHDmH9+vUoKiry9MfqtGjv\nLfQyAgICMGnSJLz//vs4duwYZs2ahYKCAkyYMAHLli3DV199BbvdzhQMkt7WJLZA0jO1pOtWq5V5\nieW0UuEWUoo1atRyrxqCu2IC/O4ETIoGAwICYLVaUV9fL1nhrbeJCXGxGDx4MJqamrB9+3asXbsW\nZ8+exV/+8hccOHDAo2tVVlZi4MCB6NevHwICApCeno7CwsIOn9PSe6pFtHdo78X4+/tj3LhxGDdu\nHGw2G44fP47c3Fy89NJLuOeeezB58mS8/fbbmDVrFp544gkmvZTd8EiNM3Q2amVKce3Uyc6lubm5\nXdqtTqfTlD0+H1KmLpOKdD6beXcz6bxRTIC2JJm5c+di6dKlSEtLAwAkJSU57copBr4GWBUVFe0+\no9PpcOzYMQwbNgyRkZFYt24dhgwZ4tF1OxtUUGTCz88P9913H+677z60traisLAQjz76KAYPHowf\nfvgB+/btw7hx45gjJXL8Y7FY0NTU1K5nvFIvvFYypYQmUZPJBAC8vWC0gpx1MK52peTDG4woSeyO\nLSZNTU2YN28elixZwogJQYpnVcx9iI2NxaVLl2AwGFBSUoK0tDScP3/e42t3JrR3VtAJOXXqFJ54\n4gmsWbMGX331FZYuXYoTJ04gISEBGRkZ2L17N8xmM4KCghASEtKhZzyfj5aUcH3DtJQgQCbRLl26\nMLUKfn5+7TyjpFihSgHxNmNnIsmFOx5j3iImDQ0NjFkr0JZhOX/+fCxevBizZs2S5brcBliXLl1C\nnz592n2G3GcASEhIQEtLC27evCnLeLwVGpRXgLNnz+LChQtITU1t9+d2ux1nzpxBTk7Dwr5tAAAY\nl0lEQVQODhw4gD59+iAtLQ1TpkxhHlyuq6vUAVpvCG7zZZtpoZCSjZaKKoUyxojAaFlMuOnVZrMZ\n8+fPR3p6Oh566CHZrm21WjFo0CAcPHgQvXv3xqhRozoE5WtqanDnnXdCp9OhsrISDz74IKqrq2Ub\nkzdCBUUj2O12VFVVITc3F3v37sWdd96J1NRUTJs2DUajkfkMV1zcsa5gX5O43Wp1khGTbSZkSKhU\nwaBWjgr5IEepZrO5Q62LlhYPfGJisVjwyCOPIDU1FY888ojsv8eSkhImbXjx4sVYuXIl3n//fQBt\nTbI2btyITZs2wd/fHwaDAevXr6eV+RyooGgQu92OCxcuIC8vD8XFxejWrRuSk5Mxffp0dO3alfkM\nmUDd6TBIDAq12q4XcC9TSqiQUg63W0DbYgJ0dK62Wq2qdaUUgk9MWlpasGjRIkydOhUZGRmafD4p\nHaGConHsdjuqq6uRl5eHPXv2wGAwIDk5GUlJSejWrZug7b6jiULrJpSAdHY0fDVAUmXSab1C31Hz\nLqW7UgrB7VkDtP3uMzIyMGbMGPztb3/T5PNJ4YcKihdht9tx+fJl7Nq1C0VFRfD390dycjKSk5PR\no0cPUT1dbDYbk6KsRRNKQL6Wx9xCSk8y6YiYaLUOxpVOkHJ3pRSCT0xsNhsef/xxjBo1CllZWZp8\nPinCUEHxUux2O2pqarBr1y4UFhbCZrMhKSkJKSkpiIiIEAxct7a2IigoiHmBtYZSwW13q9G9we7F\nk546SnmM8SVa2Gw2PPnkk/jTn/6E5cuXUzHxQjqdoOTk5GD16tWoqqrCiRMnEBsby/u5fv36ISws\njDlHrqysVHik0sHuRllQUACTyYTp06cjJSUFkZGR0Ol0OH78OO666y6EhITAZrOpnhXFh1rxCG6y\ng1BswRsy4qRu0CaHx5jdbmecl8mRa2trK55++mkMGDAAK1eu1MTzSHGdTicoVVVV0Ov1yMzMxNtv\nvy0oKP3798c333yD7t27KzxC+bl58yYKCwuxa9cu1NXVITo6Gnl5eSgoKEBsbKzmUm4B7cQjhOJR\n/v7+sFgssNlsmmjLzIfc3T6l8BgjySDsBmOtra1Yvnw5evXqhZdeeomKiRfT6QSFMH78eKeC8vXX\nX+OOO+5QeGTK8uabb+L111/HxIkTce3aNcFulGql3Gr5CImbSQcAQUFBmtrVEeQWE77rCXWlFPod\nConJypUrERYWhldffVVT95TiOj5rvaLT6TBp0iT4+fkhMzMTGRkZag9JctavX4+PP/4YJ0+eRL9+\n/ZhulK+88gquXLmCSZMmMd0o/f3921nAkICunOLC9ZTSkpgAv1ejt7S0QK/Xo0uXLoxxplSdOqWA\niIlOp1OsR72rHmNCYvLSSy8hODgYr7zyChWTToBX7lAmT56Ma9eudfjztWvXIjk5GYDzHcovv/yC\nXr164fr165g8eTLeffddxMfHyzpupblw4QLCw8PRs2fPDn/X2NiI0tJS5Obm4n//938xfvz4dt0o\nAec9XTzBG2xAhFb9SjQNc3WMSoqJs/HwZYyR40NyH+12O9asWQOz2Yz169dLsphw1s8EALKyslBS\nUgKDwYAtW7YgJibG4+tSfscrBUUMzgSFzcsvv4zQ0FAsW7ZMgZFpD75ulGlpaRg2bFgHcZGqMZaS\nxzPuIHaManZeJKt+d7tpyg0RF+LGoNPpsG7dOsTFxeHUqVOora3Fu+++K4mYiOlnUlxcjA0bNqC4\nuBgVFRVYunQpysvLPb425Xe0dcYgMUJa2dTUhPr6egBtK/V9+/Zh6NChSg5NUwQHByM1NRXbtm3D\n4cOHMWHCBHzyySeYMGECXnjhBZw4cQI6nQ5dunRBaGhou74uQkaEQnhDhb4rY9TpdMwxjtFobHdv\n6urqXLo37oxRq2JCMJlM8Pf3R1hYGLp06YLw8HCsXbsW69evx40bN5CTk8O8i54gpp9JUVERFixY\nAACIi4vD7du3UVNT4/G1Kb/T6QQlPz8fUVFRKC8vR2JiIhISEgAAV69eRWJiIgDg2rVriI+Px/Dh\nwxEXF4ekpCRMmTJFzWFrhsDAQCQkJODjjz/G0aNHkZiYiM8++wzjx4/HihUrcOzYsXYNw1yZQImT\nrJ+fn2YnQU8nam7TMPa9kco12hvEhOzw2GMku7bhw4fj4sWLmDhxIrZu3YoHHnjA4+vx9TO5cuWK\n089cvnzZ42tTfqfTBeVnzJiBGTNmdPjz3r17Y8+ePQCAAQMG4Ntvv1V6aF4H6UY5adIkWK1WHDly\nBLm5uVi5ciVGjhyJ1NRU/PWvf+3Q04U0DGNXopNJUMsV+lJb0hBxIfeGBK6bm5vdNmn0JjFhx3Xs\ndjs2bdqEH374AVu2bIGfnx8ee+wxPPbYYx53nwTE9TMhY3Pn31HE0el2KGqQk5ODP/7xj/Dz88PJ\nkycFP1daWoro6GjcfffdeOONNxQcoeeQbpQbNmxAeXk55s2bh9LSUkycOBFZWVn45z//CZvN1m51\nzu7pUl9fDz8/P82LCbEBkXqMUrT19SYxAdBOTD766COcPHkSmzdv7lBnJEUMRUw/E+5nLl++jMjI\nSI+vTfkdKigSMHToUOTn52PMmDGCnyG2EqWlpfjhhx+QnZ2Nc+fOKThK6SDdKN955x1UVFQgIyMD\nZWVlmDx5MpYsWYK9e/eipaUFgYGBqKqqwrlz55hdirN+8Wogt5hwISm3BoMBYWFhCAoKgs1mQ0ND\nAxoaGphUajbstFtvEBN2NteWLVtw9OhRbN26VTY7nZEjR+Knn35CdXU1LBYLPv/8c6SkpLT7TEpK\nCrZt2wYAKC8vR9euXRERESHLeHyVTnfkpQbR0dFOP8MOGgJggobsLBRvRK/XIy4uDnFxcWhtbcV3\n332HnJwcvPHGG7jjjjtQUVHRrm8Et1+8pz1dPEVMvxU5cdbWlxyLkXulVXdokgYOtBeTTz/9FAcP\nHsSOHTtk7WLp7++PDRs2YOrUqUw/k8GDB7frZzJ9+nQUFxdj4MCBCAkJwebNm2Ubj69CBUUh+AKC\nFRUVKo5IevR6PWJiYhATE4M9e/Zg/vz5uP/++/E///M/2L17N9LS0jB58mSEhITw9otXuj+H2mLC\nhdRsEOFgiwvBZrOpXkjJRcjZeMeOHdi9ezdycnI8akEgloSEBCYJh5CZmdnuvzds2CD7OHwZKigi\nEVNM6QgtTQByc/ToUSxevBglJSWIi4tr141y48aNiIiIaNeNkqzO2dXWznq6eIo7zbuURKfTQa/X\nw2q1IiAgAIGBgbBarYo4GLiCkJjk5uZi165dyMvL04RYU5SBCopI9u/f79G/FxM07CyMGjUKR48e\nxV133QWgbXIcPHgw/v73v+PFF19kulE+8MADHbpROhIXYnPiKaR5l9T9VqSEL+OMu3MxmUySNw1z\nBSG3g4KCAnz22WfIz8/XbJsEijx02kp5NRg/fjzWrVuHESNGdPg7q9WKQYMG4eDBg+jduzdGjRrV\noZLX1xDbjVLIGdkdcfEmMRGTYs1tGkbujRJV+nxisnv3bnz44YcoKChASEiIbNenaBMqKBKQn5+P\nrKws3LhxA+Hh4YiJiUFJSQmuXr2KjIwMpv6lpKSE8RpavHgxVq5cqfLItYPYbpSe2O4r1bzLE1wR\nE75/S+xx2PbynvQu4YNr6km+e+/evXj33XdRWFgIo9Eo2fUo3gMVFIrm4OtGmZiYiNTUVIfdKB2J\nS2cXEy7cpmFSZdMJicnBgwfx9ttvo7CwEOHh4W5/P8W7oYJC0TRiulE66+lC4g3eIiZSxx24fV3c\nzaYTEpOysjKsXbsWRUVF6Natm6Rjp3gXVFC8mJs3b2L27Nn417/+hX79+mHnzp3o2rVrh891pnbH\n3G6U06ZNQ2pqKvr27cuICzuuQIonScxEi9l2cooJF76OlGTn4igmxW5/HBoaytzHI0eOYM2aNSgs\nLOz0zeoozqGC4sWsWLECPXr0wIoVK/DGG2/g1q1beP311zt8rrO2O66trcUXX3yBvLw8XL9+nelG\nOXDgQOh0OuTn52P06NEwGo2wWq2aSrclKCkmXMQeGwp11Tx+/Dj+/ve/o7CwkLfnDsX3oILixURH\nR6OsrAwRERG4du0axo0bh6qqqg6f84V2x6QbZV5eHlNEevz4cZSWljLuBFL2dJECIiaBgYGq12qw\nxYUrvuTP2GJy4sQJPP/88ygoKJDcvsQXd96dBSooXky3bt1w69YtAG0TQvfu3Zn/ZjNgwACEh4d3\n6nbHbF566SV89NFHGD9+PC5evMjbjZJ7LKa0uGhJTLiwjw2J3X5AQADOnTuHoUOH4uzZs1i2bBny\n8/PRq1cvya/v6ztvb0abEUoKg1CF/j/+8Y92/63T6QQnwqNHj7ZrdxwdHd3p2h0T3nrrLezatQsn\nT57EH/7wB6Yb5YYNGzp0oxSy3Ze7loP0hdGK5QsX0jSMHIMZDAa0tLTg2WefxY8//gij0YjVq1fL\nFoAvKipCWVkZAGDBggUYN24cr6AAwk30KOpAdyheTHR0NA4dOoQ//OEP+OWXXzB+/HjeIy82nb3d\n8YULF9C1a1f06NGjw99ZLBYcPHgQubm5OH36NEaPHo3U1FSMHDmSd+dis9kkr+XQupgQzGYzLBZL\nu2Ous2fPYsWKFRg7diwOHTqEb7/9FvPmzcPGjRslvTbdeXsvdIfixaSkpGDr1q147rnnsHXrVqSl\npXX4TFNTE2w2G4xGI9PueNWqVSqMVhkGDhwo+HekG2VCQgJaWlpQVlaG7OxsPPvss4iLi0NaWhri\n4uKcNsVyV1y0ZkYpBJ+YnDt3Dn/729/w+eefY8CAAQCAX3/91ekCRgi68+6c0B2KF3Pz5k08+OCD\n+Pe//90ueMmu0P/5559x//33A2izHZk3bx6t0OfA7kZZUVGBESNGIC0tDX/961+ZuhW+QkFXOi5q\n3YySYDabYTabERoayvxc58+fR0ZGBj777DPcfffdso+B7ry9FyooFAoLm82G48ePIzc3F0ePHsU9\n99yDtLQ0jBkzhvH+crUK3ZvF5OLFi1i0aBG2b9+OQYMGKTKOFStW4I477sBzzz2H119/Hbdv3+4Q\nQ+HuvKdMmYJVq1ZhypQpioyRwg8VFApFgNbWVpw4cQK5ubkoKyvD4MGDkZaWhnHjxjFHVs6q0L1F\nTCwWC0wmE0JCQpgCx+rqaixYsABbt27FkCFDFBsL3Xl7L1RQKKIpLS1lzC0fffRRPPfccx0+k5WV\nhZKSEhgMBmzZsgUxMTEqjFR62N0o//nPf2LAgAFIS0vDxIkTERwcDKCjuOj1erS2tiIoKEjTNu58\nYnL58mXMmzcPn3zyCYYOHaryCCneAhUUiihsNhsGDRqEAwcOIDIyEvfee28H+/3i4mJs2LABxcXF\nqKiowNKlS1FeXq7iqOXBbrfjzJkzyMnJwYEDB9CnTx+kpqZiypQpjGX7+fPncccddzDBfal7ukgF\nn5hcvXoVc+fOxfvvv99pFgQUZVC+iTfFK6msrMTAgQPRr18/BAQEID09HYWFhe0+U1RUhAULFgAA\n4uLicPv2bdTU1KgxXFnR6XQYOnQo1qxZg6NHj+Lll1/Gzz//jLS0NDz00EPYuHEjpk6diu+//x6h\noaEwGo3o0qULU8xYX1/PmCyqCZ+YXLt2DfPmzcN7771HxYTiMlRQKKIgdiaEPn364MqVK04/c/ny\nZcXGqAbsbpRHjhzBggULsGbNGgwfPhzvv/8+PvvsM9TW1sLf3x/BwcEwGo0IDg6G3W7vIC5KHhYQ\nB2a2mPz666+YO3cu3nnnHYwcOVKxsVA6D7QOhSIKsXUX3ElRCwaMSnHq1ClkZmZiy5YtuP/++5lu\nlPPmzWO6USYmJqJ79+4d2vk2Nja63DDMXUhdDVtMbty4gblz52LdunX4y1/+Ist1KZ0fKigUUURG\nRuLSpUvMf1+6dAl9+vRx+JnLly8jMjJSsTGqTVBQED744AOkpKQAaPOaWr58OZYtW8Z0o3zkkUeY\nbpRJSUno2bNnB3FpamqSzRmZT0xu3ryJuXPnYu3atbjvvvskuQ7FN6FBeYoorFYrBg0ahIMHD6J3\n794YNWqUw6B8eXk5nn766U4ZlPcEdjfKgoIC2Gw2JCUldehGybaAkUpc+LpW3r59G7Nnz8aqVasw\nadIkKX9Uig9CBYUimpKSEiZtePHixVi5ciXef/99AEBmZiYA4Mknn0RpaSlCQkKwefNmxMbGqjlk\nTcPXjTIhIQEpKSno06cPIxzsniXuigufmNTV1SE9PR3PP/88pk2bJtvPSfEdqKBQKBrBWTdKwL2e\nLlarFU1NTe3EpKGhAenp6fjP//xPJCUlKfYzUjo3VFAoFA3irBslIK6nC5+YNDY2Ys6cOXjiiScw\nY8YM1X5GSueDCgqFonG43SgnTpyItLQ0REdH84qLzWZjMsXMZjNCQkIYMWlqasLcuXORkZGBBx54\nQPKx5uTkYPXq1aiqqsKJEycEjzzFuC5QvA9ah0LxCkpLSxEdHY27774bb7zxRoe/P3ToEMLDwxET\nE4OYmBi8+uqrKoxSHoxGI9LT05GTk4P9+/dj+PDhWLduHSZOnIhXXnkFZ86cAdCWZUYKKYE2s0eg\nrY/Jjh07cP36dcyfPx8LFy6URUwAYOjQocjPz8eYMWMEP2Oz2ZhY2w8//IDs7GycO3dOlvFQlIWm\nDVM0D5mA2LYvKSkp7TLMAGDs2LEoKipSaZTKEBISgpkzZ2LmzJmC3SjNZjNWrFiBvXv3IigoCE1N\nTdi+fTueeuopDB48GDabDbW1tQgPD5d8fNHR0U4/w3ZdAMC4LnB/nxTvg+5QKJpHjO0L4HvtYIOD\ng5Gamopt27bh8OHDmDBhAt58802mC+Xp06cBACNGjEBYWBhef/11PPXUU9i5cyeioqKQnZ2tyrjF\nuC5QvBO6Q6FoHr4JqKKiot1ndDodjh07hmHDhiEyMhLr1q1T1HJdbQIDA9GrVy9UVFRgy5YtCA8P\nR3Z2NpYvX46GhgY888wzeOyxx6DT6bBgwQLU1dW57SUm1G1x7dq1SE5Odvrvfck9wdeggkLRPGIm\noNjYWFy6dAkGgwElJSVIS0vD+fPnFRiddvjHP/6BjRs3YubMmQCASZMmwWq1orS0FImJie3uY1hY\nmNvX2b9/v0fjFOO6QPFO6JEXRfOImYCMRiMMBgMAMD3jb968qeg41Wbnzp2MmBD8/f2RlJSkyq5A\n6Ahy5MiR+Omnn1BdXQ2LxYLPP/+csauheDdUUCiaR8wEVFNTw0xglZWVsNvt6N69uxrDVQ0tHCXl\n5+cjKioK5eXlSExMREJCAoC2HiuJiYkA2kRuw4YNmDp1KoYMGYLZs2fTgHwngdahULwCZ7YvGzdu\nxKZNm+Dv7w+DwYD169fjz3/+s8qjplB8CyooFAqFQpEEeuRFoVAoFEmggkKhOGHRokWIiIjA0KFD\nBT+TlZWFu+++G8OGDcOpU6cUHB2Foh2ooFAoTli4cCFKS0sF/764uBgXLlzATz/9hA8++ABLlixR\ncHQUinaggkKhOCE+Ph7dunUT/PuioiIsWLAAABAXF4fbt2+jpqZGqeFRKJqBCgqF4iF8lfyXL19W\ncUQUijpQQaFQJICbLKmFmhAKRWmooFAoHsKt5L98+TIiIyNVHBGFog5UUCgUD0lJScG2bdsAAOXl\n5ejatSsiIiJUHhWFojzUHJJCccKcOXNQVlaGGzduICoqCi+//DJaWloAtFXpT58+HcXFxRg4cCBC\nQkKwefNmlUfsHmK7Lfbr1w9hYWHw8/NDQEAAKisrFR4pRavQSnkKhQIAqKqqgl6vR2ZmJt5++21B\nQenfvz+++eYbn/NKoziH7lAoFAoAcd0WCXQdSuGDxlAoFA3jrEr/0KFDCA8PR0xMDGJiYvDqq6/K\nPiadTodJkyZh5MiR+PDDD2W/HsV7oDsUCkXDLFy4EE899RQefvhhwc+MHTsWRUVFor7P026LAHD0\n6FH06tUL169fx+TJkxEdHY34+HhR/5bSuaGCQqFomPj4eFRXVzv8jCvHT552WwSAXr16AQB69uyJ\nGTNmoLKykgoKBQA98qJQvBqdTodjx45h2LBhmD59On744QdJvldIpJqamlBfXw8AaGxsxL59+xya\nZlJ8CyooFIoXExsbi0uXLuG7777DU089hbS0NLe/S0y3xWvXriE+Ph7Dhw9HXFwckpKSMGXKFEl+\nFor3Q9OGKRSNU11djeTkZJw+fdrpZ2lKL0VN6A6FQvFiampqmOOpyspK2O12KiYU1aBBeQpFwzir\n0s/NzcWmTZvg7+8Pg8GAHTt2qDxiii9Dj7woFAqFIgn0yItCoVAokkAFhUKhUCiSQAWFQqFQKJJA\nBYVCoVAokkAFhUKhUCiSQAWFQqFQKJLw/wG01aU/LOMn1wAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from mpl_toolkits.mplot3d import Axes3D\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from itertools import product, combinations\n", + "fig = plt.figure(figsize=(7,7))\n", + "ax = fig.gca(projection='3d')\n", + "ax.set_aspect(\"equal\")\n", + "\n", + "# Plot Points\n", + "\n", + "# samples within the cube\n", + "X_inside = np.array([[0,0,0],[0.2,0.2,0.2],[0.1, -0.1, -0.3]])\n", + "\n", + "X_outside = np.array([[-1.2,0.3,-0.3],[0.8,-0.82,-0.9],[1, 0.6, -0.7],\n", + " [0.8,0.7,0.2],[0.7,-0.8,-0.45],[-0.3, 0.6, 0.9],\n", + " [0.7,-0.6,-0.8]])\n", + "\n", + "for row in X_inside:\n", + " ax.scatter(row[0], row[1], row[2], color=\"r\", s=50, marker='^')\n", + "\n", + "for row in X_outside: \n", + " ax.scatter(row[0], row[1], row[2], color=\"k\", s=50)\n", + "\n", + "# Plot Cube\n", + "h = [-0.5, 0.5]\n", + "for s, e in combinations(np.array(list(product(h,h,h))), 2):\n", + " if np.sum(np.abs(s-e)) == h[1]-h[0]:\n", + " ax.plot3D(*zip(s,e), color=\"g\")\n", + " \n", + "ax.set_xlim(-1.5, 1.5)\n", + "ax.set_ylim(-1.5, 1.5)\n", + "ax.set_zlim(-1.5, 1.5)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "p(x) = 0.3\n" ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Preparing the plotting of the results" + } + ], + "source": [ + "point_x = np.array([[0],[0],[0]])\n", + "X_all = np.vstack((X_inside,X_outside))\n", + "\n", + "print('p(x) =', parzen_estimation(X_all, point_x, h=1))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sample data and `timeit` benchmarks" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the section below, we will create a random dataset from a bivariate Gaussian distribution with a mean vector centered at the origin and a identity matrix as covariance matrix. " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "np.random.seed(123)\n", + "\n", + "# Generate random 2D-patterns\n", + "mu_vec = np.array([0,0])\n", + "cov_mat = np.array([[1,0],[0,1]])\n", + "x_2Dgauss = np.random.multivariate_normal(mu_vec, cov_mat, 10000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The expected probability of a point at the center of the distribution is ~ 0.15915 as we can see below. \n", + "And our goal is here to use the Parzen-window approach to predict this density based on the sample data set that we have created above. \n", + "\n", + "\n", + "In order to make a \"good\" prediction via the Parzen-window technique, it is - among other things - crucial to select an appropriate window with. Here, we will use multiple processes to predict the density at the center of the bivariate Gaussian distribution using different window widths." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "actual probability density: 0.159154943092\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#Sections)]" + } + ], + "source": [ + "from scipy.stats import multivariate_normal\n", + "var = multivariate_normal(mean=[0,0], cov=[[1,0],[0,1]])\n", + "print('actual probability density:', var.pdf([0,0]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Benchmarking functions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Below, we will set up benchmarking functions for our serial and multiprocessing approach that we can pass to our `timeit` benchmark function. \n", + "We will be using the `Pool.apply_async` function to take advantage of firing up processes simultaneously: Here, we don't care about the order in which the results for the different window widths are computed, we just need to associate each result with the input window width. \n", + "Thus we add a little tweak to our Parzen-density-estimation function by returning a tuple of 2 values: window width and the estimated density, which will allow us to to sort our list of results later." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "def parzen_estimation(x_samples, point_x, h):\n", + " k_n = 0\n", + " for row in x_samples:\n", + " x_i = (point_x - row[:,np.newaxis]) / (h)\n", + " for row in x_i:\n", + " if np.abs(row) > (1/2):\n", + " break\n", + " else: # \"completion-else\"*\n", + " k_n += 1\n", + " return (h, (k_n / len(x_samples)) / (h**point_x.shape[1]))" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "def serial(samples, x, widths):\n", + " return [parzen_estimation(samples, x, w) for w in widths]\n", + "\n", + "def multiprocess(processes, samples, x, widths):\n", + " pool = mp.Pool(processes=processes)\n", + " results = [pool.apply_async(parzen_estimation, args=(samples, x, w)) for w in widths]\n", + " results = [p.get() for p in results]\n", + " results.sort() # to sort the results by input window width\n", + " return results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Just to get an idea what the results would look like (i.e., the predicted densities for different window widths):" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "h = 0.1, p(x) = 0.016\n", + "h = 0.2, p(x) = 0.0305\n", + "h = 0.3, p(x) = 0.045\n", + "h = 0.4, p(x) = 0.06175\n", + "h = 0.5, p(x) = 0.078\n", + "h = 0.6, p(x) = 0.0911666666667\n", + "h = 0.7, p(x) = 0.106\n", + "h = 0.8, p(x) = 0.117375\n", + "h = 0.9, p(x) = 0.132666666667\n", + "h = 1.0, p(x) = 0.1445\n", + "h = 1.1, p(x) = 0.157090909091\n", + "h = 1.2, p(x) = 0.1685\n" ] - }, + } + ], + "source": [ + "widths = np.arange(0.1, 1.3, 0.1)\n", + "point_x = np.array([[0],[0]])\n", + "results = []\n", + "\n", + "results = multiprocess(4, x_2Dgauss, point_x, widths)\n", + "\n", + "for r in results:\n", + " print('h = %s, p(x) = %s' %(r[0], r[1]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Based on the results, we can say that the best window-width would be h=1.1, since the estimated result is close to the actual result ~0.15915. \n", + "Thus, for the benchmark, let us create 100 evenly spaced window width in the range of 1.0 to 1.2." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "widths = np.linspace(1.0, 1.2, 100)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "import timeit\n", + "\n", + "mu_vec = np.array([0,0])\n", + "cov_mat = np.array([[1,0],[0,1]])\n", + "n = 10000\n", + "\n", + "x_2Dgauss = np.random.multivariate_normal(mu_vec, cov_mat, n)\n", + "\n", + "benchmarks = []\n", + "\n", + "benchmarks.append(timeit.Timer('serial(x_2Dgauss, point_x, widths)', \n", + " 'from __main__ import serial, x_2Dgauss, point_x, widths').timeit(number=1))\n", + "\n", + "benchmarks.append(timeit.Timer('multiprocess(2, x_2Dgauss, point_x, widths)', \n", + " 'from __main__ import multiprocess, x_2Dgauss, point_x, widths').timeit(number=1))\n", + "\n", + "benchmarks.append(timeit.Timer('multiprocess(3, x_2Dgauss, point_x, widths)', \n", + " 'from __main__ import multiprocess, x_2Dgauss, point_x, widths').timeit(number=1))\n", + "\n", + "benchmarks.append(timeit.Timer('multiprocess(4, x_2Dgauss, point_x, widths)', \n", + " 'from __main__ import multiprocess, x_2Dgauss, point_x, widths').timeit(number=1))\n", + "\n", + "benchmarks.append(timeit.Timer('multiprocess(6, x_2Dgauss, point_x, widths)', \n", + " 'from __main__ import multiprocess, x_2Dgauss, point_x, widths').timeit(number=1))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Preparing the plotting of the results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "import platform\n", + "\n", + "def print_sysinfo():\n", + " \n", + " print('\\nPython version :', platform.python_version())\n", + " print('compiler :', platform.python_compiler())\n", + " \n", + " print('\\nsystem :', platform.system())\n", + " print('release :', platform.release())\n", + " print('machine :', platform.machine())\n", + " print('processor :', platform.processor())\n", + " print('CPU count :', mp.cpu_count())\n", + " print('interpreter:', platform.architecture()[0])\n", + " print('\\n\\n')" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "from matplotlib import pyplot as plt\n", + "import numpy as np\n", + "\n", + "def plot_results():\n", + " bar_labels = ['serial', '2', '3', '4', '6']\n", + "\n", + " fig = plt.figure(figsize=(10,8))\n", + "\n", + " # plot bars\n", + " y_pos = np.arange(len(benchmarks))\n", + " plt.yticks(y_pos, bar_labels, fontsize=16)\n", + " bars = plt.barh(y_pos, benchmarks,\n", + " align='center', alpha=0.4, color='g')\n", + "\n", + " # annotation and labels\n", + " \n", + " for ba,be in zip(bars, benchmarks):\n", + " plt.text(ba.get_width() + 2, ba.get_y() + ba.get_height()/2,\n", + " '{0:.2%}'.format(benchmarks[0]/be), \n", + " ha='center', va='bottom', fontsize=12)\n", + " \n", + " plt.xlabel('time in seconds for n=%s' %n, fontsize=14)\n", + " plt.ylabel('number of processes', fontsize=14)\n", + " t = plt.title('Serial vs. Multiprocessing via Parzen-window estimation', fontsize=18)\n", + " plt.ylim([-1,len(benchmarks)+0.5])\n", + " plt.xlim([0,max(benchmarks)*1.1])\n", + " plt.vlines(benchmarks[0], -1, len(benchmarks)+0.5, linestyles='dashed')\n", + " plt.grid()\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ { - "cell_type": "code", - "collapsed": false, - "input": [ - "import platform\n", - "\n", - "def print_sysinfo():\n", - " \n", - " print('\\nPython version :', platform.python_version())\n", - " print('compiler :', platform.python_compiler())\n", - " \n", - " print('\\nsystem :', platform.system())\n", - " print('release :', platform.release())\n", - " print('machine :', platform.machine())\n", - " print('processor :', platform.processor())\n", - " print('CPU count :', mp.cpu_count())\n", - " print('interpreter:', platform.architecture()[0])\n", - " print('\\n\\n')" - ], - "language": "python", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAowAAAIACAYAAAAIQT11AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8TPf6B/DPmZBVElmERGWzFQlFaFGyqL3V2kKqIfYt\nqm7Rlt4mVAVxKbXUls3FrSD2NRJL0LpibWuXxBZLbElIJJHz+8NvzjVmJjPImJP4vF8vr3bOnDnn\nmfPM8uScZ75fQRRFEUREREREWiiMHQARERERyRsLRiIiIiIqEQtGIiIiIioRC0YiIiIiKhELRiIi\nIiIqEQtGIiIiIioRC0YCAOzduxcKhQKxsbGvvA2FQoEBAwaUYlRln5+fHzw8PPRePyQkBAoF35a6\npKenQ6FQYPLkycYORW/u7u7w9/c3dhikhaE+v8ria7U0lYXnHxMTA4VCgX379hk7FFnjN5MMXb58\nGUOHDsW7774LKysr2Nvbo379+ggJCcHevXsNtl9BECAIwmtvQ+6URZlCoUBqaqrGdebMmSOt8zpF\nNKB+TGJiYjB37lyt65aFYygXZelYGSq37u7u0mtVoVDAzMwMHh4eGDJkCK5du1bq+yvPDPl6Kkuv\n1ZeVnp6O8PBwnDx5Uus6xn7+e/fuxeTJk/Hw4UO1+5TvTWPHKHcVjB0AqTp69Ch8fX1hZmaGfv36\noUGDBsjLy8P58+exa9cu2NjYwM/Pr9T36+vri7y8PFSo8Pa8JMzNzREdHY2mTZuq3RcdHQ1zc3Pk\n5+eX+odITEwMMjIyMGbMGLX7li5disWLF5fq/sojd3d35Ofnw8TExNih6O38+fMG+0KqUaMGIiIi\nAAA5OTlITk5GVFQUtm3bhlOnTsHBwcEg+y1PytrrSU7S09MxZcoUeHp6olGjRir3yeW9unfvXkyZ\nMgUDBgyAra2tyn3BwcEICgpCxYoVjRRd2fD2VAdlxOTJk5Gfn4/ff/8d3t7eavffunWrVPeXk5MD\na2trCIIAU1PTUt223HXr1g2rV6/G7NmzVZ77f//7X/z555/4/PPPsWrVKoPsW1vhYKiCPTc3F5Uq\nVTLIto2lrL1eDfllZGtri88//1y6PWzYMDg5OWH+/PmIjo7GuHHjXnsfys+K8qqsvZ7kSNvEcXI6\ntppiVCgUsopRrnhJWmYuXLgABwcHjcUiAFStWlVtWWJiItq3bw87OztYWFigUaNGGs9SKXuojh8/\njg4dOqBy5crSX4OaehhFUcRPP/2ENm3awNnZGWZmZnBzc8PIkSNx7969V3p+Z86cgUKhwNdff63x\n/qCgIJiZmeHu3bsAgKtXr2LgwIFwc3ODubk5qlatilatWiEuLu6V9v+8AQMG4P79+9iwYYPK8ujo\naDg5OeHjjz9We4yy12X//v1q9+nTr+ju7o79+/dLfT3Kf8rtaephVC7LyspCv3794OjoiEqVKuGj\njz7C8ePHVdZ9vl/ot99+Q9OmTWFpaYnRo0dL6yxbtgxNmjSBpaUlKleujA4dOuDgwYMa401OTkaX\nLl3g4OAACwsL1KxZE4MHD5byo/Tbb7/hww8/hI2NDaysrPDBBx9g3bp1atvbunUrfH19UaVKFVha\nWsLNzQ09evTAhQsXpHX0ybmmvqjnl23ZsgXNmjWDhYUFXFxcMGHCBDx9+lQtnnXr1qFRo0awsLCA\nm5sbpkyZgsTERL1aEb755hsoFAqcPn1a7b6HDx/CwsIC3bp1k5Zp6mHctWsXevfuDU9PT1haWsLO\nzg4dOnTQ+Pp6We3btwcAXLp06aX3pXwtp6WloWfPnrC3t5fOyrx4Cfz5fy8+v6NHj6Jbt26oUqUK\nzM3N8e6772LatGlquVDuLzMzE0FBQbC3t4eVlRU6duyo8tooyYABA2BhYYEnT55Iyw4fPgyFQgEH\nBweVQmH79u1QKBSIj4+XlmnqYVQuO3z4MHx9fVGpUiU4OjpiyJAhePTokVoMKSkpaNWqFSwtLVGt\nWjWMHj0aubm5GuN99OgRvvvuO9SsWRPm5uZwdnZG//79ceXKFWmdJ0+ewMLCAiEhISqPHTZsGBQK\nBb766iuV5b1794atrS2Ki4t1Hq8LFy4gODhY+mz38PDAhAkT8PjxY5X1dL0fY2JiEBAQAOBZDl58\nLeh6r65duxbvvfceLC0tUatWLSxbtgwAkJGRgZ49e8LBwQE2NjYIDg5WO5Znz57FyJEj0aBBA+mz\nx8fHB8uXL1dZLyQkBFOmTAEAeHh4SDEql2n7XM/KysKoUaNQo0YNmJmZwdXVFaGhoWrff8rHJycn\nY9asWVJO69atWyrfVXLBM4wyU6tWLWzbtg0JCQkqXzbaLFmyBMOHD0fLli3x/fffw8rKCrt27cKI\nESNw6dIlzJw5U1pXEARcuXIFbdu2RWBgIHr16qX2Bnz+zNeTJ08wa9Ys9OzZE926dYOVlRWOHDmC\n5cuXIyUlBampqS991qRevXpo1qwZVq1ahcjISJXiKDs7Gxs3bkTnzp3h4OCAoqIitGvXDjdu3MCo\nUaNQp04dPHz4ECdPnkRKSgr69ev3Uvt+8Xk2btwY7733HqKiohAYGAjg2WWp1atXY9CgQa90RkjX\nJce5c+fiu+++Q1ZWFn7++Wdpeb169XRuo2PHjnBwcMDkyZORmZmJ+fPnw9fXF4cPH0aDBg1U1t2w\nYQOuXLmCkSNHYuTIkbCxsQHwrMiJjIzE+++/j4iICGRnZ2PJkiXw9/fHxo0b0alTJ2kbixcvxogR\nI1CjRg2MGjUKbm5uyMjIwJYtW3D9+nXpMuf333+PadOmoVOnTpg6dSoUCgXWr1+PXr16Yf78+Rg5\nciQAYN++fejatSsaNmyIiRMnonLlyrh+/Tr27NmDS5cuoXbt2i+dc03Hatu2bVi4cCFGjBiBwYMH\nY8OGDZg1axbs7Ozw3XffSev99ttvCAoKQu3atREeHg4TExPExsZi8+bNeuUyJCQEkZGRiIuLQ2Rk\npMp9a9aswZMnT1S+6DX1SMXGxuLBgwcICQnBO++8g2vXrmHZsmVo27YtkpOT8eGHH5YYQ0mUhZaj\no+NL70sQBOTm5sLX1xcffvghIiIicPv2bQDPXsMvFku///475s+fj2rVqknLtm7diu7du6NOnToY\nN24c7O3tcejQIfzwww84ceIE1qxZo7K/R48eoU2bNmjRogUiIiJw+fJlzJ07F59++in+/PNPnT8G\na9u2LWJjY3Hw4EGpgNmzZw8UCgUePHiA48ePo0mTJgCApKQkjQWuppyfOHECn3zyCQYOHIgvvvgC\nycnJWL58ORQKhcof5n/88Qc++ugj2Nra4ttvv4WtrS3+85//aPxjrLCwEB06dMChQ4fQq1cvjB8/\nHufPn8eiRYuwa9cuHD16FNWrV4eZmRlatWqF5ORklccrn1dSUpK0TBRF7N27F23atNF5rFJTUxEQ\nEAB7e3uMGDEC1atXx4kTJzBv3jwcPHgQ+/btQ4UKFfR6P/r6+mLixImYNm0ahg0bhtatWwNQP7mh\n6dhu2bIFv/76K0aNGgV7e3ssW7YMQ4cOhYmJCcLCwtCuXTtERETgyJEjiIqKgrm5OZYuXSo9ft++\nfThw4AC6du0KDw8PPHr0CGvWrMGQIUNw584dfPvttwCA4cOHIycnBwkJCfj555+l90TDhg21HqOH\nDx+iZcuWuHTpEgYNGoQmTZrg2LFjWLRoEZKSknDkyBG1qzYTJ05Efn4+RowYAVNTUyxatAghISGo\nVasWWrZsWWJOygSRZOXw4cOiqampKAiCWLt2bXHAgAHiokWLxDNnzqite+PGDdHMzEzs27ev2n1j\nxowRTUxMxMuXL0vL3NzcREEQxOXLl6utn5ycLAqCIMbGxqosz8/PV1t3+fLloiAI4po1a1SWC4Ig\nDhgwQOdzXLBggSgIgrht2zaV5cuWLRMFQRATEhJEURTFkydPioIgiJGRkTq3+TL69+8vCoIgZmVl\nib/88otoYmIiXrt2TRRFUVy5cqUoCIL4119/ifHx8WrHJDo6WhQEQdy3b5/adn19fUUPD49XWvZi\nbJqW9ejRQ2V5amqqqFAoxI4dO0rL0tLSREEQRFNTU/Hs2bMq6589e1YUBEFs3bq1WFhYKC2/ceOG\nWLlyZdHd3V18+vSpKIqiePXqVdHU1FRs0KCB+PDhQ7U4i4uLpRgEQRAnTZqkts5nn30m2tjYiLm5\nuaIoiuLYsWNFQRDEO3fuaHzuoqh/zpXPc/LkyWrLKlWqJGZkZKis7+XlJTo7O0u3CwsLRRcXF7Fa\ntWrigwcPpOW5ubmip6enxveCJs2aNRNdXFyk46b04YcfilWqVFE5zm5ubqK/v7/Keo8ePVLb5q1b\nt0RHR0exc+fOOvev3G69evXErKws8c6dO+Lly5fFqKgo0dbWVjQ1NRX/+uuvl96Xr6+vKAiC+M9/\n/lPn/tPS0kQnJyexdu3a4r1790RRFMW8vDyxatWqoq+vr9qxmTNnjigIgrh37161/b2Y98jISFEQ\nBHHnzp0647h27Zraa9Hf31/89NNPRRsbG3HmzJnS8iZNmogNGzZUebymzy9BEEQTExPxyJEjKsu7\ndOkiVqxYUeWYtmjRQjQzMxMvXLggLSsoKBCbN2+u9lpdsmSJKAiC+M0336hsd+vWraIgCGJwcLC0\nbOrUqaIgCNJ2MzIypHUEQRBv3boliqIonjp1ShQEQZw9e7bOY9WwYUOxXr160ntTKSEhQRQEQYyJ\niRFFUf/3o7bvD1HU/V69cuWKtPzOnTuiubm5KAiCOGfOHJXtdO/eXTQ1NVU55ppe08XFxaKfn59o\na2ur8v4LCwsTBUFQ+2wQRc2f6xMnThQFQRAXLVqksq7y++v594by8U2aNFHZ5/Xr10UzMzMxKChI\nbZ9lES9Jy8wHH3yA1NRU9O/fH9nZ2YiJicHIkSNRv359+Pr6Ii0tTVp37dq1KCgowMCBA5GVlaXy\n7+OPP0ZxcTESExNVtu/g4PBSQ0eYmZkBAJ4+fYoHDx4gKytL+qv8yJEjr/Qcg4KCYGpqqnaqPi4u\nDg4ODtKlYOUlsKSkJNy5c+eV9lUSQRDw+eefo2LFitLlx+joaDRv3hz169cv9f29rgkTJqjcbtKk\nCdq1a4fExES1y0hdunRB3bp1VZZt3LhR2s7zvZLOzs4YMGAAMjIycOLECQBAfHw8CgsLERYWJp2d\nfJ7ybMHKlSshCAL69eun9hr85JNPkJOTg8OHDwMAKleuDODZ67aoqEjjcyyNnH/22WdwdXVVWebn\n54ebN29Kxyk1NRWZmZkICQlRaYC3srLC8OHD9d5X//79kZmZid27d0vL0tLScOjQIQQFBensSbW0\ntJT+Pzc3F3fv3oVCoUDz5s3xxx9/6B3H2bNnUaVKFTg5OaFmzZoYNGgQnJycsHHjRum1/LL7EgRB\nZ+/jw4cP8fHHH6OoqAhbt26FnZ0dAGD37t24ffs2QkJCcO/ePZXXhfIs9q5du1S2ZWJigi+//FJl\nmfKz5uLFizqPQfXq1VGnTh3prJuyF7xjx47w9fXFnj17AAAPHjzAyZMnpbOQurRo0QLNmjVTi6uo\nqAjp6ekAgNu3b+P333/Hp59+ilq1aknrVaxYEWPHjlXbZkJCAkxMTFTOeANA586d0ahRI+m9Cjw7\ncwpAel5JSUmoUKECwsPDIQiCdPZR+V9dz+v06dM4ffo0goKCkJeXp5Ib5eV0ZW4M/Rn82WefoUaN\nGtJtR0dH1KlTBxUqVMCoUaNU1v3www9RWFgoHXNA9TWdn5+Pu3fv4u7du2jXrh2ys7Nx7ty5V44t\nISEBTk5OGDp0qMryYcOGoUqVKkhISFB7zMiRI1Xe8y4uLqhTp45er9+ygAWjDHl5eSE6Oho3b95E\neno6YmNj0bp1axw4cACffvopCgsLATzrBwSAjz76CE5OTir/2rdvD0EQpMtISjVr1nypX2quWbMG\n77//PiwtLWFvby99IQHA/fv3X+n52dnZ4eOPP8bGjRuRk5MD4FlPS0pKCvr06SO94dzc3DBp0iTs\n2rULzs7O8PHxwTfffIOjR4++0n41sbe3R9euXaVfLicnJ8t2LMnnL1s/v+zp06fIyMhQWV6nTh21\ndZV/bLx4+RqAVFRcvnwZwP8uZzZu3LjEmM6cOQNRFPHuu++qvQYHDx4MQRCkH2qFhoaicePGGDly\nJBwcHNClSxf88ssvyMrKkrZXGjn39PRUW6a8fK7svVQeixeLakDzsdNG0x8/cXFxEEVRr5aJS5cu\noU+fPrCzs4ONjY1U9G3fvh0PHjzQOw4PDw8kJiYiMTER+/fvx8WLF3H+/Hl07NjxlfdVpUoVjX8s\nKBUVFaFXr164ePEi1q1bh9q1a0v3KT+bBg4cqPa6qFevnsbPJhcXF7UfHryYt+LiYty8eVPlX3Z2\ntrS+v78/jh49itzcXBw6dAj5+fkICAiAv78/UlJSUFhYiL1796K4uFjvglGf15PyffPuu++qravp\nfZuWlgYXFxe1X+sCz96fOTk50vvCx8cH1tbWUkGYlJQEHx8feHp6wtvbWyqEk5KS4ODgoPYr5Rcp\ncxMWFqaWm6pVq+Lx48dSbgz9Gazp2NrZ2cHZ2VmtJUj5x8jz/dO5ubkYN24cXF1dYWlpKb2mv//+\newCv/h0FPMtR3bp11S7vm5iYoHbt2ionb0p6Pvb29mo932UVexhlztXVFcHBwQgODkbr1q1x8OBB\n/Pe//0XLli2lJu4VK1bA2dlZ4+Nf/BHG83+R6bJ+/Xr06dMH77//PubNm4caNWrA3NwcRUVF6Nix\no16N1dr069cP69evx5o1azBo0CCsWLECoiiif//+Kuv9+OOPGDhwILZu3YoDBw5g2bJliIyMxIQJ\nEzB9+vRX3v/zBg4ciE6dOmHIkCEwMzNDUFCQ1nVLKra1nTUzhpfJ8+sQRRGCIGDHjh1ah81QFqP2\n9vb473//iwMHDmD37t3Yv38/xo4di7CwMGzbtg0ffPABgNfPeUnDd4hafsX5quzt7dG5c2ds2LAB\njx49gpWVFVasWIH69etrHK7pebm5uWjTpg3y8vIwduxYeHt7w9raGgqFAtOmTVPrWyuJlZVViQXQ\nq+xL12to5MiRSExMxPLly9WG+lIe51mzZuG9997T+HgXFxeV2/rk7cqVK2pfyiEhIYiKigLw7Gzc\n4sWLsX//fhw6dEg665iXl4evv/4av//+O5KSkmBiYgJfX98Sn9/LxGVIFSpUQOvWrVUKRmVvrL+/\nPzZt2gRRFLFv3z589NFHOrenjHncuHEqf1A8T1mcAYb9DNZ2bPU95p9//jm2bt2KYcOGoU2bNnBw\ncICJiQm2bt2KOXPmvNZ31KvQFvebeJ28CSwYy5DmzZvj4MGDuH79OoD/nQlxcHDQ+6/ll7FixQpY\nWFggOTkZ5ubm0vKzZ8++9rY7d+4MR0dHrFixQioY69WrBx8fH7V1PTw8EBoaitDQUDx58gQdOnTA\nzJkzMW7cOKl5+XW0b98e77zzDhITE9G3b98Sz6rY29sDgMZfiaelpUmX8EvyqmPx/f3333j//ffV\nllWoUAFubm46H688M/znn3+q/SHx999/A/jfX8jKM2/Hjx9XucT2ojp16mDnzp2oUaOGxrMrL1Io\nFPD19ZW+rE+fPo2mTZti6tSp2LJli7SeoXPu7u4OQPNr+WUvY/Xv3x8bNmzAmjVrUKdOHVy+fBkz\nZszQ+bg9e/YgMzMT0dHRan8oTZw48aVieNP7ioyMxLJly/DNN99oPCOv/GyytLQs1c8mZ2dntTab\n5wtPPz8/CIKAPXv24PDhw9K+GzZsCEdHR+zZswfJyclo0qRJie/zl6V8PynP3j1P+d56nqenJ3bu\n3ImHDx+qnWX8+++/YWtrq/I6DwgIwLZt2xAfH48bN25Il6nbtm2LuXPnYt26dXj48KFex1qZG4VC\noXdudL0fjTHg9YMHD7Blyxb0798fCxcuVLnvxXYH4OU/dz09PXH27Fk8ffpUpRAsKirC+fPnNZ5N\nLO94SVpmdu/erXH4j7y8POzatQuCIEhnbAIDA2FmZoawsDDk5+erPebhw4coKCh45ViUb5Ln4xFF\nEVOnTn3lbSpVqFABn3/+OQ4cOIBVq1bh4sWLal9k2dnZ0uV3JTMzM6kwef5yw9mzZ6XLQi9LEAQs\nWLAA4eHh+Oabb0pcV/lh+3zPGgCsXr0amZmZeu2vUqVKJQ5LpO2D7flfvAPAsWPHkJiYiLZt2+p1\nRrFr164QBAGRkZEqZ0OVhYS7u7t0Cbpnz54wNTXF5MmTpbYBTYKDgwE8Kzo0/TX//Lihmi7L1K1b\nF+bm5lIuXybnr6NZs2ZwdnZGTEyMyuXY3Nxc/Prrry+1rS5dusDR0RFxcXGIi4uDQqHAF198ofNx\nyvfXi8dt165dr9wf/Cb2lZCQgG+//Rbdu3eXBgt/UYcOHeDk5ITp06drzFleXp7W4WZKYmZmhoCA\nAJV/z/+h4ujoCG9vb2zZsgVHjx6VCiJBEODv74/4+Hj8/fffpf4HdtWqVfHBBx9g48aNKsMAFRQU\nYM6cOWrrd+vWDcXFxWpn6LZv344TJ06ga9euKsuV8YaHh8Pc3BytWrUCALRp0wYmJiYIDw9XWa8k\njRs3hpeXF3799VeNl1WLiope+v2o/LXwm7z0amJiAkEQ1F7TmZmZWLZsmdrn6MvG2K1bN9y5c0ca\n5kdp6dKlyMrK0msUk/KGZxhlZuzYsbh37x66du0KLy8vWFpa4urVq1i1ahUuXLiA/v37Sz1o1atX\nx6JFizB48GDUq1cPwcHBcHV1xZ07d3D69Gls3LgRZ86cUfsBgL569eqF9evXIyAgAMHBwSgsLMSG\nDRuQl5dXKs+1f//+mDdvHkaMGAETExO1L9mkpCQMHToUPXv2RJ06dVCpUiWkpqZi+fLl+OCDD1R6\npurXrw83NzeNH4D6+OSTT/DJJ5/oXK9u3br46KOPsHjxYoiiiEaNGuHEiRPYsGEDatWqpfbhCqhf\njmjRogW2bt2K0NBQtGjRAiYmJmjbti2qVKmicX2lK1euoEOHDvjkk0+kYXWsrKzUhnTRpk6dOhg/\nfjxmzpyJNm3aIDAwEDk5OViyZAkeP36M1atXSx+y1atXx88//4xRo0bB29sb/fr1g6urK65fv45N\nmzYhKioKjRo1go+PD8LDwxEeHo733nsPvXr1grOzMzIzM5Gamort27dL4+INHjwY169fR/v27eHq\n6oq8vDz89ttvePTokdTv9zI5fx0mJiaYNWsW+vbti+bNm2PQoEEwMTFBTEwMHBwckJ6ervcZiQoV\nKiAoKAjz589Hamoq2rVrp7VF5HmtW7dGtWrV8PXXXyM9PV0a2uTf//43vL29NY7v+KpeZV+aXod3\n797FF198AUtLS3To0AH//ve/Ve6vVq0aPvroI1haWiIuLg6fffYZ6tati4EDB6JmzZp48OABzp49\ni4SEBGzYsAFt2rQpcX+vIiAgAD///DMEQVApoAICAqRxFw1xRWb27Nnw8/NDq1atMGrUKGlYHU0n\nAEJCQhAbG4sZM2YgPT0drVu3xsWLF7Fw4UJUq1YN06ZNU1n/vffeg52dHc6cOQN/f3+p19PGxgY+\nPj74448/4OLiorEnV5MVK1YgICAADRs2xMCBA1G/fn08fvwYFy9eREJCAqZPn45+/frp/X5s0KAB\nrK2tsXDhQlhaWsLW1hZVq1Z95bnT9XktWFtbo3379vj3v/8NCwsL+Pj4ICMjA0uWLIGnp6dan2WL\nFi0APBta7PPPP4e5uTm8vb019nQDz34cGB8fj1GjRuHYsWN47733cPz4cURFReHdd99V+xHi6z6f\nMuGN/iabdNq1a5c4atQosVGjRqKjo6NYoUIF0dHRUQwICBCjo6M1PubgwYNit27dRCcnJ9HU1FR0\ncXERAwICxNmzZ6sMi+Pu7q42rIdScnKyqFAo1IZFWLp0qVi/fn3R3NxcdHZ2FocNGybeu3dP6xAU\n+gyr8zxvb29RoVCI7du3V7svLS1NHD58uFivXj3RxsZGtLKyEuvXry+GhYWJ2dnZavvWNlTNi0JC\nQkSFQiHevXu3xPXi4+M1HpObN2+KvXr1Em1sbMRKlSqJnTt3Fs+ePSv6+fmpxaBp2ePHj8VBgwaJ\nVatWFU1MTESFQiEN56CM7Xn9+/cXFQqFmJWVJQYHB4sODg6ipaWl2LZtW/HYsWMq62oawuJFS5cu\nFRs3biyam5uLNjY2Yvv27cWUlBSN6+7atUts166daGtrK5qbm4s1a9YUhw4dqnbstm7dKnbo0EG0\nt7cXzczMRFdXV7Fz587i4sWLpXXWr18vdu3aVXznnXdEMzMzsUqVKqKfn5+4fv16lfj1yXlJQ3Vo\neu7h4eGiQqFQG1IjPj5ebNiwoRRzWFiYNLRIfHy81mP4IuXwQgqFQly1apXGdTS9/06dOiV27NhR\ntLOzE62trUV/f38xJSVF4+tAG3d3d9Hb21vnei+zL02vW1H83zFWKBSiIAhq/158fn/++af4xRdf\niNWrVxdNTU3FqlWriq1atRKnTp0qDcGjz/5Kej2/aPPmzaIgCGKtWrVUll+4cEEUBEE0MzMT8/Ly\n1B73Mp9p0dHRKu9bpf3794stW7YUzc3NxWrVqomhoaHin3/+qfE5PHr0SPzuu+9ET09P6dj069dP\nZZiZ5/Xo0UNUKBTi1KlTVZZPmjRJVCgU4hdffKH9oGiQkZEhDh8+XHR3dxdNTU1FBwcH0cfHR5w4\ncaI0zNjLfAZv27ZNbNKkiTQsjvK18LLvVW2vBU3HPCsrSxw8eLDo4uIimpubiw0bNhSXLVsmxsTE\naMzPzJkzRU9PT7FixYqiQqGQ9q8tn3fu3BFHjhwpvvPOO2LFihXFGjVqiKGhoWqff9oeX9LzKYsE\nUSwvpS9R+RQSEoK4uLg33sD9tvrXv/6F8ePH4/fff0fz5s2NHQ4RkSywh5GoDDBGU3l5V1hYqHa5\nMDc3FwsWLICjo6M0KwgREbGHkahM4IWA0nfp0iV06tQJQUFBcHd3R2ZmJmJjY5GRkYFFixbpHHSb\niOhtwk9xJtkgAAAgAElEQVREIpnTNAcxvT4nJye0aNECK1euxO3bt1GhQgU0bNgQM2fORM+ePY0d\nHhGRrLCHUYf33nsPJ0+eNHYYRERERDr5+vpi7969pb5dFow6CILAy4EyoxzGheSFeZEn5kWemBd5\nUX7Xl4e8GKpu4Y9eqMx5fvJ5kg/mRZ6YF3liXuSJedGOBSMRERG91cLCwowdguyxYKQyJyQkxNgh\nkAbMizwxL/LEvMiL8jI086Idexh1YA8jERERlRXsYST6f4b49Re9PuZFnpgXeWJe5Il50Y4FIxER\nERGViJekdeAlaSIiIioreEmaiIiIyADK+tiLbwILRipz2GMiT8yLPDEv8sS8yMvkyZMBMC8lYcFI\nRERERCViD6MO7GEkIiIq38rTdz17GImIiIjIKFgwUpnDHhN5Yl7kiXmRJ+ZFnpgX7VgwEhER0VuN\nc0nrxh5GHcpTXwMRERGVb+xhJCIiIiKjYMFIZQ57TOSJeZEn5kWemBd5Yl60Y8FIRERERCViD6MO\n7GEkIiKisoI9jEREREQGwLmkdWPBSGUOe0zkiXmRJ+ZFnpgXeeFc0rqxYCQiIiKiErGHUQf2MBIR\nEZVv5em7nj2MRERERGQULBipzGGPiTwxL/LEvMgT8yJPzIt2LBiJiIjorca5pHVjD6MO5amvgYiI\niMo39jASERERkVGwYKQyhz0m8sS8yBPzIk/MizwxL9qxYCQiIiKiErGHUQf2MBIREVFZwR5GIiIi\nIgPgXNK6sWCkMoc9JvLEvMgT8yJPzIu8cC5p3VgwEhEREVGJ2MOoA3sYiYiIyrfy9F3PHkYiIiIi\nMgoWjFTmsMdEnpgXeWJe5Il5kSfmRTsWjERERPRW41zSurGHUYfy1NdARERE5Rt7GImIiIjIKFgw\nUpnDHhN5Yl7kiXmRJ+ZFnpgX7VgwEhEREVGJ2MOoA3sYiYiIqKxgDyMRERGRAXAuad1YMFKZwx4T\neWJe5Il5kSfmRV44l7RuLBiJiIiIqETsYdSBPYxERETlW3n6rmcPIxEREREZBQtGKnPYYyJPzIs8\nMS/yxLzIE/OiHQtGIiIieqtxLmnd2MOoQ3nqayAiIqLyjT2MRERERGQULBipzGGPiTwxL/LEvMgT\n8yJPzIt2LBiJiIiIqETsYdSBPYxERERUVrCHkYiIiMgAOJe0biwYqcxhj4k8MS/yxLzIE/MiL5xL\nWjcWjERERERUIvYw6sAeRiIiovKtPH3Xs4eRiIiIiIyCBSOVOewxkSfmRZ6YF3liXuSJedGOBSMR\nERG91TiXtG7sYdShPPU1EBERUfnGHkYiIiIiMgoWjFTmsMdEnpgXeWJe5Il5kSfmRTsWjERERERU\nIvYw6sAeRiIiIior2MNIREREZACcS1o3FoxU5rDHRJ6YF3liXuSJeZEXziWtGwtGIiIiIioRexh1\nYA8jERFR+VaevuvZw0hERERERsGCkcoc9pjIE/MiT8yLPDEv8sS8aMeCkYiIiN5qnEtaN/Yw6iAI\nAibOmGjsMIjKBCcbJ4wZPsbYYRARvbUM1cNYodS3WA65tXUzdghEZULGngxjh0BERAbAS9JU5pw7\nes7YIZAGzIs8sSdLnpgXeWJetGPBSEREREQlYg+jDoIgYPHRxcYOg6hMyNiTgZ8m/GTsMIiI3loc\nh5GIiIjIADiXtG4sGKnMYa+cPDEv8sSeLHliXuSFc0nrxoKRiIiIiErEHkYd2MNIpD/2MBJRWcS5\npHXjGUYiIiIiKhELRipz2CsnT8yLPLEnS56YF3liXrRjwUhERERvNc4lrRt7GHVgDyOR/tjDSERk\nXOxhJCIiIiKjYMFIZQ575eSJeZEn9mTJE/MiT8yLdiwYiYiIiKhELBipzKnrU9fYIZAGr5uXgoIC\nDBo0CO7u7rCxsUHjxo2xY8cOtfWmTJkChUKBpKQkaVlRURFGjx4NZ2dnODg4oGvXrrhx44bG/fz+\n++9o164dHBwc4OTkhMDAQNy8eVOvbRUVFaFPnz6ws7NDp06dkJOTIz1u2rRpmDNnzmsdA0Pw8/Mz\ndgikAfMiT8yLdiwYiUgWioqK4Orqiv379yM7OxtTp05FYGAgMjIypHUuXbqEtWvXwsXFReWxCxcu\nxIEDB3Dq1CncuHEDdnZ2GD16tMb9PHjwAMOHD0dGRgYyMjJgbW2NAQMG6LWt9evXw8TEBHfv3oWt\nrS2WLFkCAEhLS8PmzZsxZsyY0j4sRPQGcC5p3VgwUpnDXjl5et28WFpaIiwsDK6urgCALl26wMPD\nA8eOHZPWCQ0NxYwZM1CxYkWVx/7111/o0KEDqlSpAjMzMwQGBuKvv/7SuJ+OHTuiR48eqFSpEiws\nLDBq1CgcPHhQr22lp6fD19cXCoUCfn5+uHz5MgDgyy+/xOzZs6FQyO8jlT1Z8sS8yAvnktZNfp9u\nREQAbt26hfPnz6NBgwYAgPj4eJibm6NTp05q67Zv3x7bt29HZmYmHj9+jJUrV6Jz58567Wf//v3w\n8vLSa1teXl5ISkrCkydPkJycDC8vLyQkJMDJyQktWrQohWdNRCRPFYwdANHLYg+jPNX1qYuMPRm6\nV9RDYWEh+vbti5CQENSpUwc5OTmYNGkSEhMTNa7fo0cPbNq0CdWrV4eJiQkaNmyIBQsW6NzPqVOn\n8OOPP2LTpk16batz5844cOAAmjdvjhYtWqB3795o27YtEhMTMWnSJKSkpMDLyws///yz2llQY2FP\nljwxL/LEvGj31p5h3LZtG9q0aQNra2vY2tqiWbNmSE5ONnZYRG+94uJiBAcHw9zcHPPnzwfwrL8o\nODhYulwNQGVg2nHjxiEnJwf37t3Do0eP0K1bN41nIp938eJFdO7cGfPmzUOrVq303lZERAROnjyJ\nX3/9FRERERgxYgT++OMPpKamYt++fSgoKEBUVFRpHQ4iIll4KwvGxYsX47PPPkOzZs2wYcMGxMfH\nIzAwEHl5ecYOjfTAHkZ5Ko28iKKIQYMG4c6dO1i3bh1MTEwAAElJSZg3bx6cnZ3h7OyMq1evIjAw\nEJGRkQCAHTt2YMCAAahcuTJMTU0RGhqKI0eO4N69exr3k5GRgXbt2uGHH35A3759Ve7Td1unT5/G\n4cOHMWTIEJw+fRpNmzYFAPj4+ODUqVOvfSxKC3uy5Il5kSfmRbu37pJ0eno6vvrqK8yaNQtffvml\ntLx9+/ZGjIqIAGDEiBE4e/YsEhMTYWZmJi3fs2cPioqKADwrKps1a4Y5c+ZIZ/4aNmyI2NhY+Pr6\nwsLCAgsXLkT16tVhb2+vto/r168jICAAoaGhGDp0qNr9+mxLFEWMHj0av/zyCwRBgKenJ+bPn4+C\nggLs27cPPj4+pX1oiMiAOJe0bm/dGcaoqChUqFABw4cPN3Yo9IrYwyhPr5uXjIwMLFmyBCdPnkS1\natVgbW0Na2trrF69Gvb29nBycoKTkxOqVq0KExMT2NnZwdLSEgAwZ84cKBQK1KxZE05OTtixYwcS\nEhKkbXt5eWH16tUAgGXLliEtLQ3h4eHSPmxsbKR1dW0LAGJiYuDt7Y3GjRsDALp37w4XFxc4OTnh\n/v37GgtRY2FPljwxL/KiHFaHedFOEA0xQ7WMBQQEIDs7G6Ghofjxxx9x5coVuLu7Y+zYsRg5cqTa\n+oIgYPHRxUaIlKjsydiTgZ8m/GTsMIiI3lqCIMAQpd1bd4bxxo0buHDhAiZMmICJEydi9+7daNeu\nHUJDQzFv3jxjh0d6YA+jPDEv8sSeLHliXuSJedHurethLC4uRk5ODmJjY/HZZ58BeHYKOj09HRER\nESp9jUrRYdFwdHEEAFhUskCNujWky2/KL0nefnO3r567Kqt4ePt/tzMuZWDv3r3SZR3lhy9vG+/2\niRMnZBUPb/O2nG+XxfeL8v/T09NhSG/dJekWLVrgyJEjyM7OhpWVlbR8zpw5+Prrr5GZmYmqVatK\ny3lJmkh/vCRNRGRcvCRdSho0aGCQA0lERERlE+eS1u2tKxi7d+8O4NlYa8/bsWMHatSooXJ2keSJ\nvXLyxLzI0/OXrUg+mBd54VzSur11PYydO3eGv78/hg0bhqysLHh4eCA+Ph67d+9GTEyMscMjIiIi\nkp23rocRAHJycvDdd99h7dq1uH//PurVq4dvv/0Wffr0UVuXPYxE+mMPIxGVRYbq+zMGQz2Xt+4M\nIwBYW1tj/vz50jy1RERERKTdW9fDSGUfe+XkiXmRJ/ZkyRPzIk/Mi3YsGImIiOitxrmkdXsrexhf\nBnsYifTHHkYiIuPiOIxEREREZBQsGKnMYa+cPDEv8sSeLHliXuSJedGOBSMRERERlYg9jDqwh5FI\nf+xhJCIyLvYwEhERERkA55LWjQUjlTnslZMn5kWe2JMlT8yLvHAuad1YMBIRERFRidjDqAN7GIn0\nxx5GIiqLOJe0bjzDSEREREQlYsFIZQ575eSJeZEn9mTJE/MiT8yLdiwYiYiI6K3GuaR1Yw+jDuxh\nJNIfexiJiIyLPYxEREREZBQsGKnMYa+cPDEv8sSeLHliXuSJedGOBSMRERERlYg9jDqwh5FIf+xh\nJCIyLvYwEhERERkA55LWjQUjlTnslZMn5kWe2JMlT8yLvHAuad0qGDuAsiBjT4axQ6Dn3Lp0C+YP\nzY0dBr3g1qVbaNa4mbHDICIiA2APow7laX5JIiIiUleevuvZw0hERERERsGCkcoc9pjIE/MiT8yL\nPDEv8sS8aMeCkYiIiN5qnEtaN/Yw6lCe+hqIiIiofGMPIxEREREZBQtGKnPYYyJPzIs8MS/yxLzI\nE/OiHQtGIiIiIioRexh1YA8jERERlRXsYSQiIiIyAM4lrRsLRipz2GMiT8yLPDEv8sS8yAvnktaN\nBSMRERERlYg9jDqwh5GIiKh8K0/f9YZ6LhVKfYvl0KSZk4wdAlGZ4GTjhDHDxxg7DCIiKmUsGPXg\n1tbN2CHQc84dPYe6PnWNHQa94NzRc7j98Laxw6AX7N27F35+fsYOg17AvMgT86IdexiJiIjorca5\npHVjD6MOgiBg8dHFxg6DqEzI2JOBnyb8ZOwwiIjeWhyHkYiIiIiMggUjlTnnjp4zdgikAfMiTxxX\nTp6YF3liXrRjwUhEREREJdKrh/Hp06cAABMTEwBAZmYmtm7dinr16qFVq1aGjdDI2MNIpD/2MBIR\nGZdRexi7dOmC+fPnAwByc3PRrFkzjB8/Hr6+voiNjS31oIiIiIjeFM4lrZteBWNqair8/f0BAOvX\nr4e1tTVu376NZcuW4V//+pdBAyR6EXvl5Il5kSf2ZMkT8yIvnEtaN70KxtzcXNjZ2QEAdu3ahW7d\nuqFixYrw9/fHxYsXDRogERERERmXXgVjjRo1kJKSgtzcXOzcuRPt2rUDANy7dw+WlpYGDZDoRZzl\nRZ6YF3nirBXyxLzIE/OinV5TA3799dfo168frKys4ObmhjZt2gAA9u/fj4YNGxo0QCIiIiIyLr3O\nMA4bNgyHDx9GVFQUDh48KP1aumbNmvjxxx8NGiDRi9grJ0/MizyxJ0uemBd5Yl600+sMIwD4+PjA\nx8dHZdnHH39c6gERERERvUmcS1o3vc4wiqKIBQsWoEGDBrCwsMDly5cBANOnT8eaNWsMGiDRi9gr\nJ0/MizyxJ0uemBd5UQ6rw7xop1fBOHfuXEydOhVDhgxRWe7i4iKNz0hE9DoKCgowaNAguLu7w8bG\nBo0bN8aOHTvU1psyZQoUCgX27NkjLevUqROsra2lf2ZmZlr7q1euXKmyrpWVFRQKBY4fPw7g2RdH\nxYoVpfttbGyQnp4OACgqKkKfPn1gZ2eHTp06IScnR9rutGnTMGfOnFI8IkRE8qFXwbho0SIsXboU\nX331FSpU+N9V7CZNmuDPP/80WHBEmrBXTp5eNy9FRUVwdXXF/v37kZ2djalTpyIwMBAZGRnSOpcu\nXcLatWvh4uICQRCk5du3b0dOTo70r2XLlggMDNS4n759+6qsu3DhQtSsWRONGzcG8GyWhKCgIOn+\n7OxsuLu7A3g2Dq2JiQnu3r0LW1tbLFmyBACQlpaGzZs3Y8yYMa91DAyBPVnyxLzIE/OinV4F45Ur\nV+Dt7a22vGLFisjLyyv1oIjo7WNpaYmwsDC4uroCeDbDlIeHB44dOyatExoaihkzZqBixYpat5Oe\nno4DBw6gX79+eu03JiZGZV1RFLVOq5Weng5fX18oFAr4+flJ7TlffvklZs+eDYVCr49UIqIyR69P\nNw8PD6Smpqot3759O+rXr1/qQRGVhL1y8lTaebl16xbOnz+PBg0aAADi4+Nhbm6OTp06lfi4uLg4\ntGnTRio8S5KRkaFWXAqCgM2bN8PBwQFeXl749ddfpfu8vLyQlJSEJ0+eIDk5GV5eXkhISICTkxNa\ntGjxis/UsNiTJU/MizwxL9rpVTCOHz8eoaGhWLlyJYqLi3Ho0CGEh4dj4sSJGD9+vKFjNKiOHTtC\noVDgn//8p7FDIaL/V1hYiL59+yIkJAR16tRBTk4OJk2ahLlz5+p8bFxcHEJCQvTaj7K4dHNzk5YF\nBgbi7NmzyMrKwtKlSzFlyhT85z//AQB07twZHh4eaN68Oezs7NC7d29MmTIFM2fOxKRJk+Dr64tR\no0ahsLDwlZ43ERkH55LWTa+CccCAAZg8eTK+++475OXloV+/fli2bBl++eUX9OnTx9AxGszq1atx\n6tQpAFDphyJ5Yw+jPJVWXoqLixEcHAxzc3PpR3Xh4eEIDg5WOWuo6bJxSkoKbt26hZ49e+q1r7i4\nOPTv319lWb169VCtWjUIgoAWLVpgzJgxWLt2rXR/REQETp48iV9//RUREREYMWIE/vjjD6SmpmLf\nvn0oKChAVFTUqzx1g2BPljwxL/LCuaR107vhZsiQIbhy5Qpu3bqFzMxMXLt2DYMGDTJkbAZ1//59\n/OMf/+CvGolkRBRFDBo0CHfu3MG6deukSQKSkpIwb948ODs7w9nZGVevXkVgYCAiIyNVHh8bG4se\nPXroNWXpwYMHkZmZqXdx+aLTp0/j8OHDGDJkCE6fPo2mTZsCeDZmrfIPUSKi8kKvgvHp06d4+vQp\nAKBKlSooLi7GsmXLcPDgQYMGZ0jffPMNvL290bt3b2OHQi+JPYzyVBp5GTFiBM6ePYtNmzbBzMxM\nWr5nzx789ddfOHnyJE6cOAEXFxcsWbIEI0eOlNbJy8tDfHy83pejY2Nj0bNnT1hZWaks37hxI+7f\nvw9RFHHkyBHMmzcPn376qco6oihi9OjR+OWXXyAIAjw9PZGSkoKCggLs27cPNWvWfPWDUMrYkyVP\nzIs8MS/a6VUwdunSRbo0lJubi2bNmmH8+PHw9fVFbGysQQM0hJSUFKxYsQILFiwwdihE9P8yMjKw\nZMkSnDx5EtWqVZPGQVy9ejXs7e3h5OQEJycnVK1aFSYmJrCzs1Mp9jZs2AA7OzuNH/heXl5YvXq1\ndDs/Px/x8fFql6MB4LfffkPt2rVhY2OD/v3747vvvkNwcLDKOjExMfD29paG4unevTtcXFzg5OSE\n+/fvY+jQoaV0VIiI5EEQtY0f8ZwqVapgz549aNiwIeLi4hAREYFTp05h5cqVmD17dpm6/FJQUIDG\njRujR48emDJlCgBAoVDg+++/l24/TxAELD66+E2HSSU4d/QczzLK0Lmj52D+0Bw/TfjJ2KHQc/bu\n3cuzJjLEvMiLIAgQRbFc5EX5XEqbXmcYc3NzYWdnBwDYtWsXunXrhooVK8Lf3x8XL14s9aAMaebM\nmXjy5AkmTZpk7FCIiIhIBjiXtG4VdK8C1KhRAykpKfjkk0+wc+dOaf7oe/fu6dVcLhdXrlzBTz/9\nhOXLlyMvL09l0PH8/Hw8fPgQ1tbWaoPvRodFw9HFEQBgUckCNerWkM5wKX8Zyttv9raSXOLh7bqo\n61MX+5fsV/kLXfmLQ9427m0lucTD237w8/OTVTxv++3w8PAy+35R/r9yClND0euS9OLFixEaGgor\nKyu4ubnh2LFjMDExwdy5c7Fx40YkJSUZNMjSsnfvXgQEBJS4zokTJ1TmoOUlaSL9ZezJ4CVpIiIj\nMuol6WHDhuHw4cOIiorCwYMHpaEuatasiR9//LHUgzKUxo0bY+/evSr/kpOTAQDBwcHYu3evrH7d\nSJpxHEZ5Yl7k6cWzJiQPzIs8MS/a6XVJGng2tpiPj490u7CwEB9//LFBgjIUW1tbtGnTRuN9bm5u\nWu8jIiIiepvpdYZx7ty5WLdunXR74MCBMDc3R506dXDuHM8q0JvFX0jLE/MiT8p+J5IX5kWemBft\n9CoY582bB0fHZz/62L9/P+Lj47Fq1So0btwYX3/9tUEDfBOKi4s1DqlDRERE5R/nktZNr4Lxxo0b\n8PT0BABs3rwZPXv2RO/evREeHo7Dhw8bNECiF7FXTp6YF3liT5Y8MS/ywrmkddOrYLSxscGtW7cA\nALt370bbtm0BABUqVEB+fr7hoiMiIiIio9PrRy/t27fHkCFD0KRJE1y8eBGdOnUCAPz999/w8PAw\naIBEL2KvnDzV9amLjD0Zxg6DXsCeLHliXuSJedFOrzOM8+fPx4cffoisrCysXbsWDg4OAIDU1FR8\n/vnnBg2QiIiIiIxLr4G732YcuFt+OJe0PHEuaXnaWw7mxi2PmBd54VzSuul1hhEAbt68icjISIwY\nMQJZWVkAgJSUFKSlpZV6UERERERvCueS1k2vM4ypqakICAiAp6cn/vzzT5w7dw6enp4ICwvDhQsX\nsGrVqjcRq1HwDCOR/jg1IBGRcRn1DOPXX3+NMWPG4Pjx4zA3N5eWd+zYESkpKaUeFBERERHJh14F\n47FjxxASEqK2vFq1atJwO0RvCsf7kyfmRZ44rpw8MS/yxLxop1fBaGFhgXv37qktP3fuHJycnEo9\nKCIiIiKSD70Kxk8//RSTJ09WGaQ7LS0NEyZMQI8ePQwWHJEm/IW0PDEv8lTWf/FZXjEv8sS8aKdX\nwRgZGYn79++jSpUqePz4MT788EPUqlULlStXxtSpUw0dIxEREZHBcC5p3fQqGG1tbXHgwAFs3LgR\n06dPx5gxY7Bz507s378flSpVMnSMRCrYKydPzIs8sSdLnpgXeeFc0rrpNTUg8Oxn2gEBAQgICDBk\nPEREREQkM3qdYQwJCcGcOXPUls+ePRuDBw8u9aCISsJeOXliXuSJPVnyxLzIE/OinV4F444dO+Dv\n76+2PCAgAFu3bi31oIiIiIhIPvQqGB88eKCxV9HS0lLjcDtEhsReOXliXuSJPVnyxLzIE/OinV4F\nY+3atbFlyxa15du2bUOtWrVKPSgiIiKiN4VzSeum11zSsbGxGD58OMaOHYu2bdsCABITE/Hzzz9j\nwYIFGDhwoMEDNRbOJU2kP84lTURkXIaaS1qvX0n3798f+fn5+PHHHzF9+nQAQPXq1TFnzpxyXSwS\nERERkZ6XpAFg2LBhuHbtGm7evImbN2/i6tWrGD58uCFjI9KIvXLyxLzIE3uy5Il5kSfmRTu9x2EE\ngMuXL+Pvv/+GIAioV68ePD09DRUXEREREcmEXj2M2dnZGDhwINavXw+F4tlJyeLiYvTo0QNRUVGw\ntrY2eKDGIggCJs6YaOwwiMoEJxsnjBk+xthhEBG9tQzVw6hXwThgwAAcOnQIS5YsQYsWLQAAhw4d\nwrBhw9CqVStERUWVemByYagDT0RERPIQHh5ebuaTNlTdolcP46ZNm7B06VL4+vrC1NQUpqam8PPz\nw9KlS7Fhw4ZSD4qoJOwxkSfmRZ6YF3liXuSFc0nrplfBmJeXBwcHB7Xl9vb2yM/PL/WgiIiIiEg+\n9Lok/dFHH8HGxgYrVqyAlZUVACA3Nxf9+vVDdnY2EhMTDR6osfCSNBERUflWnr7rjdrDePr0aXTo\n0AGPHz9Go0aNIIoiTp8+DUtLS+zcuRNeXl6lHphclKcXEREREakrT9/1Ru1h9Pb2xoULFxAZGYmm\nTZvCx8cHkZGRuHjxYrkuFkme2GMiT8yLPDEv8sS8yBPzop3OcRgLCgrg6uqKPXv2YMiQIW8iJiIi\nIqI3hnNJ66bXJel33nkHu3btQv369d9ETLJSnk5TExERUflm1EvSo0ePRkREBAoLC0s9ACIiIiKS\nN70KxpSUFGzcuBHvvPMO2rZti08++UT617VrV0PHSKSCPSbyxLzIE/MiT8yLPDEv2uk1l7SDgwO6\nd++u8T5BEEo1ICIiIiKSF716GN9m7GEkIiKissJQdYteZxiVLl26hDNnzgAA6tWrh5o1a5Z6QHI0\naeYkY4dAVG442ThhzPAxxg6DiEhSnuaSNhS9zjDevXsXAwcOxObNm6FQPGt7LC4uxscff4zo6GiN\n0waWF4IgYPHRxcYOg55z7ug51PWpa+ww6AX65iVjTwZ+mvDTG4iIgGc9WX5+fsYOg17AvMiL8qxc\neciLUX8lPXjwYFy6dAkHDhxAXl4e8vLycODAAaSlpWHw4MGlHhQRERERyYdeZxgtLS2RmJiIli1b\nqiw/fPgw2rZti8ePHxssQGPjGUai0sUzjEQkN+Xp9wpGPcPo6OgIKysrteWWlpZwdHQs9aCIiIiI\nSD70Khh/+OEHjB07FteuXZOWXbt2Df/4xz/www8/GCw4Ik3OHT1n7BBIA+ZFnjiunDwxL/LEvGin\n16+k586di/T0dLi7u6N69eoAgOvXr8PCwgK3b9/G3LlzATw7DXrq1CnDRUtERERUyjiXtG56FYw9\nevTQa2McxJveBP5CWp6YF3kq67/4LK+YF3lRDqnDvGinV8HIsYmIiIiI3l569TASyQl75eSJeZEn\n9mTJE/MiT8yLdiwYiYiIiKhEnEtaB47DSFS6OA4jEZHhGHUcRiIiIqLyir/V0E1rwWhiYoLbt28D\nAAYOHIjs7Ow3FhRRSdgrJ0/MizyxJ0uemBd5mTx5MgDmpSRaC0YLCwvk5OQAAGJiYpCfn//GgiIi\nIp2VIUAAACAASURBVCIi+dA6rE7Lli3RrVs3NGnSBAAwZswYWFhYqKwjiiIEQUBUVJRhoyR6Dsf7\nkyfmRZ44rpw8MS/yxLxop7VgjIuLw6xZs3Dx4kUAwN27d2FqaqoyOLeyYCQiIiKi8kvrJelq1aph\n1qxZ2LBhA1xdXbFq1Sps2bIFmzdvlv4pbxO9SeyVk6c3kZeCggIMGjQI7u7usLGxQePGjbFjxw4A\nwN9//w0fHx/Y29ujcuXKaNWqFVJSUqTHdurUCdbW1tI/MzMzNGzYUON+Vq5cqbKulZUVFAoFjh8/\nLq1z7NgxtGnTBtbW1qhWrRrmzZsHACgqKkKfPn1gZ2eHTp06Sa09ADBt2jTMmTPHEIdGK/ZkyRPz\nIk/Mi3Z6/Uo6PT0djo6Oho6FiKhERUVFcHV1xf79+5GdnY2pU6ciMDAQGRkZqF69OuLj43H37l3c\nv38fffr0Qc+ePaXHbt++HTk5OdK/li1bIjAwUON++vbtq7LuwoULUbNmTTRu3BgAkJWVhU6dOmHE\niBG4d+8eLl26hPbt2wMA1q9fDxMTE9y9exe2trZYsmQJACAtLQ2bN2/GmDFjDHyUiOhlcS5p3fQe\nVmfLli1o3bo1HBwc4OjoCF9fX2zdutWQsRFpxF45eXoTebG0tERYWBhcXV0BAF26dIGHhweOHTsG\nW1tbeHh4QBAEPH36FAqFAs7Ozhq3k56ejgMHDqBfv3567TcmJkZl3dmzZ6Njx44ICgpCxYoVYWVl\nhXfffVfatq+vLxQKBfz8/HD58mUAwJdffonZs2dDoXizo5mxJ0uemBd54VzSuun1ybVs2TJ0794d\ntWrVwowZMzB9+nR4eHigW7duWL58uaFjJCLS6NatWzh//jwaNGggLatcuTIsLCwwc+ZMrF27VuPj\n4uLi0KZNG6nwLElGRoZacfnHH3/Azs4OrVq1QtWqVdG1a1dcvXoVAODl5YWkpCQ8efIEycnJ8PLy\nQkJCApycnNCiRYvXfMZERMahV8E4Y8YMzJ49G9HR0Rg8eDAGDx6MmJgY/Otf/8KMGTMMHWOp2rlz\nJwICAuDs7Axzc3PUqFEDvXv3xpkzZ4wdGumJPYzy9KbzUlhYiL59+yIkJAR16tSRlj948AAPHz5E\nnz590KtXL40zHsTFxSEkJESv/SiLSzc3N2nZ1atXERsbi3nz5uHKlSvw8PBAUFAQAKBz587w8PBA\n8+bNYWdnh969e2PKlCmYOXMmJk2aBF9fX4waNQqFhYWvdwD0xJ4seWJe5Il50U6vgvHKlSvo2LGj\n2vKOHTsiPT29tGMyqPv376NZs2ZYsGABdu/ejYiICPz111/44IMPpDMERCRvxcXFCA4Ohrm5OebP\nn692v6WlJaZPn47z58/j9OnTKvelpKTg1q1bKv2NJYmLi0P//v3Vtt+9e3c0bdoUZmZmCAsLw6FD\nh6QfuERERODkyZP49ddfERERgREjRuCPP/5Aamoq9u3bh4KCAg5HRkRlil4FY40aNbBr1y615bt3\n71b5q7ss6NOnD2bMmIHu3bujdevW+OKLL7B+/Xrk5ORovXxF8sIeRnl6U3kRRRGDBg3CnTt3sG7d\nOpiYmGhc7+nTpyguLoalpaXK8tjYWPTo0UNtuSYHDx5EZmamWnGp7dfVLzp9+jQOHz6MIUOG4PTp\n02jatCkAwMfHB6dOndJrG6+LPVnyxLzIE/OinV4F4/jx4/HVV19h8ODBiI6ORnR0NAYNGoSvvvoK\n48aNM3SMBmdvbw8AWr94iEg+RowYgbNnz2LTpk0wMzOTlicmJuLEiRN4+vQpsrOz8Y9//AN169ZF\nrVq1pHXy8vIQHx+v9+Xo2NhY9OzZE1ZWVirLBwwYgISEBJw8eRKFhYX48ccf0bp1a1hbW0vriKKI\n0aNH45dffoEgCPD09ERKSgoKCgqwb98+1KxZ8/UOBBGVGs4lrZteBeOwYcPw22+/4cyZMxg3bhzG\njRuHc+fOIT4+HsOGDTN0jAbx9OlTFBQU4MKFCxg2bBiqVq2KPn36GDss0gN7GOXpTeQlIyMDS5Ys\nwcmTJ1GtWjVpnMRVq1bhwYMHCAoKQuXKlVG3bl3cuXMHmzZtUnn8hg0bYGdnp/EsgpeXF1avXi3d\nzs/PR3x8vNrlaADw9/fHtGnT0KVLF1StWhWXL1/GqlWrVNaJiYmBt7e3NBRP9+7d4eLiAicnJ9y/\nfx9Dhw4thSOiG3uy5Il5kRfOJa2bIGrqCH8L+Pj44NixYwAANzc3bN26FfXr11dbTxAELD66+E2H\nRyU4d/QcL0vL0P+1d+dxVdX5/8Bf5yoICAgpICAi4C6oCDlp7pOm5JKaS5qKmlt9zZrMMiaFHFya\nEXNpcsnUxiWdxFzGVFJBEZVwRQwtA1FUFGUUcGH7/P7oxx2vcBeNy/3ce1/Px4NHnOWe8768vfHm\nc97nfAzNy+X9lxE9I7oaIiLg91+AvMwmH+ZFLoqiQAhhEXkpfy9VflxrLRjT09ORn5+PS5cu4R//\n+AdycnKQmJhYoSeTBSNR1WLBSESyMVaRZQosGI3o7t27aNSoEYYPH44vv/xSY5uiKHjhlRdQz+v3\nmW7sHe3h08xHPZJSfhmOy1zmsmHLOSdzsH7FegD/u/xT/hc9l7nMZS6bYllRFBw8eFCaeJ5mufz7\n8qfWrFu3jgWjMZXPQfvk3eAcYZQPL0nLiZek5RRvAZfYLBHzIhdektaveueoklROTg7S09N51yIR\nEZEV4lzS+ukdYSwqKkLnzp3xzTffoFkz8x/VGThwIEJCQhAUFARnZ2dcvHgRixYtws2bN5GcnKzx\nCA6AI4xEVY0jjERExmOsEcaa+nawtbVFRkYGFEWp8pObQocOHbBlyxYsXLgQRUVF8PHxQffu3TFz\n5kyD5pUlIiIisjYGXZIePXo0Vq1aZexYqsWMGTOQkpKCvLw8FBYWIj09HV9++SWLRTPC5zDKiXmR\n0+ON8SQP5kVOzIt2ekcYAeD+/ftYv3494uLiEBISop71QAgBRVGwZMkSowZJRERERKZj0F3ST94x\nVH55urxgLL8V3RKxh5GoarGHkYjIeEzWwwhwiJaIiIgsV2RkJOeT1uOpHquTm5uL48eP4+HDh8aK\nh0gv9srJiXmRE//glxPzIhfOJa2fQQVjfn4+hgwZAnd3d3Ts2BHXrl0DAEyePJkVOREREZGFM6hg\n/PDDD5GdnY2TJ0/C3t5evb5v376IjY01WnBEleEsL3JiXuRk7rNWWCrmRU7Mi3YG9TDu2LEDsbGx\naNu2rcbzGJs3b47ffvvNaMERERERkekZNMKYl5eHunXrVlifn5+PGjVqVHlQRLqwV05OzIuc2JMl\nJ+ZFTsyLdgYVjKGhodixY0eF9StXrkTHjh2rPCgiIiKi6sK5pPUz6DmMSUlJePnllzFs2DCsX78e\nEyZMwLlz55CcnIxDhw4hJCSkOmI1CT6Hkahq8TmMRETGY6znMBo0wtixY0ckJSWhqKgIAQEB2L9/\nP7y9vXHs2DGLLhaJiIiI6CmewxgUFIRvvvkGaWlpOH/+PNavX4+goCBjxkZUKfbKyYl5kRN7suTE\nvMiJedHOoLukAeDBgwfYuHEjfv75ZwBAixYtMGLECI3H7BARERGR5TGoh/HkyZPo27cvHjx4gKCg\nIAghkJaWhlq1amHXrl0WfVmaPYxEVYs9jERExmPSHsaJEyeiU6dOuHr1Kg4dOoTDhw/jypUr6NKl\nCyZNmlTlQRERERFVF85ap59BBWNaWhpmz56N2rVrq9fVrl0bs2bNwrlz54wWHFFl2CsnJ+ZFTuzJ\nkhPzIhfOJa2fQQVjs2bN1PNHP+769eto1ozTgRERERFZMq09jHfu3FF/f/ToUUyfPh2zZs1Chw4d\n1Ouio6Mxf/589O3bt3qiNQH2MBJVLfYwEpFsjNX3ZwrGei9a75KuV69ehXUjR46ssG7AgAEoLS2t\n2qiIiIiISBpaC8YDBw5UZxxEBruQcgHNQtkKIRvmRU7x8fHo1q2bqcOgJzAvcmJetNNaMPIHRkRE\nRNaAc0nrZ9BzGAHg0aNHSEtLw82bN1FWVqaxLSwszCjByUBRFHy84GNTh0FkMdyd3TFt8jRTh0FE\nZJGM1cNoUMF44MABjBw5Ejk5OZVuf7KAtCSW1AhLREREls2kD+6eMmUKXnnlFWRkZKCwsBD379/X\n+CKqTnxOlpyYFzkxL3JiXuTEvGhn0FzS165dw8cffwxfX19jx0NEREREkjHokvTQoUPRv39/vPHG\nG9URk1R4SZqIiIjMhUl7GPPy8vD666+jefPmCAoKgo2Njcb20aNHV3lgsmDBSEREZNkiIyMtZj5p\nkxaMW7ZsQXh4OB4+fAgHBwcoiqKxPT8/v8oDkwULRvnwOVlyYl7kxLzIiXmRS/nvekvIi0lvepk+\nfTreeust5Ofno6CgAPn5+RpfRERERGS5DBphdHZ2xqlTpxAQEFAdMUmFI4xERESWzZJ+15t0hHHQ\noEGIi4ur8pMTERERkfwMeqxOQEAAIiIicPjwYbRu3brCTS9/+ctfjBIcUWUsocfEEjEvcmJe5MS8\nyIl50c6ggnH16tVwcnLCkSNHkJSUVGE7C0YiIiIyV5xLWj+D55K2VpbU10BERESWzaQ9jERERERk\nvQy6JD116tQKz1583JIlS6osIBlFfBZh6hDoMZcvXYZvAKeplA3zIqfqyIu7szumTZ5m1HNYGvbK\nyYl50c6ggjE1NVWjYCwqKkJ6ejpKS0sRHBxstOBk4ftn/hKUycM6D+EbypzIhnmRU3Xk5fL+y0Y9\nPhGZnkEFY3x8fIV1Dx8+xLhx49ClS5eqjolIp2ahzUwdAlWCeZET8yInjmLJiXnR7pl7GO3s7BAR\nEYHo6OiqjIeIiIioWlnKPNLG9IduesnNzeXUgFTtLqRcMHUIVAnmRU7Mi5wqu3JHphMVFQWAedHF\noEvSCxcu1OhhFELg2rVr2LBhA8LCwowWHBERERGZnkHPYWzUqJFGwahSqeDm5oYePXpg5syZcHJy\nMmqQpqQoClakrDB1GERE0rq8/zKiZ7A9icyXJT1z2VjvxaARxszMzCo/MRERERGZBz64m8wOe7Lk\nxLzIiXmRE3vl5MS8aGfQCKMQAps3b8b+/ftx8+ZNlJWVqbcpioIdO3YYLUAiIiIiY+Jc0voZ1MP4\nwQcf4PPPP0f37t3h6emp0c+oKArWrFlj1CBNiT2MRES6sYeRSB4m7WH85ptvsHHjRgwZMqTKAyAi\nIiIiuRnUw1hWVmYVUwCSeWBPlpyYFzkxL3Jir5ycmBftDCoYJ0yYgPXr1xs7FiIiIiKSkEGXpO/e\nvYsNGzYgLi4OrVu3ho2NDYDfb4ZRFAVLliwxapBEj+PcuHJiXuTEvMiJcxbLiXnRzqCCMS0tDW3b\ntgUApKenq9eXF4xERERE5ioyMpLzSeth0CXp+Ph49dfBgwfVX+XLRNWJPVlyYl7kJHteli1bhtDQ\nUNjZ2WHs2LHq9ZmZmVCpVHByclJ/RUf/707sRYsWISAgAM7OzvDw8MDYsWORn5+v9Tz379/HW2+9\nBTc3N7i4uKBr164a20+ePIkuXbrAyckJ9evXV185KykpwfDhw+Hq6oo+ffponGPu3LlYtGjRM71v\n9srJhXNJ68cHdxMRkcl4e3vjk08+wbhx4yrdfu/ePeTn5yM/Px8RERHq9QMGDEBKSgru3buH9PR0\nZGVlaRSUT5o4cSL++9//Ij09HXl5efj888/V23Jzc9GnTx9MmTIFd+7cwaVLl9CrVy8AQGxsLGrU\nqIHbt2+jTp06WLlyJQAgIyMDO3fuxLRp06rix0AkPYMuSRPJhD1ZcmJe5CR7XgYOHAgASElJwdWr\nVytsLysrQ40aNSqs9/f319hHpVLB09Oz0nOkp6dj586dyM7OhqOjIwBoPPkjJiYGvXv3xuuvvw4A\nsLGxQfPmzQH8PtLZtWtXqFQqdOvWDampqQCAd955BzExMVCpnm3chb1ycmJetOMIIxERmZy2Bw37\n+vrCx8cH48aNw+3btzW2bdy4EXXq1IGbmxvc3Ny0jvYlJyfD19cXs2bNgpubG1q3bo3Y2Fj19uPH\nj8PV1RUvvvgiPDw80L9/f1y5cgUAEBgYiAMHDuDRo0c4ePAgAgMDsW3bNri7u6NDhw5V9O6J5MeC\nkcyO7D1Z1op5kZO55OXJGyjd3NyQkpKCrKwsnDhxAvn5+Rg5cqTGPiNGjMDdu3dx8eJF/Pzzz1r7\nCa9evYpz587BxcUF169fx7JlyzBmzBhcuPD7z+bKlStYt24dlixZgqysLPj5+alHG8PCwuDn54f2\n7dvD1dUVw4YNw6efforPPvsMERER6Nq1K95++20UFxc/1ftlr5ycmBftrK5g/O677/Dqq6+iYcOG\ncHBwQPPmzfHxxx+joKDA1KEREVmtJ0cYa9eujXbt2kGlUsHd3R3Lli3Dvn37UFhYWOG1jRs3xkcf\nfYRvvvmm0mPb29vDxsYGf/3rX1GzZk106dIF3bt3x969ewEADg4OGDRoEEJCQlCrVi3Mnj0bSUlJ\n6htc5s2bhzNnzmD58uWYN28epkyZguPHj+PEiRNISEhAUVERvv766yr+iVB14lzS+lldwbhw4ULY\n2Nhg/vz52LNnD6ZMmYIvv/wSPXv2NMrci1T1ZO/JslbMi5zMJS+GPqKtrKys0vXFxcVwcHCodFvr\n1q0BVCxKy89Zvl2f1NRUHD16FBMmTEBqaipCQkIAAKGhoTh79qxBxyjHXjm5lD9Sh3nRzuoKxl27\nduHf//43RowYgS5dumDatGlYsmQJjh8/zqFoIqJqVlpaiocPH6KkpASlpaV49OgRSkpKkJycjAsX\nLqCsrAy3b9/GO++8g+7du8PJyQkA8NVXX+HWrVsAgPPnz2P+/PkYPHhwpefo2rUrGjZsiHnz5qGk\npARHjhxBfHw8Xn75ZQDA2LFjsW3bNpw5cwbFxcWYM2cOOnfurD4X8HuxOXXqVCxduhSKosDf3x+J\niYkoKipCQkICAgICjPyTIjItqysY69atW2FdaGgoAODatWvVHQ49A3PpybI2zIucZM/LnDlz4ODg\ngAULFmD9+vWwt7fH3Llz8dtvv6FPnz5wdnZGUFAQ7O3tsWnTJvXrkpKSEBQUBCcnJwwcOBCjR4/G\ne++9p94eGBio3r9mzZrYvn07du/eDRcXF0yaNAn/+te/0LRpUwBA9+7dMXfuXLzyyivw8PDAb7/9\nho0bN2rEuXbtWgQFBanvrh40aBC8vLzg7u6OvLw8TJw48aneNwco5MS8aKcIXofF8uXL8dZbbyEl\nJQXt2rXT2KYoClakrDBRZFSZCykXzOYymzVhXuRUHXm5vP8yomdofwYiVRQfH8/LnxKyhLwoimKU\nFjurLxizs7MRHByM4OBgdQP041gwEhHpxoKRSB7GKhit+sHdBQUFGDBgAGxtbbFmzRqt+62ZvQb1\nvOoBAOwd7eHTzEf9F3v55R4uc5nLXLbWZTvYAfjf5bzyERouc9lcliMjI9XrZYjnaZbLv8/MzIQx\nWe0I44MHDxAWFobU1FQkJCSgVatWle7HEUb58NKnnJgXOfGStJws4dKnJSkflbOEvHCEsQoVFxfj\ntddew8mTJxEXF6e1WCQiIiIiKywYy8rKMHLkSMTHx2PXrl1o3769qUOip8RRLDkxL3JiXuRk7qNY\nlop50c7qCsa3334b3333HSIiImBvb49jx46pt/n4+MDb29uE0RERERHJx+qew7hnzx4oioLo6Gh0\n7NhR42v16tWmDo8MIPtz5awV8yIn5kVOfN6fnJgX7axuhDEjI8PUIRAREZFEOJe0flZ7l7SheJc0\nEZFuvEuaSB7Gukva6i5JExEREdHTYcFIZoc9WXJiXuTEvMiJvXJyYl60Y8FIRERERDqxh1EP9jAS\nEenGHkYiebCHkYiIiMgIIiMjTR2C9FgwktlhT5acmBc5MS9yYq+cXKKiogAwL7qwYCQiIiIindjD\nqAd7GImIdGMPI5k7Y/X9mQJ7GImIiIjIJFgwktlhT5acmBc5MS9yYq+cnJgX7VgwEhERkVXjXNL6\nsYdRD/YwEhHpxh5GInmwh5GIiIiITIIFI5kd9mTJiXmRE/MiJ/bKyYl50Y4FIxERERHpxB5GPdjD\nSESkG3sYieTBHkYiIiIiI+Bc0vqxYCSzw54sOTEvcmJe5MReOblwLmn9WDASERERkU7sYdSDPYxE\nRLqxh5HMHeeS1q9mlR/RAl3ef9nUIRARScvd2d3UIRCRkXGEUQ9L+qvDUsTHx6Nbt26mDoOewLzI\niXmRE/Mil/Lf9ZaQF94lTURERGQEnEtaP44w6sERRiIiIjIXHGEkIiIiIpNgwUhmh8/JkhPzIifm\nRU7Mi5yYF+1YMBIRERGRTuxh1IM9jERERGQu2MNIREREZAScS1o/FoxkdthjIifmRU7Mi5yYF7lw\nLmn9WDASERERkU7sYdSDPYxERESWzZJ+17OHkYiIiIhMggUjmR32mMiJeZET8yIn5kVOzIt2NU0d\ngDmI+CzC1CHQYy5fuoy45DhTh0FPYF7kxLzIiXmRy8uvvGzqEKTHHkY9FEXBipQVpg6DiIiIjOTy\n/suInhFt6jCqBHsYiYiIiMgkWDCS2bmQcsHUIVAlmBc5MS9yYl7kxB5G7VgwEhEREZFOLBjJ7DQL\nbWbqEKgSzIucmBc5MS9y6tatm6lDkBYLRiIiIrJqh+IOmToE6bFgJLPD3h85MS9yYl7kxLzIJfHH\nRADsYdSFBSMRERER6cTnMOrB5zASERFZtkmhkziXtB4cYSQiIiIinVgwktlh74+cmBc5MS9yYl7k\nxB5G7VgwEhERkVXr9FInU4cgPfYw6sEeRiIiIsvGuaT14wgjEREREenEgpHMDnt/5MS8yIl5kRPz\nIif2MGrHgpGIiIjoGS1btgyhoaGws7PD2LFjNbbt378fzZs3R+3atdGjRw9kZWVpbP/www9Rr149\n1KtXDx999JHO8xh6LAAaxyopKcHw4cPh6uqKPn36ID8/X71t7ty5WLRokUHvkwUjmR3OwSon5kVO\nzIucmBc5Pctc0t7e3vjkk08wbtw4jfW5ubkYPHgwoqOjkZeXh9DQUAwbNky9fcWKFdi+fTvOnj2L\ns2fPYufOnVixovJ7Jp7mWAA0jhUbG4saNWrg9u3bqFOnDlauXAkAyMjIwM6dOzFt2jSD3icLRiIi\nIrJqf2Qu6YEDB2LAgAGoW7euxvrY2FgEBgZi8ODBsLW1RWRkJM6cOYOLFy8CANatW4fp06fDy8sL\nXl5emD59OtauXVvpOZ7mWAA0jpWZmYmuXbtCpVKhW7du+O233wAA77zzDmJiYqBSGVYKsmAks8Pe\nHzkxL3JiXuTEvMilKuaSfvLO5LS0NLRp00a97ODggMaNGyMtLQ0AcP78eY3trVu3Vm970h85VmBg\nIA4cOIBHjx7h4MGDCAwMxLZt2+Du7o4OHToY/P4sqmAMDw+Hn5/fU78uPj4eKpUKhw49+18YRERE\nZL0URdFYLiwshLOzs8Y6Z2dndQ9hQUEB6tSpo7GtoKCg0mP/kWOFhYXBz88P7du3h6urK4YNG4ZP\nP/0Un332GSIiItC1a1e8/fbbKC4u1vn+LKpgnDVrFr7//ntTh0FGxt4fOTEvcmJe5MS8yOlZehjL\nPTnC6OjoiHv37mmsu3v3LpycnCrdfvfuXTg6OlZ67D96rHnz5uHMmTNYvnw55s2bhylTpuD48eM4\nceIEEhISUFRUhK+//lrn+7OIgvHRo0cAAH9/f40hWSIiIqLq8OQIY6tWrXDmzBn1cmFhIS5duoRW\nrVqpt58+fVq9/cyZMwgMDKz02FV1rNTUVBw9ehQTJkxAamoqQkJCAAChoaHqG2a0qdaC8eLFixg4\ncCA8PDxgb28PX19fDB06FKWlpQCAW7duYfLkyWjQoAHs7OzQokULrFq1SuMYa9euhUqlwuHDhzFk\nyBC4urqqr8FXdkl69uzZaNeuHerUqQM3Nzf8+c9/xvHjx6vnDZNRsPdHTsyLnJgXOTEvcnqWHsbS\n0lI8fPgQJSUlKC0txaNHj1BaWoqBAwfi3LlziI2NxcOHDxEVFYW2bduiadOmAIDRo0cjJiYG165d\nQ3Z2NmJiYhAeHl7pOZ7mWAAqPZYQAlOnTsXSpUuhKAr8/f2RmJiIoqIiJCQkICAgQOf7rNaC8ZVX\nXsH169exfPly7Nu3D/Pnz4ednR2EELh37x46deqEPXv2ICoqCrt370a/fv0wZcoULFu2rMKxRo4c\niYCAAGzduhXz589Xr3+yws/Ozsa7776LHTt2YN26dXB3d0eXLl1w7tw5o79fIiIikt8fmUt6zpw5\ncHBwwIIFC7B+/XrY29sjOjoa9erVw9atWxEREYHnnnsOKSkp+Pbbb9WvmzRpEvr164egoCC0bt0a\n/fr1w8SJE9XbAwMDsWnTJgB4qmMBqHAs4PcBt6CgIAQHBwMABg0aBC8vL7i7uyMvL6/C/k+qtrmk\nc3Nz4e7ujh07dqBv374Vts+ZMwdz587FuXPnNKrciRMnYtu2bcjJyYFKpcLatWsxbtw4vPfee1i4\ncKHGMcLDw5GQkICMjIxKYygtLYUQAoGBgejduzc+//xzAL//RdGjRw/Ex8ejS5cuGq/hXNJERESW\njXNJ61dtI4z16tWDv78/PvzwQ3z11Vf45ZdfNLbv2bMHL7zwAho1aoSSkhL1V69evXD79m2cP39e\nY/+BAwcadN4ff/wR3bt3R7169WBjYwNbW1tcvHhR/ewiIiIiItKtZnWeLC4uDpGRkZg5cyZu374N\nPz8/fPDBB5g8eTJu3ryJS5cuwcbGpsLrFEXB7du3NdZ5enrqPd/JkycRFhaGPn364Ouvv4anpydU\nKhXefPNNPHz40OC418xeg3pev0+3Y+9oD59mPuo73Mr7ULhcfctXLlzBSyNfkiYeLv++/HhPgnjy\nNAAAFuBJREFUlgzxcJmfF5mX+XmRbzk+Ph6nT5/Gu+++q14G/nfntKzL5d9nZmbCmKrtkvSTzpw5\ng2XLlmH16tXYvXs3oqKiULNmTSxevLjS/Zs2bQpHR0f1Jelff/0V/v7+Gvs8eUk6IiICixcvxt27\nd1GjRg31fr6+vggICMCBAwcA8JK0ubmQcoGPpJAQ8yIn5kVOzItcyi9Jx8fH/6FH68jAWJekq3WE\n8XFt2rTBwoULsXr1aqSlpaF3795YunQpfHx84ObmViXnuH//foUpbw4cOIArV67ovRuI5MX/ycqJ\neZET8yIn5kVO5l4sGlO1FYxnz57FtGnTMHz4cAQEBKC0tBRr166FjY0NevTogYCAAGzevBmdO3fG\ne++9h6ZNm6KwsBDp6elITEx8pgdy9+nTB4sXL0Z4eDjCw8Nx8eJF/O1vf4O3t7dRqm8iIiIyP4fi\nDgEzTB2F3KrtphdPT0/4+voiJiYGAwYMwIgRI3Djxg3s2rULwcHBcHZ2RlJSEsLCwrBgwQL07t0b\n48ePx86dO9GjRw+NYz356JzH1z++rVevXliyZAmOHDmCfv36Ye3atfjXv/6Fxo0bVziGtmOSfB7v\n/SF5MC9yYl7kxLzIpSrmkrZ0JuthNBfsYZQPe3/kxLzIiXmRE/Mil0mhkyCEYA+jruOyYNSNBSMR\nEZFlKy8YLYHZP4eRiIiIiMwTC0YyO+z9kRPzIifmRU7Mi5zYw6gdC0YiIiKyan9kLmlrwR5GPdjD\nSEREZNk4l7R+HGEkIiIiIp1YMJLZYe+PnJgXOTEvcmJe5MQeRu1YMBIRERGRTiwYyezwYbdyYl7k\nxLzIiXmRk7k/tNuYWDASERGRVTsUd8jUIUiPBSOZHfb+yIl5kRPzIifmRS6cS1o/FoxEREREpBOf\nw6gHn8NIRERk2TiXtH4cYSQiIiIinVgwktlh74+cmBc5MS9yYl7kxB5G7VgwEhERkVXjXNL6sYdR\nD/YwEhERWTbOJa0fRxiJiIiISCcWjGR22PsjJ+ZFTsyLnJgXObGHUTsWjERERESkEwtGMjucg1VO\nzIucmBc5MS9y4lzS2rFgJCIiIqvGuaT1q2nqAMzB5f2XTR0CPebypcvwDfA1dRj0BOZFTsyLnJgX\nuTw+lzRHGSvHx+roYazb0+nZ8QMtJ+ZFTsyLnJgXuZT/rreEvBirbmHBqAcLRiIiIstmSb/r+RxG\nIiIiIjIJFoxkdvicLDkxL3JiXuTEvMiJedGOBSMRERFZtdmzZ5s6BOmxh1EPS+prICIiIsvGHkYi\nIiIiMgkWjGR22GMiJ+ZFTsyLnJgXOTEv2rFgJCIiIiKd2MOoB3sYiYiIyFywh5GIiIjICCIjI00d\ngvRYMJLZYY+JnJgXOTEvcmJe5BIVFQWAedGFBSMRERER6cQeRj3Yw0hERGTZLOl3PXsYiYiIiMgk\nWDCS2WGPiZyYFzkxL3JiXuTEvGjHgpGIiIisGueS1o89jHpYUl8DERERWTb2MBIRERGRSbBgJLPD\nHhM5MS9yYl7kxLzIiXnRjgUjEREREenEHkY92MNIRERE5oI9jERERERGwLmk9WPBSGaHPSZyYl7k\nxLzIiXmRC+eS1o8FIxERERHpxB5GPdjDSEREZNks6Xc9exiJiIiIyCRYMJLZYY+JnJgXOTEvcmJe\n5MS8aMeCkYiIiKwa55LWjz2MelhSXwMRERFZNvYwEhEREZFJsGAks8MeEzkxL3JiXuTEvMiJedGO\nBSMRERER6cQeRj3Yw0hERETmgj2MREREREbAuaT1Y8FIZoc9JnJiXuTEvMiJeZEL55LWjwUjmZ3T\np0+bOgSqBPMiJ+ZFTsyLnJgX7Vgwktn573//a+oQqBLMi5yYFzkxL3JiXrRjwUhEREREOrFgJLOT\nmZlp6hCoEsyLnJgXOTEvcmJetONjdfRo27Ytzpw5Y+owiIiIiPTq2rWrUW7eYcFIRERERDrxkjQR\nERER6cSCkYiIiIh0YsFIRERERDqxYNRiz549aN68OZo0aYIFCxaYOhz6/xo1aoTWrVsjODgY7du3\nN3U4VmvcuHHw8PBAUFCQet2dO3fQs2dPNG3aFL169eLzzEygsrxERkaiQYMGCA4ORnBwMPbs2WPC\nCK3PlStX0L17d7Rq1QqBgYFYsmQJAH5eTE1bXvh50Y43vVSitLQUzZo1w48//ghvb288//zz2LRp\nE1q0aGHq0Kyen58fTpw4geeee87UoVi1w4cPw9HREaNHj0ZqaioAYMaMGahXrx5mzJiBBQsWIC8v\nD/PnzzdxpNalsrxERUXByckJf/nLX0wcnXW6ceMGbty4gbZt26KgoAAhISH4/vvvsWbNGn5eTEhb\nXrZs2cLPixYcYaxEcnIyGjdujEaNGsHGxgbDhw/H9u3bTR0W/X/8G8f0OnfuDFdXV411O3bswJgx\nYwAAY8aMwffff2+K0KxaZXkB+Jkxpfr166Nt27YAAEdHR7Ro0QLZ2dn8vJiYtrwA/Lxow4KxEtnZ\n2fDx8VEvN2jQQP0PiUxLURS89NJLCA0NxapVq0wdDj0mJycHHh4eAAAPDw/k5OSYOCIqt3TpUrRp\n0wbjx4/npU8TyszMxKlTp/CnP/2JnxeJlOflhRdeAMDPizYsGCuhKIqpQyAtjhw5glOnTuGHH37A\nF198gcOHD5s6JKqEoij8HEliypQpyMjIwOnTp+Hp6Yn333/f1CFZpYKCAgwePBiLFy+Gk5OTxjZ+\nXkynoKAAr732GhYvXgxHR0d+XnRgwVgJb29vXLlyRb185coVNGjQwIQRUTlPT08AgJubGwYOHIjk\n5GQTR0TlPDw8cOPGDQDA9evX4e7ubuKICADc3d3VBcmbb77Jz4wJFBcXY/DgwRg1ahReffVVAPy8\nyKA8L2+88YY6L/y8aMeCsRKhoaH45ZdfkJmZiaKiImzevBn9+/c3dVhW7/79+8jPzwcAFBYWYt++\nfRp3g5Jp9e/fH+vWrQMArFu3Tv0/YDKt69evq7/ftm0bPzPVTAiB8ePHo2XLlnj33XfV6/l5MS1t\neeHnRTveJa3FDz/8gHfffRelpaUYP348Zs6caeqQrF5GRgYGDhwIACgpKcHIkSOZFxN5/fXXkZCQ\ngNzcXHh4eODTTz/FgAEDMHToUGRlZaFRo0bYsmULXFxcTB2qVXkyL1FRUYiPj8fp06ehKAr8/Pyw\nYsUKde8cGV9iYiK6dOmC1q1bqy87z5s3D+3bt+fnxYQqy8vcuXOxadMmfl60YMFIRERERDrxkjQR\nERER6cSCkYiIiIh0YsFIRERERDqxYCQiIiIinVgwEhEREZFOLBiJiIiISCcWjERWKjMzEyqVCidP\nnqz2c69du7bC9GjWIjc3FyqVCocOHXrmY2zfvh1NmjSBjY0Nxo0bV4XRERFVjgUjkRXo1q0bpk6d\nqrGuYcOGuHHjBtq0aVPt8QwfPhwZGRnVfl5LMX78eAwZMgRZWVlYvHixqcPRa+XKlejevTtcXFyg\nUqmQlZVVYZ+8vDyMGjUKLi4ucHFxwejRo3H37l2NfbKystCvXz84OjrCzc0N06ZNQ3FxscY+qamp\n6Nq1KxwcHNCgQQPMmTOnwrkSEhIQEhICe3t7BAQEYMWKFVX7hoksEAtGIiulUqng7u6OGjVqVPu5\n7ezsUK9evWo/ryXIy8vDnTt30KtXL3h6ej7zSG1RUVEVR6bdgwcP0Lt3b0RFRWndZ8SIETh9+jT2\n7t2LPXv24OTJkxg1apR6e2lpKV555RUUFhYiMTERmzZtwnfffYf3339fvc+9e/fQs2dPeHp6IiUl\nBYsXL8bf//53xMTEqPfJyMhAWFgYOnXqhNOnT2PmzJmYOnUqYmNjjfPmiSyFICKLNmbMGKEoisbX\n5cuXRUZGhlAURZw4cUIIIcTBgweFoijihx9+EMHBwcLe3l507txZXL16Vezfv18EBQUJR0dH0a9f\nP3Hnzh2Nc3z99deiRYsWws7OTjRt2lQsWrRIlJWVaY1pzZo1wtHRUb08e/ZsERgYKDZt2iT8/f2F\nk5OTePXVV0Vubq7O9xYVFSV8fX1FrVq1RP369cXo0aM1ti9YsEAEBAQIe3t7ERQUJNavX6+xPTs7\nW4wYMULUrVtXODg4iLZt24qDBw+qty9fvlwEBAQIW1tb0bhxY7Fq1SqN1yuKIlauXClee+01Ubt2\nbeHv71/hHMnJyaJdu3bCzs5OBAcHi127dglFUURCQoIQQoiioiIxdepU4eXlJWrVqiV8fHzERx99\nVOn7Lc/R41/lx9m6dasIDAxUHyM6Olrjtb6+viIyMlKMHTtWuLi4iKFDh1Z6jjFjxoi+ffuKzz//\nXHh7ewtXV1cxduxYcf/+fS1ZMNxPP/2k/vf3uPPnzwtFUURSUpJ6XWJiolAURVy8eFEIIcTu3buF\nSqUSV69eVe+zfv16YWdnJ/Lz84UQQvzzn/8UderUEQ8fPlTv87e//U14e3url2fMmCGaNm2qcf43\n33xTdOjQ4Q+/PyJLxoKRyMLdvXtXdOzYUYwfP17k5OSInJwcUVpaqrVg/NOf/iQSExPF2bNnRWBg\noOjYsaPo3r27SE5OFikpKcLPz09MmzZNffyVK1cKT09PsXXrVpGZmSl27twp6tevL5YtW6Y1psoK\nRkdHRzFo0CCRmpoqjh49Knx9fcWkSZO0HuO7774Tzs7OYvfu3eLKlSsiJSVFfPHFF+rtH3/8sWje\nvLnYu3evyMzMFBs3bhS1a9cW//nPf4QQQhQUFIjGjRuLTp06icTERJGRkSG2b9+uLhhjY2OFjY2N\n+OKLL8Qvv/wili5dKmxsbMTOnTvV51AURTRo0EBs2LBBXLp0ScycOVPY2tqKrKwsIYQQ+fn5ws3N\nTQwdOlSkpaWJvXv3iubNm2sUev/4xz+Ej4+POHz4sLhy5YpISkoSa9eurfQ9FxUVqYurbdu2iZyc\nHFFUVCRSUlJEjRo1RGRkpPjll1/Ehg0bhKOjo1i6dKn6tb6+vsLZ2Vn8/e9/F5cuXRK//vprpecY\nM2aMqFOnjpg4caJIT08X+/btEy4uLmLevHnqfaKjo4Wjo6POr8TExArH1lYwrl69Wjg5OWmsKysr\nE46OjuqfxSeffCICAwM19rl586ZQFEXEx8cLIYQYNWqU6Nu3r8Y+ycnJQlEUkZmZKYQQonPnzuL/\n/u//NPbZsmWLsLGxESUlJZX+TIiIBSORVejWrZuYOnWqxjptBeO+ffvU+yxbtkwoiiJOnTqlXhcZ\nGanxi9vHx6fCqNqiRYtEy5YttcZTWcFoZ2cn7t27p14XHR0tGjdurPUYCxcuFM2aNRPFxcUVthUU\nFAh7e/sKRcu0adNEWFiYEOL3QtfJyUncvn270uOXF9mPCw8PF506dVIvK4oiPv74Y/VySUmJcHBw\nEBs2bBBCCLFixQrh4uIiCgsL1fusX79eo2B85513xJ///Get7/NJt27d0ni9EEKMGDGiwjEiIyNF\ngwYN1Mu+vr6if//+eo8/ZswY0bBhQ40R4gkTJoiXXnpJvXznzh1x6dIlnV8PHjyocGxtBWN0dLTw\n9/evsL+/v7+YP3++OoYn32NZWZmoWbOm+Pbbb4UQQvTs2bNCzi5fviwURRHHjh0TQgjRtGlTMWfO\nHI19EhIShKIo4saNG3p/PkTWqqapL4kTkVxat26t/t7d3R0AEBQUpLHu5s2bAIBbt27h6tWrmDhx\nIiZPnqzep6Sk5KnP6+vrq9GP5+npqT5PZYYOHYolS5bAz88PL7/8Mnr37o3+/fvD1tYW58+fx8OH\nD/Hyyy9DURT1a4qLi+Hn5wcAOHXqFNq0aYPnnnuu0uOnp6fjzTff1Fj34osvYseOHRrrHv951ahR\nA25ubuq4f/75Z7Rp0wYODg7qfV544QWN14eHh6Nnz55o2rQpevXqhbCwMPTp00cjbn3S09PRt2/f\nCrFGRUWhoKAAjo6OUBQFoaGhBh2vZcuWGuf39PTE8ePH1cuurq5wdXU1OL6qIoTQuf1pfmZE9HRY\nMBKRBhsbG/X35b+AH78xRlEUlJWVAYD6vytWrEDHjh2r7LxPnqcyDRo0wIULF7B//378+OOPeP/9\n9xEVFYXjx4+rX7dr1y40bNhQ63n0FSCVebIo0Re3vnMEBwcjMzMTe/fuxf79+zFmzBi0adMGcXFx\nT1UAaTvP48eoXbu2QceqWVPzV8OT72nu3LmYN2+ezmPs2bMHL774okHnq1+/Pm7duqWxTgiBmzdv\non79+up9kpKSNPbJzc1FaWmpxj43btzQ2CcnJ0e9Tdc+NWvW5I1YRDrwLmkiK2Bra/tMo376eHh4\nwMvLC7/++iv8/f0rfBlbrVq1EBYWhpiYGPz0009IS0tDUlISWrVqhVq1aiEzM7NCTD4+PgCAdu3a\n4ezZs7h9+3alx27RogUSExM11iUmJqJVq1YGx9eyZUukpqbi/v376nXHjh2rsJ+joyMGDx6Mf/7z\nn/jPf/6DAwcO4NKlSwafp0WLFjhy5EiFWH18fAwuEh+nr1CdMmUKzpw5o/MrJCTE4PN16NABBQUF\nOHr0qHrd0aNHUVhYqP5DpGPHjvj555+RnZ2t3icuLg61atVSn6tDhw44fPgwHj16pLGPt7c3fH19\n1fvExcVpnD8uLg7PP/+8SZ4YQGQuOMJIZAUaNWqE5ORkXL58GbVr10bdunWr7NhRUVGYOnUqXFxc\n0KdPHxQXF+PkyZO4du0aPvrooyo7z5PWrl2L0tJStG/fHo6Ojti8eTNsbW3RpEkTODo6Yvr06Zg+\nfTqEEOjcuTMKCgpw7Ngx1KhRAxMmTMCIESMwf/58DBgwAPPnz4eXlxfOnTsHZ2dndOvWDR988AGG\nDBmCkJAQ9OzZE3v27MHGjRuxbds2g2McMWIEIiIiMG7cOMyaNQvZ2dmIjo7W2CcmJgZeXl5o06YN\nbGxssGHDBtSpUwcNGjQw+Dzvv/8+nn/+eURFReH111/HTz/9hJiYGL2jgNroGxV92kvSN27cwI0b\nN3Dx4kUAQFpaGu7cuQNfX1+4urqiRYsW6N27NyZNmoSVK1dCCIFJkyahX79+aNKkCQCgV69eaNWq\nFUaPHo2FCxciNzcXM2bMwMSJE+Ho6Ajg9593VFQUwsPD8de//hUXLlzAggULEBkZqY5l8uTJWLZs\nGd577z1MnDgRR44cwbp16/Dtt98+5U+JyMqYrn2SiKrLxYsXRYcOHYSDg4NQqVTqx+qoVCqNm15U\nKpXGTSD//ve/hUql0jjW8uXLhZubm8a6TZs2qR8d4+rqKjp37iw2b96sNZ41a9Zo3BUbGRkpgoKC\ndO7zpO+//1506NBBuLi4iNq1a4v27dur74Aut3TpUtGyZUtRq1Yt4ebmJnr16iV+/PFH9farV6+K\nYcOGCRcXF+Hg4CDatWuncTPJ8uXLRePGjYWNjY1o0qSJ+OqrrzSOryiK2Lp1q8a6Ro0aiYULF6qX\njx8/Ltq1aydq1aol2rZtK3bu3ClUKpX6PKtWrRLt2rUTTk5OwtnZWXTr1k0cPXpU6/u+deuWxuvL\nxcbGiqCgIGFraysaNmwo5s6dqzMubcLDw0W/fv001lWWn6cxe/Zs9WOAVCqV+r/r1q1T75OXlyfe\neOMN4ezsLJydncWoUaPE3bt3NY6TlZUl+vbtKxwcHETdunXFtGnTRFFRkcY+qampokuXLsLOzk54\neXmJTz/9tEI8CQkJ6pz4+/uLFStWPPN7I7IWihDP0MRDRERERFaDPYxEREREpBMLRiIiIiLSiQUj\nEREREenEgpGIiIiIdGLBSEREREQ6sWAkIiIiIp1YMBIRERGRTiwYiYiIiEin/wdr/eoLv1plMAAA\nAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, "metadata": {}, - "outputs": [], - "prompt_number": 20 + "output_type": "display_data" }, { - "cell_type": "code", - "collapsed": false, - "input": [ - "from matplotlib import pyplot as plt\n", - "import numpy as np\n", - "\n", - "def plot_results():\n", - " bar_labels = ['serial', '2', '3', '4', '6']\n", + "name": "stdout", + "output_type": "stream", + "text": [ "\n", - " fig = plt.figure(figsize=(10,8))\n", + "Python version : 3.4.1\n", + "compiler : GCC 4.2.1 (Apple Inc. build 5577)\n", "\n", - " # plot bars\n", - " y_pos = np.arange(len(benchmarks))\n", - " plt.yticks(y_pos, bar_labels, fontsize=16)\n", - " bars = plt.barh(y_pos, benchmarks,\n", - " align='center', alpha=0.4, color='g')\n", + "system : Darwin\n", + "release : 13.2.0\n", + "machine : x86_64\n", + "processor : i386\n", + "CPU count : 4\n", + "interpreter: 64bit\n", "\n", - " # annotation and labels\n", - " \n", - " for ba,be in zip(bars, benchmarks):\n", - " plt.text(ba.get_width() + 2, ba.get_y() + ba.get_height()/2,\n", - " '{0:.2%}'.format(benchmarks[0]/be), \n", - " ha='center', va='bottom', fontsize=12)\n", - " \n", - " plt.xlabel('time in seconds for n=%s' %n, fontsize=14)\n", - " plt.ylabel('number of processes', fontsize=14)\n", - " t = plt.title('Serial vs. Multiprocessing via Parzen-window estimation', fontsize=18)\n", - " plt.ylim([-1,len(benchmarks)+0.5])\n", - " plt.xlim([0,max(benchmarks)*1.1])\n", - " plt.vlines(benchmarks[0], -1, len(benchmarks)+0.5, linestyles='dashed')\n", - " plt.grid()\n", - "\n", - " plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 25 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Results" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#Sections)]" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "plot_results()\n", - "print_sysinfo()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\nKpXGTSD//ve/hUql0jjW8uXLhZubm8a6TZs2qR8d4+rqKjp37iw2b96sNZ41a9Zo3BUbGRkpgoKC\ndO7zpO+//1506NBBuLi4iNq1a4v27dur74Aut3TpUtGyZUtRq1Yt4ebmJnr16iV+/PFH9farV6+K\nYcOGCRcXF+Hg4CDatWuncTPJ8uXLRePGjYWNjY1o0qSJ+OqrrzSOryiK2Lp1q8a6Ro0aiYULF6qX\njx8/Ltq1aydq1aol2rZtK3bu3ClUKpX6PKtWrRLt2rUTTk5OwtnZWXTr1k0cPXpU6/u+deuWxuvL\nxcbGiqCgIGFraysaNmwo5s6dqzMubcLDw0W/fv001lWWn6cxe/Zs9WOAVCqV+r/r1q1T75OXlyfe\neOMN4ezsLJydncWoUaPE3bt3NY6TlZUl+vbtKxwcHETdunXFtGnTRFFRkcY+qampokuXLsLOzk54\neXmJTz/9tEI8CQkJ6pz4+/uLFStWPPN7I7IWihDP0MRDRERERFaDPYxEREREpBMLRiIiIiLSiQUj\nEREREenEgpGIiIiIdGLBSEREREQ6sWAkIiIiIp1YMBIRERGRTiwYiYiIiEin/wdr/eoLv1plMAAA\nAABJRU5ErkJggg==\n", - "text": [ - "" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "Python version : 3.4.1\n", - "compiler : GCC 4.2.1 (Apple Inc. build 5577)\n", - "\n", - "system : Darwin\n", - "release : 13.2.0\n", - "machine : x86_64\n", - "processor : i386\n", - "CPU count : 4\n", - "interpreter: 64bit\n", - "\n", - "\n", - "\n" - ] - } - ], - "prompt_number": 26 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Conclusion" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[back to top](#Sections)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can see that we could speed up the density estimations for our Parzen-window function if we submitted them in parallel. However, on my particular machine, the submission of 6 parallel 6 processes doesn't lead to a further performance improvement, which makes sense for a 4-core CPU. \n", - "We also notice that there was a significant performance increase when we were using 3 instead of only 2 processes in parallel. However, the performance increase was less significant when we moved up to 4 parallel processes, respectively. \n", - "This can be attributed to the fact that in this case, the CPU consists of only 4 cores, and system processes, such as the operating system, are also running in the background. Thus, the fourth core simply does not have enough capacity left to further increase the performance of the fourth process to a large extend. And we also have to keep in mind that every additional process comes with an additional overhead for inter-process communication. \n", "\n", - "Also, an improvement due to parallel processing only makes sense if our tasks are \"CPU-bound\" where the majority of the task is spent in the CPU in contrast to I/O bound tasks, i.e., tasks that are processing data from a disk. " + "\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [] } ], - "metadata": {} + "source": [ + "plot_results()\n", + "print_sysinfo()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Conclusion" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#Sections)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that we could speed up the density estimations for our Parzen-window function if we submitted them in parallel. However, on my particular machine, the submission of 6 parallel 6 processes doesn't lead to a further performance improvement, which makes sense for a 4-core CPU. \n", + "We also notice that there was a significant performance increase when we were using 3 instead of only 2 processes in parallel. However, the performance increase was less significant when we moved up to 4 parallel processes, respectively. \n", + "This can be attributed to the fact that in this case, the CPU consists of only 4 cores, and system processes, such as the operating system, are also running in the background. Thus, the fourth core simply does not have enough capacity left to further increase the performance of the fourth process to a large extend. And we also have to keep in mind that every additional process comes with an additional overhead for inter-process communication. \n", + "\n", + "Also, an improvement due to parallel processing only makes sense if our tasks are \"CPU-bound\" where the majority of the task is spent in the CPU in contrast to I/O bound tasks, i.e., tasks that are processing data from a disk. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } - ] -} \ No newline at end of file + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} From 19e801b774543a1c2ec4aa05bbb3788948902492 Mon Sep 17 00:00:00 2001 From: Praveen Mylavarapu Date: Sat, 28 Oct 2017 13:18:43 +0530 Subject: [PATCH 240/248] Update README.md Added link to A Byte of Python book for resources for learning python. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 05c8419..c6fbbee 100644 --- a/README.md +++ b/README.md @@ -192,6 +192,8 @@ - [Think Python - How to Think Like a Computer Scientist](http://www.greenteapress.com/thinkpython/) - An introduction for beginners starting with basic concepts of programming. +- [A Byte of Python](https://python.swaroopch.com/) - a free book on programming using the Python language. + - [Python Patterns](http://matthiaseisen.com/pp/) - A directory of proven, reusable solutions to common programming problems. - [Intro to Computer Science - Build a Search Engine & a Social Network](https://www.udacity.com/course/intro-to-computer-science--cs101) - A great, free course for learning Python if you haven't programmed before. From 7749d69cb3f2b9733b28a648f664ca8505c7621c Mon Sep 17 00:00:00 2001 From: rasbt Date: Thu, 11 Jan 2018 23:00:18 -0500 Subject: [PATCH 241/248] fixing some language typos --- tutorials/multiprocessing_intro.ipynb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tutorials/multiprocessing_intro.ipynb b/tutorials/multiprocessing_intro.ipynb index 126f8c2..b3566c9 100644 --- a/tutorials/multiprocessing_intro.ipynb +++ b/tutorials/multiprocessing_intro.ipynb @@ -348,7 +348,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**A simpler way to to maintain an ordered list of results is to use the `Pool.apply` and `Pool.map` functions which we will discuss in the next section.**" + "**A simpler way to maintain an ordered list of results is to use the `Pool.apply` and `Pool.map` functions which we will discuss in the next section.**" ] }, { @@ -379,7 +379,7 @@ "source": [ "Another and more convenient approach for simple parallel processing tasks is provided by the `Pool` class. \n", "\n", - "There are four methods that are particularly interesing:\n", + "There are four methods that are particularly interesting:\n", "\n", " - Pool.apply\n", " \n", @@ -451,7 +451,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The `Pool.map` and `Pool.apply` will lock the main program until all a process is finished, which is quite useful if we want to obtain resuls in a particular order for certain applications. \n", + "The `Pool.map` and `Pool.apply` will lock the main program until all processes are finished, which is quite useful if we want to obtain results in a particular order for certain applications. \n", "In contrast, the `async` variants will submit all processes at once and retrieve the results as soon as they are finished. \n", "One more difference is that we need to use the `get` method after the `apply_async()` call in order to obtain the `return` values of the finished processes." ] @@ -759,7 +759,7 @@ "source": [ "Below, we will set up benchmarking functions for our serial and multiprocessing approach that we can pass to our `timeit` benchmark function. \n", "We will be using the `Pool.apply_async` function to take advantage of firing up processes simultaneously: Here, we don't care about the order in which the results for the different window widths are computed, we just need to associate each result with the input window width. \n", - "Thus we add a little tweak to our Parzen-density-estimation function by returning a tuple of 2 values: window width and the estimated density, which will allow us to to sort our list of results later." + "Thus we add a little tweak to our Parzen-density-estimation function by returning a tuple of 2 values: window width and the estimated density, which will allow us to sort our list of results later." ] }, { @@ -1097,7 +1097,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.1" + "version": "3.6.3" } }, "nbformat": 4, From 5da40c30c01aeb5a45aeffcbe3446dd51ce42116 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 18 Apr 2018 09:47:16 -0400 Subject: [PATCH 242/248] fix cursor use --- tutorials/sqlite3_howto/README.md | 62 ++++++++++--------- tutorials/sqlite3_howto/code/print_db_info.py | 43 +++++++------ 2 files changed, 57 insertions(+), 48 deletions(-) diff --git a/tutorials/sqlite3_howto/README.md b/tutorials/sqlite3_howto/README.md index e5cccec..02e3e3c 100644 --- a/tutorials/sqlite3_howto/README.md +++ b/tutorials/sqlite3_howto/README.md @@ -682,53 +682,58 @@ convenient script to print a nice overview of SQLite database tables: import sqlite3 - + + def connect(sqlite_file): """ Make connection to an SQLite database file """ conn = sqlite3.connect(sqlite_file) c = conn.cursor() return conn, c - + + def close(conn): """ Commit changes and close connection to the database """ # conn.commit() conn.close() - + + def total_rows(cursor, table_name, print_out=False): """ Returns the total number of rows in the database """ - c.execute('SELECT COUNT(*) FROM {}'.format(table_name)) - count = c.fetchall() + cursor.execute('SELECT COUNT(*) FROM {}'.format(table_name)) + count = cursor.fetchall() if print_out: print('\nTotal rows: {}'.format(count[0][0])) return count[0][0] - + + def table_col_info(cursor, table_name, print_out=False): - """ - Returns a list of tuples with column informations: - (id, name, type, notnull, default_value, primary_key) - + """ Returns a list of tuples with column informations: + (id, name, type, notnull, default_value, primary_key) """ - c.execute('PRAGMA TABLE_INFO({})'.format(table_name)) - info = c.fetchall() - + cursor.execute('PRAGMA TABLE_INFO({})'.format(table_name)) + info = cursor.fetchall() + if print_out: print("\nColumn Info:\nID, Name, Type, NotNull, DefaultVal, PrimaryKey") for col in info: print(col) return info - + + def values_in_col(cursor, table_name, print_out=True): - """ Returns a dictionary with columns as keys and the number of not-null - entries as associated values. + """ Returns a dictionary with columns as keys + and the number of not-null entries as associated values. """ - c.execute('PRAGMA TABLE_INFO({})'.format(table_name)) - info = c.fetchall() + cursor.execute('PRAGMA TABLE_INFO({})'.format(table_name)) + info = cursor.fetchall() col_dict = dict() for col in info: col_dict[col[1]] = 0 for col in col_dict: - c.execute('SELECT ({0}) FROM {1} WHERE {0} IS NOT NULL'.format(col, table_name)) - # In my case this approach resulted in a better performance than using COUNT + c.execute('SELECT ({0}) FROM {1} ' + 'WHERE {0} IS NOT NULL'.format(col, table_name)) + # In my case this approach resulted in a + # better performance than using COUNT number_rows = len(c.fetchall()) col_dict[col] = number_rows if print_out: @@ -736,23 +741,22 @@ convenient script to print a nice overview of SQLite database tables: for i in col_dict.items(): print('{}: {}'.format(i[0], i[1])) return col_dict - - + + if __name__ == '__main__': - + sqlite_file = 'my_first_db.sqlite' table_name = 'my_table_3' - + conn, c = connect(sqlite_file) total_rows(c, table_name, print_out=True) table_col_info(c, table_name, print_out=True) - values_in_col(c, table_name, print_out=True) # slow on large data bases - + # next line might be slow on large databases + values_in_col(c, table_name, print_out=True) + close(conn) - -Download the script: [print_db_info.py](https://raw.github.com/rasbt/python_sq -lite_code/master/code/print_db_info.py) +Download the script: [print_db_info.py](code/print_db_info.py) ![8_sqlite3_print_db_info_1.png](../../Images/8_sqlite3_print_db_info_1.png) diff --git a/tutorials/sqlite3_howto/code/print_db_info.py b/tutorials/sqlite3_howto/code/print_db_info.py index 22b72a8..285a635 100644 --- a/tutorials/sqlite3_howto/code/print_db_info.py +++ b/tutorials/sqlite3_howto/code/print_db_info.py @@ -22,52 +22,57 @@ import sqlite3 + def connect(sqlite_file): """ Make connection to an SQLite database file """ conn = sqlite3.connect(sqlite_file) c = conn.cursor() return conn, c + def close(conn): """ Commit changes and close connection to the database """ - #conn.commit() + # conn.commit() conn.close() + def total_rows(cursor, table_name, print_out=False): """ Returns the total number of rows in the database """ - c.execute('SELECT COUNT(*) FROM {}'.format(table_name)) - count = c.fetchall() + cursor.execute('SELECT COUNT(*) FROM {}'.format(table_name)) + count = cursor.fetchall() if print_out: print('\nTotal rows: {}'.format(count[0][0])) return count[0][0] + def table_col_info(cursor, table_name, print_out=False): - """ - Returns a list of tuples with column informations: - (id, name, type, notnull, default_value, primary_key) - + """ Returns a list of tuples with column informations: + (id, name, type, notnull, default_value, primary_key) """ - c.execute('PRAGMA TABLE_INFO({})'.format(table_name)) - info = c.fetchall() - + cursor.execute('PRAGMA TABLE_INFO({})'.format(table_name)) + info = cursor.fetchall() + if print_out: print("\nColumn Info:\nID, Name, Type, NotNull, DefaultVal, PrimaryKey") for col in info: print(col) return info + def values_in_col(cursor, table_name, print_out=True): - """ Returns a dictionary with columns as keys and the number of not-null - entries as associated values. + """ Returns a dictionary with columns as keys + and the number of not-null entries as associated values. """ - c.execute('PRAGMA TABLE_INFO({})'.format(table_name)) - info = c.fetchall() + cursor.execute('PRAGMA TABLE_INFO({})'.format(table_name)) + info = cursor.fetchall() col_dict = dict() for col in info: col_dict[col[1]] = 0 for col in col_dict: - c.execute('SELECT ({0}) FROM {1} WHERE {0} IS NOT NULL'.format(col, table_name)) - # In my case this approach resulted in a better performance than using COUNT + c.execute('SELECT ({0}) FROM {1} ' + 'WHERE {0} IS NOT NULL'.format(col, table_name)) + # In my case this approach resulted in a + # better performance than using COUNT number_rows = len(c.fetchall()) col_dict[col] = number_rows if print_out: @@ -85,7 +90,7 @@ def values_in_col(cursor, table_name, print_out=True): conn, c = connect(sqlite_file) total_rows(c, table_name, print_out=True) table_col_info(c, table_name, print_out=True) - values_in_col(c, table_name, print_out=True) # slow on large data bases - - close(conn) + # next line might be slow on large databases + values_in_col(c, table_name, print_out=True) + close(conn) From a908a343afe1bd0eff420b15d93706dde9c123ea Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 16 May 2018 01:06:58 -0400 Subject: [PATCH 243/248] get principal eigvec --- useful_scripts/principal_eigenvector.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 useful_scripts/principal_eigenvector.py diff --git a/useful_scripts/principal_eigenvector.py b/useful_scripts/principal_eigenvector.py new file mode 100644 index 0000000..913cf62 --- /dev/null +++ b/useful_scripts/principal_eigenvector.py @@ -0,0 +1,20 @@ +# Select a principal eigenvector via NumPy +# to be used as a template (copy & paste) script + +import numpy as np + +# set A to be your matrix +A = np.array([[1, 2, 3], + [4, 5, 6], + [7, 8, 9]]) + + +eig_vals, eig_vecs = np.linalg.eig(A) +idx = np.absolute(eig_vals).argsort()[::-1] # decreasing order +sorted_eig_vals = eig_vals[idx] +sorted_eig_vecs = eig_vecs[:, idx] + +principal_eig_vec = sorted_eig_vecs[:, 0] # eigvec with largest eigval + +normalized_pr_eig_vec = np.real(principal_eig_vec / np.sum(principal_eig_vec)) +print(normalized_pr_eig_vec) # eigvec that sums up to one From 82376a9b8b8776a3586c16246853ef88606123c1 Mon Sep 17 00:00:00 2001 From: rasbt Date: Thu, 7 Jun 2018 23:43:02 -0400 Subject: [PATCH 244/248] replace broken absolute links with relative links --- tutorials/sqlite3_howto/README.md | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/tutorials/sqlite3_howto/README.md b/tutorials/sqlite3_howto/README.md index 02e3e3c..ea2a357 100644 --- a/tutorials/sqlite3_howto/README.md +++ b/tutorials/sqlite3_howto/README.md @@ -123,7 +123,7 @@ there is more information about PRIMARY KEYs further down in this section). conn.close() -Download the script: [create_new_db.py](https://raw.github.com/rasbt/python_reference/master/tutorials/code/create_new_db.py) +Download the script: [create_new_db.py](https://github.com/rasbt/python_reference/blob/master/tutorials/sqlite3_howto/code/create_new_db.py) * * * @@ -207,7 +207,7 @@ Let's have a look at some code: conn.close() -Download the script: [add_new_column.py](https://raw.github.com/rasbt/python_reference/master/tutorials/code/add_new_column.py) +Download the script: [add_new_column.py](https://github.com/rasbt/python_reference/blob/master/tutorials/sqlite3_howto/code/add_new_column.py) @@ -270,8 +270,7 @@ But let us first have a look at the example code: conn.close() -Download the script: [update_or_insert_records.py](https://raw.github.com/rasb -t/python_sqlite_code/master/code/update_or_insert_records.py) +Download the script: [update_or_insert_records.py](code/update_or_insert_records.py) ![3_sqlite3_insert_update.png](../../Images/3_sqlite3_insert_update.png) @@ -335,8 +334,7 @@ drop the index, which is also shown in the code below. conn.close() -Download the script: [create_unique_index.py](https://raw.github.com/rasbt/pyt -hon_sqlite_code/master/code/create_unique_index.py) +Download the script: [create_unique_index.py](code/create_unique_index.py) ![4_sqlite3_unique_index.png](../../Images/4_sqlite3_unique_index.png) @@ -401,8 +399,7 @@ row entries for all or some columns if they match certain criteria. conn.close() -Download the script: [selecting_entries.py](https://raw.github.com/rasbt/pytho -n_sqlite_code/master/code/selecting_entries.py) +Download the script: [selecting_entries.py](code/selecting_entries.py) ![4_sqlite3_unique_index.png](../../Images/4_sqlite3_unique_index.png) @@ -542,8 +539,7 @@ that have been added xxx days ago. conn.close() -Download the script: [date_time_ops.py](https://raw.github.com/rasbt/python_sq -lite_code/master/code/date_time_ops.py) +Download the script: [date_time_ops.py](code/date_time_ops.py) @@ -645,8 +641,7 @@ column names): conn.close() -Download the script: [get_columnnames.py](https://raw.github.com/rasbt/python_ -sqlite_code/master/code/get_columnnames.py) +Download the script: [get_columnnames.py](code/get_columnnames.py) ![7_sqlite3_get_colnames_1.png](../../Images/7_sqlite3_get_colnames_1.png) From 764e1adf4a82387234727fe9b9e37ebcffe13f16 Mon Sep 17 00:00:00 2001 From: lacanlale Date: Sat, 9 Jun 2018 09:07:32 -0700 Subject: [PATCH 245/248] typo and grammar fixes to not_so_obv nb --- tutorials/not_so_obvious_python_stuff.ipynb | 1221 +++++++------------ 1 file changed, 434 insertions(+), 787 deletions(-) diff --git a/tutorials/not_so_obvious_python_stuff.ipynb b/tutorials/not_so_obvious_python_stuff.ipynb index 15569ba..2e733ed 100644 --- a/tutorials/not_so_obvious_python_stuff.ipynb +++ b/tutorials/not_so_obvious_python_stuff.ipynb @@ -14,9 +14,7 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "%load_ext watermark" @@ -25,18 +23,16 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Last updated: 16/07/2014 \n", + "last updated: 2018-06-09 \n", "\n", - "CPython 3.4.1\n", - "IPython 2.0.0\n" + "CPython 3.6.4\n", + "IPython 6.2.1\n" ] } ], @@ -57,7 +53,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
    \n", "
    " ] }, @@ -186,10 +181,8 @@ }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, + "execution_count": 3, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -230,10 +223,8 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 4, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -295,25 +286,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Python `list`s are mutable objects as we all know. So, if we are using the `+=` operator on `list`s, we extend the `list` by directly modifying the object directly. \n", + "Python `list`s are mutable objects as we all know. So, if we are using the `+=` operator on `list`s, we extend the `list` by directly modifying the object. \n", "\n", - "However, if we use the assigment via `my_list = my_list + ...`, we create a new list object, which can be demonstrated by the following code:" + "However, if we use the assignment via `my_list = my_list + ...`, we create a new list object, which can be demonstrated by the following code:" ] }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, + "execution_count": 5, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "ID: 4366496544\n", - "ID (+=): 4366496544\n", - "ID (list = list + ...): 4366495472\n" + "ID: 4486856904\n", + "ID (+=): 4486856904\n", + "ID (list = list + ...): 4486959368\n" ] } ], @@ -338,22 +327,20 @@ { "cell_type": "code", "execution_count": 6, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[] \n", - "ID (initial): 140704077653128 \n", + "ID (initial): 4486857224 \n", "\n", "[1] \n", - "ID (append): 140704077653128 \n", + "ID (append): 4486857224 \n", "\n", "[1, 2] \n", - "ID (extend): 140704077653128\n" + "ID (extend): 4486857224\n" ] } ], @@ -390,7 +377,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\"It often comes as a big surprise for programmers to find (sometimes by way of a hard-to-reproduce bug) that, unlike any other time value, midnight (i.e. `datetime.time(0,0,0)`) is False. A long discussion on the python-ideas mailing list shows that, while surprising, that behavior is desirable—at least in some quarters.\" \n", + "\"It often comes as a big surprise for programmers to find (sometimes by way of a hard-to-reproduce bug) that, unlike any other time value, midnight (i.e. `datetime.time(0,0,0)`) is False. A long discussion on the python-ideas mailing list shows that, while surprising, that behavior is desirable — at least in some quarters.\" \n", "\n", "(Original source: [http://lwn.net/SubscriberLink/590299/bf73fe823974acea/](http://lwn.net/SubscriberLink/590299/bf73fe823974acea/))" ] @@ -404,16 +391,14 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 7, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\"datetime.time(0,0,0)\" (Midnight) -> False\n", + "\"datetime.time(0,0,0)\" (Midnight) -> True\n", "\"datetime.time(1,0,0)\" (1 am) -> True\n" ] } @@ -460,10 +445,8 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": 8, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -489,7 +472,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "(*I received a comment that this is in fact a CPython artefact and **must not necessarily be true** in all implementations of Python!*)\n", + "(*I received a comment that this is in fact a CPython artifact and **must not necessarily be true** in all implementations of Python!*)\n", "\n", "So the take home message is: always use \"==\" for equality, \"is\" for identity!\n", "\n", @@ -505,10 +488,8 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, + "execution_count": 9, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -537,10 +518,8 @@ }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, + "execution_count": 10, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -567,10 +546,8 @@ }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, + "execution_count": 11, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -621,23 +598,25 @@ }, { "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, + "execution_count": 12, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "IDs:\n", - "list1: 4346366472\n", - "list2: 4346366472\n", - "list3: 4346366408\n", - "list4: 4346366536\n", + "list1: 4486860424\n", + "list2: 4486860424\n", + "list3: 4486818632\n", + "list4: 4486818568\n", + "\n", + "list1: [3, 2]\n", "\n", "list1: [3, 2]\n", - "list1: [3, 2]\n" + "list2: [3, 2]\n", + "list3: [4, 2]\n", + "list4: [1, 4]\n" ] } ], @@ -655,7 +634,10 @@ "\n", "list3[0] = 4\n", "list4[1] = 4\n", - "print('list1:', list1)" + "print('\\nlist1:', list1)\n", + "print('list2:', list2)\n", + "print('list3:', list3)\n", + "print('list4:', list4)" ] }, { @@ -674,22 +656,23 @@ }, { "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false - }, + "execution_count": 13, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "IDs:\n", - "list1: 4377956296\n", - "list2: 4377961752\n", - "list3: 4377954928\n", + "list1: 4486818824\n", + "list2: 4486886024\n", + "list3: 4486888200\n", + "\n", + "list1: [[3], [2]]\n", "\n", "list1: [[3], [2]]\n", - "list1: [[3], [2]]\n" + "list2: [[3], [2]]\n", + "list3: [[5], [2]]\n" ] } ], @@ -707,7 +690,9 @@ "print('list1:', list1)\n", "\n", "list3[0][0] = 5\n", - "print('list1:', list1)" + "print('\\nlist1:', list1)\n", + "print('list2:', list2)\n", + "print('list3:', list3)" ] }, { @@ -751,10 +736,8 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": 14, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -803,10 +786,8 @@ }, { "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, + "execution_count": 15, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -838,17 +819,15 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": 16, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "1397764090.456688\n", - "1397764090.456688\n" + "1528560045.3962939\n", + "1528560045.3962939\n" ] } ], @@ -891,15 +870,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Be aware of what is happening when combining \"`in`\" checks with generators, since they won't evaluate from the beginning once a position is \"consumed\"." + "Be aware of what is happening when combining `in` checks with generators, since they won't evaluate from the beginning once a position is \"consumed\"." ] }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": 17, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -922,15 +899,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Although this defeats the purpose of an generator (in most cases), we can convert a generator into a list to circumvent the problem. " + "Although this defeats the purpose of a generator (in most cases), we can convert a generator into a list to circumvent the problem. " ] }, { "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false - }, + "execution_count": 18, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -986,10 +961,8 @@ }, { "cell_type": "code", - "execution_count": 28, - "metadata": { - "collapsed": false - }, + "execution_count": 19, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1036,19 +1009,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Remember the section about the [\"consuming generators\"](consuming_generators)? This example is somewhat related, but the result might still come unexpected. \n", + "Remember the section about the [consuming generators](#consuming_generator)? This example is somewhat related, but the result might still come as unexpected. \n", "\n", "(Original source: [http://openhome.cc/eGossip/Blog/UnderstandingLambdaClosure3.html](http://openhome.cc/eGossip/Blog/UnderstandingLambdaClosure3.html))\n", "\n", - "In the first example below, we call a `lambda` function in a list comprehension, and the value `i` will be dereferenced every time we call `lambda` within the scope of the list comprehension. Since the list comprehension has already been constructed and evaluated when we for-loop through the list, the closure-variable will be set to the last value 4." + "In the first example below, we call a `lambda` function in a list comprehension, and the value `i` will be dereferenced every time we call `lambda` within the scope. Since the list comprehension has already been constructed and evaluated when we `for-loop` through the list, the closure-variable will be set to the last value 4." ] }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, + "execution_count": 20, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1077,10 +1048,8 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": 21, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1109,10 +1078,8 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": 22, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1173,10 +1140,8 @@ }, { "cell_type": "code", - "execution_count": 31, - "metadata": { - "collapsed": false - }, + "execution_count": 23, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1189,10 +1154,13 @@ ], "source": [ "x = 0\n", + "\n", + "\n", "def in_func():\n", " x = 1\n", " print('in_func:', x)\n", - " \n", + "\n", + "\n", "in_func()\n", "print('global:', x)" ] @@ -1206,10 +1174,8 @@ }, { "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": false - }, + "execution_count": 24, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1222,11 +1188,14 @@ ], "source": [ "x = 0\n", + "\n", + "\n", "def in_func():\n", " global x\n", " x = 1\n", " print('in_func:', x)\n", - " \n", + "\n", + "\n", "in_func()\n", "print('global:', x)" ] @@ -1242,10 +1211,8 @@ }, { "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": false - }, + "execution_count": 25, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1259,13 +1226,16 @@ ], "source": [ "def outer():\n", - " x = 1\n", - " print('outer before:', x)\n", - " def inner():\n", - " x = 2\n", - " print(\"inner:\", x)\n", - " inner()\n", - " print(\"outer after:\", x)\n", + " x = 1\n", + " print('outer before:', x)\n", + "\n", + " def inner():\n", + " x = 2\n", + " print(\"inner:\", x)\n", + " inner()\n", + " print(\"outer after:\", x)\n", + "\n", + "\n", "outer()" ] }, @@ -1278,10 +1248,8 @@ }, { "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, + "execution_count": 26, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1295,14 +1263,17 @@ ], "source": [ "def outer():\n", - " x = 1\n", - " print('outer before:', x)\n", - " def inner():\n", - " nonlocal x\n", - " x = 2\n", - " print(\"inner:\", x)\n", - " inner()\n", - " print(\"outer after:\", x)\n", + " x = 1\n", + " print('outer before:', x)\n", + "\n", + " def inner():\n", + " nonlocal x\n", + " x = 2\n", + " print(\"inner:\", x)\n", + " inner()\n", + " print(\"outer after:\", x)\n", + "\n", + "\n", "outer()" ] }, @@ -1340,18 +1311,17 @@ }, { "cell_type": "code", - "execution_count": 41, - "metadata": { - "collapsed": false - }, + "execution_count": 27, + "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "'tuple' object does not support item assignment", "output_type": "error", "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[0mtup\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mtup\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\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[0mtup\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mtup\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" ] } @@ -1365,15 +1335,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### But what if we put a mutable object into the immutable tuple? Well, modification works, but we **also** get a `TypeError` at the same time." + "### But what if we put a mutable object into the immutable tuple? Well, modification works, but we **also** get a `TypeError` at the same time." ] }, { "cell_type": "code", - "execution_count": 42, - "metadata": { - "collapsed": false - }, + "execution_count": 28, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1387,8 +1355,9 @@ "evalue": "'tuple' object does not support item assignment", "output_type": "error", "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[0mtup\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'tup before: '\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtup\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mtup\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+=\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[0m", + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\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[0mtup\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'tup before: '\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtup\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mtup\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+=\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[0m", "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" ] } @@ -1401,19 +1370,9 @@ }, { "cell_type": "code", - "execution_count": 43, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tup after: ([1],)\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "print('tup after: ', tup)" ] @@ -1429,10 +1388,8 @@ }, { "cell_type": "code", - "execution_count": 44, - "metadata": { - "collapsed": false - }, + "execution_count": 29, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1452,10 +1409,8 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, + "execution_count": 30, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1488,15 +1443,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### One more note about the `immutable` status of tuples. Tuples are famous for being immutable. However, how comes that this code works?" + "### One more note about the `immutable` status of tuples. Tuples are famous for being immutable. However, how comes that this code works?" ] }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, + "execution_count": 31, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1517,23 +1470,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "What happens \"behind\" the curtains is that the tuple is not modified, but every time a new object is generated, which will inherit the old \"name tag\":" + "What happens \"behind\" the curtains is that the tuple is not modified, but a new object is generated every time, which will inherit the old \"name tag\":" ] }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 32, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "4337381840\n", - "4357415496\n", - "4357289952\n" + "4486707912\n", + "4485211784\n", + "4486955152\n" ] } ], @@ -1580,14 +1531,13 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, + "execution_count": 33, + "metadata": {}, "outputs": [], "source": [ "import timeit\n", "\n", + "\n", "def plainlist(n=100000):\n", " my_list = []\n", " for i in range(n):\n", @@ -1595,14 +1545,17 @@ " my_list.append(i)\n", " return my_list\n", "\n", + "\n", "def listcompr(n=100000):\n", " my_list = [i for i in range(n) if i % 5 == 0]\n", " return my_list\n", "\n", + "\n", "def generator(n=100000):\n", " my_gen = (i for i in range(n) if i % 5 == 0)\n", " return my_gen\n", "\n", + "\n", "def generator_yield(n=100000):\n", " for i in range(n):\n", " if i % 5 == 0:\n", @@ -1613,27 +1566,25 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### To be fair to the list, let us exhaust the generators:" + "### To be fair to the list, let us exhaust the generators:" ] }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, + "execution_count": 34, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "plain_list: 10 loops, best of 3: 22.4 ms per loop\n", + "plain_list: 10.8 ms ± 793 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", "\n", - "listcompr: 10 loops, best of 3: 20.8 ms per loop\n", + "listcompr: 10 ms ± 830 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", "\n", - "generator: 10 loops, best of 3: 22 ms per loop\n", + "generator: 11.4 ms ± 1 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", "\n", - "generator_yield: 10 loops, best of 3: 21.9 ms per loop\n" + "generator_yield: 12.3 ms ± 1.82 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] } ], @@ -1642,25 +1593,29 @@ " for i in plain_list():\n", " pass\n", "\n", + "\n", "def test_listcompr(listcompr):\n", " for i in listcompr():\n", " pass\n", "\n", + "\n", "def test_generator(generator):\n", " for i in generator():\n", " pass\n", "\n", + "\n", "def test_generator_yield(generator_yield):\n", " for i in generator_yield():\n", " pass\n", "\n", - "print('plain_list: ', end = '')\n", + "\n", + "print('plain_list: ', end='')\n", "%timeit test_plainlist(plainlist)\n", - "print('\\nlistcompr: ', end = '')\n", + "print('\\nlistcompr: ', end='')\n", "%timeit test_listcompr(listcompr)\n", - "print('\\ngenerator: ', end = '')\n", + "print('\\ngenerator: ', end='')\n", "%timeit test_generator(generator)\n", - "print('\\ngenerator_yield: ', end = '')\n", + "print('\\ngenerator_yield: ', end='')\n", "%timeit test_generator_yield(generator_yield)" ] }, @@ -1693,21 +1648,19 @@ "metadata": {}, "source": [ "Who has not stumbled across this quote \"we are all consenting adults here\" in the Python community, yet? Unlike in other languages like C++ (sorry, there are many more, but that's one I am most familiar with), we can't really protect class methods from being used outside the class (i.e., by the API user). \n", - "All we can do is to indicate methods as private to make clear that they are better not used outside the class, but it is really up to the class user, since \"we are all consenting adults here\"! \n", + "All we can do is indicate methods as private to make clear that they are not to be used outside the class, but it really is up to the class user, since \"we are all consenting adults here\"! \n", "So, when we want to mark a class method as private, we can put a single underscore in front of it. \n", "If we additionally want to avoid name clashes with other classes that might use the same method names, we can prefix the name with a double-underscore to invoke the name mangling.\n", "\n", - "This doesn't prevent the class user to access this class member though, but he has to know the trick and also knows that it his own risk...\n", + "This doesn't prevent the class user to access this class member though, but they have to know the trick and also know that it is at their own risk...\n", "\n", "Let the following example illustrate what I mean:" ] }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, + "execution_count": 35, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1723,11 +1676,14 @@ "class my_class():\n", " def public_method(self):\n", " print('Hello public world!')\n", + "\n", " def __private_method(self):\n", " print('Hello private world!')\n", + "\n", " def call_private_method_in_class(self):\n", " self.__private_method()\n", - " \n", + "\n", + "\n", "my_instance = my_class()\n", "\n", "my_instance.public_method()\n", @@ -1768,10 +1724,8 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 36, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1791,10 +1745,8 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, + "execution_count": 37, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1818,15 +1770,13 @@ "source": [ "
    \n", "
    \n", - "**The solution** is that we are iterating through the list index by index, and if we remove one of the items in-between, we inevitably mess around with the indexing, look at the following example, and it will become clear:" + "**The solution** is that we are iterating through the list index by index, and if we remove one of the items in-between, we inevitably mess around with the indexing. Look at the following example and it will become clear:" ] }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, + "execution_count": 38, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1880,10 +1830,8 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, + "execution_count": 39, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1939,23 +1887,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As we have all encountered it 1 (x10000) time(s) in our live, the infamous `IndexError`:" + "As we have all encountered it 1 (x10000) time(s) in our lives, the infamous `IndexError`:" ] }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, + "execution_count": 40, + "metadata": {}, "outputs": [ { "ename": "IndexError", "evalue": "list index out of range", "output_type": "error", "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mIndexError\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[0mmy_list\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m5\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmy_list\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mIndexError\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[0mmy_list\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m5\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmy_list\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mIndexError\u001b[0m: list index out of range" ] } @@ -1969,24 +1916,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "But suprisingly, it is not raised when we are doing list slicing, which can be a really pain for debugging:" + "But suprisingly, it is not raised when we are doing list slicing, which can be a real pain when debugging:" ] }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "my_list = [1, 2, 3, 4, 5]\n", "print(my_list[5:])" @@ -2025,23 +1962,14 @@ }, { "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "global\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "def my_func():\n", " print(var)\n", "\n", + "\n", "var = 'global'\n", "my_func()" ] @@ -2055,23 +1983,14 @@ }, { "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "global\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "def my_func():\n", " var = 'locally changed'\n", "\n", + "\n", "var = 'global'\n", "my_func()\n", "print(var)" @@ -2086,28 +2005,15 @@ }, { "cell_type": "code", - "execution_count": 40, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "ename": "UnboundLocalError", - "evalue": "local variable 'var' referenced before assignment", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mUnboundLocalError\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 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mvar\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'global'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mmy_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m\u001b[0m in \u001b[0;36mmy_func\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmy_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# want to access global variable\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mvar\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'locally changed'\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[0mvar\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'global'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mUnboundLocalError\u001b[0m: local variable 'var' referenced before assignment" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "def my_func():\n", - " print(var) # want to access global variable\n", - " var = 'locally changed' # but Python thinks we forgot to define the local variable!\n", - " \n", + " print(var) # want to access global variable\n", + " var = 'locally changed' # but Python thinks we forgot to define the local variable!\n", + "\n", + "\n", "var = 'global'\n", "my_func()" ] @@ -2121,25 +2027,15 @@ }, { "cell_type": "code", - "execution_count": 43, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "global\n", - "locally changed\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "def my_func():\n", " global var\n", - " print(var) # want to access global variable\n", - " var = 'locally changed' # changes the gobal variable\n", + " print(var) # want to access global variable\n", + " var = 'locally changed' # changes the gobal variable\n", + "\n", "\n", "var = 'global'\n", "\n", @@ -2175,25 +2071,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Let's assume a scenario where we want to duplicate sub`list`s of values stored in another list. If we want to create independent sub`list` object, using the arithmetic multiplication operator could lead to rather unexpected (or undesired) results:" + "Let's assume a scenario where we want to duplicate sub`list`s of values stored in another list. If we want to create an independent sub`list` object, using the arithmetic multiplication operator could lead to rather unexpected (or undesired) results:" ] }, { "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "initially ---> [[1, 2, 3], [1, 2, 3]]\n", - "after my_list1[1][0] = 'a' ---> [['a', 2, 3], ['a', 2, 3]]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "my_list1 = [[1, 2, 3]] * 2\n", "\n", @@ -2215,20 +2100,9 @@ }, { "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "initially: ---> [[1, 2, 3], [1, 2, 3]]\n", - "after my_list2[1][0] = 'a': ---> [[1, 2, 3], ['a', 2, 3]]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "my_list2 = [[1, 2, 3] for i in range(2)]\n", "\n", @@ -2249,22 +2123,11 @@ }, { "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "id my_list1: 4350764680, id my_list2: 4350766472\n", - "id my_list1: 4350764680, id my_list2: 4350766664\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ - "for a,b in zip(my_list1, my_list2):\n", + "for a, b in zip(my_list1, my_list2):\n", " print('id my_list1: {}, id my_list2: {}'.format(id(a), id(b)))" ] }, @@ -2336,11 +2199,7 @@ "- [Handling exceptions](#handling_exceptions)\n", "- [next() function and .next() method](#next_next)\n", "- [Loop variables and leaking into the global scope](#loop_leak)\n", - "- [Comparing unorderable types](#compare_unorder)\n", - "\n", - "
    \n", - "
    \n", - "\n" + "- [Comparing unorderable types](#compare_unorder)" ] }, { @@ -2371,9 +2230,9 @@ "metadata": {}, "source": [ "\n", - "####- Python 2: \n", + "#### Python 2: \n", "We have ASCII `str()` types, separate `unicode()`, but no `byte` type\n", - "####- Python 3: \n", + "#### Python 3: \n", "Now, we finally have Unicode (utf-8) `str`ings, and 2 byte classes: `byte` and `bytearray`s" ] }, @@ -2381,12 +2240,12 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "code_folding": [] }, "outputs": [], "source": [ "#############\n", - "# Python 2\n", + "# Python 2 #\n", "#############\n", "\n", ">>> type(unicode('is like a python3 str()'))\n", @@ -2454,9 +2313,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Python 2\n", @@ -2485,9 +2342,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Python 2\n", @@ -2533,9 +2388,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Python 2\n", @@ -2563,16 +2416,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
    \n", - "
    " + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###`xrange()` " + "### `xrange()`" ] }, { @@ -2594,23 +2445,21 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Python 2\n", - "> python -m timeit 'for i in range(1000000):' ' pass'\n", + ">>> python -m timeit 'for i in range(1000000):' ' pass'\n", "10 loops, best of 3: 66 msec per loop\n", "\n", " > python -m timeit 'for i in xrange(1000000):' ' pass'\n", "10 loops, best of 3: 27.8 msec per loop\n", "\n", "# Python 3\n", - "> python3 -m timeit 'for i in range(1000000):' ' pass'\n", + ">>> python3 -m timeit 'for i in range(1000000):' ' pass'\n", "10 loops, best of 3: 51.1 msec per loop\n", "\n", - "> python3 -m timeit 'for i in xrange(1000000):' ' pass'\n", + ">>> python3 -m timeit 'for i in xrange(1000000):' ' pass'\n", "Traceback (most recent call last):\n", " File \"/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py\", line 292, in main\n", " x = t.timeit(number)\n", @@ -2656,9 +2505,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Python 2\n", @@ -2719,9 +2566,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Python 2\n", @@ -2742,12 +2587,8 @@ ] }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ "\n", "
    \n", @@ -2774,15 +2615,13 @@ "source": [ "\n", "\n", - "Where you can use both function and method in Python 2.7.5, the `next()` function is all that remain in Python 3!" + "Where you can use both function and method in Python 2.7.5, the `next()` function is all that remains in Python 3!" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Python 2\n", @@ -2831,26 +2670,14 @@ "source": [ "This goes back to a change that was made in Python 3.x and is described in [What’s New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html) as follows:\n", "\n", - "\"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope.\"" + "*\"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope.\"*" ] }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "This code cell was executed in Python 3.3.5\n", - "[0, 1, 2, 3, 4]\n", - "1 -> i in global\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "from platform import python_version\n", "print('This code cell was executed in Python', python_version())\n", @@ -2862,21 +2689,9 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "This code cell was executed in Python 2.7.6\n", - "[0, 1, 2, 3, 4]\n", - "4 -> i in global\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "from platform import python_version\n", "print 'This code cell was executed in Python', python_version()\n", @@ -2899,7 +2714,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Python 3.x prevents us from comparing unorderable types" + "### Python 3.x prevents us from comparing unorderable types" ] }, { @@ -2911,22 +2726,9 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "This code cell was executed in Python 2.7.6\n", - "False\n", - "True\n", - "False\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "from platform import python_version\n", "print 'This code cell was executed in Python', python_version()\n", @@ -2938,29 +2740,9 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "This code cell was executed in Python 3.3.5\n" - ] - }, - { - "ename": "TypeError", - "evalue": "unorderable types: list() > str()", - "output_type": "error", - "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 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'This code cell was executed in Python'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpython_version\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m'foo'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m'foo'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mTypeError\u001b[0m: unorderable types: list() > str()" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "from platform import python_version\n", "print('This code cell was executed in Python', python_version())\n", @@ -3003,10 +2785,8 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": null, + "metadata": {}, "outputs": [], "source": [ "def foo1(x: 'insert x here', y: 'insert x^2 here'):\n", @@ -3023,10 +2803,8 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": null, + "metadata": {}, "outputs": [], "source": [ "def foo2(x, y) -> 'Hi!':\n", @@ -3050,38 +2828,18 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Hello, World\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "foo1(1,2)" ] }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Hello, World\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "foo2(1,2) " ] @@ -3100,86 +2858,57 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "def is_palindrome(a):\n", " \"\"\"\n", " Case-and punctuation insensitive check if a string is a palindrom.\n", - " \n", + "\n", " Keyword arguments:\n", " a (str): The string to be checked if it is a palindrome.\n", - " \n", + "\n", " Returns `True` if input string is a palindrome, else False.\n", - " \n", + "\n", " \"\"\"\n", " stripped_str = [l for l in my_str.lower() if l.isalpha()]\n", - " return stripped_str == stripped_str[::-1]\n", - " " + " return stripped_str == stripped_str[::-1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "However, function annotations can be useful to indicate that work is still in progress in some cases. But they are optional and I see them very very rarely.\n", + "However, function annotations can be useful to indicate that work is still in progress in some cases. But they are optional and I see them very, very rarely.\n", "\n", "As it is stated in [PEP3107](http://legacy.python.org/dev/peps/pep-3107/#fundamentals-of-function-annotations):\n", "\n", - "1. Function annotations, both for parameters and return values, are completely optional.\n", + "1. *Function annotations, both for parameters and return values, are completely optional.*\n", "\n", - "2. Function annotations are nothing more than a way of associating arbitrary Python expressions with various parts of a function at compile-time.\n" + "2. *Function annotations are nothing more than a way of associating arbitrary Python expressions with various parts of a function at compile-time.*\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The nice thing about function annotations is their `__annotations__` attribute, which is dictionary of all the parameters and/or the `return` value you annotated." + "The nice thing about function annotations is their `__annotations__` attribute, which is a dictionary of all the parameters and/or the `return` value you annotated." ] }, { "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'y': 'insert x^2 here', 'x': 'insert x here'}" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "foo1.__annotations__" ] }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'return': 'Hi!'}" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "foo2.__annotations__" ] @@ -3207,7 +2936,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
    \n", "
    \n", "" ] @@ -3219,6 +2947,13 @@ "## Abortive statements in `finally` blocks" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[back to top](#sections)]" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -3228,22 +2963,9 @@ }, { "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "in try:\n", - "do some stuff\n", - "an error occurred\n", - "always execute finally\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "def try_finally1():\n", " try:\n", @@ -3256,7 +2978,8 @@ " print('no error occurred')\n", " finally:\n", " print('always execute finally')\n", - " \n", + "\n", + "\n", "try_finally1()" ] }, @@ -3271,21 +2994,9 @@ }, { "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "do some stuff in try block\n", - "do some stuff in finally block\n", - "always execute finally\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "def try_finally2():\n", " try:\n", @@ -3294,7 +3005,8 @@ " finally:\n", " print(\"do some stuff in finally block\")\n", " return \"always execute finally\"\n", - " \n", + "\n", + "\n", "print(try_finally2())" ] }, @@ -3319,7 +3031,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#Assigning types to variables as values" + "## Assigning types to variables as values" ] }, { @@ -3338,22 +3050,9 @@ }, { "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'123'" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "a_var = str\n", "a_var(123)" @@ -3361,23 +3060,9 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0 \n", - "1 \n", - "2.0 \n", - "3 \n", - "4 \n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "from random import choice\n", "\n", @@ -3400,7 +3085,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Only the first clause of generators is evaluated immediately" + "## Only the first clause of generators is evaluated immediately" ] }, { @@ -3420,22 +3105,9 @@ }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "ename": "ZeroDivisionError", - "evalue": "division by zero", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgen_fails\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mZeroDivisionError\u001b[0m: division by zero" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "gen_fails = (i for i in 1/0)" ] @@ -3449,10 +3121,8 @@ }, { "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, + "execution_count": null, + "metadata": {}, "outputs": [], "source": [ "gen_succeeds = (i for i in range(5) for j in 1/0)" @@ -3460,30 +3130,9 @@ }, { "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "ename": "ZeroDivisionError", - "evalue": "division by zero", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mZeroDivisionError\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[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'But obviously fails when we iterate ...'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mgen_succeeds\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgen_succeeds\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mj\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mZeroDivisionError\u001b[0m: division by zero" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "But obviously fails when we iterate ...\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "print('But obviously fails when we iterate ...')\n", "for i in gen_succeeds:\n", @@ -3503,7 +3152,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Keyword argument unpacking syntax - `*args` and `**kwargs`" + "## Keyword argument unpacking syntax - `*args` and `**kwargs`" ] }, { @@ -3517,22 +3166,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Python has a very convenient \"keyword argument unpacking syntax\" (often also referred to as \"splat\"-operators). This is particularly useful, if we want to define a function that can take a arbitrary number of input arguments." + "Python has a very convenient \"keyword argument unpacking syntax\" (often referred to as \"splat\"-operators). This is particularly useful, if we want to define a function that can take a arbitrary number of input arguments." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### Single-asterisk (*args)" + "### Single-asterisk (*args)" ] }, { "cell_type": "code", - "execution_count": 55, - "metadata": { - "collapsed": false - }, + "execution_count": 41, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -3550,6 +3197,7 @@ " print('args contents:', args)\n", " print('1st argument:', args[0])\n", "\n", + "\n", "a_func(0, 1, 'a', 'b', 'c')" ] }, @@ -3557,22 +3205,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### Double-asterisk (**kwargs)" + "### Double-asterisk (**kwargs)" ] }, { "cell_type": "code", - "execution_count": 56, - "metadata": { - "collapsed": false - }, + "execution_count": 42, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "type of kwargs: \n", - "kwargs contents: {'d': 4, 'a': 1, 'c': 3, 'b': 2}\n", + "kwargs contents: {'a': 1, 'b': 2, 'c': 3, 'd': 4}\n", "value of argument a: 1\n" ] } @@ -3582,7 +3228,8 @@ " print('type of kwargs:', type(kwargs))\n", " print('kwargs contents: ', kwargs)\n", " print('value of argument a:', kwargs['a'])\n", - " \n", + "\n", + "\n", "b_func(a=1, b=2, c=3, d=4)" ] }, @@ -3590,16 +3237,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### (Partially) unpacking of iterables\n", + "### (Partially) unpacking of iterables\n", "Another useful application of the \"unpacking\"-operator is the unpacking of lists and other other iterables." ] }, { "cell_type": "code", - "execution_count": 57, - "metadata": { - "collapsed": false - }, + "execution_count": 43, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -3654,10 +3299,8 @@ }, { "cell_type": "code", - "execution_count": 53, - "metadata": { - "collapsed": false - }, + "execution_count": 44, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -3673,10 +3316,12 @@ " def __new__(clss, *args, **kwargs):\n", " print('excecuted __new__')\n", " return None\n", + "\n", " def __init__(self, an_arg):\n", " print('excecuted __init__')\n", " self.an_arg = an_arg\n", - " \n", + "\n", + "\n", "a_object = a_class(1)\n", "print('Type of a_object:', type(a_object))" ] @@ -3691,10 +3336,8 @@ }, { "cell_type": "code", - "execution_count": 54, - "metadata": { - "collapsed": false - }, + "execution_count": 45, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -3713,10 +3356,12 @@ " print('excecuted __new__')\n", " inst = super(a_class, cls).__new__(cls)\n", " return inst\n", + "\n", " def __init__(self, an_arg):\n", " print('excecuted __init__')\n", " self.an_arg = an_arg\n", - " \n", + "\n", + "\n", "a_object = a_class(1)\n", "print('Type of a_object:', type(a_object))\n", "print('a_object.an_arg: ', a_object.an_arg)" @@ -3724,10 +3369,8 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, + "execution_count": 46, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -3750,10 +3393,8 @@ }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, + "execution_count": 47, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -3799,7 +3440,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "I would claim that the conditional \"else\" is every programmer's daily bread and butter. However, there is a second flavor of \"else\"-clauses in Python, which I will call \"completion else\" (for reason that will become clear later). \n", + "I would claim that the conditional `else` is every programmer's daily bread and butter. However, there is a second flavor of `else`-clauses in Python, which I will call \"completion else\" (for reason that will become clear later). \n", "But first, let us take a look at our \"traditional\" conditional else that we all are familiar with. \n" ] }, @@ -3807,15 +3448,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###Conditional else:" + "### Conditional else:" ] }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 48, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -3837,10 +3476,8 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, + "execution_count": 49, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -3866,7 +3503,7 @@ "source": [ "Why am I showing those simple examples? I think they are good to highlight some of the key points: It is **either** the code under the `if` clause that is executed, **or** the code under the `else` block, but not both. \n", "If the condition of the `if` clause evaluates to `True`, the `if`-block is exectured, and if it evaluated to `False`, it is the `else` block. \n", - "\n", + "
    \n", "### Completion else\n", "**In contrast** to the **either...or*** situation that we know from the conditional `else`, the completion `else` is executed if a code block finished. \n", "To show you an example, let us use `else` for error-handling:" @@ -3881,10 +3518,8 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, + "execution_count": 50, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -3906,10 +3541,8 @@ }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, + "execution_count": 51, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -3932,7 +3565,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
    \n", "In the code above, we can see that the code under the **`else`-clause is only executed if the `try-block` was executed without encountering an error, i.e., if the `try`-block is \"complete\".** \n", "The same rule applies to the \"completion\" `else` in while- and for-loops, which you can confirm in the following samples below." ] @@ -3946,10 +3578,8 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, + "execution_count": 52, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -3972,10 +3602,8 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 53, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -4004,10 +3632,8 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": 54, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -4028,10 +3654,8 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": 55, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -4090,10 +3714,8 @@ }, { "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": false - }, + "execution_count": 56, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -4125,20 +3747,18 @@ }, { "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, + "execution_count": 57, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 3 0 LOAD_CONST 1 ('Hello')\n", - " 3 STORE_FAST 0 (s)\n", + " 2 STORE_FAST 0 (s)\n", "\n", - " 4 6 LOAD_FAST 0 (s)\n", - " 9 RETURN_VALUE\n" + " 4 4 LOAD_FAST 0 (s)\n", + " 6 RETURN_VALUE\n" ] } ], @@ -4152,20 +3772,18 @@ }, { "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": false - }, + "execution_count": 58, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2 0 LOAD_CONST 3 ('Hello')\n", - " 3 STORE_FAST 0 (s)\n", + " 2 STORE_FAST 0 (s)\n", "\n", - " 3 6 LOAD_FAST 0 (s)\n", - " 9 RETURN_VALUE\n" + " 3 4 LOAD_FAST 0 (s)\n", + " 6 RETURN_VALUE\n" ] } ], @@ -4178,25 +3796,23 @@ }, { "cell_type": "code", - "execution_count": 40, - "metadata": { - "collapsed": false - }, + "execution_count": 59, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2 0 LOAD_CONST 1 ('Hell')\n", - " 3 STORE_FAST 0 (s)\n", + " 2 STORE_FAST 0 (s)\n", "\n", - " 3 6 LOAD_FAST 0 (s)\n", - " 9 LOAD_CONST 2 ('o')\n", - " 12 BINARY_ADD\n", - " 13 STORE_FAST 0 (s)\n", + " 3 4 LOAD_FAST 0 (s)\n", + " 6 LOAD_CONST 2 ('o')\n", + " 8 BINARY_ADD\n", + " 10 STORE_FAST 0 (s)\n", "\n", - " 4 16 LOAD_FAST 0 (s)\n", - " 19 RETURN_VALUE\n" + " 4 12 LOAD_FAST 0 (s)\n", + " 14 RETURN_VALUE\n" ] } ], @@ -4215,15 +3831,13 @@ "
    \n", "It looks like that `'Hello'` and `'Hell'` + `'o'` are both evaluated and stored as `'Hello'` at compile-time, whereas the third version \n", "`s = 'Hell'` \n", - "`s = s + 'o'` seems to be not interned. Let us quickly confirm the behavior with the following code:" + "`s = s + 'o'` seems to not be interned. Let us quickly confirm the behavior with the following code:" ] }, { "cell_type": "code", - "execution_count": 42, - "metadata": { - "collapsed": false - }, + "execution_count": 60, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -4248,10 +3862,8 @@ }, { "cell_type": "code", - "execution_count": 45, - "metadata": { - "collapsed": false - }, + "execution_count": 61, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -4296,6 +3908,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "#### 06/09/2018\n", + "- pep8 spacing\n", + "- fixed minor typos\n", + "- fixed minor markdown formatting\n", + "- fixed broken page jumps\n", + "\n", "#### 07/16/2014\n", "- slight change of wording in the [lambda-closure section](#lambda_closure)\n", "\n", @@ -4322,9 +3940,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [] } @@ -4345,9 +3961,40 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.0" + "version": "3.6.4" + }, + "latex_envs": { + "LaTeX_envs_menu_present": true, + "autoclose": false, + "autocomplete": true, + "bibliofile": "biblio.bib", + "cite_by": "apalike", + "current_citInitial": 1, + "eqLabelWithNumbers": true, + "eqNumInitial": 1, + "hotkeys": { + "equation": "Ctrl-E", + "itemize": "Ctrl-I" + }, + "labels_anchors": false, + "latex_user_defs": false, + "report_style_numbering": false, + "user_envs_cfg": false + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } From 48b25bfd351cdf553a21c74cadebe1695959d50d Mon Sep 17 00:00:00 2001 From: lacanlale Date: Sat, 9 Jun 2018 11:03:08 -0700 Subject: [PATCH 246/248] minor grammar fix and datetime note --- tutorials/not_so_obvious_python_stuff.ipynb | 285 +++++++++++++++----- 1 file changed, 218 insertions(+), 67 deletions(-) diff --git a/tutorials/not_so_obvious_python_stuff.ipynb b/tutorials/not_so_obvious_python_stuff.ipynb index 2e733ed..cf683b0 100644 --- a/tutorials/not_so_obvious_python_stuff.ipynb +++ b/tutorials/not_so_obvious_python_stuff.ipynb @@ -379,6 +379,8 @@ "source": [ "\"It often comes as a big surprise for programmers to find (sometimes by way of a hard-to-reproduce bug) that, unlike any other time value, midnight (i.e. `datetime.time(0,0,0)`) is False. A long discussion on the python-ideas mailing list shows that, while surprising, that behavior is desirable — at least in some quarters.\" \n", "\n", + "Please note that Python version <= 3.4.5 evaluated the first statement `bool(datetime.time(0,0,0))` as `False`, which was regarded counter-intuitive, since \"12am\" refers to \"midnight.\"\n", + "\n", "(Original source: [http://lwn.net/SubscriberLink/590299/bf73fe823974acea/](http://lwn.net/SubscriberLink/590299/bf73fe823974acea/))" ] }, @@ -391,22 +393,25 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ + "Current python version: 3.6.4\n", "\"datetime.time(0,0,0)\" (Midnight) -> True\n", "\"datetime.time(1,0,0)\" (1 am) -> True\n" ] } ], "source": [ + "from platform import python_version\n", "import datetime\n", "\n", - "print('\"datetime.time(0,0,0)\" (Midnight) ->', bool(datetime.time(0,0,0)))\n", + "print(\"Current python version: \", python_version())\n", + "print('\"datetime.time(0,0,0)\" (Midnight) ->', bool(datetime.time(0,0,0))) # Python version <= 3.4.5 evaluates this statement to False\n", "\n", "print('\"datetime.time(1,0,0)\" (1 am) ->', bool(datetime.time(1,0,0)))" ] @@ -1652,7 +1657,7 @@ "So, when we want to mark a class method as private, we can put a single underscore in front of it. \n", "If we additionally want to avoid name clashes with other classes that might use the same method names, we can prefix the name with a double-underscore to invoke the name mangling.\n", "\n", - "This doesn't prevent the class user to access this class member though, but they have to know the trick and also know that it is at their own risk...\n", + "This doesn't prevent the class users to access this class member though, but they have to know the trick and also know that it is at their own risk...\n", "\n", "Let the following example illustrate what I mean:" ] @@ -2679,26 +2684,39 @@ "metadata": {}, "outputs": [], "source": [ - "from platform import python_version\n", - "print('This code cell was executed in Python', python_version())\n", - "\n", - "i = 1\n", - "print([i for i in range(5)])\n", - "print(i, '-> i in global')" + ">>> from platform import python_version\n", + ">>> print 'This code cell was executed in Python', python_version()\n", + "'This code cell was executed in Python 2.7.6'\n", + ">>> i = 1\n", + ">>> print [i for i in range(5)]\n", + "'[0, 1, 2, 3, 4]'\n", + ">>> print i, '-> i in global'\n", + "'4 -> i in global'" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 61, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This code cell was executed in Python 3.6.4\n", + "[0, 1, 2, 3, 4]\n", + "1 -> i in global\n" + ] + } + ], "source": [ + "%%python3\n", "from platform import python_version\n", - "print 'This code cell was executed in Python', python_version()\n", + "print('This code cell was executed in Python', python_version())\n", "\n", "i = 1\n", - "print [i for i in range(5)]\n", - "print i, '-> i in global' " + "print([i for i in range(5)])\n", + "print(i, '-> i in global')" ] }, { @@ -2726,23 +2744,53 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 101, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Couldn't find program: 'python2'\n" + ] + } + ], "source": [ - "from platform import python_version\n", - "print 'This code cell was executed in Python', python_version()\n", - "\n", - "print [1, 2] > 'foo'\n", - "print (1, 2) > 'foo'\n", - "print [1, 2] > (1, 2)" + ">>> from platform import python_version\n", + ">>> print 'This code cell was executed in Python', python_version()\n", + "'This code cell was executed in Python 2.7.6'\n", + ">>> print [1, 2] > 'foo'\n", + "'False'\n", + ">>> print (1, 2) > 'foo'\n", + "'True'\n", + ">>> print [1, 2] > (1, 2)\n", + "'False'" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 67, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This code cell was executed in Python 3.6.4\n" + ] + }, + { + "ename": "TypeError", + "evalue": "'>' not supported between instances of 'list' and 'str'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\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 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'This code cell was executed in Python'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpython_version\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m'foo'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m'foo'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: '>' not supported between instances of 'list' and 'str'" + ] + } + ], "source": [ "from platform import python_version\n", "print('This code cell was executed in Python', python_version())\n", @@ -2785,7 +2833,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -2803,7 +2851,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -2828,18 +2876,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello, World\n" + ] + } + ], "source": [ "foo1(1,2)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello, World\n" + ] + } + ], "source": [ "foo2(1,2) " ] @@ -2857,7 +2921,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -2897,18 +2961,40 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'x': 'insert x here', 'y': 'insert x^2 here'}" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "foo1.__annotations__" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'return': 'Hi!'}" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "foo2.__annotations__" ] @@ -2994,9 +3080,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "do some stuff in try block\n", + "do some stuff in finally block\n", + "always execute finally\n" + ] + } + ], "source": [ "def try_finally2():\n", " try:\n", @@ -3050,9 +3146,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'123'" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "a_var = str\n", "a_var(123)" @@ -3060,9 +3167,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0 \n", + "1.0 \n", + "2 \n", + "3.0 \n", + "4.0 \n" + ] + } + ], "source": [ "from random import choice\n", "\n", @@ -3105,9 +3224,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "ZeroDivisionError", + "evalue": "division by zero", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgen_fails\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mZeroDivisionError\u001b[0m: division by zero" + ] + } + ], "source": [ "gen_fails = (i for i in 1/0)" ] @@ -3121,7 +3252,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -3130,9 +3261,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "But obviously fails when we iterate ...\n" + ] + }, + { + "ename": "ZeroDivisionError", + "evalue": "division by zero", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mZeroDivisionError\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[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'But obviously fails when we iterate ...'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mgen_succeeds\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgen_succeeds\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mj\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mZeroDivisionError\u001b[0m: division by zero" + ] + } + ], "source": [ "print('But obviously fails when we iterate ...')\n", "for i in gen_succeeds:\n", @@ -3178,7 +3329,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 27, "metadata": {}, "outputs": [ { @@ -3210,7 +3361,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -3243,7 +3394,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -3299,7 +3450,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -3336,7 +3487,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 31, "metadata": {}, "outputs": [ { @@ -3369,7 +3520,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 32, "metadata": {}, "outputs": [ { @@ -3393,7 +3544,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -3453,7 +3604,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 34, "metadata": {}, "outputs": [ { @@ -3476,7 +3627,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 35, "metadata": {}, "outputs": [ { @@ -3518,7 +3669,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 36, "metadata": {}, "outputs": [ { @@ -3541,7 +3692,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 37, "metadata": {}, "outputs": [ { @@ -3578,7 +3729,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 38, "metadata": {}, "outputs": [ { @@ -3602,7 +3753,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 39, "metadata": {}, "outputs": [ { @@ -3632,7 +3783,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 40, "metadata": {}, "outputs": [ { @@ -3654,7 +3805,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 41, "metadata": {}, "outputs": [ { @@ -3714,7 +3865,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 42, "metadata": {}, "outputs": [ { @@ -3747,7 +3898,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 43, "metadata": {}, "outputs": [ { @@ -3772,7 +3923,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 44, "metadata": {}, "outputs": [ { @@ -3796,7 +3947,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 45, "metadata": {}, "outputs": [ { @@ -3836,7 +3987,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 46, "metadata": {}, "outputs": [ { @@ -3862,7 +4013,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 47, "metadata": {}, "outputs": [ { From d6ddacb2d4ed2a8ffe0c6de1a5e2743ab4e54a2e Mon Sep 17 00:00:00 2001 From: Sebastian Raschka Date: Mon, 8 Apr 2019 21:38:51 -0500 Subject: [PATCH 247/248] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c6fbbee..05de8e6 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ *This category has been moved to a separate GitHub repository [rasbt/algorithms_in_ipython_notebooks](https://github.com/rasbt/algorithms_in_ipython_notebooks)* -- Sorting Algorithms [[IPython nb](http://nbviewer.ipython.org/github/rasbt/algorithms_in_ipython_notebooks/blob/master/ipython_nbs/sorting/sorting_algorithms.ipynb?create=1)] +- Sorting Algorithms [[Collection of IPython Notebooks](https://github.com/rasbt/algorithms_in_ipython_notebooks/tree/master/ipython_nbs/sorting) - Linear regression via the least squares fit method [[IPython nb](http://nbviewer.ipython.org/github/rasbt/algorithms_in_ipython_notebooks/blob/master/ipython_nbs/statistics/linregr_least_squares_fit.ipynb?create=1)] From a066dc35fe6b324f39d406b918a9bb8469b8b420 Mon Sep 17 00:00:00 2001 From: Tim Gates Date: Mon, 27 Jun 2022 13:19:05 +1000 Subject: [PATCH 248/248] docs: Fix a few typos There are small typos in: - tutorials/installing_scientific_packages.md - tutorials/sqlite3_howto/README.md - tutorials/sqlite3_howto/code/update_or_insert_records.py - useful_scripts/conc_gzip_files.py Fixes: - Should read `existing` rather than `exisiting`. - Should read `conveniently` rather than `conviniently`. - Should read `calculate` rather than `calulate`. - Should read `accommodate` rather than `accomodate`. --- tutorials/installing_scientific_packages.md | 2 +- tutorials/sqlite3_howto/README.md | 2 +- tutorials/sqlite3_howto/code/update_or_insert_records.py | 2 +- useful_scripts/conc_gzip_files.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tutorials/installing_scientific_packages.md b/tutorials/installing_scientific_packages.md index 0439c71..918d293 100644 --- a/tutorials/installing_scientific_packages.md +++ b/tutorials/installing_scientific_packages.md @@ -278,7 +278,7 @@ print its path: Finally, we can set an `alias` in our `.bash_profile` or `.bash_rc` file to -conviniently run IPython from the console. E.g., +conveniently run IPython from the console. E.g., diff --git a/tutorials/sqlite3_howto/README.md b/tutorials/sqlite3_howto/README.md index ea2a357..c596dfc 100644 --- a/tutorials/sqlite3_howto/README.md +++ b/tutorials/sqlite3_howto/README.md @@ -586,7 +586,7 @@ syntax applies to simple dates or simple times only, too. #### Update Mar 16, 2014: -If'd we are interested to calulate the hours between two `DATETIME()` +If'd we are interested to calculate the hours between two `DATETIME()` timestamps, we can could use the handy `STRFTIME()` function like this diff --git a/tutorials/sqlite3_howto/code/update_or_insert_records.py b/tutorials/sqlite3_howto/code/update_or_insert_records.py index 37292a5..ee461ec 100644 --- a/tutorials/sqlite3_howto/code/update_or_insert_records.py +++ b/tutorials/sqlite3_howto/code/update_or_insert_records.py @@ -1,6 +1,6 @@ # Sebastian Raschka, 2014 # Update records or insert them if they don't exist. -# Note that this is a workaround to accomodate for missing +# Note that this is a workaround to accommodate for missing # SQL features in SQLite. import sqlite3 diff --git a/useful_scripts/conc_gzip_files.py b/useful_scripts/conc_gzip_files.py index da849c9..b8d9b33 100644 --- a/useful_scripts/conc_gzip_files.py +++ b/useful_scripts/conc_gzip_files.py @@ -13,7 +13,7 @@ def conc_gzip_files(in_dir, out_file, append=False, print_progress=True): Keyword arguments: in_dir (str): Path of the directory with the gzip-files out_file (str): Path to the resulting file - append (bool): If true, it appends contents to an exisiting file, + append (bool): If true, it appends contents to an existing file, else creates a new output file. print_progress (bool): prints progress bar if true.
    -
    - - -
    -
    -
    -
    -
    -
    -I would be happy to hear your comments and suggestions.
    Please feel free to drop me a note via twitter, , or google+. -
    -
    -
    -
    -
    -
    -
    -
    -
    -

    Key differences between Python 2.7.x and Python 3.x

    -
    -
    -
    - -
    -
    -
    -
    -
    -


    Many beginning Python users are wondering with which version of Python they should start. My answer to this question is usually something along the lines "just go with the version your favorite tutorial was written in, and check out the differences later on."

    -

    But what if you are starting a new project and have the choice to pick? I would say there is currently no "right" or "wrong" as long as both Python 2.7.x and Python 3.x support the libraries that you are planning to use. However, it is worthwhile to have a look at the major differences between those two most popular versions of Python to avoid common pitfalls when writing the code for either one of them, or if you are planning to port your project.

    -
    -
    -
    -
    -
    -
    -
    -
    -



    -
    -
    -
    -
    -
    -
    -
    -
    -

    Sections

    -
    -
    -
    - - -
    -
    -
    -
    -
    -

    -
    -
    -
    -
    -
    -
    -
    -
    -



    -
    -
    -
    -
    -
    -
    -
    -
    -

    The __future__ module

    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 3.x introduced some Python 2-incompatible keywords and features that can be imported via the in-built __future__ module in Python 2. It is recommended to use __future__ imports it if you are planning Python 3.x support for your code. For example, if we want Python 3.x's integer division behavior in Python 2, we can import it via

    -
    from __future__ import division
    -

    More features that can be imported from the __future__ module are listed in the table below:

    -
    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -feature - -optional in - -mandatory in - -effect -
    -nested_scopes - -2.1.0b1 - -2.2 - -PEP 227: Statically Nested Scopes -
    -generators - -2.2.0a1 - -2.3 - -PEP 255: Simple Generators -
    -division - -2.2.0a2 - -3.0 - -PEP 238: Changing the Division Operator -
    -absolute_import - -2.5.0a1 - -3.0 - -PEP 328: Imports: Multi-Line and Absolute/Relative -
    -with_statement - -2.5.0a1 - -2.6 - -PEP 343: The “with” Statement -
    -print_function - -2.6.0a2 - -3.0 - -PEP 3105: Make print a function -
    -unicode_literals - -2.6.0a2 - -3.0 - -PEP 3112: Bytes literals in Python 3000 -
    -
    -
    -(Source: https://docs.python.org/2/library/future.html) -
    -
    -
    -
    -
    -
    -
    -In [1]: -
    -
    -
    -
    from platform import python_version
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    -
    -



    -
    -
    -
    -
    -
    -
    -
    -
    -

    The print function

    -
    -
    -
    - - -
    -
    -
    -
    -
    -

    Very trivial, and the change in the print-syntax is probably the most widely known change, but still it is worth mentioning: Python 2's print statement has been replaced by the print() function, meaning that we have to wrap the object that we want to print in parantheses.

    -

    Python 2 doesn't have a problem with additional parantheses, but in contrast, Python 3 would raise a SyntaxError if we called the print function the Python 2-way without the parentheses.

    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 2

    -
    -
    -
    -
    -
    -
    -In [3]: -
    -
    -
    -
    print 'Python', python_version()
    -print 'Hello, World!'
    -print('Hello, World!')
    -print "text", ; print 'print more text on the same line'
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 2.7.6
    -Hello, World!
    -Hello, World!
    -text print more text on the same line
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -


    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 3

    -
    -
    -
    -
    -
    -
    -In [2]: -
    -
    -
    -
    print('Python', python_version())
    -print('Hello, World!')
    -
    -print("some text,", end="") 
    -print(' print more text on the same line')
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 3.4.1
    -Hello, World!
    -some text, print more text on the same line
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -In [3]: -
    -
    -
    -
    print 'Hello, World!'
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -  File "<ipython-input-3-139a7c5835bd>", line 1
    -    print 'Hello, World!'
    -                        ^
    -SyntaxError: invalid syntax
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -

    Note:

    -

    Printing "Hello, World" above via Python 2 looked quite "normal". However, if we have multiple objects inside the parantheses, we will create a tuple, since print is a "statement" in Python 2, not a function call.

    -
    -
    -
    -
    -
    -
    -In [4]: -
    -
    -
    -
    print 'Python', python_version()
    -print('a', 'b')
    -print 'a', 'b'
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 2.7.6
    -('a', 'b')
    -a b
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -



    -
    -
    -
    -
    -
    -
    -
    -
    -

    Integer division

    -
    -
    -
    - - -
    -
    -
    -
    -
    -

    This change is particularly dangerous if you are porting code, or if you are executing Python 3 code in Python 2, since the change in integer-division behavior can often go unnoticed (it doesn't raise a SyntaxError).
    So, I still tend to use a float(3)/2 or 3/2.0 instead of a 3/2 in my Python 3 scripts to save the Python 2 guys some trouble (and vice versa, I recommend a from __future__ import division in your Python 2 scripts).

    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 2

    -
    -
    -
    -
    -
    -
    -In [4]: -
    -
    -
    -
    print 'Python', python_version()
    -print '3 / 2 =', 3 / 2
    -print '3 // 2 =', 3 // 2
    -print '3 / 2.0 =', 3 / 2.0
    -print '3 // 2.0 =', 3 // 2.0
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 2.7.6
    -3 / 2 = 1
    -3 // 2 = 1
    -3 / 2.0 = 1.5
    -3 // 2.0 = 1.0
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -


    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 3

    -
    -
    -
    -
    -
    -
    -In [4]: -
    -
    -
    -
    print('Python', python_version())
    -print('3 / 2 =', 3 / 2)
    -print('3 // 2 =', 3 // 2)
    -print('3 / 2.0 =', 3 / 2.0)
    -print('3 // 2.0 =', 3 // 2.0)
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 3.4.1
    -3 / 2 = 1.5
    -3 // 2 = 1
    -3 / 2.0 = 1.5
    -3 // 2.0 = 1.0
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -



    -
    -
    -
    -
    -
    -
    -
    -
    -

    Unicode

    -
    -
    -
    - - -
    -
    -
    -
    -
    -

    Python 2 has ASCII str() types, separate unicode(), but no byte type.

    -

    Now, in Python 3, we finally have Unicode (utf-8) strings, and 2 byte classes: byte and bytearrays.

    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 2

    -
    -
    -
    -
    -
    -
    -In [2]: -
    -
    -
    -
    print 'Python', python_version()
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 2.7.6
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -In [3]: -
    -
    -
    -
    print type(unicode('this is like a python3 str type'))
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -<type 'unicode'>
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -In [4]: -
    -
    -
    -
    print type(b'byte type does not exist')
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -<type 'str'>
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -In [5]: -
    -
    -
    -
    print 'they are really' + b' the same'
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -they are really the same
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -In [7]: -
    -
    -
    -
    print type(bytearray(b'bytearray oddly does exist though'))
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -<type 'bytearray'>
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -


    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 3

    -
    -
    -
    -
    -
    -
    -In [6]: -
    -
    -
    -
    print('Python', python_version())
    -print('strings are now utf-8 \u03BCnico\u0394é!')
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 3.4.1
    -strings are now utf-8 μnicoΔé!
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -In [8]: -
    -
    -
    -
    print('Python', python_version(), end="")
    -print(' has', type(b' bytes for storing data'))
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 3.4.1 has <class 'bytes'>
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -In [11]: -
    -
    -
    -
    print('and Python', python_version(), end="")
    -print(' also has', type(bytearray(b'bytearrays')))
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -and Python 3.4.1 also has <class 'bytearray'>
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -In [13]: -
    -
    -
    -
    'note that we cannot add a string' + b'bytes for data'
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    ----------------------------------------------------------------------------
    -TypeError                                 Traceback (most recent call last)
    -<ipython-input-13-d3e8942ccf81> in <module>()
    -----> 1 'note that we cannot add a string' + b'bytes for data'
    -
    -TypeError: Can't convert 'bytes' object to str implicitly
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -



    -
    -
    -
    -
    -
    -
    -
    -
    -

    xrange

    -
    -
    -
    - - -
    -
    -
    -
    -
    -

    The usage of xrange() is very popular in Python 2.x for creating an iterable object, e.g., in a for-loop or list/set-dictionary-comprehension.
    The behavior was quite similar to a generator (i.e., "lazy evaluation"), but here the xrange-iterable is not exhaustible - meaning, you could iterate over it infinitely.

    -

    Thanks to its "lazy-evaluation", the advantage of the regular range() is that xrange() is generally faster if you have to iterate over it only once (e.g., in a for-loop). However, in contrast to 1-time iterations, it is not recommended if you repeat the iteration multiple times, since the generation happens every time from scratch!

    -

    In Python 3, the range() was implemented like the xrange() function so that a dedicated xrange() function does not exist anymore (xrange() raises a NameError in Python 3).

    -
    -
    -
    -
    -
    -
    -In [5]: -
    -
    -
    -
    import timeit
    -
    -n = 10000
    -def test_range(n):
    -    for i in range(n):
    -        pass
    -    
    -def test_xrange(n):
    -    for i in xrange(n):
    -        pass    
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    -
    -


    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 2

    -
    -
    -
    -
    -
    -
    -In [6]: -
    -
    -
    -
    print 'Python', python_version()
    -
    -print '\ntiming range()'
    -%timeit test_range(n)
    -
    -print '\n\ntiming xrange()'
    -%timeit test_xrange(n)
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 2.7.6
    -
    -timing range()
    -1000 loops, best of 3: 433 µs per loop
    -
    -
    -timing xrange()
    -1000 loops, best of 3: 350 µs per loop
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -


    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 3

    -
    -
    -
    -
    -
    -
    -In [7]: -
    -
    -
    -
    print('Python', python_version())
    -
    -print('\ntiming range()')
    -%timeit test_range(n)
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 3.4.1
    -
    -timing range()
    -1000 loops, best of 3: 520 µs per loop
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -In [8]: -
    -
    -
    -
    print(xrange(10))
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    ----------------------------------------------------------------------------
    -NameError                                 Traceback (most recent call last)
    -<ipython-input-8-5d8f9b79ea70> in <module>()
    -----> 1 print(xrange(10))
    -
    -NameError: name 'xrange' is not defined
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -



    -
    -
    -
    -
    -
    -
    -
    -
    -

    Note about the speed differences in Python 2 and 3

    -
    -
    -
    - -
    -
    -
    -
    -
    -

    Some people pointed out the speed difference between Python 3's range() and Python2's xrange(). Since they are implemented the same way one would expect the same speed. However the difference here just comes from the fact that Python 3 generally tends to run slower than Python 2.

    -
    -
    -
    -
    -
    -
    -In [3]: -
    -
    -
    -
    def test_while():
    -    i = 0
    -    while i < 20000:
    -        i += 1
    -    return
    -
    - -
    -
    -
    - -
    -
    -
    -
    -In [4]: -
    -
    -
    -
    print('Python', python_version())
    -%timeit test_while()
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 3.4.1
    -100 loops, best of 3: 2.68 ms per loop
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -In [6]: -
    -
    -
    -
    print 'Python', python_version()
    -%timeit test_while()
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 2.7.6
    -1000 loops, best of 3: 1.72 ms per loop
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -



    -
    -
    -
    -
    -
    -
    -
    -
    -

    Raising exceptions

    -
    -
    -
    - - -
    -
    -
    -
    -
    -

    Where Python 2 accepts both notations, the 'old' and the 'new' syntax, Python 3 chokes (and raises a SyntaxError in turn) if we don't enclose the exception argument in parentheses:

    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 2

    -
    -
    -
    -
    -
    -
    -In [7]: -
    -
    -
    -
    print 'Python', python_version()
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 2.7.6
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -In [8]: -
    -
    -
    -
    raise IOError, "file error"
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    ----------------------------------------------------------------------------
    -IOError                                   Traceback (most recent call last)
    -<ipython-input-8-25f049caebb0> in <module>()
    -----> 1 raise IOError, "file error"
    -
    -IOError: file error
    -
    -
    - -
    -
    - -
    -
    -
    -
    -In [9]: -
    -
    -
    -
    raise IOError("file error")
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    ----------------------------------------------------------------------------
    -IOError                                   Traceback (most recent call last)
    -<ipython-input-9-6f1c43f525b2> in <module>()
    -----> 1 raise IOError("file error")
    -
    -IOError: file error
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -


    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 3

    -
    -
    -
    -
    -
    -
    -In [9]: -
    -
    -
    -
    print('Python', python_version())
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 3.4.1
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -In [10]: -
    -
    -
    -
    raise IOError, "file error"
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -  File "<ipython-input-10-25f049caebb0>", line 1
    -    raise IOError, "file error"
    -                 ^
    -SyntaxError: invalid syntax
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -

    The proper way to raise an exception in Python 3:

    -
    -
    -
    -
    -
    -
    -In [11]: -
    -
    -
    -
    print('Python', python_version())
    -raise IOError("file error")
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 3.4.1
    -
    -
    -
    -
    - -
    -
    -
    ----------------------------------------------------------------------------
    -OSError                                   Traceback (most recent call last)
    -<ipython-input-11-c350544d15da> in <module>()
    -      1 print('Python', python_version())
    -----> 2 raise IOError("file error")
    -
    -OSError: file error
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -



    -
    -
    -
    -
    -
    -
    -
    -
    -

    Handling exceptions

    -
    -
    -
    - - -
    -
    -
    -
    -
    -

    Also the handling of exceptions has slightly changed in Python 3. In Python 3 we have to use the "as" keyword now

    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 2

    -
    -
    -
    -
    -
    -
    -In [10]: -
    -
    -
    -
    print 'Python', python_version()
    -try:
    -    let_us_cause_a_NameError
    -except NameError, err:
    -    print err, '--> our error message'
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 2.7.6
    -name 'let_us_cause_a_NameError' is not defined --> our error message
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -


    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 3

    -
    -
    -
    -
    -
    -
    -In [12]: -
    -
    -
    -
    print('Python', python_version())
    -try:
    -    let_us_cause_a_NameError
    -except NameError as err:
    -    print(err, '--> our error message')
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 3.4.1
    -name 'let_us_cause_a_NameError' is not defined --> our error message
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -



    -
    -
    -
    -
    -
    -
    -
    -
    -

    -
    -
    -
    -
    -
    -
    -
    -
    -

    The next() function and .next() method

    -
    -
    -
    - - -
    -
    -
    -
    -
    -

    Since next() (.next()) is such a commonly used function (method), this is another syntax change (or rather change in implementation) that is worth mentioning: where you can use both the function and method syntax in Python 2.7.5, the next() function is all that remains in Python 3 (calling the .next() method raises an AttributeError).

    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 2

    -
    -
    -
    -
    -
    -
    -In [11]: -
    -
    -
    -
    print 'Python', python_version()
    -
    -my_generator = (letter for letter in 'abcdefg')
    -
    -next(my_generator)
    -my_generator.next()
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 2.7.6
    -
    -
    -
    -
    - -
    - Out[11]:
    - - -
    -
    -'b'
    -
    -
    - -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -


    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 3

    -
    -
    -
    -
    -
    -
    -In [13]: -
    -
    -
    -
    print('Python', python_version())
    -
    -my_generator = (letter for letter in 'abcdefg')
    -
    -next(my_generator)
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 3.4.1
    -
    -
    -
    -
    - -
    - Out[13]:
    - - -
    -
    -'a'
    -
    -
    - -
    - -
    -
    - -
    -
    -
    -
    -In [14]: -
    -
    -
    -
    my_generator.next()
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    ----------------------------------------------------------------------------
    -AttributeError                            Traceback (most recent call last)
    -<ipython-input-14-125f388bb61b> in <module>()
    -----> 1 my_generator.next()
    -
    -AttributeError: 'generator' object has no attribute 'next'
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -



    -
    -
    -
    -
    -
    -
    -
    -
    -

    For-loop variables and the global namespace leak

    -
    -
    -
    - - -
    -
    -
    -
    -
    -

    Good news is: In Python 3.x for-loop variables don't leak into the global namespace anymore!

    -

    This goes back to a change that was made in Python 3.x and is described in What’s New In Python 3.0 as follows:

    -

    "List comprehensions no longer support the syntactic form [... for var in item1, item2, ...]. Use [... for var in (item1, item2, ...)] instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a list() constructor, and in particular the loop control variables are no longer leaked into the surrounding scope."

    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 2

    -
    -
    -
    -
    -
    -
    -In [12]: -
    -
    -
    -
    print 'Python', python_version()
    -
    -i = 1
    -print 'before: i =', i
    -
    -print 'comprehension: ', [i for i in range(5)]
    -
    -print 'after: i =', i
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 2.7.6
    -before: i = 1
    -comprehension:  [0, 1, 2, 3, 4]
    -after: i = 4
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -


    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 3

    -
    -
    -
    -
    -
    -
    -In [15]: -
    -
    -
    -
    print('Python', python_version())
    -
    -i = 1
    -print('before: i =', i)
    -
    -print('comprehension:', [i for i in range(5)])
    -
    -print('after: i =', i)
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 3.4.1
    -before: i = 1
    -comprehension: [0, 1, 2, 3, 4]
    -after: i = 1
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -



    -
    -
    -
    -
    -
    -
    -
    -
    -

    Comparing unorderable types

    -
    -
    -
    - - -
    -
    -
    -
    -
    -

    Another nice change in Python 3 is that a TypeError is raised as warning if we try to compare unorderable types.

    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 2

    -
    -
    -
    -
    -
    -
    -In [2]: -
    -
    -
    -
    print 'Python', python_version()
    -print "[1, 2] > 'foo' = ", [1, 2] > 'foo'
    -print "(1, 2) > 'foo' = ", (1, 2) > 'foo'
    -print "[1, 2] > (1, 2) = ", [1, 2] > (1, 2)
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 2.7.6
    -[1, 2] > 'foo' =  False
    -(1, 2) > 'foo' =  True
    -[1, 2] > (1, 2) =  False
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -


    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 3

    -
    -
    -
    -
    -
    -
    -In [16]: -
    -
    -
    -
    print('Python', python_version())
    -print("[1, 2] > 'foo' = ", [1, 2] > 'foo')
    -print("(1, 2) > 'foo' = ", (1, 2) > 'foo')
    -print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2))
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 3.4.1
    -
    -
    -
    -
    - -
    -
    -
    ----------------------------------------------------------------------------
    -TypeError                                 Traceback (most recent call last)
    -<ipython-input-16-a9031729f4a0> in <module>()
    -      1 print('Python', python_version())
    -----> 2 print("[1, 2] > 'foo' = ", [1, 2] > 'foo')
    -      3 print("(1, 2) > 'foo' = ", (1, 2) > 'foo')
    -      4 print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2))
    -
    -TypeError: unorderable types: list() > str()
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -



    -
    -
    -
    -
    -
    -
    -
    -
    -

    -
    -
    -
    -
    -
    -
    -
    -
    -

    Parsing user inputs via input()

    -
    -
    -
    - - -
    -
    -
    -
    -
    -

    Fortunately, the input() function was fixed in Python 3 so that it always stores the user inputs as str objects. In order to avoid the dangerous behavior in Python 2 to read in other types than strings, we have to use raw_input() instead.

    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 2

    -
    -
    -
    -
    -
    -
    -
    -
    -
    Python 2.7.6 
    -[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
    -Type "help", "copyright", "credits" or "license" for more information.
    -
    ->>> my_input = input('enter a number: ')
    -
    -enter a number: 123
    -
    ->>> type(my_input)
    -<type 'int'>
    -
    ->>> my_input = raw_input('enter a number: ')
    -
    -enter a number: 123
    -
    ->>> type(my_input)
    -<type 'str'>
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -


    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 3

    -
    -
    -
    -
    -
    -
    -
    -
    -
    Python 3.4.1 
    -[GCC 4.2.1 (Apple Inc. build 5577)] on darwin
    -Type "help", "copyright", "credits" or "license" for more information.
    -
    ->>> my_input = input('enter a number: ')
    -
    -enter a number: 123
    -
    ->>> type(my_input)
    -<class 'str'>
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -



    -
    -
    -
    -
    -
    -
    -
    -
    -

    Returning iterable objects instead of lists

    -
    -
    -
    - - -
    -
    -
    -
    -
    -

    As we have already seen in the xrange section, some functions and methods return iterable objects in Python 3 now - instead of lists in Python 2.

    -

    Since we usually iterate over those only once anyway, I think this change makes a lot of sense to save memory. However, it is also possible - in contrast to generators - to iterate over those multiple times if needed, it is aonly not so efficient.

    -

    And for those cases where we really need the list-objects, we can simply convert the iterable object into a list via the list() function.

    -
    -
    -
    -
    -
    -
    -
    -
    -

    Python 2

    -
    -
    -
    -
    -
    -
    -In [2]: -
    -
    -
    -
    print 'Python', python_version() 
    -
    -print range(3) 
    -print type(range(3))
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 2.7.6
    -[0, 1, 2]
    -<type 'list'>
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -

    Python 3

    -
    -
    -
    -
    -
    -
    -In [7]: -
    -
    -
    -
    print('Python', python_version())
    -
    -print(range(3))
    -print(type(range(3)))
    -print(list(range(3)))
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -Python 3.4.1
    -range(0, 3)
    -<class 'range'>
    -[0, 1, 2]
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -


    -
    -
    -
    -
    -
    -
    -
    -
    -

    Some more commonly used functions and methods that don't return lists anymore in Python 3:

    -
      -
    • zip()

    • -
    • map()

    • -
    • filter()

    • -
    • dictionary's .keys() method

    • -
    • dictionary's .values() method

    • -
    • dictionary's .items() method

    • -
    -
    -
    -
    -
    -
    -
    -
    -
    -



    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    - - - -
    -
    -
    -In []: -
    -
    -
    -
     
    -
    - -
    -
    -
    - -
    -
    -
    - - diff --git a/tutorials/key_differences_between_python_2_and_3.md b/tutorials/key_differences_between_python_2_and_3.md deleted file mode 100644 index 972e667..0000000 --- a/tutorials/key_differences_between_python_2_and_3.md +++ /dev/null @@ -1,416 +0,0 @@ -[Sebastian Raschka](http://sebastianraschka.com) -last updated: 05/24/2014 - -
    - -**This is a subsection of ["A collection of not-so-obvious Python stuff you should know!"](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/not_so_obvious_python_stuff.ipynb?create=1)** - - - -
    - -## Key differences between Python 2 and 3 -
    - -There are some good articles already that are summarizing the differences between Python 2 and 3, e.g., - -- [https://wiki.python.org/moin/Python2orPython3](https://wiki.python.org/moin/Python2orPython3) - -- [https://docs.python.org/3.0/whatsnew/3.0.html](https://docs.python.org/3.0/whatsnew/3.0.html) - -- [http://python3porting.com/differences.html](http://python3porting.com/differences.html) - -- [https://docs.python.org/3/howto/pyporting.html](https://docs.python.org/3/howto/pyporting.html) - -etc. - -But it might be still worthwhile, especially for Python newcomers, to take a look at some of those! -(Note: the the code was executed in Python 3.4.0 and Python 2.7.5 and copied from interactive shell sessions.) - - - -
    - -### Overview - Key differences between Python 2 and 3 - - - - -- [Unicode](#unicode) -- [The print statement](#print) -- [Integer division](#integer_div) -- [xrange()](#xrange) -- [Raising exceptions](#raising_exceptions) -- [Handling exceptions](#handling_exceptions) -- [next() function and .next() method](#next_next) -- [Loop variables and leaking into the global scope](#loop_leak) -- [Comparing unorderable types](#compare_unorder) - -
    -
    - - - -
    -
    - -### Unicode... - -[[back to Python 2.x vs 3.x overview](#py23_overview)] - - -####- Python 2: -We have ASCII `str()` types, separate `unicode()`, but no `byte` type -####- Python 3: -Now, we finally have Unicode (utf-8) `str`ings, and 2 byte classes: `byte` and `bytearray`s - -
    - -
    #############
    -# Python 2
    -#############
    -
    ->>> type(unicode('is like a python3 str()'))
    -<type 'unicode'>
    -
    ->>> type(b'byte type does not exist')
    -<type 'str'>
    -
    ->>> 'they are really' + b' the same'
    -'they are really the same'
    -
    ->>> type(bytearray(b'bytearray oddly does exist though'))
    -<type 'bytearray'>
    -
    -#############
    -# Python 3
    -#############
    -
    ->>> print('strings are now utf-8 \u03BCnico\u0394é!')
    -strings are now utf-8 μnicoΔé!
    -
    -
    ->>> type(b' and we have byte types for storing data')
    -<class 'bytes'>
    -
    ->>> type(bytearray(b'but also bytearrays for those who prefer them over strings'))
    -<class 'bytearray'>
    -
    ->>> 'string' + b'bytes for data'
    -Traceback (most recent call last):s
    -  File "<stdin>", line 1, in <module>
    -TypeError: Can't convert 'bytes' object to str implicitly
    -
    - - - -
    -
    - -### The print statement - -[[back to Python 2.x vs 3.x overview](#py23_overview)] - -Very trivial, but this change makes sense, Python 3 now only accepts `print`s with proper parentheses - just like the other function calls ... - -
    -
    # Python 2
    ->>> print 'Hello, World!'
    -Hello, World!
    ->>> print('Hello, World!')
    -Hello, World!
    -
    -# Python 3
    ->>> print('Hello, World!')
    -Hello, World!
    ->>> print 'Hello, World!'
    -  File "<stdin>", line 1
    -    print 'Hello, World!'
    -                        ^
    -SyntaxError: invalid syntax
    -
    - -
    - -And if we want to print the output of 2 consecutive print functions on the same line, you would use a comma in Python 2, and a `end=""` in Python 3: - -
    - -
    # Python 2
    ->>> print "line 1", ; print 'same line'
    -line 1 same line
    -
    -# Python 3
    ->>> print("line 1", end="") ; print (" same line")
    -line 1 same line
    -
    - - - -
    -
    - -### Integer division - -[[back to Python 2.x vs 3.x overview](#py23_overview)] - - -This is a pretty dangerous thing if you are porting code, or executing Python 3 code in Python 2 since the change in integer-division behavior can often go unnoticed. -So, I still tend to use a `float(3)/2` or `3/2.0` instead of a `3/2` in my Python 3 scripts to save the Python 2 guys some trouble ... (PS: and vice versa, you can `from __future__ import division` in your Python 2 scripts). - -
    -
    # Python 2
    ->>> 3 / 2
    -1
    ->>> 3 // 2
    -1
    ->>> 3 / 2.0
    -1.5
    ->>> 3 // 2.0
    -1.0
    -
    -# Python 3
    ->>> 3 / 2
    -1.5
    ->>> 3 // 2
    -1
    ->>> 3 / 2.0
    -1.5
    ->>> 3 // 2.0
    -1.0
    -
    - - - -
    -
    - -###`xrange()` - -[[back to Python 2.x vs 3.x overview](#py23_overview)] - - -`xrange()` was pretty popular in Python 2.x if you wanted to create an iterable object. The behavior was quite similar to a generator ('lazy evaluation'), but you could iterate over it infinitely. The advantage was that it was generally faster than `range()` (e.g., in a for-loop) - not if you had to iterate over the list multiple times, since the generation happens every time from scratch! -In Python 3, the `range()` was implemented like the `xrange()` function so that a dedicated `xrange()` function does not exist anymore. - - -
    # Python 2
    -> python -m timeit 'for i in range(1000000):' ' pass'
    -10 loops, best of 3: 66 msec per loop
    -
    -    > python -m timeit 'for i in xrange(1000000):' ' pass'
    -10 loops, best of 3: 27.8 msec per loop
    -
    -# Python 3
    -> python3 -m timeit 'for i in range(1000000):' ' pass'
    -10 loops, best of 3: 51.1 msec per loop
    -
    -> python3 -m timeit 'for i in xrange(1000000):' ' pass'
    -Traceback (most recent call last):
    -  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py", line 292, in main
    -    x = t.timeit(number)
    -  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py", line 178, in timeit
    -    timing = self.inner(it, self.timer)
    -  File "<timeit-src>", line 6, in inner
    -    for i in xrange(1000000):
    -NameError: name 'xrange' is not defined
    -
    - - - -
    -
    - -### Raising exceptions - -[[back to Python 2.x vs 3.x overview](#py23_overview)] - - - -Where Python 2 accepts both notations, the 'old' and the 'new' way, Python 3 chokes (and raises a `SyntaxError` in turn) if we don't enclose the exception argument in parentheses: - -
    -
    # Python 2
    ->>> raise IOError, "file error"
    -Traceback (most recent call last):
    -  File "<stdin>", line 1, in <module>
    -IOError: file error
    ->>> raise IOError("file error")
    -Traceback (most recent call last):
    -  File "<stdin>", line 1, in <module>
    -IOError: file error
    -
    -    
    -# Python 3    
    ->>> raise IOError, "file error"
    -  File "<stdin>", line 1
    -    raise IOError, "file error"
    -                 ^
    -SyntaxError: invalid syntax
    ->>> raise IOError("file error")
    -Traceback (most recent call last):
    -  File "<stdin>", line 1, in <module>
    -OSError: file error
    -
    - - - -
    -
    - -### Handling exceptions - -[[back to Python 2.x vs 3.x overview](#py23_overview)] - - - -Also the handling of exceptions has slightly changed in Python 3. Now, we have to use the `as` keyword! - -
    # Python 2
    ->>> try:
    -...     blabla
    -... except NameError, err:
    -...     print err, '--> our error msg'
    -... 
    -name 'blabla' is not defined --> our error msg
    -
    -# Python 3
    ->>> try:
    -...     blabla
    -... except NameError as err:
    -...     print(err, '--> our error msg')
    -... 
    -name 'blabla' is not defined --> our error msg
    -
    - - - -
    -
    - -### The `next()` function and `.next()` method - -[[back to Python 2.x vs 3.x overview](#py23_overview)] - -Where you can use both function and method in Python 2.7.5, the `next()` function is all that remain in Python 3! - -
    # Python 2
    ->>> my_generator = (letter for letter in 'abcdefg')
    ->>> my_generator.next()
    -'a'
    ->>> next(my_generator)
    -'b'
    -
    -# Python 3
    ->>> my_generator = (letter for letter in 'abcdefg')
    ->>> next(my_generator)
    -'a'
    ->>> my_generator.next()
    -Traceback (most recent call last):
    -  File "<stdin>", line 1, in <module>
    -AttributeError: 'generator' object has no attribute 'next'
    -
    - - - -
    -
    - -### In Python 3.x for-loop variables don't leak into the global namespace anymore - -[[back to Python 2.x vs 3.x overview](#py23_overview)] - -This goes back to a change that was made in Python 3.x and is described in [What’s New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html) as follows: - -"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope." - -
    -`[In:]` -
    from platform import python_version
    -print('This code cell was executed in Python', python_version())
    -
    -i = 1
    -print([i for i in range(5)])
    -print(i, '-> i in global')
    -
    - -
    -`[Out:]` -
    This code cell was executed in Python 3.3.5
    -[0, 1, 2, 3, 4]
    -1 -> i in global
    -
    - - -
    -
    -
    -`[In:]` -
    from platform import python_version
    -print 'This code cell was executed in Python', python_version()
    -
    -i = 1
    -print [i for i in range(5)]
    -print i, '-> i in global' 
    -
    - -
    -`[Out:]` -
    This code cell was executed in Python 2.7.6
    -[0, 1, 2, 3, 4]
    -4 -> i in global
    -
    - - - -
    -
    - -#### Python 3.x prevents us from comparing unorderable types - -[[back to Python 2.x vs 3.x overview](#py23_overview)] - -
    -`[In:]` -
    from platform import python_version
    -print 'This code cell was executed in Python', python_version()
    -
    -print [1, 2] > 'foo'
    -print (1, 2) > 'foo'
    -print [1, 2] > (1, 2)
    -
    - -
    -`[Out:]` -
    This code cell was executed in Python 2.7.6
    -False
    -True
    -False
    -
    - -
    -
    -
    - -`[In:]` -
    from platform import python_version
    -print('This code cell was executed in Python', python_version())
    -
    -print([1, 2] > 'foo')
    -print((1, 2) > 'foo')
    -print([1, 2] > (1, 2))
    -
    - -`[Out:]` -
    This code cell was executed in Python 3.3.5
    ----------------------------------------------------------------------------
    -TypeError                                 Traceback (most recent call last)
    -<ipython-input-3-1d774c677f73> in <module>()
    -      2 print('This code cell was executed in Python', python_version())
    -      3 
    -----> 4 [1, 2] > 'foo'
    -      5 (1, 2) > 'foo'
    -      6 [1, 2] > (1, 2)
    -
    -TypeError: unorderable types: list() > str()
    -
    diff --git a/tutorials/scope_resolution_legb_rule.md b/tutorials/scope_resolution_legb_rule.md deleted file mode 100644 index 6722604..0000000 --- a/tutorials/scope_resolution_legb_rule.md +++ /dev/null @@ -1,579 +0,0 @@ -# A Beginner's Guide to Python's Namespaces, Scope Resolution, and the LEGB Rule # - - -This is a short tutorial about Python's namespaces and the scope resolution for variable names using the LEGB-rule. The following sections will provide short example code blocks that should illustrate the problem followed by short explanations. You can simply read this tutorial from start to end, but I'd like to encourage you to execute the code snippets - you can either copy & paste them, or for your convenience, simply [download it as IPython notebook](https://raw.githubusercontent.com/rasbt/python_reference/master/tutorials/scope_resolution_legb_rule.ipynb). - -
    -
    - -## Objectives -- Namespaces and scopes - where does Python look for variable names? -- Can we define/reuse variable names for multiple objects at the same time? -- In which order does Python search different namespaces for variable names? - -
    -
    - -## Sections -- [Introduction to namespaces and scopes](#introduction) -- [1. LG - Local and Global scopes](#section_1) -- [2. LEG - Local, Enclosed, and Global scope](#section_2) -- [3. LEGB - Local, Enclosed, Global, Built-in](#section_3) -- [Self-assessment exercise](#assessment) -- [Conclusion](#conclusion) -- [Solutions](#solutions) -- [Warning: For-loop variables "leaking" into the global namespace](#for_loop) - - -
    -
    - -##Introduction to Namespaces and Scopes - -
    - -###Namespaces -
    - -Roughly speaking, namespaces are just containers for mapping names to objects. As you might have already heard, everything in Python - literals, lists, dictionaries, functions, classes, etc. - is an object. -Such a "name-to-object" mapping allows us to access an object by a name that we've assigned to it. E.g., if we make a simple string assignment via `a_string = "Hello string"`, we created a reference to the `"Hello string"` object, and henceforth we can access via its variable name `a_string`. - -We can picture a namespace as a Python dictionary structure, where the dictionary keys represent the names and the dictionary values the object itself (and this is also how namespaces are currently implemented in Python), e.g., - -
    a_namespace = {'name_a':object_1, 'name_b':object_2, ...}
    - - -Now, the tricky part is that we have multiple independent namespaces in Python, and names can be reused for different namespaces (only the objects are unique, for example: - -
    a_namespace = {'name_a':object_1, 'name_b':object_2, ...}
    -b_namespace = {'name_a':object_3, 'name_b':object_4, ...}
    - -For example, every time we call a `for-loop` or define a function, it will create its own namespace. Namespaces also have different levels of hierarchy (the so-called "scope"), which we will discuss in more detail in the next section. - -
    -
    - -### Scope - - -In the section above, we have learned that namespaces can exist independently from each other and that they are structured in a certain hierarchy, which brings us to the concept of "scope". The "scope" in Python defines the "hierarchy level" in which we search namespaces for certain "name-to-object" mappings. -For example, let us consider the following code: - -`Input:` -
    i = 1
    -
    -def foo():
    -    i = 5
    -    print(i, 'in foo()')
    -print(i, 'global')
    -
    -foo()
    -
    - -`Output:` -
    1 global
    -5 in foo()
    -
    - -
    -
    -Here, we just defined the variable name `i` twice, once on the `foo` function. - -- `foo_namespace = {'i':object_3, ...}` -- `global_namespace = {'i':object_1, 'name_b':object_2, ...}` - -So, how does Python now which namespace it has to search if we want to print the value of the variable `i`? This is where Python's LEGB-rule comes into play, which we will discuss in the next section. - -
    -### Tip: -If we want to print out the dictionary mapping of the global and local variables, we can use the -the functions `global()` and `local() - -`Input:` -
    #print(globals()) # prints global namespace
    -#print(locals()) # prints local namespace
    -
    -glob = 1
    -
    -def foo():
    -    loc = 5
    -    print('loc in foo():', 'loc' in locals())
    -
    -foo()
    -print('loc in global:', 'loc' in globals())    
    -print('glob in global:', 'foo' in globals())
    -
    - -`Output:` -
    loc in foo(): True
    -loc in global: False
    -glob in global: True
    -
    - -
    -
    - -### Scope resolution for variable names via the LEGB rule. - -We have seen that multiple namespaces can exist independently from each other and that they can contain the same variable names on different hierachy levels. The "scope" defines on which hierarchy level Python searches for a particular "variable name" for its associated object. Now, the next question is: "In which order does Python search the different levels of namespaces before it finds the name-to-object' mapping?" -To answer is: It uses the LEGB-rule, which stands for - -**Local -> Enclosed -> Global -> Built-in**, - -where the arrows should denote the direction of the namespace-hierarchy search order. - -- *Local* can be inside a function or class method, for example. -- *Enclosed* can be its `enclosing` function, e.g., if a function is wrapped inside another function. -- *Global* refers to the uppermost level of the executing script itself, and -- *Built-in* are special names that Python reserves for itself. - -So, if a particular name:object mapping cannot be found in the local namespaces, the namespaces of the enclosed scope are being searched next. If the search in the enclosed scope is unsuccessful, too, Python moves on to the global namespace, and eventually, it will search the global namespaces (side note: if a name cannot found in any of the namespaces, a *NameError* will is raised). - -**Note**: -Namespaces can also be further nested, for example if we import modules, or if we are defining new classes. In those cases we have to use prefixes to access those nested namespaces. Let me illustrate this concept in the following code block: - -`Input:` -
    import numpy
    -import math
    -import scipy
    -
    -print(math.pi, 'from the math module')
    -print(numpy.pi, 'from the numpy package')
    -print(scipy.pi, 'from the scipy package')
    -
    - -`Output:` -
    3.141592653589793 from the math module
    -3.141592653589793 from the numpy package
    -3.141592653589793 from the scipy package
    -
    -
    -
    -(This is also why we have to be careful if we import modules via "`from a_module import *`", since it loads the variable names into the global namespace and could potentially overwrite already existing variable names) - -
    - -
    -
    -![LEGB figure](../Images/scope_resolution_1.png) -
    -
    - - -
    -
    - -## 1. LG - Local and Global scopes - - -**Example 1.1** -As a warm-up exercise, let us first forget about the enclosed (E) and built-in (B) scopes in the LEGB rule and only take a look at LG - the local and global scopes. -What does the following code print? - -
    a_var = 'global variable'
    -
    -def a_func():
    -    print(a_var, '[ a_var inside a_func() ]')
    -
    -a_func()
    -print(a_var, '[ a_var outside a_func() ]')
    -
    - -**a)** -
    raises an error
    - -**b)** -
    -global value [ a_var outside a_func() ]
    - -**c)** -
    global value [ a_var in a_func() ]  
    -global value [ a_var outside a_func() ]
    - -[[go to solution](#solutions)] - -### Here is why: - -We call `a_func()` first, which is supposed to print the value of `a_var`. According to the LEGB rule, the function will first look in its own local scope (L) if `a_var` is defined there. Since `a_func()` does not define its own `a_var`, it will look one-level above in the global scope (G) in which `a_var` has been defined previously. -
    -
    - - -**Example 1.2** -Now, let us define the variable `a_var` in the global and the local scope. -Can you guess what the following code will produce? - -
    a_var = 'global value'
    -
    -def a_func():
    -    a_var = 'local value'
    -    print(a_var, '[ a_var inside a_func() ]')
    -
    -a_func()
    -print(a_var, '[ a_var outside a_func() ]')
    -
    - -**a)** -
    raises an error
    - -**b)** -
    local value [ a_var in a_func() ]
    -global value [ a_var outside a_func() ]
    - -**c)** -
    global value [ a_var in a_func() ]  
    -global value [ a_var outside a_func() ]
    - - -[[go to solution](#solutions)] - -### Here is why: - -When we call `a_func()`, it will first look in its local scope (L) for `a_var`, since `a_var` is defined in the local scope of `a_func`, its assigned value `local variable` is printed. Note that this doesn't affect the global variable, which is in a different scope. - -
    -However, it is also possible to modify the global by, e.g., re-assigning a new value to it if we use the global keyword as the following example will illustrate: - -`Input:` -
    a_var = 'global value'
    -
    -def a_func():
    -    global a_var
    -    a_var = 'local value'
    -    print(a_var, '[ a_var inside a_func() ]')
    -
    -print(a_var, '[ a_var outside a_func() ]')
    -a_func()
    -print(a_var, '[ a_var outside a_func() ]')
    -
    - -`Output:` -
    **a)**
    -<pre>raises an error</pre>
    -
    -**b)** 
    -<pre>
    -global value [ a_var outside a_func() ]</pre>
    -
    -**c)** 
    -<pre>global value [ a_var in a_func() ]  
    -global value [ a_var outside a_func() ]</pre>
    -
    - -But we have to be careful about the order: it is easy to raise an `UnboundLocalError` if we don't explicitly tell Python that we want to use the global scope and try to modify a variable's value (remember, the right side of an assignment operation is executed first): - -`Input:` -
    a_var = 1
    -
    -def a_func():
    -    a_var = a_var + 1
    -    print(a_var, '[ a_var inside a_func() ]')
    -
    -print(a_var, '[ a_var outside a_func() ]')
    -a_func()
    -
    -`Output:` -
    ---------------------------------------------------------------------------
    -UnboundLocalError                         Traceback (most recent call last)
    -<ipython-input-4-a6cdd0ee9a55> in <module>()
    -      6 
    -      7 print(a_var, '[ a_var outside a_func() ]')
    -----> 8 a_func()
    -
    -<ipython-input-4-a6cdd0ee9a55> in a_func()
    -      2 
    -      3 def a_func():
    -----> 4     a_var = a_var + 1
    -      5     print(a_var, '[ a_var inside a_func() ]')
    -      6 
    -
    -UnboundLocalError: local variable 'a_var' referenced before assignment
    -
    -1 [ a_var outside a_func() ]
    -
    - -
    -
    - - -
    -
    - -## 2. LEG - Local, Enclosed, and Global scope - - - -Now, let us introduce the concept of the enclosed (E) scope. Following the order "Local -> Enclosed -> Global", can you guess what the following code will print? - - -**Example 2.1** - -
    a_var = 'global value'
    -
    -def outer():
    -    a_var = 'enclosed value'
    -    
    -    def inner():
    -        a_var = 'local value'
    -        print(a_var)
    -    
    -    inner()
    -
    -outer()
    -
    -**a)** -
    global value
    - -**b)** -
    enclosed value
    - -**c)** -
    local value
    - -[[go to solution](#solutions)] - -### Here is why: - -Let us quickly recapitulate what we just did: We called `outer()`, which defined the variable `a_var` locally (next to an existing `a_var` in the global scope). Next, the `outer()` function called `inner()`, which in turn defined a variable with of name `a_var` as well. The `print()` function inside `inner()` searched in the local scope first (L->E) before it went up in the scope hierarchy, and therefore it printed the value that was assigned in the local scope. - -Similar to the concept of the `global` keyword, which we have seen in the section above, we can use the keyword `nonlocal` inside the inner function to explicitly access a variable from the outer (enclosed) scope in order to modify its value. -Note that the `nonlocal` keyword was added in Python 3.x and is not implemented in Python 2.x (yet). - -`Input:` -
    a_var = 'global value'
    -
    -def outer():
    -       a_var = 'local value'
    -       print('outer before:', a_var)
    -       def inner():
    -           nonlocal a_var
    -           a_var = 'inner value'
    -           print('in inner():', a_var)
    -       inner()
    -       print("outer after:", a_var)
    -outer()
    -
    -`Output:` -
    outer before: local value
    -in inner(): inner value
    -outer after: inner value
    -
    - - -
    -
    -
    - - -## 3. LEGB - Local, Enclosed, Global, Built-in - -To wrap up the LEGB rule, let us come to the built-in scope. Here, we will define our "own" length-function, which happens to bear the same name as the in-built `len()` function. What outcome do you expect if we'd execute the following code? - - - -**Example 3** - -
    a_var = 'global variable'
    -
    -def len(in_var):
    -    print('called my len() function')
    -    l = 0
    -    for i in in_var:
    -        l += 1
    -    return l
    -
    -def a_func(in_var):
    -    len_in_var = len(in_var)
    -    print('Input variable is of length', len_in_var)
    -
    -a_func('Hello, World!')
    -
    - -**a)** -
    raises an error (conflict with in-built `len()` function)
    - -**b)** -
    called my len() function
    -Input variable is of length 13
    - -**c)** -
    Input variable is of length 13
    - -[[go to solution](#solutions)] - -### Here is why: - -Since the exact same names can be used to map names to different objects - as long as the names are in different name spaces - there is no problem of reusing the name `len` to define our own length function (this is just for demonstration purposes, it is NOT recommended). As we go up in Python's L -> E -> G -> B hierarchy, the function `a_func()` finds `len()` already in the global scope first before it attempts - - - -
    -
    - -# Self-assessment exercise - -Now, after we went through a couple of exercises, let us quickly check where we are. So, one more time: What would the following code print out? - -
    a = 'global'
    -
    -def outer():
    -    
    -    def len(in_var):
    -        print('called my len() function: ', end="")
    -        l = 0
    -        for i in in_var:
    -            l += 1
    -        return l
    -    
    -    a = 'local'
    -    
    -    def inner():
    -        global len
    -        nonlocal a
    -        a += ' variable'
    -    inner()
    -    print('a is', a)
    -    print(len(a))
    -
    -outer()
    -
    -print(len(a))
    -print('a is', a)
    -
    - - -
    - -[[go to solution](#solutions)] - -# Conclusion - -I hope this short tutorial was helpful to understand the basic concept of Python's scope resolution order using the LEGB rule. I want to encourage you (as a little self-assessment exercise) to look at the code snippets again tomorrow and check if you can correctly predict all their outcomes. - -#### A rule of thumb - -In practice, **it is usually a bad idea to modify global variables inside the function scope**, since it often be the cause of confusion and weird errors that are hard to debug. -If you want to modify a global variable via a function, it is recommended to pass it as an argument and reassign the return-value. -For example: - -`Input:` -
    a_var = 2
    -
    -def a_func(some_var):
    -    return 2**3
    -
    -a_var = a_func(a_var)
    -print(a_var)
    -
    -`Output:` -
    8
    -
    - - -
    -
    -
    - -## Solutions - -In order to prevent you from unintentional spoilers, I have written the solutions in binary format. In order to display the character representation, you just need to execute the following lines of code: - -
    print('Example 1.1:', chr(int('01100011',2)))
    -
    - -[[back to example 1.1](#example1.1)] - -
    print('Example 1.2:', chr(int('01100001',2)))
    -
    - -[[back to example 1.2](#example1.2)] - -
    print('Example 2:', chr(int('01100011',2)))
    -
    - -[[back to example 2](#example2)] - -
    print('Example 3:', chr(int('01100010',2)))
    -
    - -[[back to example 3](#example3)] - -
    # Solution to the self-assessment exercise
    -sol = "000010100110111101110101011101000110010101110010001010"\
    -"0000101001001110100000101000001010011000010010000001101001011100110"\
    -"0100000011011000110111101100011011000010110110000100000011101100110"\
    -"0001011100100110100101100001011000100110110001100101000010100110001"\
    -"1011000010110110001101100011001010110010000100000011011010111100100"\
    -"1000000110110001100101011011100010100000101001001000000110011001110"\
    -"1010110111001100011011101000110100101101111011011100011101000100000"\
    -"0011000100110100000010100000101001100111011011000110111101100010011"\
    -"0000101101100001110100000101000001010001101100000101001100001001000"\
    -"0001101001011100110010000001100111011011000110111101100010011000010"\
    -"1101100"
    -
    -sol_str =''.join(chr(int(sol[i:i+8], 2)) for i in range(0, len(sol), 8))
    -for line in sol_str.split('\n'):
    -    print(line)
    -
    - -[[back to self-assessment exercise](#assessment)] - - - - -
    -
    - - -## Warning: For-loop variables "leaking" into the global namespace - -In contrast to some other programming languages, `for-loops` will use the scope they exist in and leave their defined loop-variable behind. - -`Input:` -
    for a in range(5):
    -    if a == 4:
    -        print(a, '-> a in for-loop')
    -print(a, '-> a in global')
    -
    -`Output:` -
    4 -> a in for-loop
    -4 -> a in global
    -
    - -**This also applies if we explicitely defined the `for-loop` variable in the global namespace before!** In this case it will rebind the existing variable: - -`Input:` -
    b = 1
    -for b in range(5):
    -    if b == 4:
    -        print(b, '-> b in for-loop')
    -print(b, '-> b in global')
    -
    - -`Output:` -
    4 -> b in for-loop
    -4 -> b in global
    -
    - -However, in **Python 3.x**, we can use closures to prevent the for-loop variable to cut into the global namespace. Here is an example (exectuted in Python 3.4): - -`Input:` -
    i = 1
    -print([i for i in range(5)])
    -print(i, '-> i in global')
    -
    -`Output:` -
    [0, 1, 2, 3, 4]
    -1 -> i in global
    -
    - -Why did I mention "Python 3.x"? Well, as it happens, the same code executed in Python 2.x would print: - -
    -4 -> i in global
    -
    - -This goes back to a change that was made in Python 3.x and is described in [What’s New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html) as follows: - -"List comprehensions no longer support the syntactic form `[... for var in item1, item2, ...]`. Use `[... for var in (item1, item2, ...)]` instead. Also note that list comprehensions have different semantics: they are closer to syntactic sugar for a generator expression inside a `list()` constructor, and in particular the loop control variables are no longer leaked into the surrounding scope." \ No newline at end of file diff --git a/tutorials/table_of_contents_ipython.md b/tutorials/table_of_contents_ipython.md deleted file mode 100644 index 9089e1e..0000000 --- a/tutorials/table_of_contents_ipython.md +++ /dev/null @@ -1,125 +0,0 @@ -[Sebastian Raschka](http://sebastianraschka.com) -last updated: 05/18/2014 - -- [Link to this IPython Notebook on Github](https://github.com/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day4_2_cython_numba_parakeet.ipynb) -- [Link to the GitHub Repository One-Python-benchmark-per-day](https://github.com/rasbt/One-Python-benchmark-per-day) - - -
    -I would be happy to hear your comments and suggestions. -Please feel free to drop me a note via -[twitter](https://twitter.com/rasbt), [email](mailto:bluewoodtree@gmail.com), or [google+](https://plus.google.com/118404394130788869227). -
    - - - -# Creating a table of contents with internal links in IPython Notebooks and Markdown documents - -**Many people have asked me how I create the table of contents with internal links for my IPython Notebooks and Markdown documents on GitHub. -Well, no (IPython) magic is involved, it is just a little bit of HTML, but I thought it might be worthwhile to write this little how-to tutorial.** - -![example table](../Images/ipython_links_ex.png) - -
    -
    -For example, [click this link](#bottom) to jump to the bottom of the page. -
    -
    - -
    -
    - -## The two components to create an internal link - -So, how does it work? Basically, all you need are those two components: -1. the destination -2. an internal hyperlink to the destination - - -![two components](../Images/ipython_links_overview.png) - -
    -###1. The destination - -To define the destination (i.e., the section on the page or the cell you want to jump to), you just need to insert an empty HTML anchor tag and give it an **`id`**, -e.g., **``** - -This anchor tag will be invisible if you render it as Markdown in the IPython Notebook. -Note that it would also work if we use the **`name`** attribute instead of **`id`**, but since the **`name`** attribute is not supported by HTML5 anymore, I would suggest to just use the **`id`** attribute, which is also shorter to type. - -
    -###2. The internal hyperlink - -Now we have to create the hyperlink to the **``** anchor tag that we just created. -We can either do this in ye goode olde HTML where we put a fragment identifier in form of a hash mark (`#`) in front of the name, -for example, **`Link to the destination'`** - -Or alternatively, we can just use the slightly more convenient Markdown syntax: -**`[Link to the destination](#the_destination)`** - -**That's all!** - -
    -
    - -## One more piece of advice - -Of course it would make sense to place the empty anchor tags for you table of contents just on top of each cell that contains a heading. -E.g., - -`` -`###Section 2` -`some text ...` - - -And I did this for a very long time ... until I figured out that it wouldn't render the Markdown properly if you convert the IPython Notebook into HTML (for example, for printing via the print preview option). - -But instead of - - -###Section 2 - -it would be rendered as - - -`###Section 2` - -which is certainly not what we want (note that it looks normal in the IPython Notebook, but not in the converted HTML version). So my favorite remedy would be to put the `id`-anchor tag into a separate cell just above the section, ideally with some line breaks for nicer visuals. - -![img of format problem](../Images/ipython_links_format.png) - -
    -
    - -### Solution 1: id-anchor tag in a separate cell - -![img of format problem](../Images/ipython_links_remedy.png) - -
    -
    -
    -
    -
    - - -### Solution 2: using header cells - - -To define the hyperlink anchor tag to this "header cell" is just the text content of the "header cell" connected by dashes. E.g., - -![header cell](../Images/ipython_table_header.png) - -`[link to another section](#Another-section)` -
    -
    -
    -
    -
    -
    - -[[Click this link and jump to the top of the page](#top)] - -You can't see it, but this cell contains a -`` -anchor tag just below this text. - From 0a567380c9781a228a15bc516639c2552c58c574 Mon Sep 17 00:00:00 2001 From: rasbt Date: Wed, 27 Jan 2016 22:57:02 -0500 Subject: [PATCH 231/248] typo fix in legb tutorial --- tutorials/scope_resolution_legb_rule.ipynb | 2263 ++++++++++---------- 1 file changed, 1137 insertions(+), 1126 deletions(-) diff --git a/tutorials/scope_resolution_legb_rule.ipynb b/tutorials/scope_resolution_legb_rule.ipynb index 93f01a2..18ff06c 100644 --- a/tutorials/scope_resolution_legb_rule.ipynb +++ b/tutorials/scope_resolution_legb_rule.ipynb @@ -1,1148 +1,1159 @@ { - "metadata": { - "name": "", - "signature": "sha256:b33e0c5563d80d68580ea6ce62ae2703856ccde40aec8ff9fb1364ac70d70521" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ + "cells": [ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[Sebastian Raschka](http://www.sebastianraschka.com) \n", - "\n", - "- [Link to the containing GitHub Repository](https://github.com/rasbt/python_reference)\n", - "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb)\n" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%load_ext watermark" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 1 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "%watermark -a 'Sebastian Raschka' -v -d" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Sebastian Raschka 04/07/2014 \n", - "\n", - "CPython 3.3.5\n", - "IPython 2.1.0\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[More information](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/ipython_magic/watermark.ipynb) about the `watermark` magic command extension." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "I would be happy to hear your comments and suggestions. \n", - "Please feel free to drop me a note via\n", - "[twitter](https://twitter.com/rasbt), [email](mailto:bluewoodtree@gmail.com), or [google+](https://plus.google.com/+SebastianRaschka).\n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#A beginner's guide to Python's namespaces, scope resolution, and the LEGB rule" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is a short tutorial about Python's namespaces and the scope resolution for variable names using the LEGB-rule. The following sections will provide short example code blocks that should illustrate the problem followed by short explanations. You can simply read this tutorial from start to end, but I'd like to encourage you to execute the code snippets - you can either copy & paste them, or for your convenience, simply [download this IPython notebook](https://raw.githubusercontent.com/rasbt/python_reference/master/tutorials/scope_resolution_legb_rule.ipynb)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Sections " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "- [Introduction to namespaces and scopes](#introduction) \n", - "- [1. LG - Local and Global scopes](#section_1) \n", - "- [2. LEG - Local, Enclosed, and Global scope](#section_2) \n", - "- [3. LEGB - Local, Enclosed, Global, Built-in](#section_3) \n", - "- [Self-assessment exercise](#assessment)\n", - "- [Conclusion](#conclusion) \n", - "- [Solutions](#solutions)\n", - "- [Warning: For-loop variables \"leaking\" into the global namespace](#for_loop)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Objectives\n", - "- Namespaces and scopes - where does Python look for variable names?\n", - "- Can we define/reuse variable names for multiple objects at the same time?\n", - "- In which order does Python search different namespaces for variable names?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Introduction to namespaces and scopes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Namespaces" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Roughly speaking, namespaces are just containers for mapping names to objects. As you might have already heard, everything in Python - literals, lists, dictionaries, functions, classes, etc. - is an object. \n", - "Such a \"name-to-object\" mapping allows us to access an object by a name that we've assigned to it. E.g., if we make a simple string assignment via `a_string = \"Hello string\"`, we created a reference to the `\"Hello string\"` object, and henceforth we can access via its variable name `a_string`.\n", - "\n", - "We can picture a namespace as a Python dictionary structure, where the dictionary keys represent the names and the dictionary values the object itself (and this is also how namespaces are currently implemented in Python), e.g., \n", - "\n", - "
    a_namespace = {'name_a':object_1, 'name_b':object_2, ...}
    \n", - "\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, the tricky part is that we have multiple independent namespaces in Python, and names can be reused for different namespaces (only the objects are unique, for example:\n", - "\n", - "
    a_namespace = {'name_a':object_1, 'name_b':object_2, ...}\n",
    -      "b_namespace = {'name_a':object_3, 'name_b':object_4, ...}
    \n", - "\n", - "For example, everytime we call a `for-loop` or define a function, it will create its own namespace. Namespaces also have different levels of hierarchy (the so-called \"scope\"), which we will discuss in more detail in the next section." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Scope" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the section above, we have learned that namespaces can exist independently from each other and that they are structured in a certain hierarchy, which brings us to the concept of \"scope\". The \"scope\" in Python defines the \"hierarchy level\" in which we search namespaces for certain \"name-to-object\" mappings. \n", - "For example, let us consider the following code:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "i = 1\n", - "\n", - "def foo():\n", - " i = 5\n", - " print(i, 'in foo()')\n", - "\n", - "print(i, 'global')\n", - "\n", - "foo()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1 global\n", - "5 in foo()\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here, we just defined the variable name `i` twice, once on the `foo` function." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- `foo_namespace = {'i':object_3, ...}` \n", - "- `global_namespace = {'i':object_1, 'name_b':object_2, ...}`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "So, how does Python know which namespace it has to search if we want to print the value of the variable `i`? This is where Python's LEGB-rule comes into play, which we will discuss in the next section." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Tip:\n", - "If we want to print out the dictionary mapping of the global and local variables, we can use the\n", - "the functions `global()` and `local()`" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "#print(globals()) # prints global namespace\n", - "#print(locals()) # prints local namespace\n", - "\n", - "glob = 1\n", - "\n", - "def foo():\n", - " loc = 5\n", - " print('loc in foo():', 'loc' in locals())\n", - "\n", - "foo()\n", - "print('loc in global:', 'loc' in globals()) \n", - "print('glob in global:', 'foo' in globals())" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "loc in foo(): True\n", - "loc in global: False\n", - "glob in global: True\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Scope resolution for variable names via the LEGB rule." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We have seen that multiple namespaces can exist independently from each other and that they can contain the same variable names on different hierachy levels. The \"scope\" defines on which hierarchy level Python searches for a particular \"variable name\" for its associated object. Now, the next question is: \"In which order does Python search the different levels of namespaces before it finds the name-to-object' mapping?\" \n", - "To answer is: It uses the LEGB-rule, which stands for\n", - "\n", - "**Local -> Enclosed -> Global -> Built-in**, \n", - "\n", - "where the arrows should denote the direction of the namespace-hierarchy search order. \n", - "\n", - "- *Local* can be inside a function or class method, for example. \n", - "- *Enclosed* can be its `enclosing` function, e.g., if a function is wrapped inside another function. \n", - "- *Global* refers to the uppermost level of the executing script itself, and \n", - "- *Built-in* are special names that Python reserves for itself. \n", - "\n", - "So, if a particular name:object mapping cannot be found in the local namespaces, the namespaces of the enclosed scope are being searched next. If the search in the enclosed scope is unsuccessful, too, Python moves on to the global namespace, and eventually, it will search the built-in namespace (side note: if a name cannot found in any of the namespaces, a *NameError* will is raised).\n", - "\n", - "**Note**: \n", - "Namespaces can also be further nested, for example if we import modules, or if we are defining new classes. In those cases we have to use prefixes to access those nested namespaces. Let me illustrate this concept in the following code block:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import numpy\n", - "import math\n", - "import scipy\n", - "\n", - "print(math.pi, 'from the math module')\n", - "print(numpy.pi, 'from the numpy package')\n", - "print(scipy.pi, 'from the scipy package')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "3.141592653589793 from the math module\n", - "3.141592653589793 from the numpy package\n", - "3.141592653589793 from the scipy package\n" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "(This is also why we have to be careful if we import modules via \"`from a_module import *`\", since it loads the variable names into the global namespace and could potentially overwrite already existing variable names)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "![LEGB figure](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/scope_resolution_1.png)\n", - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. LG - Local and Global scopes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Example 1.1** \n", - "As a warm-up exercise, let us first forget about the enclosed (E) and built-in (B) scopes in the LEGB rule and only take a look at LG - the local and global scopes. \n", - "What does the following code print?" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_var = 'global variable'\n", - "\n", - "def a_func():\n", - " print(a_var, '[ a_var inside a_func() ]')\n", - "\n", - "a_func()\n", - "print(a_var, '[ a_var outside a_func() ]')" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**a)**\n", - "
    raises an error
    \n", - "\n", - "**b)** \n", - "
    \n",
    -      "global value [ a_var outside a_func() ]
    \n", - "\n", - "**c)** \n", - "
    global value [ a_var inside a_func() ]  \n",
    -      "global value [ a_var outside a_func() ]
    \n", - "\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[go to solution](#solutions)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Here is why:\n", - "\n", - "We call `a_func()` first, which is supposed to print the value of `a_var`. According to the LEGB rule, the function will first look in its own local scope (L) if `a_var` is defined there. Since `a_func()` does not define its own `a_var`, it will look one-level above in the global scope (G) in which `a_var` has been defined previously.\n", - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Example 1.2** \n", - "Now, let us define the variable `a_var` in the global and the local scope. \n", - "Can you guess what the following code will produce?" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_var = 'global value'\n", - "\n", - "def a_func():\n", - " a_var = 'local value'\n", - " print(a_var, '[ a_var inside a_func() ]')\n", - "\n", - "a_func()\n", - "print(a_var, '[ a_var outside a_func() ]')" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 2 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**a)**\n", - "
    raises an error
    \n", - "\n", - "**b)** \n", - "
    local value [ a_var inside a_func() ]\n",
    -      "global value [ a_var outside a_func() ]
    \n", - "\n", - "**c)** \n", - "
    global value [ a_var inside a_func() ]  \n",
    -      "global value [ a_var outside a_func() ]
    \n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[go to solution](#solutions)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Here is why:\n", - "\n", - "When we call `a_func()`, it will first look in its local scope (L) for `a_var`, since `a_var` is defined in the local scope of `a_func`, its assigned value `local variable` is printed. Note that this doesn't affect the global variable, which is in a different scope." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "However, it is also possible to modify the global by, e.g., re-assigning a new value to it if we use the global keyword as the following example will illustrate:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_var = 'global value'\n", - "\n", - "def a_func():\n", - " global a_var\n", - " a_var = 'local value'\n", - " print(a_var, '[ a_var inside a_func() ]')\n", - "\n", - "print(a_var, '[ a_var outside a_func() ]')\n", - "a_func()\n", - "print(a_var, '[ a_var outside a_func() ]')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "global value [ a_var outside a_func() ]\n", - "local value [ a_var inside a_func() ]\n", - "local value [ a_var outside a_func() ]\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "But we have to be careful about the order: it is easy to raise an `UnboundLocalError` if we don't explicitly tell Python that we want to use the global scope and try to modify a variable's value (remember, the right side of an assignment operation is executed first):" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_var = 1\n", - "\n", - "def a_func():\n", - " a_var = a_var + 1\n", - " print(a_var, '[ a_var inside a_func() ]')\n", - "\n", - "print(a_var, '[ a_var outside a_func() ]')\n", - "a_func()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "ename": "UnboundLocalError", - "evalue": "local variable 'a_var' referenced before assignment", - "output_type": "pyerr", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mUnboundLocalError\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 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma_var\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'[ a_var outside a_func() ]'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0ma_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m\u001b[0m in \u001b[0;36ma_func\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0ma_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0ma_var\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0ma_var\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma_var\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'[ a_var inside a_func() ]'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mUnboundLocalError\u001b[0m: local variable 'a_var' referenced before assignment" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "1 [ a_var outside a_func() ]\n" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2. LEG - Local, Enclosed, and Global scope\n", - "\n", - "\n", - "\n", - "Now, let us introduce the concept of the enclosed (E) scope. Following the order \"Local -> Enclosed -> Global\", can you guess what the following code will print?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Example 2.1**" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_var = 'global value'\n", - "\n", - "def outer():\n", - " a_var = 'enclosed value'\n", - " \n", - " def inner():\n", - " a_var = 'local value'\n", - " print(a_var)\n", - " \n", - " inner()\n", - "\n", - "outer()" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**a)**\n", - "
    global value
    \n", - "\n", - "**b)** \n", - "
    enclosed value
    \n", - "\n", - "**c)** \n", - "
    local value
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[go to solution](#solutions)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Here is why:\n", - "\n", - "Let us quickly recapitulate what we just did: We called `outer()`, which defined the variable `a_var` locally (next to an existing `a_var` in the global scope). Next, the `outer()` function called `inner()`, which in turn defined a variable with of name `a_var` as well. The `print()` function inside `inner()` searched in the local scope first (L->E) before it went up in the scope hierarchy, and therefore it printed the value that was assigned in the local scope." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Similar to the concept of the `global` keyword, which we have seen in the section above, we can use the keyword `nonlocal` inside the inner function to explicitly access a variable from the outer (enclosed) scope in order to modify its value. \n", - "Note that the `nonlocal` keyword was added in Python 3.x and is not implemented in Python 2.x (yet)." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_var = 'global value'\n", - "\n", - "def outer():\n", - " a_var = 'local value'\n", - " print('outer before:', a_var)\n", - " def inner():\n", - " nonlocal a_var\n", - " a_var = 'inner value'\n", - " print('in inner():', a_var)\n", - " inner()\n", - " print(\"outer after:\", a_var)\n", - "outer()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "outer before: local value\n", - "in inner(): inner value\n", - "outer after: inner value\n" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3. LEGB - Local, Enclosed, Global, Built-in\n", - "\n", - "To wrap up the LEGB rule, let us come to the built-in scope. Here, we will define our \"own\" length-funcion, which happens to bear the same name as the in-built `len()` function. What outcome do you excpect if we'd execute the following code?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Example 3**" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_var = 'global variable'\n", - "\n", - "def len(in_var):\n", - " print('called my len() function')\n", - " l = 0\n", - " for i in in_var:\n", - " l += 1\n", - " return l\n", - "\n", - "def a_func(in_var):\n", - " len_in_var = len(in_var)\n", - " print('Input variable is of length', len_in_var)\n", - "\n", - "a_func('Hello, World!')" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**a)**\n", - "
    raises an error (conflict with in-built `len()` function)
    \n", - "\n", - "**b)** \n", - "
    called my len() function\n",
    -      "Input variable is of length 13
    \n", - "\n", - "**c)** \n", - "
    Input variable is of length 13
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[go to solution](#solutions)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Here is why:\n", - "\n", - "Since the exact same names can be used to map names to different objects - as long as the names are in different name spaces - there is no problem of reusing the name `len` to define our own length function (this is just for demonstration pruposes, it is NOT recommended). As we go up in Python's L -> E -> G -> B hierarchy, the function `a_func()` finds `len()` already in the global scope first before it attempts" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Self-assessment exercise" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, after we went through a couple of exercises, let us quickly check where we are. So, one more time: What would the following code print out?" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a = 'global'\n", - "\n", - "def outer():\n", - " \n", - " def len(in_var):\n", - " print('called my len() function: ', end=\"\")\n", - " l = 0\n", - " for i in in_var:\n", - " l += 1\n", - " return l\n", - " \n", - " a = 'local'\n", - " \n", - " def inner():\n", - " global len\n", - " nonlocal a\n", - " a += ' variable'\n", - " inner()\n", - " print('a is', a)\n", - " print(len(a))\n", - "\n", - "\n", - "outer()\n", + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Sebastian Raschka](http://www.sebastianraschka.com) \n", + "\n", + "- [Link to the containing GitHub Repository](https://github.com/rasbt/python_reference)\n", + "- [Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/tutorials/scope_resolution_legb_rule.ipynb)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%load_ext watermark" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sebastian Raschka 01/27/2016 \n", "\n", - "print(len(a))\n", - "print('a is', a)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 59 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[go to solution](#solutions)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Conclusion" + "CPython 3.5.1\n", + "IPython 4.0.3\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "I hope this short tutorial was helpful to understand the basic concept of Python's scope resolution order using the LEGB rule. I want to encourage you (as a little self-assessment exercise) to look at the code snippets again tomorrow and check if you can correctly predict all their outcomes." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### A rule of thumb" + } + ], + "source": [ + "%watermark -a 'Sebastian Raschka' -v -d" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[More information](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/ipython_magic/watermark.ipynb) about the `watermark` magic command extension." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "I would be happy to hear your comments and suggestions. \n", + "Please feel free to drop me a note via\n", + "[twitter](https://twitter.com/rasbt), [email](mailto:bluewoodtree@gmail.com), or [google+](https://plus.google.com/+SebastianRaschka).\n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#A beginner's guide to Python's namespaces, scope resolution, and the LEGB rule" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is a short tutorial about Python's namespaces and the scope resolution for variable names using the LEGB-rule. The following sections will provide short example code blocks that should illustrate the problem followed by short explanations. You can simply read this tutorial from start to end, but I'd like to encourage you to execute the code snippets - you can either copy & paste them, or for your convenience, simply [download this IPython notebook](https://raw.githubusercontent.com/rasbt/python_reference/master/tutorials/scope_resolution_legb_rule.ipynb)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sections " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "- [Introduction to namespaces and scopes](#introduction) \n", + "- [1. LG - Local and Global scopes](#section_1) \n", + "- [2. LEG - Local, Enclosed, and Global scope](#section_2) \n", + "- [3. LEGB - Local, Enclosed, Global, Built-in](#section_3) \n", + "- [Self-assessment exercise](#assessment)\n", + "- [Conclusion](#conclusion) \n", + "- [Solutions](#solutions)\n", + "- [Warning: For-loop variables \"leaking\" into the global namespace](#for_loop)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Objectives\n", + "- Namespaces and scopes - where does Python look for variable names?\n", + "- Can we define/reuse variable names for multiple objects at the same time?\n", + "- In which order does Python search different namespaces for variable names?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction to namespaces and scopes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Namespaces" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Roughly speaking, namespaces are just containers for mapping names to objects. As you might have already heard, everything in Python - literals, lists, dictionaries, functions, classes, etc. - is an object. \n", + "Such a \"name-to-object\" mapping allows us to access an object by a name that we've assigned to it. E.g., if we make a simple string assignment via `a_string = \"Hello string\"`, we created a reference to the `\"Hello string\"` object, and henceforth we can access via its variable name `a_string`.\n", + "\n", + "We can picture a namespace as a Python dictionary structure, where the dictionary keys represent the names and the dictionary values the object itself (and this is also how namespaces are currently implemented in Python), e.g., \n", + "\n", + "
    a_namespace = {'name_a':object_1, 'name_b':object_2, ...}
    \n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, the tricky part is that we have multiple independent namespaces in Python, and names can be reused for different namespaces (only the objects are unique, for example:\n", + "\n", + "
    a_namespace = {'name_a':object_1, 'name_b':object_2, ...}\n",
    +    "b_namespace = {'name_a':object_3, 'name_b':object_4, ...}
    \n", + "\n", + "For example, everytime we call a `for-loop` or define a function, it will create its own namespace. Namespaces also have different levels of hierarchy (the so-called \"scope\"), which we will discuss in more detail in the next section." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Scope" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the section above, we have learned that namespaces can exist independently from each other and that they are structured in a certain hierarchy, which brings us to the concept of \"scope\". The \"scope\" in Python defines the \"hierarchy level\" in which we search namespaces for certain \"name-to-object\" mappings. \n", + "For example, let us consider the following code:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 global\n", + "5 in foo()\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In practice, **it is usually a bad idea to modify global variables inside the function scope**, since it often be the cause of confusion and weird errors that are hard to debug. \n", - "If you want to modify a global variable via a function, it is recommended to pass it as an argument and reassign the return-value. \n", - "For example:" + } + ], + "source": [ + "i = 1\n", + "\n", + "def foo():\n", + " i = 5\n", + " print(i, 'in foo()')\n", + "\n", + "print(i, 'global')\n", + "\n", + "foo()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, we just defined the variable name `i` twice, once on the `foo` function." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- `foo_namespace = {'i':object_3, ...}` \n", + "- `global_namespace = {'i':object_1, 'name_b':object_2, ...}`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So, how does Python know which namespace it has to search if we want to print the value of the variable `i`? This is where Python's LEGB-rule comes into play, which we will discuss in the next section." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Tip:\n", + "If we want to print out the dictionary mapping of the global and local variables, we can use the\n", + "the functions `global()` and `local()`" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loc in foo(): True\n", + "loc in global: False\n", + "glob in global: True\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "a_var = 2\n", - "\n", - "def a_func(some_var):\n", - " return 2**3\n", - "\n", - "a_var = a_func(a_var)\n", - "print(a_var)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "8\n" - ] - } - ], - "prompt_number": 42 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "
    \n", - "
    " + } + ], + "source": [ + "#print(globals()) # prints global namespace\n", + "#print(locals()) # prints local namespace\n", + "\n", + "glob = 1\n", + "\n", + "def foo():\n", + " loc = 5\n", + " print('loc in foo():', 'loc' in locals())\n", + "\n", + "foo()\n", + "print('loc in global:', 'loc' in globals()) \n", + "print('glob in global:', 'foo' in globals())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Scope resolution for variable names via the LEGB rule." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have seen that multiple namespaces can exist independently from each other and that they can contain the same variable names on different hierachy levels. The \"scope\" defines on which hierarchy level Python searches for a particular \"variable name\" for its associated object. Now, the next question is: \"In which order does Python search the different levels of namespaces before it finds the name-to-object' mapping?\" \n", + "To answer is: It uses the LEGB-rule, which stands for\n", + "\n", + "**Local -> Enclosed -> Global -> Built-in**, \n", + "\n", + "where the arrows should denote the direction of the namespace-hierarchy search order. \n", + "\n", + "- *Local* can be inside a function or class method, for example. \n", + "- *Enclosed* can be its `enclosing` function, e.g., if a function is wrapped inside another function. \n", + "- *Global* refers to the uppermost level of the executing script itself, and \n", + "- *Built-in* are special names that Python reserves for itself. \n", + "\n", + "So, if a particular name:object mapping cannot be found in the local namespaces, the namespaces of the enclosed scope are being searched next. If the search in the enclosed scope is unsuccessful, too, Python moves on to the global namespace, and eventually, it will search the built-in namespace (side note: if a name cannot found in any of the namespaces, a *NameError* will is raised).\n", + "\n", + "**Note**: \n", + "Namespaces can also be further nested, for example if we import modules, or if we are defining new classes. In those cases we have to use prefixes to access those nested namespaces. Let me illustrate this concept in the following code block:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3.141592653589793 from the math module\n", + "3.141592653589793 from the numpy package\n", + "3.141592653589793 from the scipy package\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Solutions\n", - "\n", - "In order to prevent you from unintentional spoilers, I have written the solutions in binary format. In order to display the character representation, you just need to execute the following lines of code:" + } + ], + "source": [ + "import numpy\n", + "import math\n", + "import scipy\n", + "\n", + "print(math.pi, 'from the math module')\n", + "print(numpy.pi, 'from the numpy package')\n", + "print(scipy.pi, 'from the scipy package')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(This is also why we have to be careful if we import modules via \"`from a_module import *`\", since it loads the variable names into the global namespace and could potentially overwrite already existing variable names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "![LEGB figure](https://raw.githubusercontent.com/rasbt/python_reference/master/Images/scope_resolution_1.png)\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. LG - Local and Global scopes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Example 1.1** \n", + "As a warm-up exercise, let us first forget about the enclosed (E) and built-in (B) scopes in the LEGB rule and only take a look at LG - the local and global scopes. \n", + "What does the following code print?" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a_var = 'global variable'\n", + "\n", + "def a_func():\n", + " print(a_var, '[ a_var inside a_func() ]')\n", + "\n", + "a_func()\n", + "print(a_var, '[ a_var outside a_func() ]')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**a)**\n", + "
    raises an error
    \n", + "\n", + "**b)** \n", + "
    \n",
    +    "global value [ a_var outside a_func() ]
    \n", + "\n", + "**c)** \n", + "
    global value [ a_var inside a_func() ]  \n",
    +    "global value [ a_var outside a_func() ]
    \n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[go to solution](#solutions)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Here is why:\n", + "\n", + "We call `a_func()` first, which is supposed to print the value of `a_var`. According to the LEGB rule, the function will first look in its own local scope (L) if `a_var` is defined there. Since `a_func()` does not define its own `a_var`, it will look one-level above in the global scope (G) in which `a_var` has been defined previously.\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Example 1.2** \n", + "Now, let us define the variable `a_var` in the global and the local scope. \n", + "Can you guess what the following code will produce?" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a_var = 'global value'\n", + "\n", + "def a_func():\n", + " a_var = 'local value'\n", + " print(a_var, '[ a_var inside a_func() ]')\n", + "\n", + "a_func()\n", + "print(a_var, '[ a_var outside a_func() ]')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**a)**\n", + "
    raises an error
    \n", + "\n", + "**b)** \n", + "
    local value [ a_var inside a_func() ]\n",
    +    "global value [ a_var outside a_func() ]
    \n", + "\n", + "**c)** \n", + "
    global value [ a_var inside a_func() ]  \n",
    +    "global value [ a_var outside a_func() ]
    \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[go to solution](#solutions)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Here is why:\n", + "\n", + "When we call `a_func()`, it will first look in its local scope (L) for `a_var`, since `a_var` is defined in the local scope of `a_func`, its assigned value `local variable` is printed. Note that this doesn't affect the global variable, which is in a different scope." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "However, it is also possible to modify the global by, e.g., re-assigning a new value to it if we use the global keyword as the following example will illustrate:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "global value [ a_var outside a_func() ]\n", + "local value [ a_var inside a_func() ]\n", + "local value [ a_var outside a_func() ]\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Example 1.1:', chr(int('01100011',2)))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 6 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Example 1.2:', chr(int('01100010',2)))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 7 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Example 2.1:', chr(int('01100011',2)))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 8 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print('Example 3.1:', chr(int('01100010',2)))" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 9 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Execute to run the self-assessment solution\n", - "\n", - "sol = \"000010100110111101110101011101000110010101110010001010\"\\\n", - "\"0000101001001110100000101000001010011000010010000001101001011100110\"\\\n", - "\"0100000011011000110111101100011011000010110110000100000011101100110\"\\\n", - "\"0001011100100110100101100001011000100110110001100101000010100110001\"\\\n", - "\"1011000010110110001101100011001010110010000100000011011010111100100\"\\\n", - "\"1000000110110001100101011011100010100000101001001000000110011001110\"\\\n", - "\"1010110111001100011011101000110100101101111011011100011101000100000\"\\\n", - "\"0011000100110100000010100000101001100111011011000110111101100010011\"\\\n", - "\"0000101101100001110100000101000001010001101100000101001100001001000\"\\\n", - "\"0001101001011100110010000001100111011011000110111101100010011000010\"\\\n", - "\"1101100\"\n", - "\n", - "sol_str =''.join(chr(int(sol[i:i+8], 2)) for i in range(0, len(sol), 8))\n", - "for line in sol_str.split('\\n'):\n", - " print(line)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 58 - }, + } + ], + "source": [ + "a_var = 'global value'\n", + "\n", + "def a_func():\n", + " global a_var\n", + " a_var = 'local value'\n", + " print(a_var, '[ a_var inside a_func() ]')\n", + "\n", + "print(a_var, '[ a_var outside a_func() ]')\n", + "a_func()\n", + "print(a_var, '[ a_var outside a_func() ]')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But we have to be careful about the order: it is easy to raise an `UnboundLocalError` if we don't explicitly tell Python that we want to use the global scope and try to modify a variable's value (remember, the right side of an assignment operation is executed first):" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "
    \n", - "" + "ename": "UnboundLocalError", + "evalue": "local variable 'a_var' referenced before assignment", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mUnboundLocalError\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 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma_var\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'[ a_var outside a_func() ]'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0ma_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36ma_func\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0ma_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0ma_var\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0ma_var\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma_var\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'[ a_var inside a_func() ]'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mUnboundLocalError\u001b[0m: local variable 'a_var' referenced before assignment" ] }, { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Warning: For-loop variables \"leaking\" into the global namespace" + "name": "stdout", + "output_type": "stream", + "text": [ + "1 [ a_var outside a_func() ]\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In contrast to some other programming languages, `for-loops` will use the scope they exist in and leave their defined loop-variable behind.\n" + } + ], + "source": [ + "a_var = 1\n", + "\n", + "def a_func():\n", + " a_var = a_var + 1\n", + " print(a_var, '[ a_var inside a_func() ]')\n", + "\n", + "print(a_var, '[ a_var outside a_func() ]')\n", + "a_func()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. LEG - Local, Enclosed, and Global scope\n", + "\n", + "\n", + "\n", + "Now, let us introduce the concept of the enclosed (E) scope. Following the order \"Local -> Enclosed -> Global\", can you guess what the following code will print?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Example 2.1**" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a_var = 'global value'\n", + "\n", + "def outer():\n", + " a_var = 'enclosed value'\n", + " \n", + " def inner():\n", + " a_var = 'local value'\n", + " print(a_var)\n", + " \n", + " inner()\n", + "\n", + "outer()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**a)**\n", + "
    global value
    \n", + "\n", + "**b)** \n", + "
    enclosed value
    \n", + "\n", + "**c)** \n", + "
    local value
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[go to solution](#solutions)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Here is why:\n", + "\n", + "Let us quickly recapitulate what we just did: We called `outer()`, which defined the variable `a_var` locally (next to an existing `a_var` in the global scope). Next, the `outer()` function called `inner()`, which in turn defined a variable with of name `a_var` as well. The `print()` function inside `inner()` searched in the local scope first (L->E) before it went up in the scope hierarchy, and therefore it printed the value that was assigned in the local scope." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similar to the concept of the `global` keyword, which we have seen in the section above, we can use the keyword `nonlocal` inside the inner function to explicitly access a variable from the outer (enclosed) scope in order to modify its value. \n", + "Note that the `nonlocal` keyword was added in Python 3.x and is not implemented in Python 2.x (yet)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "outer before: local value\n", + "in inner(): inner value\n", + "outer after: inner value\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "for a in range(5):\n", - " if a == 4:\n", - " print(a, '-> a in for-loop')\n", - "print(a, '-> a in global')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "4 -> a in for-loop\n", - "4 -> a in global\n" - ] - } - ], - "prompt_number": 5 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**This also applies if we explicitly defined the `for-loop` variable in the global namespace before!** In this case it will rebind the existing variable:" + } + ], + "source": [ + "a_var = 'global value'\n", + "\n", + "def outer():\n", + " a_var = 'local value'\n", + " print('outer before:', a_var)\n", + " def inner():\n", + " nonlocal a_var\n", + " a_var = 'inner value'\n", + " print('in inner():', a_var)\n", + " inner()\n", + " print(\"outer after:\", a_var)\n", + "outer()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. LEGB - Local, Enclosed, Global, Built-in\n", + "\n", + "To wrap up the LEGB rule, let us come to the built-in scope. Here, we will define our \"own\" length-funcion, which happens to bear the same name as the in-built `len()` function. What outcome do you excpect if we'd execute the following code?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Example 3**" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a_var = 'global variable'\n", + "\n", + "def len(in_var):\n", + " print('called my len() function')\n", + " l = 0\n", + " for i in in_var:\n", + " l += 1\n", + " return l\n", + "\n", + "def a_func(in_var):\n", + " len_in_var = len(in_var)\n", + " print('Input variable is of length', len_in_var)\n", + "\n", + "a_func('Hello, World!')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**a)**\n", + "
    raises an error (conflict with in-built `len()` function)
    \n", + "\n", + "**b)** \n", + "
    called my len() function\n",
    +    "Input variable is of length 13
    \n", + "\n", + "**c)** \n", + "
    Input variable is of length 13
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[go to solution](#solutions)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Here is why:\n", + "\n", + "Since the exact same names can be used to map names to different objects - as long as the names are in different name spaces - there is no problem of reusing the name `len` to define our own length function (this is just for demonstration pruposes, it is NOT recommended). As we go up in Python's L -> E -> G -> B hierarchy, the function `a_func()` finds `len()` already in the global scope (G) first before it attempts to search the built-in (B) namespace." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Self-assessment exercise" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, after we went through a couple of exercises, let us quickly check where we are. So, one more time: What would the following code print out?" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a = 'global'\n", + "\n", + "def outer():\n", + " \n", + " def len(in_var):\n", + " print('called my len() function: ', end=\"\")\n", + " l = 0\n", + " for i in in_var:\n", + " l += 1\n", + " return l\n", + " \n", + " a = 'local'\n", + " \n", + " def inner():\n", + " global len\n", + " nonlocal a\n", + " a += ' variable'\n", + " inner()\n", + " print('a is', a)\n", + " print(len(a))\n", + "\n", + "\n", + "outer()\n", + "\n", + "print(len(a))\n", + "print('a is', a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[go to solution](#solutions)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Conclusion" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I hope this short tutorial was helpful to understand the basic concept of Python's scope resolution order using the LEGB rule. I want to encourage you (as a little self-assessment exercise) to look at the code snippets again tomorrow and check if you can correctly predict all their outcomes." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### A rule of thumb" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In practice, **it is usually a bad idea to modify global variables inside the function scope**, since it often be the cause of confusion and weird errors that are hard to debug. \n", + "If you want to modify a global variable via a function, it is recommended to pass it as an argument and reassign the return-value. \n", + "For example:" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "b = 1\n", - "for b in range(5):\n", - " if b == 4:\n", - " print(b, '-> b in for-loop')\n", - "print(b, '-> b in global')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "4 -> b in for-loop\n", - "4 -> b in global\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "However, in **Python 3.x**, we can use closures to prevent the for-loop variable to cut into the global namespace. Here is an example (exectuted in Python 3.4):" + } + ], + "source": [ + "a_var = 2\n", + "\n", + "def a_func(some_var):\n", + " return 2**3\n", + "\n", + "a_var = a_func(a_var)\n", + "print(a_var)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solutions\n", + "\n", + "In order to prevent you from unintentional spoilers, I have written the solutions in binary format. In order to display the character representation, you just need to execute the following lines of code:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print('Example 1.1:', chr(int('01100011',2)))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print('Example 1.2:', chr(int('01100010',2)))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print('Example 2.1:', chr(int('01100011',2)))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print('Example 3.1:', chr(int('01100010',2)))" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Execute to run the self-assessment solution\n", + "\n", + "sol = \"000010100110111101110101011101000110010101110010001010\"\\\n", + "\"0000101001001110100000101000001010011000010010000001101001011100110\"\\\n", + "\"0100000011011000110111101100011011000010110110000100000011101100110\"\\\n", + "\"0001011100100110100101100001011000100110110001100101000010100110001\"\\\n", + "\"1011000010110110001101100011001010110010000100000011011010111100100\"\\\n", + "\"1000000110110001100101011011100010100000101001001000000110011001110\"\\\n", + "\"1010110111001100011011101000110100101101111011011100011101000100000\"\\\n", + "\"0011000100110100000010100000101001100111011011000110111101100010011\"\\\n", + "\"0000101101100001110100000101000001010001101100000101001100001001000\"\\\n", + "\"0001101001011100110010000001100111011011000110111101100010011000010\"\\\n", + "\"1101100\"\n", + "\n", + "sol_str =''.join(chr(int(sol[i:i+8], 2)) for i in range(0, len(sol), 8))\n", + "for line in sol_str.split('\\n'):\n", + " print(line)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + "
    \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Warning: For-loop variables \"leaking\" into the global namespace" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In contrast to some other programming languages, `for-loops` will use the scope they exist in and leave their defined loop-variable behind.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4 -> a in for-loop\n", + "4 -> a in global\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "i = 1\n", - "print([i for i in range(5)])\n", - "print(i, '-> i in global')" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[0, 1, 2, 3, 4]\n", - "1 -> i in global\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Why did I mention \"Python 3.x\"? Well, as it happens, the same code executed in Python 2.x would print:\n", - "\n", - "