\n",
- "\n"
- ],
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "from IPython.display import display, HTML, Javascript\n",
- "\n",
- "# Define HTML for the slider and a script to handle the slider's value changes\n",
- "html_slider = \"\"\"\n",
- "
\n",
- " \n",
- " \n",
- "
\n",
- "\n",
- "\"\"\"\n",
- "\n",
- "# Display the slider in the notebook\n",
- "display(HTML(html_slider))"
- ]
- },
{
"cell_type": "code",
"execution_count": 15,
@@ -874,6 +461,7 @@
"execution_count": 12,
"id": "2409ba4a-3021-40a7-afac-bf9998efe9ff",
"metadata": {
+ "nbsphinx": "hidden",
"tags": []
},
"outputs": [
@@ -959,6 +547,7 @@
"execution_count": 54,
"id": "001bf9a0-a84a-4248-aee2-54cdbbabdaac",
"metadata": {
+ "nbsphinx": "hidden",
"tags": []
},
"outputs": [
diff --git a/build/doctrees/nbsphinx/notebooks/L1/1_variables.ipynb b/build/doctrees/nbsphinx/notebooks/L1/1_variables.ipynb
deleted file mode 100644
index 86b042c..0000000
--- a/build/doctrees/nbsphinx/notebooks/L1/1_variables.ipynb
+++ /dev/null
@@ -1,683 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "# Variables and types"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "## Symbol names \n",
- "\n",
- "Variable names in Python can contain alphanumerical characters `a-z`, `A-Z`, `0-9` and some special characters such as `_`. Normal variable names must start with a letter. \n",
- "\n",
- "By convention, variable names start with a lower-case letter, and Class names start with a capital letter. "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "
\n",
- "\n",
- "**Note:** Reserved keywords\n",
- "\n",
- "There are a number of Python keywords that cannot be used as variable names. These keywords are:\n",
- "\n",
- " and, as, assert, break, class, continue, def, del, elif, else, except, \n",
- " exec, finally, for, from, global, if, import, in, is, lambda, not, or, \n",
- " pass, print, raise, return, try, while, with, yield\n",
- "\n",
- "Note: Be aware of the keyword `lambda`, which could easily be a natural variable name in a scientific program. But being a keyword, it cannot be used as a variable name.\n",
- "\n",
- "
\n",
- "\n",
- "**Note:** Division\n",
- " \n",
- "The `/` operator always performs a floating point division in Python 3.x. \n",
- "This is not true in Python 2.x, where the result of `/` is always an integer \n",
- "if the operands are integers. To be more specific, `1/2 = 0.5` (`float`) in \n",
- "Python 3.x, and `1/2 = 0` (`int`) in Python 2.x (but `1.0/2 = 0.5` in Python 2.x).\n",
- "\n",
- "
"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "The boolean operators are spelled out as the words `and`, `not`, `or`. "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "False"
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "True and False"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "execution_count": 7,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "not False"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "True or False"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Comparison operators `>`, `<`, `>=` (greater or equal), `<=` (less or equal), `==` equality, `is` identical."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(True, False)"
- ]
- },
- "execution_count": 10,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "2 > 1, 2 < 1"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(False, False)"
- ]
- },
- "execution_count": 11,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "2 > 2, 2 < 2"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(True, True)"
- ]
- },
- "execution_count": 13,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "2 >= 2, 2 <= 2"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "execution_count": 16,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# equality\n",
- "[1,2] == [1,2]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "execution_count": 17,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# objects identical?\n",
- "l1 = l2 = [1,2]\n",
- "\n",
- "l1 is l2"
- ]
- }
- ],
- "metadata": {
- "anaconda-cloud": {},
- "celltoolbar": "Slideshow",
- "hide_input": false,
- "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.7.6"
- },
- "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": true,
- "user_envs_cfg": false
- },
- "toc": {
- "nav_menu": {
- "height": "12px",
- "width": "252px"
- },
- "number_sections": true,
- "sideBar": true,
- "skip_h1_title": false,
- "toc_cell": true,
- "toc_position": {
- "height": "1335px",
- "left": "0px",
- "right": "2386px",
- "top": "110px",
- "width": "302px"
- },
- "toc_section_display": "block",
- "toc_window_display": false
- },
- "varInspector": {
- "cols": {
- "lenName": 16,
- "lenType": 16,
- "lenVar": 40
- },
- "kernels_config": {
- "python": {
- "delete_cmd_postfix": "",
- "delete_cmd_prefix": "del ",
- "library": "var_list.py",
- "varRefreshCmd": "print(var_dic_list())"
- },
- "r": {
- "delete_cmd_postfix": ") ",
- "delete_cmd_prefix": "rm(",
- "library": "var_list.r",
- "varRefreshCmd": "cat(var_dic_list()) "
- }
- },
- "types_to_exclude": [
- "module",
- "function",
- "builtin_function_or_method",
- "instance",
- "_Feature"
- ],
- "window_display": false
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/build/doctrees/nbsphinx/notebooks/L1/2_operators.pdf b/build/doctrees/nbsphinx/notebooks/L1/2_operators.pdf
deleted file mode 100644
index 12f44e1..0000000
Binary files a/build/doctrees/nbsphinx/notebooks/L1/2_operators.pdf and /dev/null differ
diff --git a/build/doctrees/nbsphinx/notebooks/L1/3_datatypes.ipynb b/build/doctrees/nbsphinx/notebooks/L1/3_datatypes.ipynb
deleted file mode 100644
index aaa0859..0000000
--- a/build/doctrees/nbsphinx/notebooks/L1/3_datatypes.ipynb
+++ /dev/null
@@ -1,1322 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "# Data Types in Python"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "It's time to look at different data types we may find useful in our course. Besides the number types mentioned previously, there are also other types like **strings**, **lists**, **tuples** and **dictionaries**. \n",
- "\n",
- "Each of these data types has a number of connected `methods` (functions) which allow to manipulate the data contained in a variable. If you want to know which methods are available for a certain object use the command `dir`, e.g.\n",
- "\n",
- "~~~\n",
- "s=\"string\"\n",
- "dir(s)\n",
- "~~~\n",
- "\n",
- "The following few cells will give you a short introduction into each type. "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Strings\n",
- "\n",
- "**Strings** are lists of keyboard characters as well as other characters not on your keyboard. They are useful for printing results on the screen, during reading and writing of data."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:05:13.381263Z",
- "start_time": "2018-04-16T15:05:13.378101Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'Hello'"
- ]
- },
- "execution_count": 1,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "s='Hello' # string variable\n",
- "s"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:14.904816Z",
- "start_time": "2018-04-16T14:56:14.901345Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "t=\"world!\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "String can be concatenated using the *+* operator. "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:17.519251Z",
- "start_time": "2018-04-16T14:56:17.515677Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "c=s+' '+t"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:20.568540Z",
- "start_time": "2018-04-16T14:56:20.564378Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Hello world!\n"
- ]
- }
- ],
- "source": [
- "print(c)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "As strings are lists, each character in a string can be accessed by addressing the position in the string (see Lists section)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:23.033095Z",
- "start_time": "2018-04-16T14:56:23.027938Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'e'"
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "c[1]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "Strings can also be made out of numbers."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:26.113138Z",
- "start_time": "2018-04-16T14:56:26.108211Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'975321'"
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "\"975\"+\"321\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "If you want to obtain a number of a string, you can use what is known as type casting. Using type casting you may convert the string or any other data type into a different type if this is possible. To find out if a string is a pure number you may use the `str.isnumeric` method. For the above string, we may want to do a conversion to the type *int* by typing:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "execution_count": 7,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "(\"975\"+\"321\").isnumeric() # or you may use as well str.isnumeric(\"975\"+\"321\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:59:26.898131Z",
- "start_time": "2018-04-16T14:59:26.893171Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "975321"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "int(\"975\"+\"321\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "There are a number of methods connected to the string data type. Usually the relate to formatting or finding sub-strings. Formatting will be a topic in our next lecture. Here we just refer to one simple find example."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "3"
- ]
- },
- "execution_count": 9,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "t.find('ld') ## returns the index at which the sub string 'ld' starts in t"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'World!'"
- ]
- },
- "execution_count": 12,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "t.capitalize()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Lists\n",
- "\n",
- "**Lists** have a variety of uses. They are useful, for example, in various bookkeeping tasks that arise in computer programming. Like arrays, they are sometimes used to store data. However, lists do not have the specialized properties and tools that make arrays so powerful for scientific computing. So in general, we prefer arrays to lists for working with scientific data. For other tasks, lists work just fine and can even be preferable to arrays.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:00:48.538250Z",
- "start_time": "2018-04-16T15:00:48.535066Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "a = [0, 1, 1, 2, 3, 5, 8, 13]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:00:49.850960Z",
- "start_time": "2018-04-16T15:00:49.847769Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "b = [5., \"girl\", 2+0j, \"horse\", 21]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Individual elements in a list can be accessed by the variable name and the number (index) of the list element put in square brackets. Note that the index for the elements start at *0* for the first element (left). "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "
\n",
- "\n",
- "**Note** Indices in Python\n",
- "\n",
- "\n",
- "The first element of a list or array is accessed by the index 0. If the array has N elements, the last entries index is N-1.\n",
- "\n",
- "
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(5.0, 'girl')"
- ]
- },
- "execution_count": 17,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "b[0],b[1]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Elements may be also accessed from the back by nagative indices. *b[-1]* denotes the last element in the list and *b[-2]*, the element before the last."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:01.177759Z",
- "start_time": "2018-04-16T15:12:01.171973Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "21"
- ]
- },
- "execution_count": 19,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "b[-1]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:03.352948Z",
- "start_time": "2018-04-16T15:12:03.347674Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'horse'"
- ]
- },
- "execution_count": 20,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "b[-2]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "The length of a list can be obtained by the `len` command if you need the number of elements in the list for your calculations."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:07:44.966883Z",
- "start_time": "2018-04-16T15:07:44.961951Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "5"
- ]
- },
- "execution_count": 21,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "len(b)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "There are powerful ways to iterate through a list and also through arrays in form of *iterator*. This is called *list comprehension*. We will talk about them later in more detail. Here is an example, which shows the powerful options you have in Python."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 25,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:10:25.820782Z",
- "start_time": "2018-04-16T15:10:25.815249Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "['girl', 'horse']"
- ]
- },
- "execution_count": 25,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "[element for element in b if type(element)==str]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Individual elements in a list can be replaced by assigning a new value to them"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 26,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:05.751146Z",
- "start_time": "2018-04-16T15:12:05.748188Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "b[-2]='cat'"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 27,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:14.659098Z",
- "start_time": "2018-04-16T15:12:14.653898Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[5.0, 'girl', (2+0j), 'cat', 21]"
- ]
- },
- "execution_count": 27,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "b"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Lists can be concatanated by the *+* operator"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 28,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:19.665264Z",
- "start_time": "2018-04-16T15:12:19.659673Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[0, 1, 1, 2, 3, 5, 8, 13, 5.0, 'girl', (2+0j), 'cat', 21]"
- ]
- },
- "execution_count": 28,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "c=a+b\n",
- "c"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "A very useful feature for lists in python is the **slicing** of lists. Slicing means, that we access only a range of elements in the list, i.e. element 3 to 7. This is done by inserting the starting and the ending element number separated by a colon (:) in the square brackets. The index numbers can be positive or negative again."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 30,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:23.299713Z",
- "start_time": "2018-04-16T15:13:23.294538Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[2, 3, 5, 8]"
- ]
- },
- "execution_count": 30,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "c[3:7]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Inserting a second colon behind the ending element index together with a thrid number allows even to select only ever second or third element from a list."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 33,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:25.682027Z",
- "start_time": "2018-04-16T15:13:25.676726Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[2, 5, 13]"
- ]
- },
- "execution_count": 33,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "c[3:9:2]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "It is sometimes also useful to reverse a list. This can be easily done with the reverse command."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 34,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[21, 'cat', (2+0j), 'girl', 5.0, 13, 8, 5, 3, 2, 1, 1, 0]"
- ]
- },
- "execution_count": 34,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "c.reverse()\n",
- "c"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Lists may be created in different ways. An empty list can be created by assigning emtpy square brackets to a variable name. You can append elements to the list with the help of the append command which has to be added to the variable name as shown below. This way of adding a particular function, which is part of a certain variable class is part of object oriented programming."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 35,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:28.255450Z",
- "start_time": "2018-04-16T15:13:28.252567Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "a=[]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 37,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2017-04-20T20:53:21.102141+02:00",
- "start_time": "2017-04-20T20:53:21.098571"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "['h']"
- ]
- },
- "execution_count": 37,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "a"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "A list of numbers can be easily created by the `range()` command."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 39,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:58.291820Z",
- "start_time": "2018-04-16T15:13:58.286904Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]"
- ]
- },
- "execution_count": 39,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "list(range(10)) "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 40,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:59.337418Z",
- "start_time": "2018-04-16T15:13:59.332474Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[3, 4, 5, 6, 7, 8, 9]"
- ]
- },
- "execution_count": 40,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "list(range(3,10))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 41,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:14:00.450010Z",
- "start_time": "2018-04-16T15:14:00.444737Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[3, 5, 7, 9]"
- ]
- },
- "execution_count": 41,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "list(range(3,10,2))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "ExecuteTime": {
- "end_time": "2017-04-20T21:00:24.038302+02:00",
- "start_time": "2017-04-20T21:00:24.032999"
- },
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Lists (and also tuples below) can be multidimensional as well, i.e. for an image. The individual elements may then be addressed by supplying two indices in two square brackets."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 42,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:14:06.425036Z",
- "start_time": "2018-04-16T15:14:06.421709Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "a = [[3, 9], [8, 5], [11, 1]]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 43,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:14:07.330192Z",
- "start_time": "2018-04-16T15:14:07.325086Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[8, 5]"
- ]
- },
- "execution_count": 43,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "a[1]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 45,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:14:08.460686Z",
- "start_time": "2018-04-16T15:14:08.455419Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "5"
- ]
- },
- "execution_count": 45,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "a[1][1]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Tuples\n",
- "\n",
- "**Tuples** are also list, but immutable. That means, if a tuple has been once defined, it cannot be changed. Try to change an element to see the result."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 46,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "(10, 20) \n"
- ]
- }
- ],
- "source": [
- "point = (10, 20)\n",
- "\n",
- "print(point, type(point))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Tuples may be unpacked, e.g. its values may be assigned to normal variables in the following way"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 47,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "x = 10\n",
- "y = 20\n"
- ]
- }
- ],
- "source": [
- "x, y = point\n",
- "\n",
- "print(\"x =\", x)\n",
- "print(\"y =\", y)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "ExecuteTime": {
- "end_time": "2017-04-17T20:46:46.711516+02:00",
- "start_time": "2017-04-17T20:46:46.705826"
- },
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Dictionaries\n",
- "\n",
- "\n",
- "**Dictionaries** are like lists, but the elements of dictionaries are accessed in a different way than for lists. The elements of lists and arrays are numbered consecutively, and to access an element of a list or an array, you simply refer to the number corresponding to its position in the sequence. The elements of dictionaries are accessed by “keys”, which can be either strings or (arbitrary) integers (in no particular order). Dictionaries are an important part of core Python. However, we do not make much use of them in this introduction to scientific Python, so our discussion of them is limited."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 48,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2019-04-09T12:11:22.208828Z",
- "start_time": "2019-04-09T12:11:22.205914Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "room = {\"Ralf\":422, \"Frank\":322, \"Dekan\":550}"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 50,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2019-04-09T12:11:50.431570Z",
- "start_time": "2019-04-09T12:11:50.428226Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "322"
- ]
- },
- "execution_count": 50,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "room['Frank']"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 51,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2019-04-09T12:11:26.396475Z",
- "start_time": "2019-04-09T12:11:26.392435Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "dict_keys(['Ralf', 'Frank', 'Dekan'])"
- ]
- },
- "execution_count": 51,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "room.keys()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 52,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2019-04-09T12:11:37.030931Z",
- "start_time": "2019-04-09T12:11:37.027249Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "dict_values([422, 322, 550])"
- ]
- },
- "execution_count": 52,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "room.values()"
- ]
- }
- ],
- "metadata": {
- "anaconda-cloud": {},
- "celltoolbar": "Slideshow",
- "hide_input": false,
- "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.7.6"
- },
- "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": true,
- "user_envs_cfg": false
- },
- "toc": {
- "nav_menu": {
- "height": "12px",
- "width": "252px"
- },
- "number_sections": true,
- "sideBar": true,
- "skip_h1_title": false,
- "toc_cell": true,
- "toc_position": {
- "height": "1335px",
- "left": "0px",
- "right": "2386px",
- "top": "110px",
- "width": "302px"
- },
- "toc_section_display": "block",
- "toc_window_display": false
- },
- "varInspector": {
- "cols": {
- "lenName": 16,
- "lenType": 16,
- "lenVar": 40
- },
- "kernels_config": {
- "python": {
- "delete_cmd_postfix": "",
- "delete_cmd_prefix": "del ",
- "library": "var_list.py",
- "varRefreshCmd": "print(var_dic_list())"
- },
- "r": {
- "delete_cmd_postfix": ") ",
- "delete_cmd_prefix": "rm(",
- "library": "var_list.r",
- "varRefreshCmd": "cat(var_dic_list()) "
- }
- },
- "types_to_exclude": [
- "module",
- "function",
- "builtin_function_or_method",
- "instance",
- "_Feature"
- ],
- "window_display": false
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/build/doctrees/nbsphinx/notebooks/L1/4_modules.ipynb b/build/doctrees/nbsphinx/notebooks/L1/4_modules.ipynb
deleted file mode 100644
index 76b88eb..0000000
--- a/build/doctrees/nbsphinx/notebooks/L1/4_modules.ipynb
+++ /dev/null
@@ -1,455 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- },
- "toc-hr-collapsed": false
- },
- "source": [
- "# Modules and namespaces"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- },
- "toc-hr-collapsed": true
- },
- "source": [
- "## Modules"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "Most of the functionality in Python is provided by *modules*. The Python Standard Library is a large collection of modules that provides *cross-platform* implementations of common facilities such as access to the operating system, file I/O, string management, network communication, math, web-scraping, text manipulation, machine learning and much more."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "To use a module in a Python program it first has to be imported. A module can be imported using the `import` statement. For example, to import the module `math`, which contains many standard mathematical functions, we can do:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "1.0\n"
- ]
- }
- ],
- "source": [
- "import math\n",
- "\n",
- "x = math.cos(2 * math.pi)\n",
- "\n",
- "print(x)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "This includes the whole module and makes it available for use later in the program. Alternatively, we can chose to import all symbols (functions and variables) in a module so that we don't need to use the prefix \"`math.`\" every time we use something from the `math` module:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "1.0\n"
- ]
- }
- ],
- "source": [
- "from math import *\n",
- "\n",
- "x = cos(2 * pi)\n",
- "\n",
- "print(x)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "This pattern can be very convenient, but in large programs that include many modules it is often a good idea to keep the symbols from each module in their own namespaces, by using the `import math` pattern. This would eliminate potentially confusing problems."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "## Namespaces"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "A namespace is an identifier used to organize objects, e.g. the methods and variables of a module. The prefix `math.` we have used in the previous section is such a namespace. You may also create your own namespace for a module."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "1.4142135623730951\n"
- ]
- }
- ],
- "source": [
- "import math as m\n",
- "\n",
- "x = m.sqrt(2)\n",
- "\n",
- "print(x)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "You may also only import specific functions of a module."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "11.548739357257746"
- ]
- },
- "execution_count": 7,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from math import sinh as mysinh\n",
- "from math import pi as mypi\n",
- "\n",
- "mysinh(mypi)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Contents of a module"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "Once a module is imported, we can list the symbols it provides using the `dir` function:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']\n"
- ]
- }
- ],
- "source": [
- "import math\n",
- "\n",
- "print(dir(math))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "And using the function `help` we can get a description of each function (almost .. not all functions have docstrings, as they are technically called, but the vast majority of functions are documented this way). "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Help on built-in function log in module math:\n",
- "\n",
- "log(...)\n",
- " log(x, [base=math.e])\n",
- " Return the logarithm of x to the given base.\n",
- " \n",
- " If the base not specified, returns the natural logarithm (base e) of x.\n",
- "\n"
- ]
- }
- ],
- "source": [
- "help(math.log) "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "2.302585092994046"
- ]
- },
- "execution_count": 10,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "math.log(10)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "3.0"
- ]
- },
- "execution_count": 13,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "math.log(8, 2)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "We can also use the `help` function directly on modules: Try\n",
- "\n",
- " help(math) \n",
- "\n",
- "Some very useful modules form the Python standard library are `os`, `sys`, `math`, `shutil`, `re`, `subprocess`, `multiprocessing`, `threading`. "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "A complete lists of standard modules for Python 3 is available at http://docs.python.org/3/library/ ."
- ]
- }
- ],
- "metadata": {
- "anaconda-cloud": {},
- "celltoolbar": "Slideshow",
- "hide_input": false,
- "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.7.6"
- },
- "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": true,
- "user_envs_cfg": false
- },
- "toc": {
- "nav_menu": {
- "height": "12px",
- "width": "252px"
- },
- "number_sections": true,
- "sideBar": true,
- "skip_h1_title": false,
- "toc_cell": true,
- "toc_position": {
- "height": "1335px",
- "left": "0px",
- "right": "2386px",
- "top": "110px",
- "width": "302px"
- },
- "toc_section_display": "block",
- "toc_window_display": false
- },
- "varInspector": {
- "cols": {
- "lenName": 16,
- "lenType": 16,
- "lenVar": 40
- },
- "kernels_config": {
- "python": {
- "delete_cmd_postfix": "",
- "delete_cmd_prefix": "del ",
- "library": "var_list.py",
- "varRefreshCmd": "print(var_dic_list())"
- },
- "r": {
- "delete_cmd_postfix": ") ",
- "delete_cmd_prefix": "rm(",
- "library": "var_list.r",
- "varRefreshCmd": "cat(var_dic_list()) "
- }
- },
- "types_to_exclude": [
- "module",
- "function",
- "builtin_function_or_method",
- "instance",
- "_Feature"
- ],
- "window_display": false
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/build/doctrees/nbsphinx/notebooks/L1/4_modules.pdf b/build/doctrees/nbsphinx/notebooks/L1/4_modules.pdf
deleted file mode 100644
index b77369e..0000000
Binary files a/build/doctrees/nbsphinx/notebooks/L1/4_modules.pdf and /dev/null differ
diff --git a/build/doctrees/nbsphinx/notebooks/L1/Lecture-1.ipynb b/build/doctrees/nbsphinx/notebooks/L1/Lecture-1.ipynb
deleted file mode 100644
index ae90107..0000000
--- a/build/doctrees/nbsphinx/notebooks/L1/Lecture-1.ipynb
+++ /dev/null
@@ -1,2667 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Variables and types"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "### Symbol names \n",
- "\n",
- "Variable names in Python can contain alphanumerical characters `a-z`, `A-Z`, `0-9` and some special characters such as `_`. Normal variable names must start with a letter. \n",
- "\n",
- "By convention, variable names start with a lower-case letter, and Class names start with a capital letter. "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "In addition, there are a number of Python keywords that cannot be used as variable names. These keywords are:\n",
- "\n",
- " and, as, assert, break, class, continue, def, del, elif, else, except, \n",
- " exec, finally, for, from, global, if, import, in, is, lambda, not, or,\n",
- " pass, print, raise, return, try, while, with, yield\n",
- "\n",
- "Note: Be aware of the keyword `lambda`, which could easily be a natural variable name in a scientific program. But being a keyword, it cannot be used as a variable name."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "### Variable Assignment"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "\n",
- "\n",
- "The assignment operator in Python is `=`. Python is a dynamically typed language, so we do not need to specify the type of a variable when we create one.\n",
- "\n",
- "Assigning a value to a new variable creates the variable:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "execution": {
- "iopub.execute_input": "2020-04-03T16:58:58.455Z",
- "iopub.status.busy": "2020-04-03T16:58:58.433Z",
- "iopub.status.idle": "2020-04-03T16:58:58.505Z",
- "shell.execute_reply": "2020-04-03T16:58:58.524Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "1.0"
- ]
- },
- "execution_count": 2,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# variable assignments\n",
- "x = 1.0>Y\n",
- "my_favorite_variable = 12.2\n",
- "\n",
- "x"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Although not explicitly specified, a variable does have a type associated with it. The type is derived from the value that was assigned to it."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 120,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "float"
- ]
- },
- "execution_count": 120,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "type(x)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "If we assign a new value to a variable, its type can change."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 121,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "x = 1"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 123,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "int"
- ]
- },
- "execution_count": 123,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "type(x)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "If we try to use a variable that has not yet been defined we get an `NameError`:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 124,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "20\n"
- ]
- }
- ],
- "source": [
- "print(y)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "### Number types"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "\n",
- "\n",
- "\n",
- "Python allows as any programming language different types of variables. The type of a variable can be always accessed with the help of the *type()* command. "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "#### Integers\n",
- "\n",
- "Integers are 32 bit binary numbers and extend from -$2^{31}$ to $2^{31}$-1. Python treats numbers without a decimal point automatically as an integer."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 125,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2017-04-21T07:56:03.227107+02:00",
- "start_time": "2017-04-21T07:56:03.221564"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "int"
- ]
- },
- "execution_count": 125,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# integer number\n",
- "x = 1 \n",
- "type(x)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "#### Floating Point\n",
- "\n",
- "Floating point values are values with a decimal point and go between $\\pm 2\\times 10^{-308}$ and $\\pm 2\\times 10^{308}$"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 126,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2017-04-20T17:08:44.403435+02:00",
- "start_time": "2017-04-20T17:08:44.398662"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "# float variable\n",
- "x= 3.141 "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "#### Complex Numbers"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 22,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2017-04-20T17:10:06.106323+02:00",
- "start_time": "2017-04-20T17:10:06.100896"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "complex"
- ]
- },
- "execution_count": 22,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "c=2+4j\n",
- "type(c)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "Complex numbers have built in *accessors*. These accessors give for example access to the *real* and *imaginary* part of the complex number. "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 23,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "2.0\n"
- ]
- }
- ],
- "source": [
- "r=c.real\n",
- "print(r)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 24,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "4.0\n"
- ]
- }
- ],
- "source": [
- "i=c.imag\n",
- "print(i)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "On the other side, one my also evaluate the complex conjugate of a complex number by one of those accessors. Note that this is provided by a function here, while the above real and imaginary part are values. The are some basic functions available, which act on complex numbers. More complex calculations are possible with functions built in to modules such as *cmath* or *numpy*."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 25,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "-4.0\n"
- ]
- }
- ],
- "source": [
- "c=(2+4j).conjugate()\n",
- "print(c.imag)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "#### Type casting"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 56,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "1.5 \n"
- ]
- }
- ],
- "source": [
- "x = 1.5\n",
- "\n",
- "print(x, type(x))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 57,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "1 \n"
- ]
- }
- ],
- "source": [
- "x = int(x)\n",
- "\n",
- "print(x, type(x))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 58,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "(1+0j) \n"
- ]
- }
- ],
- "source": [
- "z = complex(x)\n",
- "\n",
- "print(z, type(z))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 59,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "ename": "TypeError",
- "evalue": "can't convert complex to float",
- "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[0;32m----> 1\u001b[0;31m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mz\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
- "\u001b[0;31mTypeError\u001b[0m: can't convert complex to float"
- ]
- }
- ],
- "source": [
- "x = float(z)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Complex variables cannot be cast to floats or integers. We need to use `z.real` or `z.imag` to extract the part of the complex number we want:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 60,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "1.0 -> True \n",
- "0.0 -> False \n"
- ]
- }
- ],
- "source": [
- "y = bool(z.real)\n",
- "\n",
- "print(z.real, \" -> \", y, type(y))\n",
- "\n",
- "y = bool(z.imag)\n",
- "\n",
- "print(z.imag, \" -> \", y, type(y))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Operators and comparisons"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Most operators and comparisons in Python work as one would expect:\n",
- "\n",
- "* Arithmetic operators `+`, `-`, `*`, `/`, `//` (integer division), '**' power\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 28,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(3, -1, 2, 0.5)"
- ]
- },
- "execution_count": 28,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "1 + 2, 1 - 2, 1 * 2, 1 / 2"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 29,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(3.0, -1.0, 2.0, 0.5)"
- ]
- },
- "execution_count": 29,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "1.0 + 2.0, 1.0 - 2.0, 1.0 * 2.0, 1.0 / 2.0"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 30,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "1.0"
- ]
- },
- "execution_count": 30,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# Integer division of float numbers\n",
- "3.0 // 2.0"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 31,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "4"
- ]
- },
- "execution_count": 31,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# Note! The power operators in python isn't ^, but **\n",
- "2 ** 2"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "Note: The `/` operator always performs a floating point division in Python 3.x.\n",
- "This is not true in Python 2.x, where the result of `/` is always an integer if the operands are integers.\n",
- "to be more specific, `1/2 = 0.5` (`float`) in Python 3.x, and `1/2 = 0` (`int`) in Python 2.x (but `1.0/2 = 0.5` in Python 2.x)."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "* The boolean operators are spelled out as the words `and`, `not`, `or`. "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 32,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "False"
- ]
- },
- "execution_count": 32,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "True and False"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 33,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "execution_count": 33,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "not False"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 34,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "execution_count": 34,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "True or False"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "* Comparison operators `>`, `<`, `>=` (greater or equal), `<=` (less or equal), `==` equality, `is` identical."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 35,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(True, False)"
- ]
- },
- "execution_count": 35,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "2 > 1, 2 < 1"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 36,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(False, False)"
- ]
- },
- "execution_count": 36,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "2 > 2, 2 < 2"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 37,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(True, True)"
- ]
- },
- "execution_count": 37,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "2 >= 2, 2 <= 2"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 38,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "execution_count": 38,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# equality\n",
- "[1,2] == [1,2]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 39,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "execution_count": 39,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# objects identical?\n",
- "l1 = l2 = [1,2]\n",
- "\n",
- "l1 is l2"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Data Types in Python\n",
- "\n",
- "Now that we know a bit about the general use of Python, it's time to look at different data types we may find useful in our course. Besides the data types for the different number types mentioned above, there are also other types like **strings**, **lists**, **tuples** and **dictionaries**. There are usually a number of *methods* (functions) connected to each data type providing useful functions. We will not talk about these methods, except we need them. It is up to you to explore the internet a bit and search for suitable methods for your purpose.\n",
- "\n",
- "The follwing few cells will give you a short introduction into each type. "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "### Strings\n",
- "\n",
- "**Strings** are lists of keyboard characters as well as other characters not on your keyboard. They are not particularly interesting in scientific computing, but they are nevertheless necessary and useful. Texts on programming with Python typically devote a good deal of time and space to learning about strings and how to manipulate them. Our uses of them are rather modest, however, so we take a minimalist’s approach and only introduce a few of their features."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 61,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:05:13.381263Z",
- "start_time": "2018-04-16T15:05:13.378101Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "s='Hello' # string variable"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 62,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:14.904816Z",
- "start_time": "2018-04-16T14:56:14.901345Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "t=\"World!\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "String can be concatenated using the *+* operator. "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 60,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:17.519251Z",
- "start_time": "2018-04-16T14:56:17.515677Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "c=s+' '+t"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 61,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:20.568540Z",
- "start_time": "2018-04-16T14:56:20.564378Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Hello World!\n"
- ]
- }
- ],
- "source": [
- "print(c)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "As strings are lists, each character in a string can be accessed by addressing the position in the string (see Lists section)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 62,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:23.033095Z",
- "start_time": "2018-04-16T14:56:23.027938Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'e'"
- ]
- },
- "execution_count": 62,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "c[1]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "Strings can also be made out of numbers."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 63,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:26.113138Z",
- "start_time": "2018-04-16T14:56:26.108211Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'975321'"
- ]
- },
- "execution_count": 63,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "\"975\"+\"321\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "If you want to obtain a number of a string, you can use what is known as type casting. Using type casting you may convert the string or any other data type into a different type if this is possible. To find out if a string is a pure number you may use the str.isnumeric() method. For the above string, we may want to do a conversion to the type *int* by typing:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 64,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "execution_count": 64,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "(\"975\"+\"321\").isnumeric() # or you may use as well str.isnumeric(\"975\"+\"321\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 65,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:59:26.898131Z",
- "start_time": "2018-04-16T14:59:26.893171Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "975321"
- ]
- },
- "execution_count": 65,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "int(\"975\"+\"321\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "There are a number of methods connected to the string data type. Usually the relate to formatting or finding sub-strings. Formatting will be a topic in our next lecture. Here we just refer to one simple find example."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 66,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "3"
- ]
- },
- "execution_count": 66,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "t.find('ld') ## returns the index at which the sub string 'ld' starts in t"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 67,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'World!'"
- ]
- },
- "execution_count": 67,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "t.capitalize()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "### Lists\n",
- "\n",
- "**Lists** are another data structure, similar to NumPy arrays, but unlike NumPy arrays, lists are a part of core Python. Lists have a variety of uses. They are useful, for example, in various bookkeeping tasks that arise in computer programming. Like arrays, they are sometimes used to store data. However, lists do not have the specialized properties and tools that make arrays so powerful for scientific computing. So in general, we prefer arrays to lists for working with scientific data. For other tasks, lists work just fine and can even be preferable to arrays.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 105,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:00:48.538250Z",
- "start_time": "2018-04-16T15:00:48.535066Z"
- },
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "outputs": [],
- "source": [
- "a = [0, 1, 1, 2, 3, 5, 8, 13]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 91,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:00:49.850960Z",
- "start_time": "2018-04-16T15:00:49.847769Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "b = [5., \"girl\", 2+0j, \"horse\", 21]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "The length of a list can be obtained by the *len()* command if you need the number of elements in the list for your calculations."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 92,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:07:44.966883Z",
- "start_time": "2018-04-16T15:07:44.961951Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "5"
- ]
- },
- "execution_count": 92,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "len(b)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "There are powerful ways to iterate through a list and also through arrays in form of *iterator*. We will talk about them later in more detail. Here is an example, which shows the powerful options you have in Python. The example will go through the list **b** and return all elements of the type str. "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 93,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:10:25.820782Z",
- "start_time": "2018-04-16T15:10:25.815249Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "['girl', 'horse']"
- ]
- },
- "execution_count": 93,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "[element for element in b if type(element)==str]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Individual elements in a list can be accessed by the variable name and the number (index) of the list element put in square brackets. Note that the index for the elements start at *0* for the first element (left). "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 94,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:11:58.786370Z",
- "start_time": "2018-04-16T15:11:58.781564Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'girl'"
- ]
- },
- "execution_count": 94,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "b[1]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Elements may be also accessed from the back by nagative indices. *b[-1]* denotes the last element in the list and *b[-2]*, the element before the last."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 95,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:01.177759Z",
- "start_time": "2018-04-16T15:12:01.171973Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "21"
- ]
- },
- "execution_count": 95,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "b[-1]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 96,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:03.352948Z",
- "start_time": "2018-04-16T15:12:03.347674Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'horse'"
- ]
- },
- "execution_count": 96,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "b[-2]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Individual elements in a list can be replaced by assigning a new value to them"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 97,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:05.751146Z",
- "start_time": "2018-04-16T15:12:05.748188Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "b[-2]='cat'"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 98,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:14.659098Z",
- "start_time": "2018-04-16T15:12:14.653898Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[5.0, 'girl', (2+0j), 'cat', 21]"
- ]
- },
- "execution_count": 98,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "b"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Lists can be concatanated by the *+* operator"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 106,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:19.665264Z",
- "start_time": "2018-04-16T15:12:19.659673Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[0, 1, 1, 2, 3, 5, 8, 13, 5.0, 'girl', (2+0j), 'cat', 21]"
- ]
- },
- "execution_count": 106,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "c=a+b\n",
- "c"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "A very useful feature for lists in python is the **slicing** of lists. Slicing means, that we access only a range of elements in the list, i.e. element 3 to 7. This is done by inserting the starting and the ending element number separated by a colon (:) in the square brackets. The index numbers can be positive or negative again."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 100,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:23.299713Z",
- "start_time": "2018-04-16T15:13:23.294538Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[2, 3, 5, 8]"
- ]
- },
- "execution_count": 100,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "c[3:7]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Inserting a second colon behind the ending element index together with a thrid number allows even to select only ever second or third element from a list."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 101,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:25.682027Z",
- "start_time": "2018-04-16T15:13:25.676726Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[2, 5, 13]"
- ]
- },
- "execution_count": 101,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "c[3:9:2]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "It is sometimes also useful to reverse a list. This can be easily done with the reverse command."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 103,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[0, 1, 1, 2, 3, 5, 8, 13, 5.0, 'girl', (2+0j), 'cat', 21]"
- ]
- },
- "execution_count": 103,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "c.reverse()\n",
- "c"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Lists may be created in different ways. An empty list can be created by assigning emtpy square brackets to a variable name. You can append elements to the list with the help of the append command which has to be added to the variable name as shown below. This way of adding a particular function, which is part of a certain variable class is part of object oriented programming."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 87,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:28.255450Z",
- "start_time": "2018-04-16T15:13:28.252567Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "a=[]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 88,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2017-04-20T20:53:21.102141+02:00",
- "start_time": "2017-04-20T20:53:21.098571"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "a.append('h')"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "A list of numbers can be easily created by the *range()* command."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 76,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:58.291820Z",
- "start_time": "2018-04-16T15:13:58.286904Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "range(0, 10)"
- ]
- },
- "execution_count": 76,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "range(10)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 77,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:59.337418Z",
- "start_time": "2018-04-16T15:13:59.332474Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "range(3, 10)"
- ]
- },
- "execution_count": 77,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "range(3,10)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 78,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:14:00.450010Z",
- "start_time": "2018-04-16T15:14:00.444737Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "range(3, 10, 2)"
- ]
- },
- "execution_count": 78,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "range(3,10,2)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "ExecuteTime": {
- "end_time": "2017-04-20T21:00:24.038302+02:00",
- "start_time": "2017-04-20T21:00:24.032999"
- },
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Lists (and also tuples below) can be multidimensional as well, i.e. for an image. The individual elements may then be addressed by supplying two indices in two square brackets."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 79,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:14:06.425036Z",
- "start_time": "2018-04-16T15:14:06.421709Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "a = [[3, 9], [8, 5], [11, 1]]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 80,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:14:07.330192Z",
- "start_time": "2018-04-16T15:14:07.325086Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[8, 5]"
- ]
- },
- "execution_count": 80,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "a[1]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 81,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:14:08.460686Z",
- "start_time": "2018-04-16T15:14:08.455419Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "8"
- ]
- },
- "execution_count": 81,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "a[1][0]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "### Tuples\n",
- "\n",
- "**Tuples** are also list, but immutable. That means, if a tuple has been once defined, it cannot be changed. Try to change an element to see the result."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 64,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "(10, 20) \n"
- ]
- }
- ],
- "source": [
- "point = (10, 20)\n",
- "\n",
- "print(point, type(point))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Tuples may be unpacked, e.g. its values may be assigned to normal variables in the following way"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 65,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "x = 10\n",
- "y = 20\n"
- ]
- }
- ],
- "source": [
- "x, y = point\n",
- "\n",
- "print(\"x =\", x)\n",
- "print(\"y =\", y)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "ExecuteTime": {
- "end_time": "2017-04-17T20:46:46.711516+02:00",
- "start_time": "2017-04-17T20:46:46.705826"
- },
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "### Dictionaries\n",
- "\n",
- "\n",
- "**Dictionaries** are like lists, but the elements of dictionaries are accessed in a different way than for lists. The elements of lists and arrays are numbered consecutively, and to access an element of a list or an array, you simply refer to the number corresponding to its position in the sequence. The elements of dictionaries are accessed by “keys”, which can be either strings or (arbitrary) integers (in no particular order). Dictionaries are an important part of core Python. However, we do not make much use of them in this introduction to scientific Python, so our discussion of them is limited."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 66,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2019-04-09T12:11:22.208828Z",
- "start_time": "2019-04-09T12:11:22.205914Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "room = {\"Ralf\":422, \"Frank\":322, \"Dekan\":550}"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 67,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2019-04-09T12:11:50.431570Z",
- "start_time": "2019-04-09T12:11:50.428226Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "422"
- ]
- },
- "execution_count": 67,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "room['Ralf']"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 68,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2019-04-09T12:11:26.396475Z",
- "start_time": "2019-04-09T12:11:26.392435Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "dict_keys(['Ralf', 'Frank', 'Dekan'])"
- ]
- },
- "execution_count": 68,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "room.keys()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 69,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2019-04-09T12:11:37.030931Z",
- "start_time": "2019-04-09T12:11:37.027249Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "dict_values([422, 322, 550])"
- ]
- },
- "execution_count": 69,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "room.values()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Modules"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "Most of the functionality in Python is provided by *modules*. The Python Standard Library is a large collection of modules that provides *cross-platform* implementations of common facilities such as access to the operating system, file I/O, string management, network communication, and much more."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "To use a module in a Python program it first has to be imported. A module can be imported using the `import` statement. For example, to import the module `math`, which contains many standard mathematical functions, we can do:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "1.0\n"
- ]
- }
- ],
- "source": [
- "import math\n",
- "\n",
- "x = math.cos(2 * math.pi)\n",
- "\n",
- "print(x)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "This includes the whole module and makes it available for use later in the program. Alternatively, we can chose to import all symbols (functions and variables) in a module to the current namespace (so that we don't need to use the prefix \"`math.`\" every time we use something from the `math` module:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "1.0\n"
- ]
- }
- ],
- "source": [
- "from math import *\n",
- "\n",
- "x = cos(2 * pi)\n",
- "\n",
- "print(x)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "This pattern can be very convenient, but in large programs that include many modules it is often a good idea to keep the symbols from each module in their own namespaces, by using the `import math` pattern. This would elminate potentially confusing problems with name space collisions."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "### Contents and documentation of a module"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "Once a module is imported, we can list the symbols it provides using the `dir` function:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 127,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']\n"
- ]
- }
- ],
- "source": [
- "import math\n",
- "\n",
- "print(dir(math))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "And using the function `help` we can get a description of each function (almost .. not all functions have docstrings, as they are technically called, but the vast majority of functions are documented this way). "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 128,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Help on built-in function log in module math:\n",
- "\n",
- "log(...)\n",
- " log(x, [base=math.e])\n",
- " Return the logarithm of x to the given base.\n",
- " \n",
- " If the base not specified, returns the natural logarithm (base e) of x.\n",
- "\n"
- ]
- }
- ],
- "source": [
- "help(math.log)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 130,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "2.302585092994046"
- ]
- },
- "execution_count": 130,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "math.log(10)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 131,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "3.3219280948873626"
- ]
- },
- "execution_count": 131,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "math.log(10, 2)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "We can also use the `help` function directly on modules: Try\n",
- "\n",
- " help(math) \n",
- "\n",
- "Some very useful modules form the Python standard library are `os`, `sys`, `math`, `shutil`, `re`, `subprocess`, `multiprocessing`, `threading`. "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "A complete lists of standard modules for Python 3 is available at http://docs.python.org/3/library/ ."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Exceptions"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "In Python errors are managed with a special language construct called \"Exceptions\". When errors occur exceptions can be raised, which interrupts the normal program flow and fallback to somewhere else in the code where the closest try-except statement is defined."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "To generate an exception we can use the `raise` statement, which takes an argument that must be an instance of the class `BaseException` or a class derived from it. "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "ename": "Exception",
- "evalue": "description of the error",
- "output_type": "error",
- "traceback": [
- "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[0;31mException\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[0mException\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"description of the error\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
- "\u001b[0;31mException\u001b[0m: description of the error"
- ]
- }
- ],
- "source": [
- "raise Exception(\"description of the error\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "A typical use of exceptions is to abort functions when some error condition occurs, for example:\n",
- "\n",
- " def my_function(arguments):\n",
- " \n",
- " if not verify(arguments):\n",
- " raise Exception(\"Invalid arguments\")\n",
- " \n",
- " # rest of the code goes here"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "To gracefully catch errors that are generated by functions and class methods, or by the Python interpreter itself, use the `try` and `except` statements:\n",
- "\n",
- " try:\n",
- " # normal code goes here\n",
- " except:\n",
- " # code for error handling goes here\n",
- " # this code is not executed unless the code\n",
- " # above generated an error\n",
- "\n",
- "For example:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "test\n",
- "Caught an exception\n"
- ]
- }
- ],
- "source": [
- "try:\n",
- " print(\"test\")\n",
- " # generate an error: the variable test is not defined\n",
- " print(test)\n",
- "except:\n",
- " print(\"Caught an exception\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "To get information about the error, we can access the `Exception` class instance that describes the exception by using for example:\n",
- "\n",
- " except Exception as e:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {
- "collapsed": true,
- "jupyter": {
- "outputs_hidden": true
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "test\n",
- "Caught an exception:name 'test' is not defined\n"
- ]
- }
- ],
- "source": [
- "try:\n",
- " print(\"test\")\n",
- " # generate an error: the variable test is not defined\n",
- " print(test)\n",
- "except Exception as e:\n",
- " print(\"Caught an exception:\" + str(e))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "***\n",
- "## What's next"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "This has been a short overview over the basic things in Jupyter and Python. We will address more details on the way to our physical problems and data analysis code. As one of the most fundamental features required in physics is plotting of data, we will address plotting with a first primer next week in Lecture 2. Also input and output including keybord and files will be of our concern. "
- ]
- }
- ],
- "metadata": {
- "anaconda-cloud": {},
- "celltoolbar": "Slideshow",
- "hide_input": false,
- "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.7.6"
- },
- "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": true,
- "user_envs_cfg": false
- },
- "nteract": {
- "version": "0.22.4"
- },
- "toc": {
- "nav_menu": {
- "height": "12px",
- "width": "252px"
- },
- "number_sections": true,
- "sideBar": true,
- "skip_h1_title": false,
- "toc_cell": true,
- "toc_position": {
- "height": "1335px",
- "left": "0px",
- "right": "2386px",
- "top": "110px",
- "width": "302px"
- },
- "toc_section_display": "block",
- "toc_window_display": false
- },
- "varInspector": {
- "cols": {
- "lenName": 16,
- "lenType": 16,
- "lenVar": 40
- },
- "kernels_config": {
- "python": {
- "delete_cmd_postfix": "",
- "delete_cmd_prefix": "del ",
- "library": "var_list.py",
- "varRefreshCmd": "print(var_dic_list())"
- },
- "r": {
- "delete_cmd_postfix": ") ",
- "delete_cmd_prefix": "rm(",
- "library": "var_list.r",
- "varRefreshCmd": "cat(var_dic_list()) "
- }
- },
- "types_to_exclude": [
- "module",
- "function",
- "builtin_function_or_method",
- "instance",
- "_Feature"
- ],
- "window_display": false
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/build/doctrees/nbsphinx/notebooks/L1/Lecture-1.pdf b/build/doctrees/nbsphinx/notebooks/L1/Lecture-1.pdf
deleted file mode 100644
index cfee7fa..0000000
Binary files a/build/doctrees/nbsphinx/notebooks/L1/Lecture-1.pdf and /dev/null differ
diff --git a/build/doctrees/nbsphinx/notebooks/L1/exceptions.ipynb b/build/doctrees/nbsphinx/notebooks/L1/exceptions.ipynb
deleted file mode 100644
index d61a776..0000000
--- a/build/doctrees/nbsphinx/notebooks/L1/exceptions.ipynb
+++ /dev/null
@@ -1,195 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "source": [
- "## Exceptions"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "source": [
- "In Python errors are managed with a special language construct called \"Exceptions\". When errors occur exceptions can be raised, which interrupts the normal program flow and fallback to somewhere else in the code where the closest try-except statement is defined."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "source": [
- "To generate an exception we can use the `raise` statement, which takes an argument that must be an instance of the class `BaseException` or a class derived from it. "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "outputs": [
- {
- "ename": "Exception",
- "evalue": "description of the error",
- "output_type": "error",
- "traceback": [
- "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[0;31mException\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[0mException\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"description of the error\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
- "\u001b[0;31mException\u001b[0m: description of the error"
- ]
- }
- ],
- "source": [
- "raise Exception(\"description of the error\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "source": [
- "A typical use of exceptions is to abort functions when some error condition occurs, for example:\n",
- "\n",
- " def my_function(arguments):\n",
- " \n",
- " if not verify(arguments):\n",
- " raise Exception(\"Invalid arguments\")\n",
- " \n",
- " # rest of the code goes here"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "source": [
- "To gracefully catch errors that are generated by functions and class methods, or by the Python interpreter itself, use the `try` and `except` statements:\n",
- "\n",
- " try:\n",
- " # normal code goes here\n",
- " except:\n",
- " # code for error handling goes here\n",
- " # this code is not executed unless the code\n",
- " # above generated an error\n",
- "\n",
- "For example:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "test\n",
- "Caught an exception\n"
- ]
- }
- ],
- "source": [
- "try:\n",
- " print(\"test\")\n",
- " # generate an error: the variable test is not defined\n",
- " print(test)\n",
- "except:\n",
- " print(\"Caught an exception\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "source": [
- "To get information about the error, we can access the `Exception` class instance that describes the exception by using for example:\n",
- "\n",
- " except Exception as e:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "test\n",
- "Caught an exception:name 'test' is not defined\n"
- ]
- }
- ],
- "source": [
- "try:\n",
- " print(\"test\")\n",
- " # generate an error: the variable test is not defined\n",
- " print(test)\n",
- "except Exception as e:\n",
- " print(\"Caught an exception:\" + str(e))"
- ]
- }
- ],
- "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.7.6"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/build/doctrees/nbsphinx/notebooks/L1/exceptions.pdf b/build/doctrees/nbsphinx/notebooks/L1/exceptions.pdf
deleted file mode 100644
index e4d39b7..0000000
Binary files a/build/doctrees/nbsphinx/notebooks/L1/exceptions.pdf and /dev/null differ
diff --git a/build/doctrees/nbsphinx/notebooks/L1/spherical_surface.ipynb b/build/doctrees/nbsphinx/notebooks/L1/spherical_surface.ipynb
index 7669e9d..b92f51d 100644
--- a/build/doctrees/nbsphinx/notebooks/L1/spherical_surface.ipynb
+++ b/build/doctrees/nbsphinx/notebooks/L1/spherical_surface.ipynb
@@ -6,10 +6,10 @@
"id": "c0c64cbd-ea88-41b1-9b3c-42e33877ee80",
"metadata": {
"execution": {
- "iopub.execute_input": "2024-04-10T11:45:45.938776Z",
- "iopub.status.busy": "2024-04-10T11:45:45.938002Z",
- "iopub.status.idle": "2024-04-10T11:45:46.317688Z",
- "shell.execute_reply": "2024-04-10T11:45:46.317226Z"
+ "iopub.execute_input": "2024-04-13T10:32:44.300323Z",
+ "iopub.status.busy": "2024-04-13T10:32:44.299559Z",
+ "iopub.status.idle": "2024-04-13T10:32:44.712647Z",
+ "shell.execute_reply": "2024-04-13T10:32:44.712171Z"
}
},
"outputs": [
diff --git a/build/doctrees/nbsphinx/notebooks/L1/spherical_surface.pdf b/build/doctrees/nbsphinx/notebooks/L1/spherical_surface.pdf
deleted file mode 100644
index 9a599f3..0000000
Binary files a/build/doctrees/nbsphinx/notebooks/L1/spherical_surface.pdf and /dev/null differ
diff --git a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_11_1.png b/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_11_1.png
deleted file mode 100644
index 7ea030e..0000000
Binary files a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_11_1.png and /dev/null differ
diff --git a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_12_1.png b/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_12_1.png
deleted file mode 100644
index 7ea030e..0000000
Binary files a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_12_1.png and /dev/null differ
diff --git a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_13_0.png b/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_13_0.png
deleted file mode 100644
index 82aead3..0000000
Binary files a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_13_0.png and /dev/null differ
diff --git a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_14_0.png b/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_14_0.png
deleted file mode 100644
index 82aead3..0000000
Binary files a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_14_0.png and /dev/null differ
diff --git a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_15_0.png b/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_15_0.png
deleted file mode 100644
index 82aead3..0000000
Binary files a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_15_0.png and /dev/null differ
diff --git a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_21_0.png b/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_21_0.png
deleted file mode 100644
index b980240..0000000
Binary files a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_21_0.png and /dev/null differ
diff --git a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_22_0.png b/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_22_0.png
deleted file mode 100644
index b980240..0000000
Binary files a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_22_0.png and /dev/null differ
diff --git a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_25_0.png b/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_25_0.png
deleted file mode 100644
index dc139be..0000000
Binary files a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_25_0.png and /dev/null differ
diff --git a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_26_0.png b/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_26_0.png
deleted file mode 100644
index dc139be..0000000
Binary files a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_26_0.png and /dev/null differ
diff --git a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_27_0.png b/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_27_0.png
index dc139be..643db9c 100644
Binary files a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_27_0.png and b/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_27_0.png differ
diff --git a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_28_0.png b/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_28_0.png
index 643db9c..a420c81 100644
Binary files a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_28_0.png and b/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_28_0.png differ
diff --git a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_29_0.png b/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_29_0.png
deleted file mode 100644
index 643db9c..0000000
Binary files a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_29_0.png and /dev/null differ
diff --git a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_30_0.png b/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_30_0.png
deleted file mode 100644
index 643db9c..0000000
Binary files a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_30_0.png and /dev/null differ
diff --git a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_31_0.png b/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_31_0.png
deleted file mode 100644
index a420c81..0000000
Binary files a/build/doctrees/nbsphinx/notebooks_L1_1_ray_optics_31_0.png and /dev/null differ
diff --git a/build/doctrees/notebooks/L1/1_ray_optics.doctree b/build/doctrees/notebooks/L1/1_ray_optics.doctree
index cad65ed..d6eebd3 100644
Binary files a/build/doctrees/notebooks/L1/1_ray_optics.doctree and b/build/doctrees/notebooks/L1/1_ray_optics.doctree differ
diff --git a/build/doctrees/notebooks/L1/1_variables.doctree b/build/doctrees/notebooks/L1/1_variables.doctree
deleted file mode 100644
index 866ba82..0000000
Binary files a/build/doctrees/notebooks/L1/1_variables.doctree and /dev/null differ
diff --git a/build/doctrees/notebooks/L1/2_operators.doctree b/build/doctrees/notebooks/L1/2_operators.doctree
deleted file mode 100644
index 507f0c8..0000000
Binary files a/build/doctrees/notebooks/L1/2_operators.doctree and /dev/null differ
diff --git a/build/doctrees/notebooks/L1/3_datatypes.doctree b/build/doctrees/notebooks/L1/3_datatypes.doctree
deleted file mode 100644
index 8933941..0000000
Binary files a/build/doctrees/notebooks/L1/3_datatypes.doctree and /dev/null differ
diff --git a/build/doctrees/notebooks/L1/4_modules.doctree b/build/doctrees/notebooks/L1/4_modules.doctree
deleted file mode 100644
index 8adc3cf..0000000
Binary files a/build/doctrees/notebooks/L1/4_modules.doctree and /dev/null differ
diff --git a/build/doctrees/notebooks/L1/Lecture-1.doctree b/build/doctrees/notebooks/L1/Lecture-1.doctree
deleted file mode 100644
index e43d796..0000000
Binary files a/build/doctrees/notebooks/L1/Lecture-1.doctree and /dev/null differ
diff --git a/build/doctrees/notebooks/L1/Lecture1.doctree b/build/doctrees/notebooks/L1/Lecture1.doctree
index 4acf293..7783a82 100644
Binary files a/build/doctrees/notebooks/L1/Lecture1.doctree and b/build/doctrees/notebooks/L1/Lecture1.doctree differ
diff --git a/build/doctrees/notebooks/L1/exceptions.doctree b/build/doctrees/notebooks/L1/exceptions.doctree
deleted file mode 100644
index 29aaf26..0000000
Binary files a/build/doctrees/notebooks/L1/exceptions.doctree and /dev/null differ
diff --git a/build/html/.ipynb_checkpoints/index-checkpoint.html b/build/html/.ipynb_checkpoints/index-checkpoint.html
deleted file mode 100644
index 4793776..0000000
--- a/build/html/.ipynb_checkpoints/index-checkpoint.html
+++ /dev/null
@@ -1,259 +0,0 @@
-
-
-
-
-
-
-
-
- Introduction to Photonics 1 24 documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
The Python programming language is useful for all kinds of scientific and engineering tasks. You can use it to analyze and plot data. You can also use it to numerically solve scientific problems that are difficult or even impossible to solve analytically. Python is freely available and has been, due to its modular structure, extended with a nearly infinite number of different purpose modules.
-
This course intends to introduce you into the programming with Python. It is aimed more to the beginner but we hope that more advanced users find it interesting as well.
-We will start the course with and introduction to the Jupyter Notebook environment which we will be using throughout the course. Starting from there we will provide some introduction into Python and then show you some basic functionalities, like plotting and analyzing data by curve fitting, reading and writing of files which are some of the tasks you will encounter during your physics studies. We will also show you some more advanced topics of animating inside Jupyter and simulating physical processes in
-
-
mechanics
-
electrostatics
-
waves
-
quantum mechanics
-
optics
-
-
At the end of the course we will also add some basic introduction into machine learning which is now becoming an important tool even in physics.
-
We will not present a comprehensive list of numerical simulation schemes, but use the examples to stimulate your curiosity. As there are slight differences in the syntax of different Python versions, we will in the following always refer to Python 3 standards.
\n",
- "\n"
- ],
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "from IPython.display import display, HTML, Javascript\n",
- "\n",
- "# Define HTML for the slider and a script to handle the slider's value changes\n",
- "html_slider = \"\"\"\n",
- "
\n",
- " \n",
- " \n",
- "
\n",
- "\n",
- "\"\"\"\n",
- "\n",
- "# Display the slider in the notebook\n",
- "display(HTML(html_slider))"
- ]
- },
{
"cell_type": "code",
"execution_count": 15,
@@ -874,6 +461,7 @@
"execution_count": 12,
"id": "2409ba4a-3021-40a7-afac-bf9998efe9ff",
"metadata": {
+ "nbsphinx": "hidden",
"tags": []
},
"outputs": [
@@ -959,6 +547,7 @@
"execution_count": 54,
"id": "001bf9a0-a84a-4248-aee2-54cdbbabdaac",
"metadata": {
+ "nbsphinx": "hidden",
"tags": []
},
"outputs": [
diff --git a/build/html/_sources/notebooks/L1/1_variables.ipynb.txt b/build/html/_sources/notebooks/L1/1_variables.ipynb.txt
deleted file mode 100644
index 86b042c..0000000
--- a/build/html/_sources/notebooks/L1/1_variables.ipynb.txt
+++ /dev/null
@@ -1,683 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "# Variables and types"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "## Symbol names \n",
- "\n",
- "Variable names in Python can contain alphanumerical characters `a-z`, `A-Z`, `0-9` and some special characters such as `_`. Normal variable names must start with a letter. \n",
- "\n",
- "By convention, variable names start with a lower-case letter, and Class names start with a capital letter. "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "
\n",
- "\n",
- "**Note:** Reserved keywords\n",
- "\n",
- "There are a number of Python keywords that cannot be used as variable names. These keywords are:\n",
- "\n",
- " and, as, assert, break, class, continue, def, del, elif, else, except, \n",
- " exec, finally, for, from, global, if, import, in, is, lambda, not, or, \n",
- " pass, print, raise, return, try, while, with, yield\n",
- "\n",
- "Note: Be aware of the keyword `lambda`, which could easily be a natural variable name in a scientific program. But being a keyword, it cannot be used as a variable name.\n",
- "\n",
- "
\n",
- "\n",
- "**Note:** Division\n",
- " \n",
- "The `/` operator always performs a floating point division in Python 3.x. \n",
- "This is not true in Python 2.x, where the result of `/` is always an integer \n",
- "if the operands are integers. To be more specific, `1/2 = 0.5` (`float`) in \n",
- "Python 3.x, and `1/2 = 0` (`int`) in Python 2.x (but `1.0/2 = 0.5` in Python 2.x).\n",
- "\n",
- "
"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "The boolean operators are spelled out as the words `and`, `not`, `or`. "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "False"
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "True and False"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "execution_count": 7,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "not False"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "True or False"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "Comparison operators `>`, `<`, `>=` (greater or equal), `<=` (less or equal), `==` equality, `is` identical."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(True, False)"
- ]
- },
- "execution_count": 10,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "2 > 1, 2 < 1"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(False, False)"
- ]
- },
- "execution_count": 11,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "2 > 2, 2 < 2"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(True, True)"
- ]
- },
- "execution_count": 13,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "2 >= 2, 2 <= 2"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "execution_count": 16,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# equality\n",
- "[1,2] == [1,2]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "execution_count": 17,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# objects identical?\n",
- "l1 = l2 = [1,2]\n",
- "\n",
- "l1 is l2"
- ]
- }
- ],
- "metadata": {
- "anaconda-cloud": {},
- "celltoolbar": "Slideshow",
- "hide_input": false,
- "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.7.6"
- },
- "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": true,
- "user_envs_cfg": false
- },
- "toc": {
- "nav_menu": {
- "height": "12px",
- "width": "252px"
- },
- "number_sections": true,
- "sideBar": true,
- "skip_h1_title": false,
- "toc_cell": true,
- "toc_position": {
- "height": "1335px",
- "left": "0px",
- "right": "2386px",
- "top": "110px",
- "width": "302px"
- },
- "toc_section_display": "block",
- "toc_window_display": false
- },
- "varInspector": {
- "cols": {
- "lenName": 16,
- "lenType": 16,
- "lenVar": 40
- },
- "kernels_config": {
- "python": {
- "delete_cmd_postfix": "",
- "delete_cmd_prefix": "del ",
- "library": "var_list.py",
- "varRefreshCmd": "print(var_dic_list())"
- },
- "r": {
- "delete_cmd_postfix": ") ",
- "delete_cmd_prefix": "rm(",
- "library": "var_list.r",
- "varRefreshCmd": "cat(var_dic_list()) "
- }
- },
- "types_to_exclude": [
- "module",
- "function",
- "builtin_function_or_method",
- "instance",
- "_Feature"
- ],
- "window_display": false
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/build/html/_sources/notebooks/L1/3_datatypes.ipynb.txt b/build/html/_sources/notebooks/L1/3_datatypes.ipynb.txt
deleted file mode 100644
index aaa0859..0000000
--- a/build/html/_sources/notebooks/L1/3_datatypes.ipynb.txt
+++ /dev/null
@@ -1,1322 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "# Data Types in Python"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "It's time to look at different data types we may find useful in our course. Besides the number types mentioned previously, there are also other types like **strings**, **lists**, **tuples** and **dictionaries**. \n",
- "\n",
- "Each of these data types has a number of connected `methods` (functions) which allow to manipulate the data contained in a variable. If you want to know which methods are available for a certain object use the command `dir`, e.g.\n",
- "\n",
- "~~~\n",
- "s=\"string\"\n",
- "dir(s)\n",
- "~~~\n",
- "\n",
- "The following few cells will give you a short introduction into each type. "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Strings\n",
- "\n",
- "**Strings** are lists of keyboard characters as well as other characters not on your keyboard. They are useful for printing results on the screen, during reading and writing of data."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:05:13.381263Z",
- "start_time": "2018-04-16T15:05:13.378101Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'Hello'"
- ]
- },
- "execution_count": 1,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "s='Hello' # string variable\n",
- "s"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:14.904816Z",
- "start_time": "2018-04-16T14:56:14.901345Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "t=\"world!\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "String can be concatenated using the *+* operator. "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:17.519251Z",
- "start_time": "2018-04-16T14:56:17.515677Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "c=s+' '+t"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:20.568540Z",
- "start_time": "2018-04-16T14:56:20.564378Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Hello world!\n"
- ]
- }
- ],
- "source": [
- "print(c)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "As strings are lists, each character in a string can be accessed by addressing the position in the string (see Lists section)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:23.033095Z",
- "start_time": "2018-04-16T14:56:23.027938Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'e'"
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "c[1]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "Strings can also be made out of numbers."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:26.113138Z",
- "start_time": "2018-04-16T14:56:26.108211Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'975321'"
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "\"975\"+\"321\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "If you want to obtain a number of a string, you can use what is known as type casting. Using type casting you may convert the string or any other data type into a different type if this is possible. To find out if a string is a pure number you may use the `str.isnumeric` method. For the above string, we may want to do a conversion to the type *int* by typing:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "execution_count": 7,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "(\"975\"+\"321\").isnumeric() # or you may use as well str.isnumeric(\"975\"+\"321\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:59:26.898131Z",
- "start_time": "2018-04-16T14:59:26.893171Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "975321"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "int(\"975\"+\"321\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "There are a number of methods connected to the string data type. Usually the relate to formatting or finding sub-strings. Formatting will be a topic in our next lecture. Here we just refer to one simple find example."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "3"
- ]
- },
- "execution_count": 9,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "t.find('ld') ## returns the index at which the sub string 'ld' starts in t"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'World!'"
- ]
- },
- "execution_count": 12,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "t.capitalize()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Lists\n",
- "\n",
- "**Lists** have a variety of uses. They are useful, for example, in various bookkeeping tasks that arise in computer programming. Like arrays, they are sometimes used to store data. However, lists do not have the specialized properties and tools that make arrays so powerful for scientific computing. So in general, we prefer arrays to lists for working with scientific data. For other tasks, lists work just fine and can even be preferable to arrays.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:00:48.538250Z",
- "start_time": "2018-04-16T15:00:48.535066Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "a = [0, 1, 1, 2, 3, 5, 8, 13]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:00:49.850960Z",
- "start_time": "2018-04-16T15:00:49.847769Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "b = [5., \"girl\", 2+0j, \"horse\", 21]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Individual elements in a list can be accessed by the variable name and the number (index) of the list element put in square brackets. Note that the index for the elements start at *0* for the first element (left). "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "
\n",
- "\n",
- "**Note** Indices in Python\n",
- "\n",
- "\n",
- "The first element of a list or array is accessed by the index 0. If the array has N elements, the last entries index is N-1.\n",
- "\n",
- "
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(5.0, 'girl')"
- ]
- },
- "execution_count": 17,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "b[0],b[1]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Elements may be also accessed from the back by nagative indices. *b[-1]* denotes the last element in the list and *b[-2]*, the element before the last."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:01.177759Z",
- "start_time": "2018-04-16T15:12:01.171973Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "21"
- ]
- },
- "execution_count": 19,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "b[-1]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:03.352948Z",
- "start_time": "2018-04-16T15:12:03.347674Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'horse'"
- ]
- },
- "execution_count": 20,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "b[-2]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "The length of a list can be obtained by the `len` command if you need the number of elements in the list for your calculations."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:07:44.966883Z",
- "start_time": "2018-04-16T15:07:44.961951Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "5"
- ]
- },
- "execution_count": 21,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "len(b)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "There are powerful ways to iterate through a list and also through arrays in form of *iterator*. This is called *list comprehension*. We will talk about them later in more detail. Here is an example, which shows the powerful options you have in Python."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 25,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:10:25.820782Z",
- "start_time": "2018-04-16T15:10:25.815249Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "['girl', 'horse']"
- ]
- },
- "execution_count": 25,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "[element for element in b if type(element)==str]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Individual elements in a list can be replaced by assigning a new value to them"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 26,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:05.751146Z",
- "start_time": "2018-04-16T15:12:05.748188Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "b[-2]='cat'"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 27,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:14.659098Z",
- "start_time": "2018-04-16T15:12:14.653898Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[5.0, 'girl', (2+0j), 'cat', 21]"
- ]
- },
- "execution_count": 27,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "b"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Lists can be concatanated by the *+* operator"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 28,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:19.665264Z",
- "start_time": "2018-04-16T15:12:19.659673Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[0, 1, 1, 2, 3, 5, 8, 13, 5.0, 'girl', (2+0j), 'cat', 21]"
- ]
- },
- "execution_count": 28,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "c=a+b\n",
- "c"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "A very useful feature for lists in python is the **slicing** of lists. Slicing means, that we access only a range of elements in the list, i.e. element 3 to 7. This is done by inserting the starting and the ending element number separated by a colon (:) in the square brackets. The index numbers can be positive or negative again."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 30,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:23.299713Z",
- "start_time": "2018-04-16T15:13:23.294538Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[2, 3, 5, 8]"
- ]
- },
- "execution_count": 30,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "c[3:7]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Inserting a second colon behind the ending element index together with a thrid number allows even to select only ever second or third element from a list."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 33,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:25.682027Z",
- "start_time": "2018-04-16T15:13:25.676726Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[2, 5, 13]"
- ]
- },
- "execution_count": 33,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "c[3:9:2]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "It is sometimes also useful to reverse a list. This can be easily done with the reverse command."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 34,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[21, 'cat', (2+0j), 'girl', 5.0, 13, 8, 5, 3, 2, 1, 1, 0]"
- ]
- },
- "execution_count": 34,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "c.reverse()\n",
- "c"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Lists may be created in different ways. An empty list can be created by assigning emtpy square brackets to a variable name. You can append elements to the list with the help of the append command which has to be added to the variable name as shown below. This way of adding a particular function, which is part of a certain variable class is part of object oriented programming."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 35,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:28.255450Z",
- "start_time": "2018-04-16T15:13:28.252567Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "a=[]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 37,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2017-04-20T20:53:21.102141+02:00",
- "start_time": "2017-04-20T20:53:21.098571"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "['h']"
- ]
- },
- "execution_count": 37,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "a"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "A list of numbers can be easily created by the `range()` command."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 39,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:58.291820Z",
- "start_time": "2018-04-16T15:13:58.286904Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]"
- ]
- },
- "execution_count": 39,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "list(range(10)) "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 40,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:59.337418Z",
- "start_time": "2018-04-16T15:13:59.332474Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[3, 4, 5, 6, 7, 8, 9]"
- ]
- },
- "execution_count": 40,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "list(range(3,10))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 41,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:14:00.450010Z",
- "start_time": "2018-04-16T15:14:00.444737Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[3, 5, 7, 9]"
- ]
- },
- "execution_count": 41,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "list(range(3,10,2))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "ExecuteTime": {
- "end_time": "2017-04-20T21:00:24.038302+02:00",
- "start_time": "2017-04-20T21:00:24.032999"
- },
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Lists (and also tuples below) can be multidimensional as well, i.e. for an image. The individual elements may then be addressed by supplying two indices in two square brackets."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 42,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:14:06.425036Z",
- "start_time": "2018-04-16T15:14:06.421709Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "a = [[3, 9], [8, 5], [11, 1]]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 43,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:14:07.330192Z",
- "start_time": "2018-04-16T15:14:07.325086Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[8, 5]"
- ]
- },
- "execution_count": 43,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "a[1]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 45,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:14:08.460686Z",
- "start_time": "2018-04-16T15:14:08.455419Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "5"
- ]
- },
- "execution_count": 45,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "a[1][1]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Tuples\n",
- "\n",
- "**Tuples** are also list, but immutable. That means, if a tuple has been once defined, it cannot be changed. Try to change an element to see the result."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 46,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "(10, 20) \n"
- ]
- }
- ],
- "source": [
- "point = (10, 20)\n",
- "\n",
- "print(point, type(point))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "Tuples may be unpacked, e.g. its values may be assigned to normal variables in the following way"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 47,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "x = 10\n",
- "y = 20\n"
- ]
- }
- ],
- "source": [
- "x, y = point\n",
- "\n",
- "print(\"x =\", x)\n",
- "print(\"y =\", y)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "ExecuteTime": {
- "end_time": "2017-04-17T20:46:46.711516+02:00",
- "start_time": "2017-04-17T20:46:46.705826"
- },
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Dictionaries\n",
- "\n",
- "\n",
- "**Dictionaries** are like lists, but the elements of dictionaries are accessed in a different way than for lists. The elements of lists and arrays are numbered consecutively, and to access an element of a list or an array, you simply refer to the number corresponding to its position in the sequence. The elements of dictionaries are accessed by “keys”, which can be either strings or (arbitrary) integers (in no particular order). Dictionaries are an important part of core Python. However, we do not make much use of them in this introduction to scientific Python, so our discussion of them is limited."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 48,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2019-04-09T12:11:22.208828Z",
- "start_time": "2019-04-09T12:11:22.205914Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [],
- "source": [
- "room = {\"Ralf\":422, \"Frank\":322, \"Dekan\":550}"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 50,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2019-04-09T12:11:50.431570Z",
- "start_time": "2019-04-09T12:11:50.428226Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "322"
- ]
- },
- "execution_count": 50,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "room['Frank']"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 51,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2019-04-09T12:11:26.396475Z",
- "start_time": "2019-04-09T12:11:26.392435Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "dict_keys(['Ralf', 'Frank', 'Dekan'])"
- ]
- },
- "execution_count": 51,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "room.keys()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 52,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2019-04-09T12:11:37.030931Z",
- "start_time": "2019-04-09T12:11:37.027249Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "dict_values([422, 322, 550])"
- ]
- },
- "execution_count": 52,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "room.values()"
- ]
- }
- ],
- "metadata": {
- "anaconda-cloud": {},
- "celltoolbar": "Slideshow",
- "hide_input": false,
- "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.7.6"
- },
- "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": true,
- "user_envs_cfg": false
- },
- "toc": {
- "nav_menu": {
- "height": "12px",
- "width": "252px"
- },
- "number_sections": true,
- "sideBar": true,
- "skip_h1_title": false,
- "toc_cell": true,
- "toc_position": {
- "height": "1335px",
- "left": "0px",
- "right": "2386px",
- "top": "110px",
- "width": "302px"
- },
- "toc_section_display": "block",
- "toc_window_display": false
- },
- "varInspector": {
- "cols": {
- "lenName": 16,
- "lenType": 16,
- "lenVar": 40
- },
- "kernels_config": {
- "python": {
- "delete_cmd_postfix": "",
- "delete_cmd_prefix": "del ",
- "library": "var_list.py",
- "varRefreshCmd": "print(var_dic_list())"
- },
- "r": {
- "delete_cmd_postfix": ") ",
- "delete_cmd_prefix": "rm(",
- "library": "var_list.r",
- "varRefreshCmd": "cat(var_dic_list()) "
- }
- },
- "types_to_exclude": [
- "module",
- "function",
- "builtin_function_or_method",
- "instance",
- "_Feature"
- ],
- "window_display": false
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/build/html/_sources/notebooks/L1/4_modules.ipynb.txt b/build/html/_sources/notebooks/L1/4_modules.ipynb.txt
deleted file mode 100644
index 76b88eb..0000000
--- a/build/html/_sources/notebooks/L1/4_modules.ipynb.txt
+++ /dev/null
@@ -1,455 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- },
- "toc-hr-collapsed": false
- },
- "source": [
- "# Modules and namespaces"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- },
- "toc-hr-collapsed": true
- },
- "source": [
- "## Modules"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "Most of the functionality in Python is provided by *modules*. The Python Standard Library is a large collection of modules that provides *cross-platform* implementations of common facilities such as access to the operating system, file I/O, string management, network communication, math, web-scraping, text manipulation, machine learning and much more."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "To use a module in a Python program it first has to be imported. A module can be imported using the `import` statement. For example, to import the module `math`, which contains many standard mathematical functions, we can do:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "1.0\n"
- ]
- }
- ],
- "source": [
- "import math\n",
- "\n",
- "x = math.cos(2 * math.pi)\n",
- "\n",
- "print(x)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "This includes the whole module and makes it available for use later in the program. Alternatively, we can chose to import all symbols (functions and variables) in a module so that we don't need to use the prefix \"`math.`\" every time we use something from the `math` module:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "1.0\n"
- ]
- }
- ],
- "source": [
- "from math import *\n",
- "\n",
- "x = cos(2 * pi)\n",
- "\n",
- "print(x)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "This pattern can be very convenient, but in large programs that include many modules it is often a good idea to keep the symbols from each module in their own namespaces, by using the `import math` pattern. This would eliminate potentially confusing problems."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "## Namespaces"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "A namespace is an identifier used to organize objects, e.g. the methods and variables of a module. The prefix `math.` we have used in the previous section is such a namespace. You may also create your own namespace for a module."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "1.4142135623730951\n"
- ]
- }
- ],
- "source": [
- "import math as m\n",
- "\n",
- "x = m.sqrt(2)\n",
- "\n",
- "print(x)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "You may also only import specific functions of a module."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "11.548739357257746"
- ]
- },
- "execution_count": 7,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from math import sinh as mysinh\n",
- "from math import pi as mypi\n",
- "\n",
- "mysinh(mypi)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Contents of a module"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "Once a module is imported, we can list the symbols it provides using the `dir` function:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']\n"
- ]
- }
- ],
- "source": [
- "import math\n",
- "\n",
- "print(dir(math))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "And using the function `help` we can get a description of each function (almost .. not all functions have docstrings, as they are technically called, but the vast majority of functions are documented this way). "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Help on built-in function log in module math:\n",
- "\n",
- "log(...)\n",
- " log(x, [base=math.e])\n",
- " Return the logarithm of x to the given base.\n",
- " \n",
- " If the base not specified, returns the natural logarithm (base e) of x.\n",
- "\n"
- ]
- }
- ],
- "source": [
- "help(math.log) "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "2.302585092994046"
- ]
- },
- "execution_count": 10,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "math.log(10)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "3.0"
- ]
- },
- "execution_count": 13,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "math.log(8, 2)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "source": [
- "We can also use the `help` function directly on modules: Try\n",
- "\n",
- " help(math) \n",
- "\n",
- "Some very useful modules form the Python standard library are `os`, `sys`, `math`, `shutil`, `re`, `subprocess`, `multiprocessing`, `threading`. "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- },
- "source": [
- "A complete lists of standard modules for Python 3 is available at http://docs.python.org/3/library/ ."
- ]
- }
- ],
- "metadata": {
- "anaconda-cloud": {},
- "celltoolbar": "Slideshow",
- "hide_input": false,
- "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.7.6"
- },
- "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": true,
- "user_envs_cfg": false
- },
- "toc": {
- "nav_menu": {
- "height": "12px",
- "width": "252px"
- },
- "number_sections": true,
- "sideBar": true,
- "skip_h1_title": false,
- "toc_cell": true,
- "toc_position": {
- "height": "1335px",
- "left": "0px",
- "right": "2386px",
- "top": "110px",
- "width": "302px"
- },
- "toc_section_display": "block",
- "toc_window_display": false
- },
- "varInspector": {
- "cols": {
- "lenName": 16,
- "lenType": 16,
- "lenVar": 40
- },
- "kernels_config": {
- "python": {
- "delete_cmd_postfix": "",
- "delete_cmd_prefix": "del ",
- "library": "var_list.py",
- "varRefreshCmd": "print(var_dic_list())"
- },
- "r": {
- "delete_cmd_postfix": ") ",
- "delete_cmd_prefix": "rm(",
- "library": "var_list.r",
- "varRefreshCmd": "cat(var_dic_list()) "
- }
- },
- "types_to_exclude": [
- "module",
- "function",
- "builtin_function_or_method",
- "instance",
- "_Feature"
- ],
- "window_display": false
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/build/html/_sources/notebooks/L1/Lecture-1.ipynb.txt b/build/html/_sources/notebooks/L1/Lecture-1.ipynb.txt
deleted file mode 100644
index 414487b..0000000
--- a/build/html/_sources/notebooks/L1/Lecture-1.ipynb.txt
+++ /dev/null
@@ -1,2667 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "source": [
- "## Variables and types"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "### Symbol names \n",
- "\n",
- "Variable names in Python can contain alphanumerical characters `a-z`, `A-Z`, `0-9` and some special characters such as `_`. Normal variable names must start with a letter. \n",
- "\n",
- "By convention, variable names start with a lower-case letter, and Class names start with a capital letter. "
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "In addition, there are a number of Python keywords that cannot be used as variable names. These keywords are:\n",
- "\n",
- " and, as, assert, break, class, continue, def, del, elif, else, except, \n",
- " exec, finally, for, from, global, if, import, in, is, lambda, not, or,\n",
- " pass, print, raise, return, try, while, with, yield\n",
- "\n",
- "Note: Be aware of the keyword `lambda`, which could easily be a natural variable name in a scientific program. But being a keyword, it cannot be used as a variable name."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "### Variable Assignment"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "\n",
- "\n",
- "The assignment operator in Python is `=`. Python is a dynamically typed language, so we do not need to specify the type of a variable when we create one.\n",
- "\n",
- "Assigning a value to a new variable creates the variable:"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "# variable assignments\n",
- "x = 1.0>Y\n",
- "my_favorite_variable = 12.2\n",
- "\n",
- "x"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 2,
- "data": {
- "text/plain": [
- "1.0"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 2,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- },
- "execution": {
- "shell.execute_reply": "2020-04-03T16:58:58.524Z",
- "iopub.status.busy": "2020-04-03T16:58:58.433Z",
- "iopub.execute_input": "2020-04-03T16:58:58.455Z",
- "iopub.status.idle": "2020-04-03T16:58:58.505Z"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "Although not explicitly specified, a variable does have a type associated with it. The type is derived from the value that was assigned to it."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "type(x)"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 120,
- "data": {
- "text/plain": [
- "float"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 120,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "If we assign a new value to a variable, its type can change."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "x = 1"
- ],
- "outputs": [],
- "execution_count": 121,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "type(x)"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 123,
- "data": {
- "text/plain": [
- "int"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 123,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "If we try to use a variable that has not yet been defined we get an `NameError`:"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "print(y)"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "20\n"
- ]
- }
- ],
- "execution_count": 124,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "### Number types"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "\n",
- "\n",
- "\n",
- "Python allows as any programming language different types of variables. The type of a variable can be always accessed with the help of the *type()* command. "
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "#### Integers\n",
- "\n",
- "Integers are 32 bit binary numbers and extend from -$2^{31}$ to $2^{31}$-1. Python treats numbers without a decimal point automatically as an integer."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "# integer number\n",
- "x = 1 \n",
- "type(x)"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 125,
- "data": {
- "text/plain": [
- "int"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 125,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2017-04-21T07:56:03.227107+02:00",
- "start_time": "2017-04-21T07:56:03.221564"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "#### Floating Point\n",
- "\n",
- "Floating point values are values with a decimal point and go between $\\pm 2\\times 10^{-308}$ and $\\pm 2\\times 10^{308}$"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "# float variable\n",
- "x= 3.141 "
- ],
- "outputs": [],
- "execution_count": 126,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2017-04-20T17:08:44.403435+02:00",
- "start_time": "2017-04-20T17:08:44.398662"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "#### Complex Numbers"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "c=2+4j\n",
- "type(c)"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 22,
- "data": {
- "text/plain": [
- "complex"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 22,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2017-04-20T17:10:06.106323+02:00",
- "start_time": "2017-04-20T17:10:06.100896"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "Complex numbers have built in *accessors*. These accessors give for example access to the *real* and *imaginary* part of the complex number. "
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "r=c.real\n",
- "print(r)"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "2.0\n"
- ]
- }
- ],
- "execution_count": 23,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "i=c.imag\n",
- "print(i)"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "4.0\n"
- ]
- }
- ],
- "execution_count": 24,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "On the other side, one my also evaluate the complex conjugate of a complex number by one of those accessors. Note that this is provided by a function here, while the above real and imaginary part are values. The are some basic functions available, which act on complex numbers. More complex calculations are possible with functions built in to modules such as *cmath* or *numpy*."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "c=(2+4j).conjugate()\n",
- "print(c.imag)"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "-4.0\n"
- ]
- }
- ],
- "execution_count": 25,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "#### Type casting"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "x = 1.5\n",
- "\n",
- "print(x, type(x))"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "1.5 \n"
- ]
- }
- ],
- "execution_count": 56,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "x = int(x)\n",
- "\n",
- "print(x, type(x))"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "1 \n"
- ]
- }
- ],
- "execution_count": 57,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "z = complex(x)\n",
- "\n",
- "print(z, type(z))"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "(1+0j) \n"
- ]
- }
- ],
- "execution_count": 58,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "x = float(z)"
- ],
- "outputs": [
- {
- "output_type": "error",
- "ename": "TypeError",
- "evalue": "can't convert complex to float",
- "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[0;32m----> 1\u001b[0;31m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mz\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
- "\u001b[0;31mTypeError\u001b[0m: can't convert complex to float"
- ]
- }
- ],
- "execution_count": 59,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "Complex variables cannot be cast to floats or integers. We need to use `z.real` or `z.imag` to extract the part of the complex number we want:"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "y = bool(z.real)\n",
- "\n",
- "print(z.real, \" -> \", y, type(y))\n",
- "\n",
- "y = bool(z.imag)\n",
- "\n",
- "print(z.imag, \" -> \", y, type(y))"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "1.0 -> True \n",
- "0.0 -> False \n"
- ]
- }
- ],
- "execution_count": 60,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "## Operators and comparisons"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "Most operators and comparisons in Python work as one would expect:\n",
- "\n",
- "* Arithmetic operators `+`, `-`, `*`, `/`, `//` (integer division), '**' power\n"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "1 + 2, 1 - 2, 1 * 2, 1 / 2"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 28,
- "data": {
- "text/plain": [
- "(3, -1, 2, 0.5)"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 28,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "1.0 + 2.0, 1.0 - 2.0, 1.0 * 2.0, 1.0 / 2.0"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 29,
- "data": {
- "text/plain": [
- "(3.0, -1.0, 2.0, 0.5)"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 29,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "# Integer division of float numbers\n",
- "3.0 // 2.0"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 30,
- "data": {
- "text/plain": [
- "1.0"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 30,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "# Note! The power operators in python isn't ^, but **\n",
- "2 ** 2"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 31,
- "data": {
- "text/plain": [
- "4"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 31,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "Note: The `/` operator always performs a floating point division in Python 3.x.\n",
- "This is not true in Python 2.x, where the result of `/` is always an integer if the operands are integers.\n",
- "to be more specific, `1/2 = 0.5` (`float`) in Python 3.x, and `1/2 = 0` (`int`) in Python 2.x (but `1.0/2 = 0.5` in Python 2.x)."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "* The boolean operators are spelled out as the words `and`, `not`, `or`. "
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "True and False"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 32,
- "data": {
- "text/plain": [
- "False"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 32,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "not False"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 33,
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 33,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "True or False"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 34,
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 34,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "* Comparison operators `>`, `<`, `>=` (greater or equal), `<=` (less or equal), `==` equality, `is` identical."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "2 > 1, 2 < 1"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 35,
- "data": {
- "text/plain": [
- "(True, False)"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 35,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "2 > 2, 2 < 2"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 36,
- "data": {
- "text/plain": [
- "(False, False)"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 36,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "2 >= 2, 2 <= 2"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 37,
- "data": {
- "text/plain": [
- "(True, True)"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 37,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "# equality\n",
- "[1,2] == [1,2]"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 38,
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 38,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "# objects identical?\n",
- "l1 = l2 = [1,2]\n",
- "\n",
- "l1 is l2"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 39,
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 39,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "## Data Types in Python\n",
- "\n",
- "Now that we know a bit about the general use of Python, it's time to look at different data types we may find useful in our course. Besides the data types for the different number types mentioned above, there are also other types like **strings**, **lists**, **tuples** and **dictionaries**. There are usually a number of *methods* (functions) connected to each data type providing useful functions. We will not talk about these methods, except we need them. It is up to you to explore the internet a bit and search for suitable methods for your purpose.\n",
- "\n",
- "The follwing few cells will give you a short introduction into each type. "
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "### Strings\n",
- "\n",
- "**Strings** are lists of keyboard characters as well as other characters not on your keyboard. They are not particularly interesting in scientific computing, but they are nevertheless necessary and useful. Texts on programming with Python typically devote a good deal of time and space to learning about strings and how to manipulate them. Our uses of them are rather modest, however, so we take a minimalist’s approach and only introduce a few of their features."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "s='Hello' # string variable"
- ],
- "outputs": [],
- "execution_count": 61,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:05:13.381263Z",
- "start_time": "2018-04-16T15:05:13.378101Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "t=\"World!\""
- ],
- "outputs": [],
- "execution_count": 62,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:14.904816Z",
- "start_time": "2018-04-16T14:56:14.901345Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "String can be concatenated using the *+* operator. "
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "c=s+' '+t"
- ],
- "outputs": [],
- "execution_count": 60,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:17.519251Z",
- "start_time": "2018-04-16T14:56:17.515677Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "print(c)"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "Hello World!\n"
- ]
- }
- ],
- "execution_count": 61,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:20.568540Z",
- "start_time": "2018-04-16T14:56:20.564378Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "As strings are lists, each character in a string can be accessed by addressing the position in the string (see Lists section)"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "c[1]"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 62,
- "data": {
- "text/plain": [
- "'e'"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 62,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:23.033095Z",
- "start_time": "2018-04-16T14:56:23.027938Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "Strings can also be made out of numbers."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "\"975\"+\"321\""
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 63,
- "data": {
- "text/plain": [
- "'975321'"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 63,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:56:26.113138Z",
- "start_time": "2018-04-16T14:56:26.108211Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "If you want to obtain a number of a string, you can use what is known as type casting. Using type casting you may convert the string or any other data type into a different type if this is possible. To find out if a string is a pure number you may use the str.isnumeric() method. For the above string, we may want to do a conversion to the type *int* by typing:"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "(\"975\"+\"321\").isnumeric() # or you may use as well str.isnumeric(\"975\"+\"321\")"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 64,
- "data": {
- "text/plain": [
- "True"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 64,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "int(\"975\"+\"321\")"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 65,
- "data": {
- "text/plain": [
- "975321"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 65,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T14:59:26.898131Z",
- "start_time": "2018-04-16T14:59:26.893171Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "There are a number of methods connected to the string data type. Usually the relate to formatting or finding sub-strings. Formatting will be a topic in our next lecture. Here we just refer to one simple find example."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "t.find('ld') ## returns the index at which the sub string 'ld' starts in t"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 66,
- "data": {
- "text/plain": [
- "3"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 66,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "t.capitalize()"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 67,
- "data": {
- "text/plain": [
- "'World!'"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 67,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "### Lists\n",
- "\n",
- "**Lists** are another data structure, similar to NumPy arrays, but unlike NumPy arrays, lists are a part of core Python. Lists have a variety of uses. They are useful, for example, in various bookkeeping tasks that arise in computer programming. Like arrays, they are sometimes used to store data. However, lists do not have the specialized properties and tools that make arrays so powerful for scientific computing. So in general, we prefer arrays to lists for working with scientific data. For other tasks, lists work just fine and can even be preferable to arrays.\n"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "a = [0, 1, 1, 2, 3, 5, 8, 13]"
- ],
- "outputs": [],
- "execution_count": 105,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:00:48.538250Z",
- "start_time": "2018-04-16T15:00:48.535066Z"
- },
- "slideshow": {
- "slide_type": "slide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "b = [5., \"girl\", 2+0j, \"horse\", 21]"
- ],
- "outputs": [],
- "execution_count": 91,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:00:49.850960Z",
- "start_time": "2018-04-16T15:00:49.847769Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "The length of a list can be obtained by the *len()* command if you need the number of elements in the list for your calculations."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "len(b)"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 92,
- "data": {
- "text/plain": [
- "5"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 92,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:07:44.966883Z",
- "start_time": "2018-04-16T15:07:44.961951Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "There are powerful ways to iterate through a list and also through arrays in form of *iterator*. We will talk about them later in more detail. Here is an example, which shows the powerful options you have in Python. The example will go through the list **b** and return all elements of the type str. "
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "[element for element in b if type(element)==str]"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 93,
- "data": {
- "text/plain": [
- "['girl', 'horse']"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 93,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:10:25.820782Z",
- "start_time": "2018-04-16T15:10:25.815249Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "Individual elements in a list can be accessed by the variable name and the number (index) of the list element put in square brackets. Note that the index for the elements start at *0* for the first element (left). "
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "b[1]"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 94,
- "data": {
- "text/plain": [
- "'girl'"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 94,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:11:58.786370Z",
- "start_time": "2018-04-16T15:11:58.781564Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "Elements may be also accessed from the back by nagative indices. *b[-1]* denotes the last element in the list and *b[-2]*, the element before the last."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "b[-1]"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 95,
- "data": {
- "text/plain": [
- "21"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 95,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:01.177759Z",
- "start_time": "2018-04-16T15:12:01.171973Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "b[-2]"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 96,
- "data": {
- "text/plain": [
- "'horse'"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 96,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:03.352948Z",
- "start_time": "2018-04-16T15:12:03.347674Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "Individual elements in a list can be replaced by assigning a new value to them"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "b[-2]='cat'"
- ],
- "outputs": [],
- "execution_count": 97,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:05.751146Z",
- "start_time": "2018-04-16T15:12:05.748188Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "b"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 98,
- "data": {
- "text/plain": [
- "[5.0, 'girl', (2+0j), 'cat', 21]"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 98,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:14.659098Z",
- "start_time": "2018-04-16T15:12:14.653898Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "Lists can be concatanated by the *+* operator"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "c=a+b\n",
- "c"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 106,
- "data": {
- "text/plain": [
- "[0, 1, 1, 2, 3, 5, 8, 13, 5.0, 'girl', (2+0j), 'cat', 21]"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 106,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:12:19.665264Z",
- "start_time": "2018-04-16T15:12:19.659673Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "A very useful feature for lists in python is the **slicing** of lists. Slicing means, that we access only a range of elements in the list, i.e. element 3 to 7. This is done by inserting the starting and the ending element number separated by a colon (:) in the square brackets. The index numbers can be positive or negative again."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "c[3:7]"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 100,
- "data": {
- "text/plain": [
- "[2, 3, 5, 8]"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 100,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:23.299713Z",
- "start_time": "2018-04-16T15:13:23.294538Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "Inserting a second colon behind the ending element index together with a thrid number allows even to select only ever second or third element from a list."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "c[3:9:2]"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 101,
- "data": {
- "text/plain": [
- "[2, 5, 13]"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 101,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:25.682027Z",
- "start_time": "2018-04-16T15:13:25.676726Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "It is sometimes also useful to reverse a list. This can be easily done with the reverse command."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "c.reverse()\n",
- "c"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 103,
- "data": {
- "text/plain": [
- "[0, 1, 1, 2, 3, 5, 8, 13, 5.0, 'girl', (2+0j), 'cat', 21]"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 103,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "Lists may be created in different ways. An empty list can be created by assigning emtpy square brackets to a variable name. You can append elements to the list with the help of the append command which has to be added to the variable name as shown below. This way of adding a particular function, which is part of a certain variable class is part of object oriented programming."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "a=[]"
- ],
- "outputs": [],
- "execution_count": 87,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:28.255450Z",
- "start_time": "2018-04-16T15:13:28.252567Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "a.append('h')"
- ],
- "outputs": [],
- "execution_count": 88,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2017-04-20T20:53:21.102141+02:00",
- "start_time": "2017-04-20T20:53:21.098571"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "A list of numbers can be easily created by the *range()* command."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "range(10)"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 76,
- "data": {
- "text/plain": [
- "range(0, 10)"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 76,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:58.291820Z",
- "start_time": "2018-04-16T15:13:58.286904Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "range(3,10)"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 77,
- "data": {
- "text/plain": [
- "range(3, 10)"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 77,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:13:59.337418Z",
- "start_time": "2018-04-16T15:13:59.332474Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "range(3,10,2)"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 78,
- "data": {
- "text/plain": [
- "range(3, 10, 2)"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 78,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:14:00.450010Z",
- "start_time": "2018-04-16T15:14:00.444737Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "Lists (and also tuples below) can be multidimensional as well, i.e. for an image. The individual elements may then be addressed by supplying two indices in two square brackets."
- ],
- "metadata": {
- "ExecuteTime": {
- "end_time": "2017-04-20T21:00:24.038302+02:00",
- "start_time": "2017-04-20T21:00:24.032999"
- },
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "a = [[3, 9], [8, 5], [11, 1]]"
- ],
- "outputs": [],
- "execution_count": 79,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:14:06.425036Z",
- "start_time": "2018-04-16T15:14:06.421709Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "a[1]"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 80,
- "data": {
- "text/plain": [
- "[8, 5]"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 80,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:14:07.330192Z",
- "start_time": "2018-04-16T15:14:07.325086Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "a[1][0]"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 81,
- "data": {
- "text/plain": [
- "8"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 81,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-04-16T15:14:08.460686Z",
- "start_time": "2018-04-16T15:14:08.455419Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "### Tuples\n",
- "\n",
- "**Tuples** are also list, but immutable. That means, if a tuple has been once defined, it cannot be changed. Try to change an element to see the result."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "point = (10, 20)\n",
- "\n",
- "print(point, type(point))"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "(10, 20) \n"
- ]
- }
- ],
- "execution_count": 64,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "Tuples may be unpacked, e.g. its values may be assigned to normal variables in the following way"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "x, y = point\n",
- "\n",
- "print(\"x =\", x)\n",
- "print(\"y =\", y)"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "x = 10\n",
- "y = 20\n"
- ]
- }
- ],
- "execution_count": 65,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "### Dictionaries\n",
- "\n",
- "\n",
- "**Dictionaries** are like lists, but the elements of dictionaries are accessed in a different way than for lists. The elements of lists and arrays are numbered consecutively, and to access an element of a list or an array, you simply refer to the number corresponding to its position in the sequence. The elements of dictionaries are accessed by “keys”, which can be either strings or (arbitrary) integers (in no particular order). Dictionaries are an important part of core Python. However, we do not make much use of them in this introduction to scientific Python, so our discussion of them is limited."
- ],
- "metadata": {
- "ExecuteTime": {
- "end_time": "2017-04-17T20:46:46.711516+02:00",
- "start_time": "2017-04-17T20:46:46.705826"
- },
- "slideshow": {
- "slide_type": "slide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "room = {\"Ralf\":422, \"Frank\":322, \"Dekan\":550}"
- ],
- "outputs": [],
- "execution_count": 66,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2019-04-09T12:11:22.208828Z",
- "start_time": "2019-04-09T12:11:22.205914Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "room['Ralf']"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 67,
- "data": {
- "text/plain": [
- "422"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 67,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2019-04-09T12:11:50.431570Z",
- "start_time": "2019-04-09T12:11:50.428226Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "room.keys()"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 68,
- "data": {
- "text/plain": [
- "dict_keys(['Ralf', 'Frank', 'Dekan'])"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 68,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2019-04-09T12:11:26.396475Z",
- "start_time": "2019-04-09T12:11:26.392435Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "room.values()"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 69,
- "data": {
- "text/plain": [
- "dict_values([422, 322, 550])"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 69,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2019-04-09T12:11:37.030931Z",
- "start_time": "2019-04-09T12:11:37.027249Z"
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "## Modules"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "Most of the functionality in Python is provided by *modules*. The Python Standard Library is a large collection of modules that provides *cross-platform* implementations of common facilities such as access to the operating system, file I/O, string management, network communication, and much more."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "To use a module in a Python program it first has to be imported. A module can be imported using the `import` statement. For example, to import the module `math`, which contains many standard mathematical functions, we can do:"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "import math\n",
- "\n",
- "x = math.cos(2 * math.pi)\n",
- "\n",
- "print(x)"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "1.0\n"
- ]
- }
- ],
- "execution_count": 1,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "This includes the whole module and makes it available for use later in the program. Alternatively, we can chose to import all symbols (functions and variables) in a module to the current namespace (so that we don't need to use the prefix \"`math.`\" every time we use something from the `math` module:"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "from math import *\n",
- "\n",
- "x = cos(2 * pi)\n",
- "\n",
- "print(x)"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "1.0\n"
- ]
- }
- ],
- "execution_count": 2,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "This pattern can be very convenient, but in large programs that include many modules it is often a good idea to keep the symbols from each module in their own namespaces, by using the `import math` pattern. This would elminate potentially confusing problems with name space collisions."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "### Contents and documentation of a module"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "Once a module is imported, we can list the symbols it provides using the `dir` function:"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "import math\n",
- "\n",
- "print(dir(math))"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']\n"
- ]
- }
- ],
- "execution_count": 127,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "And using the function `help` we can get a description of each function (almost .. not all functions have docstrings, as they are technically called, but the vast majority of functions are documented this way). "
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "help(math.log)"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "Help on built-in function log in module math:\n",
- "\n",
- "log(...)\n",
- " log(x, [base=math.e])\n",
- " Return the logarithm of x to the given base.\n",
- " \n",
- " If the base not specified, returns the natural logarithm (base e) of x.\n",
- "\n"
- ]
- }
- ],
- "execution_count": 128,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "math.log(10)"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 130,
- "data": {
- "text/plain": [
- "2.302585092994046"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 130,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "math.log(10, 2)"
- ],
- "outputs": [
- {
- "output_type": "execute_result",
- "execution_count": 131,
- "data": {
- "text/plain": [
- "3.3219280948873626"
- ]
- },
- "metadata": {}
- }
- ],
- "execution_count": 131,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "We can also use the `help` function directly on modules: Try\n",
- "\n",
- " help(math) \n",
- "\n",
- "Some very useful modules form the Python standard library are `os`, `sys`, `math`, `shutil`, `re`, `subprocess`, `multiprocessing`, `threading`. "
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "A complete lists of standard modules for Python 3 is available at http://docs.python.org/3/library/ ."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "## Exceptions"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "In Python errors are managed with a special language construct called \"Exceptions\". When errors occur exceptions can be raised, which interrupts the normal program flow and fallback to somewhere else in the code where the closest try-except statement is defined."
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "To generate an exception we can use the `raise` statement, which takes an argument that must be an instance of the class `BaseException` or a class derived from it. "
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "raise Exception(\"description of the error\")"
- ],
- "outputs": [
- {
- "output_type": "error",
- "ename": "Exception",
- "evalue": "description of the error",
- "traceback": [
- "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[0;31mException\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[0mException\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"description of the error\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
- "\u001b[0;31mException\u001b[0m: description of the error"
- ]
- }
- ],
- "execution_count": 13,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "A typical use of exceptions is to abort functions when some error condition occurs, for example:\n",
- "\n",
- " def my_function(arguments):\n",
- " \n",
- " if not verify(arguments):\n",
- " raise Exception(\"Invalid arguments\")\n",
- " \n",
- " # rest of the code goes here"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "To gracefully catch errors that are generated by functions and class methods, or by the Python interpreter itself, use the `try` and `except` statements:\n",
- "\n",
- " try:\n",
- " # normal code goes here\n",
- " except:\n",
- " # code for error handling goes here\n",
- " # this code is not executed unless the code\n",
- " # above generated an error\n",
- "\n",
- "For example:"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "try:\n",
- " print(\"test\")\n",
- " # generate an error: the variable test is not defined\n",
- " print(test)\n",
- "except:\n",
- " print(\"Caught an exception\")"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "test\n",
- "Caught an exception\n"
- ]
- }
- ],
- "execution_count": 14,
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "To get information about the error, we can access the `Exception` class instance that describes the exception by using for example:\n",
- "\n",
- " except Exception as e:"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "subslide"
- }
- }
- },
- {
- "cell_type": "code",
- "source": [
- "try:\n",
- " print(\"test\")\n",
- " # generate an error: the variable test is not defined\n",
- " print(test)\n",
- "except Exception as e:\n",
- " print(\"Caught an exception:\" + str(e))"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "test\n",
- "Caught an exception:name 'test' is not defined\n"
- ]
- }
- ],
- "execution_count": 15,
- "metadata": {
- "collapsed": true,
- "jupyter": {
- "outputs_hidden": true
- },
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "***\n",
- "## What's next"
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "This has been a short overview over the basic things in Jupyter and Python. We will address more details on the way to our physical problems and data analysis code. As one of the most fundamental features required in physics is plotting of data, we will address plotting with a first primer next week in Lecture 2. Also input and output including keybord and files will be of our concern. "
- ],
- "metadata": {
- "slideshow": {
- "slide_type": "fragment"
- }
- }
- }
- ],
- "metadata": {
- "toc": {
- "nav_menu": {
- "height": "12px",
- "width": "252px"
- },
- "number_sections": true,
- "sideBar": true,
- "skip_h1_title": false,
- "toc_cell": true,
- "toc_position": {
- "height": "1335px",
- "left": "0px",
- "right": "2386px",
- "top": "110px",
- "width": "302px"
- },
- "toc_section_display": "block",
- "toc_window_display": false
- },
- "hide_input": false,
- "varInspector": {
- "cols": {
- "lenName": 16,
- "lenType": 16,
- "lenVar": 40
- },
- "kernels_config": {
- "python": {
- "delete_cmd_postfix": "",
- "delete_cmd_prefix": "del ",
- "library": "var_list.py",
- "varRefreshCmd": "print(var_dic_list())"
- },
- "r": {
- "delete_cmd_postfix": ") ",
- "delete_cmd_prefix": "rm(",
- "library": "var_list.r",
- "varRefreshCmd": "cat(var_dic_list()) "
- }
- },
- "types_to_exclude": [
- "module",
- "function",
- "builtin_function_or_method",
- "instance",
- "_Feature"
- ],
- "window_display": false
- },
- "anaconda-cloud": {},
- "latex_envs": {
- "report_style_numbering": true,
- "hotkeys": {
- "equation": "Ctrl-E",
- "itemize": "Ctrl-I"
- },
- "LaTeX_envs_menu_present": true,
- "autocomplete": true,
- "autoclose": false,
- "eqNumInitial": 1,
- "bibliofile": "biblio.bib",
- "latex_user_defs": false,
- "current_citInitial": 1,
- "eqLabelWithNumbers": true,
- "labels_anchors": false,
- "cite_by": "apalike",
- "user_envs_cfg": false
- },
- "language_info": {
- "name": "python",
- "version": "3.7.6",
- "mimetype": "text/x-python",
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "pygments_lexer": "ipython3",
- "nbconvert_exporter": "python",
- "file_extension": ".py"
- },
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "celltoolbar": "Slideshow",
- "nteract": {
- "version": "0.22.4"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
\ No newline at end of file
diff --git a/build/html/_sources/notebooks/L1/exceptions.ipynb.txt b/build/html/_sources/notebooks/L1/exceptions.ipynb.txt
deleted file mode 100644
index d61a776..0000000
--- a/build/html/_sources/notebooks/L1/exceptions.ipynb.txt
+++ /dev/null
@@ -1,195 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "source": [
- "## Exceptions"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "source": [
- "In Python errors are managed with a special language construct called \"Exceptions\". When errors occur exceptions can be raised, which interrupts the normal program flow and fallback to somewhere else in the code where the closest try-except statement is defined."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "source": [
- "To generate an exception we can use the `raise` statement, which takes an argument that must be an instance of the class `BaseException` or a class derived from it. "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "outputs": [
- {
- "ename": "Exception",
- "evalue": "description of the error",
- "output_type": "error",
- "traceback": [
- "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[0;31mException\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[0mException\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"description of the error\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
- "\u001b[0;31mException\u001b[0m: description of the error"
- ]
- }
- ],
- "source": [
- "raise Exception(\"description of the error\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "source": [
- "A typical use of exceptions is to abort functions when some error condition occurs, for example:\n",
- "\n",
- " def my_function(arguments):\n",
- " \n",
- " if not verify(arguments):\n",
- " raise Exception(\"Invalid arguments\")\n",
- " \n",
- " # rest of the code goes here"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "source": [
- "To gracefully catch errors that are generated by functions and class methods, or by the Python interpreter itself, use the `try` and `except` statements:\n",
- "\n",
- " try:\n",
- " # normal code goes here\n",
- " except:\n",
- " # code for error handling goes here\n",
- " # this code is not executed unless the code\n",
- " # above generated an error\n",
- "\n",
- "For example:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "test\n",
- "Caught an exception\n"
- ]
- }
- ],
- "source": [
- "try:\n",
- " print(\"test\")\n",
- " # generate an error: the variable test is not defined\n",
- " print(test)\n",
- "except:\n",
- " print(\"Caught an exception\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "source": [
- "To get information about the error, we can access the `Exception` class instance that describes the exception by using for example:\n",
- "\n",
- " except Exception as e:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "slideshow": {
- "slide_type": "skip"
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "test\n",
- "Caught an exception:name 'test' is not defined\n"
- ]
- }
- ],
- "source": [
- "try:\n",
- " print(\"test\")\n",
- " # generate an error: the variable test is not defined\n",
- " print(test)\n",
- "except Exception as e:\n",
- " print(\"Caught an exception:\" + str(e))"
- ]
- }
- ],
- "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.7.6"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "state": {},
- "version_major": 2,
- "version_minor": 0
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/build/html/_static/css/badge_only.css b/build/html/_static/css/badge_only.css
deleted file mode 100644
index e380325..0000000
--- a/build/html/_static/css/badge_only.css
+++ /dev/null
@@ -1 +0,0 @@
-.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}
\ No newline at end of file
diff --git a/build/html/_static/css/fonts/Roboto-Slab-Bold.woff b/build/html/_static/css/fonts/Roboto-Slab-Bold.woff
deleted file mode 100644
index 6cb6000..0000000
Binary files a/build/html/_static/css/fonts/Roboto-Slab-Bold.woff and /dev/null differ
diff --git a/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 b/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2
deleted file mode 100644
index 7059e23..0000000
Binary files a/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 and /dev/null differ
diff --git a/build/html/_static/css/fonts/Roboto-Slab-Regular.woff b/build/html/_static/css/fonts/Roboto-Slab-Regular.woff
deleted file mode 100644
index f815f63..0000000
Binary files a/build/html/_static/css/fonts/Roboto-Slab-Regular.woff and /dev/null differ
diff --git a/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 b/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2
deleted file mode 100644
index f2c76e5..0000000
Binary files a/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 and /dev/null differ
diff --git a/build/html/_static/css/fonts/fontawesome-webfont.eot b/build/html/_static/css/fonts/fontawesome-webfont.eot
deleted file mode 100644
index e9f60ca..0000000
Binary files a/build/html/_static/css/fonts/fontawesome-webfont.eot and /dev/null differ
diff --git a/build/html/_static/css/fonts/fontawesome-webfont.svg b/build/html/_static/css/fonts/fontawesome-webfont.svg
deleted file mode 100644
index 855c845..0000000
--- a/build/html/_static/css/fonts/fontawesome-webfont.svg
+++ /dev/null
@@ -1,2671 +0,0 @@
-
-
-
-
-Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016
- By ,,,
-Copyright Dave Gandy 2016. All rights reserved.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/build/html/_static/css/fonts/fontawesome-webfont.ttf b/build/html/_static/css/fonts/fontawesome-webfont.ttf
deleted file mode 100644
index 35acda2..0000000
Binary files a/build/html/_static/css/fonts/fontawesome-webfont.ttf and /dev/null differ
diff --git a/build/html/_static/css/fonts/fontawesome-webfont.woff b/build/html/_static/css/fonts/fontawesome-webfont.woff
deleted file mode 100644
index 400014a..0000000
Binary files a/build/html/_static/css/fonts/fontawesome-webfont.woff and /dev/null differ
diff --git a/build/html/_static/css/fonts/fontawesome-webfont.woff2 b/build/html/_static/css/fonts/fontawesome-webfont.woff2
deleted file mode 100644
index 4d13fc6..0000000
Binary files a/build/html/_static/css/fonts/fontawesome-webfont.woff2 and /dev/null differ
diff --git a/build/html/_static/css/fonts/lato-bold-italic.woff b/build/html/_static/css/fonts/lato-bold-italic.woff
deleted file mode 100644
index 88ad05b..0000000
Binary files a/build/html/_static/css/fonts/lato-bold-italic.woff and /dev/null differ
diff --git a/build/html/_static/css/fonts/lato-bold-italic.woff2 b/build/html/_static/css/fonts/lato-bold-italic.woff2
deleted file mode 100644
index c4e3d80..0000000
Binary files a/build/html/_static/css/fonts/lato-bold-italic.woff2 and /dev/null differ
diff --git a/build/html/_static/css/fonts/lato-bold.woff b/build/html/_static/css/fonts/lato-bold.woff
deleted file mode 100644
index c6dff51..0000000
Binary files a/build/html/_static/css/fonts/lato-bold.woff and /dev/null differ
diff --git a/build/html/_static/css/fonts/lato-bold.woff2 b/build/html/_static/css/fonts/lato-bold.woff2
deleted file mode 100644
index bb19504..0000000
Binary files a/build/html/_static/css/fonts/lato-bold.woff2 and /dev/null differ
diff --git a/build/html/_static/css/fonts/lato-normal-italic.woff b/build/html/_static/css/fonts/lato-normal-italic.woff
deleted file mode 100644
index 76114bc..0000000
Binary files a/build/html/_static/css/fonts/lato-normal-italic.woff and /dev/null differ
diff --git a/build/html/_static/css/fonts/lato-normal-italic.woff2 b/build/html/_static/css/fonts/lato-normal-italic.woff2
deleted file mode 100644
index 3404f37..0000000
Binary files a/build/html/_static/css/fonts/lato-normal-italic.woff2 and /dev/null differ
diff --git a/build/html/_static/css/fonts/lato-normal.woff b/build/html/_static/css/fonts/lato-normal.woff
deleted file mode 100644
index ae1307f..0000000
Binary files a/build/html/_static/css/fonts/lato-normal.woff and /dev/null differ
diff --git a/build/html/_static/css/fonts/lato-normal.woff2 b/build/html/_static/css/fonts/lato-normal.woff2
deleted file mode 100644
index 3bf9843..0000000
Binary files a/build/html/_static/css/fonts/lato-normal.woff2 and /dev/null differ
diff --git a/build/html/_static/css/theme.css b/build/html/_static/css/theme.css
deleted file mode 100644
index 8cd4f10..0000000
--- a/build/html/_static/css/theme.css
+++ /dev/null
@@ -1,4 +0,0 @@
-html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li span.toctree-expand:before,.wy-nav-top a,.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*!
- * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
- * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li span.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p.caption .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a span.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,.wy-menu-vertical li span.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p.caption .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a span.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,.wy-menu-vertical li span.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li span.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li span.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li span.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li span.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li span.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p.caption .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.btn .wy-menu-vertical li span.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p.caption .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.nav .wy-menu-vertical li span.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p.caption .btn .headerlink,.rst-content p.caption .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li span.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol li,.rst-content ol.arabic li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content ol.arabic li p:last-child,.rst-content ol.arabic li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover span.toctree-expand,.wy-menu-vertical li.on a:hover span.toctree-expand{color:grey}.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand{display:block;font-size:.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover span.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp{user-select:none;pointer-events:none}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink{visibility:hidden;font-size:14px}.rst-content .code-block-caption .headerlink:after,.rst-content .toctree-wrapper>p.caption .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after{content:"\f0c1";font-family:FontAwesome}.rst-content .code-block-caption:hover .headerlink:after,.rst-content .toctree-wrapper>p.caption:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl dt span.classifier:before{content:" : "}html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code,html.writer-html4 .rst-content dl:not(.docutils) tt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block}
\ No newline at end of file
diff --git a/build/html/_static/fonts/FontAwesome.otf b/build/html/_static/fonts/FontAwesome.otf
deleted file mode 100644
index 401ec0f..0000000
Binary files a/build/html/_static/fonts/FontAwesome.otf and /dev/null differ
diff --git a/build/html/_static/fonts/Lato/lato-bold.eot b/build/html/_static/fonts/Lato/lato-bold.eot
deleted file mode 100644
index 3361183..0000000
Binary files a/build/html/_static/fonts/Lato/lato-bold.eot and /dev/null differ
diff --git a/build/html/_static/fonts/Lato/lato-bold.ttf b/build/html/_static/fonts/Lato/lato-bold.ttf
deleted file mode 100644
index 29f691d..0000000
Binary files a/build/html/_static/fonts/Lato/lato-bold.ttf and /dev/null differ
diff --git a/build/html/_static/fonts/Lato/lato-bold.woff b/build/html/_static/fonts/Lato/lato-bold.woff
deleted file mode 100644
index c6dff51..0000000
Binary files a/build/html/_static/fonts/Lato/lato-bold.woff and /dev/null differ
diff --git a/build/html/_static/fonts/Lato/lato-bold.woff2 b/build/html/_static/fonts/Lato/lato-bold.woff2
deleted file mode 100644
index bb19504..0000000
Binary files a/build/html/_static/fonts/Lato/lato-bold.woff2 and /dev/null differ
diff --git a/build/html/_static/fonts/Lato/lato-bolditalic.eot b/build/html/_static/fonts/Lato/lato-bolditalic.eot
deleted file mode 100644
index 3d41549..0000000
Binary files a/build/html/_static/fonts/Lato/lato-bolditalic.eot and /dev/null differ
diff --git a/build/html/_static/fonts/Lato/lato-bolditalic.ttf b/build/html/_static/fonts/Lato/lato-bolditalic.ttf
deleted file mode 100644
index f402040..0000000
Binary files a/build/html/_static/fonts/Lato/lato-bolditalic.ttf and /dev/null differ
diff --git a/build/html/_static/fonts/Lato/lato-bolditalic.woff b/build/html/_static/fonts/Lato/lato-bolditalic.woff
deleted file mode 100644
index 88ad05b..0000000
Binary files a/build/html/_static/fonts/Lato/lato-bolditalic.woff and /dev/null differ
diff --git a/build/html/_static/fonts/Lato/lato-bolditalic.woff2 b/build/html/_static/fonts/Lato/lato-bolditalic.woff2
deleted file mode 100644
index c4e3d80..0000000
Binary files a/build/html/_static/fonts/Lato/lato-bolditalic.woff2 and /dev/null differ
diff --git a/build/html/_static/fonts/Lato/lato-italic.eot b/build/html/_static/fonts/Lato/lato-italic.eot
deleted file mode 100644
index 3f82642..0000000
Binary files a/build/html/_static/fonts/Lato/lato-italic.eot and /dev/null differ
diff --git a/build/html/_static/fonts/Lato/lato-italic.ttf b/build/html/_static/fonts/Lato/lato-italic.ttf
deleted file mode 100644
index b4bfc9b..0000000
Binary files a/build/html/_static/fonts/Lato/lato-italic.ttf and /dev/null differ
diff --git a/build/html/_static/fonts/Lato/lato-italic.woff b/build/html/_static/fonts/Lato/lato-italic.woff
deleted file mode 100644
index 76114bc..0000000
Binary files a/build/html/_static/fonts/Lato/lato-italic.woff and /dev/null differ
diff --git a/build/html/_static/fonts/Lato/lato-italic.woff2 b/build/html/_static/fonts/Lato/lato-italic.woff2
deleted file mode 100644
index 3404f37..0000000
Binary files a/build/html/_static/fonts/Lato/lato-italic.woff2 and /dev/null differ
diff --git a/build/html/_static/fonts/Lato/lato-regular.eot b/build/html/_static/fonts/Lato/lato-regular.eot
deleted file mode 100644
index 11e3f2a..0000000
Binary files a/build/html/_static/fonts/Lato/lato-regular.eot and /dev/null differ
diff --git a/build/html/_static/fonts/Lato/lato-regular.ttf b/build/html/_static/fonts/Lato/lato-regular.ttf
deleted file mode 100644
index 74decd9..0000000
Binary files a/build/html/_static/fonts/Lato/lato-regular.ttf and /dev/null differ
diff --git a/build/html/_static/fonts/Lato/lato-regular.woff b/build/html/_static/fonts/Lato/lato-regular.woff
deleted file mode 100644
index ae1307f..0000000
Binary files a/build/html/_static/fonts/Lato/lato-regular.woff and /dev/null differ
diff --git a/build/html/_static/fonts/Lato/lato-regular.woff2 b/build/html/_static/fonts/Lato/lato-regular.woff2
deleted file mode 100644
index 3bf9843..0000000
Binary files a/build/html/_static/fonts/Lato/lato-regular.woff2 and /dev/null differ
diff --git a/build/html/_static/fonts/Roboto-Slab-Bold.woff b/build/html/_static/fonts/Roboto-Slab-Bold.woff
deleted file mode 100644
index 6cb6000..0000000
Binary files a/build/html/_static/fonts/Roboto-Slab-Bold.woff and /dev/null differ
diff --git a/build/html/_static/fonts/Roboto-Slab-Bold.woff2 b/build/html/_static/fonts/Roboto-Slab-Bold.woff2
deleted file mode 100644
index 7059e23..0000000
Binary files a/build/html/_static/fonts/Roboto-Slab-Bold.woff2 and /dev/null differ
diff --git a/build/html/_static/fonts/Roboto-Slab-Light.woff b/build/html/_static/fonts/Roboto-Slab-Light.woff
deleted file mode 100644
index 337d287..0000000
Binary files a/build/html/_static/fonts/Roboto-Slab-Light.woff and /dev/null differ
diff --git a/build/html/_static/fonts/Roboto-Slab-Light.woff2 b/build/html/_static/fonts/Roboto-Slab-Light.woff2
deleted file mode 100644
index 20398af..0000000
Binary files a/build/html/_static/fonts/Roboto-Slab-Light.woff2 and /dev/null differ
diff --git a/build/html/_static/fonts/Roboto-Slab-Regular.woff b/build/html/_static/fonts/Roboto-Slab-Regular.woff
deleted file mode 100644
index f815f63..0000000
Binary files a/build/html/_static/fonts/Roboto-Slab-Regular.woff and /dev/null differ
diff --git a/build/html/_static/fonts/Roboto-Slab-Regular.woff2 b/build/html/_static/fonts/Roboto-Slab-Regular.woff2
deleted file mode 100644
index f2c76e5..0000000
Binary files a/build/html/_static/fonts/Roboto-Slab-Regular.woff2 and /dev/null differ
diff --git a/build/html/_static/fonts/Roboto-Slab-Thin.woff b/build/html/_static/fonts/Roboto-Slab-Thin.woff
deleted file mode 100644
index 6b30ea6..0000000
Binary files a/build/html/_static/fonts/Roboto-Slab-Thin.woff and /dev/null differ
diff --git a/build/html/_static/fonts/Roboto-Slab-Thin.woff2 b/build/html/_static/fonts/Roboto-Slab-Thin.woff2
deleted file mode 100644
index 328f5bb..0000000
Binary files a/build/html/_static/fonts/Roboto-Slab-Thin.woff2 and /dev/null differ
diff --git a/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot b/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot
deleted file mode 100644
index 79dc8ef..0000000
Binary files a/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot and /dev/null differ
diff --git a/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf b/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf
deleted file mode 100644
index df5d1df..0000000
Binary files a/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf and /dev/null differ
diff --git a/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff b/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff
deleted file mode 100644
index 6cb6000..0000000
Binary files a/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff and /dev/null differ
diff --git a/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 b/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2
deleted file mode 100644
index 7059e23..0000000
Binary files a/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 and /dev/null differ
diff --git a/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot b/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot
deleted file mode 100644
index 2f7ca78..0000000
Binary files a/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot and /dev/null differ
diff --git a/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf b/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf
deleted file mode 100644
index eb52a79..0000000
Binary files a/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf and /dev/null differ
diff --git a/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff b/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff
deleted file mode 100644
index f815f63..0000000
Binary files a/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff and /dev/null differ
diff --git a/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 b/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2
deleted file mode 100644
index f2c76e5..0000000
Binary files a/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 and /dev/null differ
diff --git a/build/html/_static/fonts/fontawesome-webfont.eot b/build/html/_static/fonts/fontawesome-webfont.eot
deleted file mode 100644
index e9f60ca..0000000
Binary files a/build/html/_static/fonts/fontawesome-webfont.eot and /dev/null differ
diff --git a/build/html/_static/fonts/fontawesome-webfont.svg b/build/html/_static/fonts/fontawesome-webfont.svg
deleted file mode 100644
index 855c845..0000000
--- a/build/html/_static/fonts/fontawesome-webfont.svg
+++ /dev/null
@@ -1,2671 +0,0 @@
-
-
-
-
-Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016
- By ,,,
-Copyright Dave Gandy 2016. All rights reserved.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/build/html/_static/fonts/fontawesome-webfont.ttf b/build/html/_static/fonts/fontawesome-webfont.ttf
deleted file mode 100644
index 35acda2..0000000
Binary files a/build/html/_static/fonts/fontawesome-webfont.ttf and /dev/null differ
diff --git a/build/html/_static/fonts/fontawesome-webfont.woff b/build/html/_static/fonts/fontawesome-webfont.woff
deleted file mode 100644
index 400014a..0000000
Binary files a/build/html/_static/fonts/fontawesome-webfont.woff and /dev/null differ
diff --git a/build/html/_static/fonts/fontawesome-webfont.woff2 b/build/html/_static/fonts/fontawesome-webfont.woff2
deleted file mode 100644
index 4d13fc6..0000000
Binary files a/build/html/_static/fonts/fontawesome-webfont.woff2 and /dev/null differ
diff --git a/build/html/_static/fonts/lato-bold-italic.woff b/build/html/_static/fonts/lato-bold-italic.woff
deleted file mode 100644
index 88ad05b..0000000
Binary files a/build/html/_static/fonts/lato-bold-italic.woff and /dev/null differ
diff --git a/build/html/_static/fonts/lato-bold-italic.woff2 b/build/html/_static/fonts/lato-bold-italic.woff2
deleted file mode 100644
index c4e3d80..0000000
Binary files a/build/html/_static/fonts/lato-bold-italic.woff2 and /dev/null differ
diff --git a/build/html/_static/fonts/lato-bold.woff b/build/html/_static/fonts/lato-bold.woff
deleted file mode 100644
index c6dff51..0000000
Binary files a/build/html/_static/fonts/lato-bold.woff and /dev/null differ
diff --git a/build/html/_static/fonts/lato-bold.woff2 b/build/html/_static/fonts/lato-bold.woff2
deleted file mode 100644
index bb19504..0000000
Binary files a/build/html/_static/fonts/lato-bold.woff2 and /dev/null differ
diff --git a/build/html/_static/fonts/lato-normal-italic.woff b/build/html/_static/fonts/lato-normal-italic.woff
deleted file mode 100644
index 76114bc..0000000
Binary files a/build/html/_static/fonts/lato-normal-italic.woff and /dev/null differ
diff --git a/build/html/_static/fonts/lato-normal-italic.woff2 b/build/html/_static/fonts/lato-normal-italic.woff2
deleted file mode 100644
index 3404f37..0000000
Binary files a/build/html/_static/fonts/lato-normal-italic.woff2 and /dev/null differ
diff --git a/build/html/_static/fonts/lato-normal.woff b/build/html/_static/fonts/lato-normal.woff
deleted file mode 100644
index ae1307f..0000000
Binary files a/build/html/_static/fonts/lato-normal.woff and /dev/null differ
diff --git a/build/html/_static/fonts/lato-normal.woff2 b/build/html/_static/fonts/lato-normal.woff2
deleted file mode 100644
index 3bf9843..0000000
Binary files a/build/html/_static/fonts/lato-normal.woff2 and /dev/null differ
diff --git a/build/html/_static/jquery-3.5.1.js b/build/html/_static/jquery-3.5.1.js
deleted file mode 100644
index 5093733..0000000
--- a/build/html/_static/jquery-3.5.1.js
+++ /dev/null
@@ -1,10872 +0,0 @@
-/*!
- * jQuery JavaScript Library v3.5.1
- * https://jquery.com/
- *
- * Includes Sizzle.js
- * https://sizzlejs.com/
- *
- * Copyright JS Foundation and other contributors
- * Released under the MIT license
- * https://jquery.org/license
- *
- * Date: 2020-05-04T22:49Z
- */
-( function( global, factory ) {
-
- "use strict";
-
- if ( typeof module === "object" && typeof module.exports === "object" ) {
-
- // For CommonJS and CommonJS-like environments where a proper `window`
- // is present, execute the factory and get jQuery.
- // For environments that do not have a `window` with a `document`
- // (such as Node.js), expose a factory as module.exports.
- // This accentuates the need for the creation of a real `window`.
- // e.g. var jQuery = require("jquery")(window);
- // See ticket #14549 for more info.
- module.exports = global.document ?
- factory( global, true ) :
- function( w ) {
- if ( !w.document ) {
- throw new Error( "jQuery requires a window with a document" );
- }
- return factory( w );
- };
- } else {
- factory( global );
- }
-
-// Pass this if window is not defined yet
-} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-
-// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
-// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
-// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
-// enough that all such attempts are guarded in a try block.
-"use strict";
-
-var arr = [];
-
-var getProto = Object.getPrototypeOf;
-
-var slice = arr.slice;
-
-var flat = arr.flat ? function( array ) {
- return arr.flat.call( array );
-} : function( array ) {
- return arr.concat.apply( [], array );
-};
-
-
-var push = arr.push;
-
-var indexOf = arr.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var fnToString = hasOwn.toString;
-
-var ObjectFunctionString = fnToString.call( Object );
-
-var support = {};
-
-var isFunction = function isFunction( obj ) {
-
- // Support: Chrome <=57, Firefox <=52
- // In some browsers, typeof returns "function" for HTML