From 969fa09720d9f61f07fef28df7a1523983cb7e95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jens=20Henrik=20G=C3=B6bbert?= <j.goebbert@fz-juelich.de> Date: Mon, 2 Mar 2020 15:47:26 +0100 Subject: [PATCH] rm .ipynb_checkpoints --- .../SanityCheck-Tutorials-checkpoint.ipynb | 655 ------------------ .../.ipynb_checkpoints/running-checkpoint.png | Bin 21789 -> 0 bytes .../.ipynb_checkpoints/tabs-checkpoint.png | Bin 23272 -> 0 bytes .../Howto_Dask_onJUWELS-checkpoint.ipynb | 346 --------- 4 files changed, 1001 deletions(-) delete mode 100644 001-Jupyter/001-Tutorials/.ipynb_checkpoints/SanityCheck-Tutorials-checkpoint.ipynb delete mode 100644 001-Jupyter/001-Tutorials/001-Basic-Tutorials/003-Notebook/images/.ipynb_checkpoints/running-checkpoint.png delete mode 100644 001-Jupyter/001-Tutorials/001-Basic-Tutorials/003-Notebook/images/.ipynb_checkpoints/tabs-checkpoint.png delete mode 100644 002-Methods/001-Computing/.ipynb_checkpoints/Howto_Dask_onJUWELS-checkpoint.ipynb diff --git a/001-Jupyter/001-Tutorials/.ipynb_checkpoints/SanityCheck-Tutorials-checkpoint.ipynb b/001-Jupyter/001-Tutorials/.ipynb_checkpoints/SanityCheck-Tutorials-checkpoint.ipynb deleted file mode 100644 index ad5e0d4..0000000 --- a/001-Jupyter/001-Tutorials/.ipynb_checkpoints/SanityCheck-Tutorials-checkpoint.ipynb +++ /dev/null @@ -1,655 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Sanity Check\n", - "This notebook checks if the available general tutorials run without errors. \n", - "\n", - "This particulary tests the installed python packages and their interoperability for standard features and examples. Running these checks can take **a lot of time** and there for will not finish in the max. cpu-time we provide for a process on a login node. Hence the jupyter kernel for this notebook will eventually be killed by the system. These Sanity Checks are primarily usefull for system administrators. \n", - "\n", - "If you want to run them anyway - ensure your Jupyter is running as a **batch job** with far more compute time available." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Grab Tutorials from Git-Repo " - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from git import Repo\n", - "#repo = Repo.clone_from(\"https://gitlab.version.fz-juelich.de/jupyter4jsc/j4j_notebooks.git\", './j4j_notebooks')\n", - "#repo.git.checkout('integration')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define Funktions for later Sanity Check" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "from typing import Any, Tuple, Dict, Mapping\n", - "from collections import defaultdict\n", - "from nbformat import NotebookNode\n", - "\n", - "def count_source(source: str) -> Tuple[int, int, int]:\n", - " \"\"\"Count number of non-blank lines, words, and non-whitespace characters.\n", - "\n", - " :param source: string to count\n", - " :return: number of non-blank lines, words, and non-whitespace characters\n", - " \"\"\"\n", - " lines = [line for line in source.split('\\n') if line and not line.isspace()]\n", - " words = source.split()\n", - " chars = ''.join(words)\n", - "\n", - " return len(lines), len(words), len(chars)\n", - "\n", - "REQUIRED_NB_FIELDS = {\"metadata\", \"nbformat_minor\", \"nbformat\", \"cells\"}\n", - "REQUIRED_NB_METADATA_FIELDS = {\"kernelspec\", \"language_info\"}\n", - "CELL_TYPES = ('markdown', 'code', 'raw', )\n", - "REQUIRED_CELL_FIELDS = {\n", - " 'markdown': {\"cell_type\", \"metadata\", \"source\"},\n", - " 'code': {\"cell_type\", \"metadata\", \"source\", \"execution_count\", \"outputs\"},\n", - " 'raw': {\"cell_type\", \"metadata\", \"source\"}\n", - "}\n", - "OPTIONAL_CELL_FIELDS = {\n", - " 'markdown': {\"attachments\"},\n", - " 'code': set(),\n", - " 'raw': {\"attachments\"}\n", - "}\n", - "OPTIONAL_OUTPUT_TYPES = {\n", - " 'execute_result': {'data', 'metadata' ,'execution_count'},\n", - " 'stream': {'name', 'text'},\n", - " 'display_data': {'data', 'metadata', },\n", - " 'error': {'ename', 'evalue', 'traceback'},\n", - "}\n", - "\n", - "CELL_STATISTICS = (\n", - " 'cell_types', #: cell type counts\n", - " 'sources', #: cell sources counts\n", - " 'cell_metadata', #: cell metadata counts, including separate ``tags``\n", - " 'cell_attachments', #: cell attachment MIME type counts, and total\n", - " 'code_execution', #: code cell execution count statistics\n", - " 'code_outputs', #: code cell counts per output_type, subcounts per ``stream`` and ``error``, and total\n", - " 'cell_extra', #: counts for extra (unknown) fields in cells\n", - ")\n", - "\n", - "# dictionary keys for source statistics\n", - "EMPTY_SOURCES = 'total empty sources'\n", - "SOURCE_LINES = 'total source lines'\n", - "SOURCE_WORDS = 'total source words'\n", - "SOURCE_CHARS = 'total source chars'\n", - "EMPTY_SOURCES_MD = 'markdown empty sources'\n", - "SOURCE_LINES_MD = 'markdown source lines'\n", - "SOURCE_WORDS_MD = 'markdown source words'\n", - "SOURCE_CHARS_MD = 'markdown source chars'\n", - "EMPTY_SOURCES_CODE = 'code empty sources'\n", - "SOURCE_LINES_CODE = 'code source lines'\n", - "SOURCE_WORDS_CODE = 'code source words'\n", - "SOURCE_CHARS_CODE = 'code source chars'\n", - "EMPTY_SOURCES_RAW = 'raw empty sources'\n", - "SOURCE_LINES_RAW = 'raw source lines'\n", - "SOURCE_WORDS_RAW = 'raw source words'\n", - "SOURCE_CHARS_RAW = 'raw source chars'\n", - "\n", - "def nb_cell_stats(nb: NotebookNode) -> Dict[str, Dict[str, int]]:\n", - " \"\"\"Count occurrences of various elements in notebook cells.\n", - "\n", - " :param nb: notebook to inspect\n", - " :return: dictionary of dictionaries with counts per section;\n", - " each section has its own key; see CELL_STATISTICS\n", - " \"\"\"\n", - " # process the notebook cells\n", - " result = {key: defaultdict(int) for key in CELL_STATISTICS}\n", - "\n", - " # traverse all cells and gather statistics\n", - " for index, cell in enumerate(nb.cells): # index can be used for debug output\n", - " result['cell_types']['total cell count'] += 1 # count all cells\n", - " ct = cell.cell_type\n", - " result['cell_types'][ct] += 1 # count each cell type\n", - "\n", - " # compute source statistics\n", - " lines, words, chars = count_source(cell.source) # cell.source should always be present\n", - " empty_cell = chars == 0\n", - " if empty_cell:\n", - " result['sources'][EMPTY_SOURCES] += 1\n", - " if ct == 'markdown':\n", - " result['sources'][EMPTY_SOURCES_MD] += 1\n", - " elif ct == 'code':\n", - " result['sources'][EMPTY_SOURCES_CODE] += 1\n", - " elif ct == 'raw':\n", - " result['sources'][EMPTY_SOURCES_RAW] += 1\n", - " if chars:\n", - " result['sources'][SOURCE_LINES] += lines\n", - " result['sources'][SOURCE_WORDS] += words\n", - " result['sources'][SOURCE_CHARS] += chars\n", - " if ct == 'markdown':\n", - " result['sources'][SOURCE_LINES_MD] += lines\n", - " result['sources'][SOURCE_WORDS_MD] += words\n", - " result['sources'][SOURCE_CHARS_MD] += chars\n", - " elif ct == 'code':\n", - " result['sources'][SOURCE_LINES_CODE] += lines\n", - " result['sources'][SOURCE_WORDS_CODE] += words\n", - " result['sources'][SOURCE_CHARS_CODE] += chars\n", - " elif ct == 'raw':\n", - " result['sources'][SOURCE_LINES_RAW] += lines\n", - " result['sources'][SOURCE_WORDS_RAW] += words\n", - " result['sources'][SOURCE_CHARS_RAW] += chars\n", - "\n", - " # count each metadata key\n", - " for attr in cell.metadata: # cell.metadata should always be present\n", - " result['cell_metadata'][attr] += 1\n", - "\n", - " # count each tag in tags metadata\n", - " if 'tags' in cell.metadata:\n", - " for tag in cell.metadata.tags:\n", - " result['cell_metadata']['tag ' + tag] += 1\n", - "\n", - " # count each attachment mime type\n", - " if 'attachments' in cell:\n", - " result['cell_attachments']['total count of cells with attachments'] += 1\n", - " for attachment in cell.attachments.values():\n", - " for key in attachment:\n", - " result['cell_attachments']['total attachments count'] += 1\n", - " result['cell_attachments'][key] += 1\n", - "\n", - " # count non-standard fields in cells\n", - " for field in cell:\n", - " if field not in REQUIRED_CELL_FIELDS[ct].union(OPTIONAL_CELL_FIELDS[ct]):\n", - " result['cell_extra'][field] += 1\n", - "\n", - " return result\n", - "\n", - "from colorama import Fore, Back, Style\n", - "DEFAULT_WIDTH = 10\n", - "def print_dict(d: Dict[str, Any], header: str=None, width: int=DEFAULT_WIDTH) -> None:\n", - " \"\"\"Print dictionary d with section header.\n", - "\n", - " :param d: dictionary to print\n", - " :param header: header of the table\n", - " :param width: width of the left column\n", - " \"\"\"\n", - " if d:\n", - " if header:\n", - " print('{}:'.format(header))\n", - " for key in sorted(d):\n", - " if key == 'raw':\n", - " style = Fore.RED\n", - " else:\n", - " style = ''\n", - " left = str(d[key])\n", - " print(style + ' {:>{}} {}'.format(left, width, key) + Style.RESET_ALL)\n", - " \n", - "from pathlib import Path\n", - "from nbformat import NotebookNode\n", - "from typing import List, Union\n", - "import nbformat\n", - "import sys\n", - "\n", - "def read_nb(nb_path: Path) -> Union[None, NotebookNode]:\n", - " \"\"\"Read notebook from given path, and return it.\n", - " Uses ``args.debug``: in debug mode, a read error results in an exception, else it returns ``None``.\n", - "\n", - " :param nb_path: path to read from\n", - " :param args: to check debug mode\n", - " :return: notebook read from ``nb_path`` or None if reading failed``\n", - " \"\"\"\n", - " try:\n", - " nb = nbformat.read(nb_path.open(encoding='utf-8'), as_version=4)\n", - " except Exception as e:\n", - " ename = type(e).__name__\n", - " print('Reading of \"{}\" failed ({}):\\n {}'.format(nb_path.name, ename, e), file=sys.stderr)\n", - " return None\n", - "\n", - " return nb" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Run the Sanity Check" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'papermill'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m<ipython-input-2-4fe21cbd60c3>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mos\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mpapermill\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mpm\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mpapermill\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexceptions\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mPapermillExecutionError\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mfailed_notebooks\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'papermill'" - ] - } - ], - "source": [ - "import os\n", - "import papermill as pm\n", - "from papermill.exceptions import PapermillExecutionError\n", - "\n", - "failed_notebooks = list()\n", - "dirbase=\"/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/\"\n", - "for dirpath, dirs, files in os.walk(dirbase):\n", - " dirs.sort()\n", - " if os.path.basename(dirpath).startswith('.'):\n", - " continue\n", - " for filename in sorted(files):\n", - " if filename.endswith('.ipynb') and not filename.startswith('papermill_'):\n", - " print(os.path.join(dirpath,filename))\n", - " if filename == \"SanityCheck-Tutorials.ipynb\":\n", - " continue\n", - " try:\n", - " os.chdir(dirpath)\n", - " nb_path = os.path.join(dirpath, filename)\n", - " \n", - " # get notebook statistics\n", - " nb = read_nb(Path(nb_path))\n", - " cell_stats = nb_cell_stats(nb)\n", - " print_dict(cell_stats['cell_types'], \"Cell types\")\n", - " #print_dict(cell_stats['sources'], \"Cell sources\")\n", - " #print_dict(cell_stats['cell_metadata'], \"Cell metadata fields\")\n", - " #print_dict(cell_stats['cell_attachments'], \"Cell attachments\") \n", - " \n", - " # execute notebook\n", - " nb = pm.execute_notebook(\n", - " nb_path,\n", - " os.path.join(dirpath, 'papermill_' + filename),\n", - " #kernel_name=\"Python3\"\n", - " )\n", - " \n", - " os.chdir(dirbase)\n", - " except PapermillExecutionError as e:\n", - " failed_notebooks.append([os.path.join(dirpath, filename), e.evalue])\n", - " print(e.evalue)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Check Results" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/002-Interactive-Widgets/Example - Beat Frequencies.ipynb',\n", - " 'too many values to unpack (expected 2)'],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/08_cuda.ipynb',\n", - " 'Error at driver init: \\n[100] Call to cuInit results in CUDA_ERROR_NO_DEVICE:'],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/09_ipyparallel.ipynb',\n", - " \"Can't build targets without any engines\"],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter07_stats/06_kde.ipynb',\n", - " \"No module named 'cartopy'\"],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter09_numoptim/03_curvefitting.ipynb',\n", - " 'Optimal parameters not found: Number of calls to function has reached maxfev = 1000.'],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter11_image/05_faces.ipynb',\n", - " \"No module named 'cv2'\"],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter14_graphgeo/02_airports.ipynb',\n", - " \"No module named 'cartopy'\"],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter14_graphgeo/06_gis.ipynb',\n", - " \"No module named 'cartopy'\"],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter14_graphgeo/07_gps.ipynb',\n", - " 'read_shp requires OGR: http://www.gdal.org/'],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/Animations Using clear_output.ipynb',\n", - " \"Connection file '~/.ipython/profile_default/security/ipcontroller-client.json' not found.\\nYou have attempted to connect to an IPython Cluster but no Controller could be found.\\nPlease double-check your configuration and ensure that a cluster is running.\"],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/Data Publication API.ipynb',\n", - " \"Connection file '~/.ipython/profile_default/security/ipcontroller-client.json' not found.\\nYou have attempted to connect to an IPython Cluster but no Controller could be found.\\nPlease double-check your configuration and ensure that a cluster is running.\"],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/Monitoring an MPI Simulation - 1.ipynb',\n", - " 'You have attempted to connect to an IPython Cluster but no Controller could be found.\\nPlease double-check your configuration and ensure that a cluster is running.'],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/Monitoring an MPI Simulation - 2.ipynb',\n", - " 'You have attempted to connect to an IPython Cluster but no Controller could be found.\\nPlease double-check your configuration and ensure that a cluster is running.'],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/Monte Carlo Options.ipynb',\n", - " \"Connection file '~/.ipython/profile_default/security/ipcontroller-client.json' not found.\\nYou have attempted to connect to an IPython Cluster but no Controller could be found.\\nPlease double-check your configuration and ensure that a cluster is running.\"],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/Parallel Decorator and map.ipynb',\n", - " \"Connection file '~/.ipython/profile_default/security/ipcontroller-client.json' not found.\\nYou have attempted to connect to an IPython Cluster but no Controller could be found.\\nPlease double-check your configuration and ensure that a cluster is running.\"],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/Parallel Magics.ipynb',\n", - " \"Connection file '~/.ipython/profile_default/security/ipcontroller-client.json' not found.\\nYou have attempted to connect to an IPython Cluster but no Controller could be found.\\nPlease double-check your configuration and ensure that a cluster is running.\"],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/Using Dill.ipynb',\n", - " \"Connection file '~/.ipython/profile_default/security/ipcontroller-client.json' not found.\\nYou have attempted to connect to an IPython Cluster but no Controller could be found.\\nPlease double-check your configuration and ensure that a cluster is running.\"],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/Using MPI with IPython Parallel.ipynb',\n", - " \"Connection file '~/.ipython/profile_default/security/ipcontroller-client.json' not found.\\nYou have attempted to connect to an IPython Cluster but no Controller could be found.\\nPlease double-check your configuration and ensure that a cluster is running.\"],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/rmt/rmt.ipynb',\n", - " \"Connection file '~/.ipython/profile_default/security/ipcontroller-client.json' not found.\\nYou have attempted to connect to an IPython Cluster but no Controller could be found.\\nPlease double-check your configuration and ensure that a cluster is running.\"],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/exercises/Notebook/Notebook Exercises.ipynb',\n", - " 'HTTP Error 404: Not Found'],\n", - " ['/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/004-Scientific-Python-Lectures/Lecture-6B-HPC.ipynb',\n", - " \"Can't build targets without any engines\"]]" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "failed_notebooks" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Clean Up" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/papermill_SanityCheck-Tutorials.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/001-IPython-Kernel/papermill_Beyond Plain Python.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/001-IPython-Kernel/papermill_Cell Magics.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/001-IPython-Kernel/papermill_Working With External Code.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/001-IPython-Kernel/papermill_Custom Display Logic.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/001-IPython-Kernel/papermill_Script Magics.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/001-IPython-Kernel/papermill_Plotting in the Notebook with Matplotlib.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/001-IPython-Kernel/papermill_Animations Using clear_output.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/001-IPython-Kernel/papermill_Rich Output.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/001-IPython-Kernel/papermill_Raw Input in the Notebook.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/001-IPython-Kernel/papermill_Capturing Output.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/001-IPython-Kernel/papermill_Background Jobs.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/001-IPython-Kernel/papermill_Cython Magics.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/001-IPython-Kernel/papermill_SymPy.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/002-Interactive-Widgets/papermill_Example - Beat Frequencies.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/002-Interactive-Widgets/papermill_Example - Factoring.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/002-Interactive-Widgets/papermill_Example - Lorenz Differential Equations.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/002-Interactive-Widgets/papermill_Using Interact.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/002-Interactive-Widgets/papermill_Widget Styling.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/002-Interactive-Widgets/papermill_Widget Events.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/002-Interactive-Widgets/papermill_Widget List.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/002-Interactive-Widgets/papermill_Widget Basics.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/003-Notebook/papermill_What is the IPython Notebook.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/003-Notebook/papermill_Notebook Basics.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/003-Notebook/papermill_Working With Markdown Cells.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/003-Notebook/papermill_JupyterLab Interface.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/003-Notebook/papermill_Typesetting Equations.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/001-Basic-Tutorials/003-Notebook/papermill_Running Code.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter07_stats/papermill_06_kde.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter07_stats/papermill_03_bayesian.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter07_stats/papermill_05_mlfit.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter07_stats/papermill_01_pandas.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter07_stats/papermill_02_z_test.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter07_stats/papermill_04_correlation.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter07_stats/papermill_07_pymc.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter15_symbolic/papermill_07_lotka.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter15_symbolic/papermill_02_solvers.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter15_symbolic/papermill_05_number_theory.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter15_symbolic/papermill_01_sympy_intro.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter15_symbolic/papermill_04_stats.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter15_symbolic/papermill_03_function.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter15_symbolic/papermill_06_logic.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter01_basic/papermill_05_config.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter01_basic/papermill_06_kernel.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter01_basic/papermill_01_notebook.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter01_basic/papermill_04_magic.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter01_basic/papermill_02_pandas.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter01_basic/papermill_03_numpy.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter06_viz/papermill_03_bokeh.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter06_viz/papermill_01_styles.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter06_viz/papermill_02_seaborn.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter06_viz/papermill_06_altair.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter06_viz/papermill_05_widgets.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter12_deterministic/papermill_01_bifurcation.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter12_deterministic/papermill_02_cellular.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter12_deterministic/papermill_04_turing.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter12_deterministic/papermill_03_ode.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter14_graphgeo/papermill_03_dag.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter14_graphgeo/papermill_04_connected.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter14_graphgeo/papermill_02_airports.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter14_graphgeo/papermill_05_voronoi.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter14_graphgeo/papermill_01_networkx.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter14_graphgeo/papermill_06_gis.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter14_graphgeo/papermill_07_gps.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter08_ml/papermill_02_titanic.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter08_ml/papermill_03_digits.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter08_ml/papermill_06_random_forest.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter08_ml/papermill_04_text.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter08_ml/papermill_05_svm.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter08_ml/papermill_01_scikit.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter08_ml/papermill_08_clustering.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter08_ml/papermill_07_pca.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter04_optimization/papermill_07_rolling_average.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter04_optimization/papermill_04_memprof.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter04_optimization/papermill_01_timeit.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter04_optimization/papermill_05_array_copies.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter04_optimization/papermill_02_profile.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter04_optimization/papermill_03_linebyline.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter04_optimization/papermill_08_memmap.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter04_optimization/papermill_09_hdf5_array.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter04_optimization/papermill_06_stride_tricks.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/papermill_12_julia.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/papermill_05_cython.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/papermill_08_cuda.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/papermill_06_ray.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/papermill_01_slow.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/papermill_07_openmp.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/papermill_03_numexpr.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/papermill_10_async.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/papermill_04_ctypes.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/papermill_02_numba.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/papermill_11_dask.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/papermill_09_ipyparallel.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/06_ray/papermill_06_ray_6.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/06_ray/papermill_06_ray_1.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/06_ray/papermill_06_ray_4.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/06_ray/papermill_06_ray_2.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/06_ray/papermill_06_ray_3.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/06_ray/papermill_06_ray_7.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter05_hpc/06_ray/papermill_06_ray_5.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter09_numoptim/papermill_04_energy.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter09_numoptim/papermill_01_root.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter09_numoptim/papermill_02_minimize.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter09_numoptim/papermill_03_curvefitting.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter10_signal/papermill_03_autocorrelation.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter10_signal/papermill_02_filter.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter10_signal/papermill_01_fourier.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter13_stochastic/papermill_03_brownian.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter13_stochastic/papermill_01_markov.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter13_stochastic/papermill_04_sde.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter13_stochastic/papermill_02_poisson.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter03_notebook/papermill_02_nbformat.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter03_notebook/papermill_05_custom_notebook.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter03_notebook/papermill_04_custom_widgets.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter03_notebook/papermill_03_widgets.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter03_notebook/papermill_01_blocks.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter11_image/papermill_02_filters.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter11_image/papermill_07_synth.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter11_image/papermill_04_interest.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter11_image/papermill_03_segmentation.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter11_image/papermill_06_speech.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter11_image/papermill_01_exposure.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/002-IPython-Cookbook/chapter11_image/papermill_05_faces.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/006-Bokeh/papermill_index.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/006-Bokeh/quickstart/papermill_quickstart.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/006-Bokeh/tutorial/papermill_00 - Introduction and Setup.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/006-Bokeh/tutorial/papermill_08 - Graph and Network Plots.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/006-Bokeh/tutorial/papermill_02 - Styling and Theming.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/006-Bokeh/tutorial/papermill_06 - Linking and Interactions.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/006-Bokeh/tutorial/papermill_A3 - High-Level Charting with Holoviews.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/006-Bokeh/tutorial/papermill_05 - Presentation Layouts.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/006-Bokeh/tutorial/papermill_A1 - Models and Primitives.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/006-Bokeh/tutorial/papermill_A2 - Visualizing Big Data with Datashader.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/006-Bokeh/tutorial/papermill_A4 - Additional Resources.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/006-Bokeh/tutorial/papermill_04 - Data Sources and Transformations.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/006-Bokeh/tutorial/papermill_10 - Exporting and Embedding.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/006-Bokeh/tutorial/papermill_07 - Bar and Categorical Data Plots.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/006-Bokeh/tutorial/papermill_03 - Adding Annotations.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/006-Bokeh/tutorial/papermill_09 - Geographic Plots.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/006-Bokeh/tutorial/papermill_11 - Running Bokeh Applictions.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/006-Bokeh/tutorial/papermill_01 - Basic Plotting.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/005-Python4Maths/papermill_04.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/005-Python4Maths/papermill_08.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/005-Python4Maths/papermill_02.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/005-Python4Maths/papermill_07.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/005-Python4Maths/papermill_03.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/005-Python4Maths/papermill_01.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/005-Python4Maths/papermill_00.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/005-Python4Maths/papermill_06.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/005-Python4Maths/papermill_11.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/005-Python4Maths/papermill_05.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/004-Scientific-Python-Lectures/papermill_Lecture-4-Matplotlib.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/004-Scientific-Python-Lectures/papermill_Lecture-7-Revision-Control-Software.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/004-Scientific-Python-Lectures/papermill_Lecture-6B-HPC.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/004-Scientific-Python-Lectures/papermill_Lecture-0-Scientific-Computing-with-Python.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/004-Scientific-Python-Lectures/papermill_Lecture-6A-Fortran-and-C.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/004-Scientific-Python-Lectures/papermill_Lecture-3-Scipy.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/004-Scientific-Python-Lectures/papermill_Lecture-2-Numpy.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/004-Scientific-Python-Lectures/papermill_Lecture-5-Sympy.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/004-Scientific-Python-Lectures/papermill_Lecture-1-Introduction-to-Python-Programming.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/papermill_Index.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/exercises/IPython Kernel/papermill_Custom Display Logic Exercises.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/exercises/IPython Kernel/papermill_Rich Output Exercises.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/exercises/IPython Kernel/papermill_Background Jobs Exercises.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/exercises/Customization/papermill_Magics.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/exercises/Customization/papermill_Condensed.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/exercises/Customization/papermill_Configuration.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/exercises/Customization/papermill__Sample.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/exercises/Customization/papermill_Custom magic and cross language integration.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/exercises/Interactive Widgets/papermill_Widget Exercises.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/exercises/Interactive Widgets/papermill_Interact Exercises.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/exercises/Notebook/papermill_Notebook Exercises.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/papermill_Index.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Embedding/papermill_Index.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_Terminal Usage.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_Plotting in the Notebook.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_Beyond Plain Python.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_Cell Magics.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_Trapezoid Rule.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_Working With External Code.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_Custom Display Logic.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_Script Magics.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_Index.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_Importing Notebooks.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_Animations Using clear_output.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_Rich Output.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_Raw Input in the Notebook.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_Capturing Output.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_Old Custom Display Logic.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_Background Jobs.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_Updating Displays.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_Third Party Rich Output.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/papermill_SymPy.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/nbpackage/papermill_mynotebook.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/IPython Kernel/nbpackage/nbs/papermill_other.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/papermill_Monitoring an MPI Simulation - 2.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/papermill_Data Publication API.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/papermill_Index.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/papermill_Parallel Decorator and map.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/papermill_Using MPI with IPython Parallel.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/papermill_Using Dill.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/papermill_Parallel Magics.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/papermill_Monte Carlo Options.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/papermill_Monitoring an MPI Simulation - 1.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Parallel Computing/rmt/papermill_rmt.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Interactive Widgets/papermill_Image Processing.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Interactive Widgets/papermill_Export As (nbconvert).ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Interactive Widgets/papermill_Index.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Interactive Widgets/papermill_Beat Frequencies.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Interactive Widgets/papermill_Nonblocking Console.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Interactive Widgets/papermill_Using Interact.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Interactive Widgets/papermill_Exploring Graphs.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Interactive Widgets/papermill_Widget Styling.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Interactive Widgets/papermill_Widget Events.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Interactive Widgets/papermill_Factoring.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Interactive Widgets/papermill_Image Browser.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Interactive Widgets/papermill_Widget List.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Interactive Widgets/papermill_Widget Basics.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Interactive Widgets/papermill_Lorenz Differential Equations.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Notebook/papermill_What is the IPython Notebook.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Notebook/papermill_Running the Notebook Server.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Notebook/papermill_Notebook Basics.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Notebook/papermill_Index.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Notebook/papermill_Working With Markdown Cells.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Notebook/papermill_Importing Notebooks.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Notebook/papermill_Connecting with the Qt Console.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Notebook/papermill_Julia and Python Bridge.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Notebook/papermill_Multiple Languages, Frontends.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Notebook/papermill_Converting Notebooks With nbconvert.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Notebook/papermill_Typesetting Equations.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Notebook/papermill_Running Code.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Notebook/nbpackage/papermill_mynotebook.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Notebook/nbpackage/nbs/papermill_other.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Magics/papermill_Index.ipynb\n", - "/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/003-IPython-in-Depth/examples/Magics/papermill_Cython Magics.ipynb\n" - ] - } - ], - "source": [ - "import os\n", - "import papermill as pm\n", - "from papermill.exceptions import PapermillExecutionError\n", - "\n", - "failed_notebooks = list()\n", - "dirbase=\"/p/home/jusers/goebbert1/jureca/j4j_notebooks_2/001-Tutorials/\"\n", - "for dirpath, dirs, files in os.walk(dirbase):\n", - " if os.path.basename(dirpath).startswith('.'):\n", - " continue\n", - " for filename in files:\n", - " if filename.endswith('.ipynb') and filename.startswith('papermill_'):\n", - " nb_path = os.path.join(dirpath,filename)\n", - " print(nb_path)\n", - " os.remove(nb_path)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.8" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/001-Jupyter/001-Tutorials/001-Basic-Tutorials/003-Notebook/images/.ipynb_checkpoints/running-checkpoint.png b/001-Jupyter/001-Tutorials/001-Basic-Tutorials/003-Notebook/images/.ipynb_checkpoints/running-checkpoint.png deleted file mode 100644 index 4a1dc06e7ec0f1afae467345ace1043a16647d17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21789 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∨xJQ{VgVgZlY)7*;hcej0cd0RX> zI=V9uG*B}&BE9O^ytPpmcX$eyy}jk?;lXh+ebJ8c_j3I5b}FW(qHDvlJ5tm2WVdhF zaNyRhSzV&qmliE$pKDe6XzliUMpHDMbUB&=ToNa|S;!Oc=wkZf^F?o71TH$~R&1)+ zxV!w_Cymg^g%O8#v6wwQ9lSY>_to|Cqj&Gl<r39?vfEIIO_0S=qa}T=?V5#Qs|(8t zkKH^PsiV%(^g(E1MGI`OP9aG*n&-)F2IyJ<l*urBV|L(CKQIANg)#I8mID(U`cjvF z{P^+cqCjvkI1_)mbfW6(E794<R8&+>s4IzBLuTwt7xr^I1%7aAaa<R(vuW{S<;8Bj zMoZSl?iO=*cLz0P{FXC6cz1WVg_YH_U%Lt(I?bzmb!DaV_jh+YJ39@hfJPV=FIJv6 zZyu;Ad?_|2=EJvdW_!;2&yD<C`|W1>&v)eo1qQLZ%a-Qd-BnRhVNmqMV_od-um`*5 zhx*lhlCi6iaCdhX(}_s%xcvHS&Yc|--`(9EygttM*4FIfdn!MBczbJako|o7+#)qI zvuTBoj|qy3PJR7x#R`pMz0&SEIcrvQen_%?ZN4$M`rDhtTU#<sa&Jvx<rZ5ICLKR{ zRmjRi*6;TuPYK&qlDYVMSy|bZ%*$+h<IcalyquGtKmFdG%0IvF|2I1&E-!!n)z#HM zA9d@`yS41kl}G`<xmHInEOge4-)9rMyX@(ysoJ0c5*If&AsLyT&Q8yLug>{fvaZzD zW@Kd4iP<3_EiFCEH2c`mZt=)nC7R3q<|bWT6}lp1Rn6^<8*(e+v_e)mv~r1ZaBv(r zf4=|K)z#9Rl@1OKiv0>55#kLmUSzcK%lo~(wKZ~Ijpegv&n!QI#+j3k^(>zjyxdRL zd0soe{G)g8&K>O*FXr>Tk~K{y(rJC%-VGZ!p4_|#<lH`4>$bS{>7SmQEO~v6x8djK z=bMv{^X1*$)w*_VF3hc~f9OSSVqs@zH_N%v(A&!^DJj__V>xMU^mfpE!-a*;?KQVI z8sutlty#PF<LA%G=jK?RnQ44n;l{>|8_&!%Zs!u!dhq<YdZK{ikzEQZYHCIa2N-m8 zb$>o=m;dx7X7Qp$Gi)k1J>0u?t?uD={`02!%hKo0n$@*>b#~ul)Hy1f+hG%|K0D8~ zDrNX_eg8k#q$H(YY4fxnA0GC|T5oeGeGZ-;#5*VTb@Q8u8D@Jl4*vV`xIc1#-CmBZ z3Q4gMd~!A%4Xv%L-{0LmZ5;39#Ps^wTH`(Suh(ub;&{HV_IE)^iOHVw($dsJEu5C8 zHf`LP_~F69n%{4?*L*suem*qaG2`MQ)_?#0t%=`1uk!P=iL+*TbqcAzxVl<=vbw(+ z7q`vYcYme?PuOMD+1<^&AZlxt+sm1WEvKjJi-TtK4tEQ^k+1u~SY2H$nDub!C%3bk z^`f`wbc^e=CEVDMXjAb);d)K(?QKsV9qn$rzAg85(UXmvH!m)Kf3N1p!*&Y`3jskv z$B2lCbx%QA=f<sDM(O9~*xa5r--^4dzn|aH(b2`lWkca(Hxnt|)#2;U1%BHMN`^nz zY719aS3B(dIeT_Tx}1K8EcY!oM}duc%eLg*ouwDM3p7l1Zod6_^ZPZQV-njWjnfRW zujxEHH@7=(y}FH!&GkLgrcLXSwVr1G@5kW`x5M2jFE1@M$-LCE*u6g~E30ewZtL1# zUl<=;TN~{f<(K#>>&_0tXV0Fou(3^=Gl$2as>-TcOqc1v<;$BL%5+x!6Pw1)FK3W` zPDV&r_~rfm_MM%bXJ#6!`?os?sPIhUxBK}-_}ja?r`vd?L7{DDXXkc&^YH@4sxL1Z zckiyAC--}^%fjgGd4E0}=AUC#s&)PG&$XZL>@0TssTH!~z=?^<#Z#_tO7;Hp_phWu z0)uY!wj*cG^wj?TmYA66*e#~}DYm>0Gy^*`WOZ1tV>8>vjEhRQw&(Y|Eq-{YmHWt% zBM)A_^!)wpEqBWCLt7rYa+E&f1r2ye-z}L^(4mkN%Mqd_TKxRn(&Fdmd}f(&hKGmC z$jI=3U1%cZJ1;3WKfizGOv!}{7gq8IUddAPo8$5R-ri!{dH1c>$L-CUa{l5)!|;vk z;`iHWhpkaiP-v+A{S90dl$o7rIhlX=r{;2n($v%+A0CFR3~H6H|1;6Koi8yx{rCdM zW(mWjmWx~V{<#4vGz6V^z24aV))5rUdD!}DR^0mQ;?s}4xwW+$vie0t+GzO;UTHI) z^z`R3?mj!u9uxyDZKybTqNsSGg@XTG;g<9dI*MWo#gLXgfa+Ej(9{x?fUNlfD*zKM z)BP9D=biMkV6n`r^<lyLYAQixC}?5F^7(bY4$U{!0o7G=*<W8<`}p&D`{m{D@0ny@ z<JlT@c7FZ8lfS;co@rBQbn@g$pV?-;v(57#J%6q~O^n5{f{*KO&V;bFQ6FC}pa1FS z^ZC+C>;M1#o^xwUr|)dDjrsTO_WgL&ZByQMuFpo=MSw-IoJ)4IUFD~gb=5+<cJ11f zf8UNFCI+-pKvWyFUPNnS-klwW|Ni}Rv#wgQY}upt@B7^rJ1)PxvFhuq7<p|?&`O&g zr*_A4^X>g_Z_D-c_Fi20_!vV=TU%06l9PuA$M5g&)32-u{PXFwzT55y``*~yWr3^1 zbbp3`=EA(z7~8&_U;l6B<>mg1uVxjNl|5_bw*xg5X3UV#(b3tkdGqP=N}<hSERHAU zKEHMC^r1sa=X2L&U0b6GUaWF8srJnc!!}-NP<2pjTle;s=|=Ff9I@Ao%xnp%sYf3j z?cTU?qo6lvM#_DoUHw0s>ThorCLV4}a&;7FVG@wpGc#!EY0(#Roc!-*-`iu^+1Z&? z>L}3i=uPDLxz^Jgnc0i}{i(cj_wL3`n~bd1UCcNFUceKz=I)(43_o74-(O_=PsW&u z)luMI7-;l<-hPJ~Cnko_)nNx$mgQc_`ue$hYsW?f4yTI+-~O=b#qCO|sQ>s#HKeMb ztZH>ZlB}?>^UF(1H*VahsHXO8Wo7&~o7X+X)h8_WZ!b99eQT}Z+RuG8$t;c)swy_$ zR%{lUKOvxEV_88#!jTR^P-V!@-k$WdGJVeN!;9~78?Fu85K(z-s&K@sub`R8Jw|e= zmB)hOGFgRQKY5a(qoc#Hqx^l`#@8D%O?g$_-)LU2)a>Tczf}GG-O~8|buKP00gGHZ z#cyr@`uckC{<_*%S67F>FuJuR)A{|qy&u1R)%~#3y<aZ%Km+3(i$bOQ&wb`vP2HS+ zepB7wU(>H0ul@ZEw6F@aQm~1Y+l95oyp5@|^xEA-uW34wIo4C>PdM>f>=y?Ym($uX z`{@(@%KqAsbyds8)^?^z=A=KnTKBJyNMCB9Z+_lld%OF=`!=TismoUi{i<ND{P96? z-MV#Cw8P)!-}ov0;d(^}Z`+j=jX=>=<!x!34}ST0;yt8?ESXUA?ybg;e(oR3ns13P zopxG&Helz{!hOunj?)>}PP3KcyV|x}yePlFH1tLFQ_sDf$K~V$93#^=d~R8``GC@N z(F>B_6-&5|yl=4<Ur<w9@PcvOVuz`zvkxTXZ`js+?S8stB)|Qw=G^2LAG!;7?%x*h z>q^eM$z`go&g&-!oI7ffA7@tKDpD1Arh)NP``(I=N!QlJ&VKy0Tv=0-)7{-Y@7|tF zkKcd4-~agOlTnM{tu2{{*TwGs@a@~NvuAq`HnSJMzNX8Nc4kK6hD^0)cK)<OEu24o z{16ZnJlMi1EMZ?~v!G?+pFe*<LzsDac|CHrvz|Ojd0IVhV&me)%7TJ|d%oYRJ~PMC zIKH-{t7}pI{e2lGQYKQo`}XZ~`^(6|$+^(EoiD>gYTutv-g$R+Ow5<Iw6YSClsu_E zzou#RYHd*K>&nVt2G>i+`|bbD*#GZWcjo0~hBZGv)O>yU>gwtrzkV&cnDOD$r=+j1 zuC9OYvs_kQv+3<#*<VKv?Y3_$RW;aJS6EtCAjM`A5~mm6^!d5}z3+DUbGAPfQr&w$ zH)E@eTudvk)YJU1pvfYFd&QaM7(W!6n9SjNe%-ks{KD&bPu4;vIn4e@_&3IJqt0^7 zJ)5e_`I}vGdLWPHmWcWG_467U80>yLVBWK5Ptl&1IWha|=FT)uH!6D*A*LVa<Kx5A z%*N}q{`%#G&g^`0HXdGHTnw6;ns4sym6n&6uOn(wqvhE7^Zfey`n$^C|2wno<=3j3 z+FH=S&e1N>AHRPK%gg(N8kYWEUR=e`&!ztP@lhvk&x{>AENW_NxmEHetNAXf|NrmL zm&^VU5fLBGnxEoWq48@+-QTKNX1S-fWL}QgQ}NOG_mqhf9p~HC8kn1_8yHORxBoju z(l~8H_4jwz-=ALU-QKeILW<gya#ro=6<2ufsB6!A(|rhiB10N9k+J1bX!#G(Q<jG} zzC8BRX}MFRddB|1lj*UnZ>$}@Hy1pYnG^e0CBJvw2L-uFe)gW-x7qq^4=$VcXlDAP z4dQ3KoR*3m`<i*|;MxL<-;ZZYvQ2#YjP?1&#qK`y?dFQ<PSN+Csuh}XeVy#Yi4%A1 z-W|LuMDyFbyWQKjo9`}ryC~=8rnX+$O+u2Ao*5Y$3l}boh}Mn^c5q;rH*emZoyErs z>=$}Z*W;11v53$0_V-_2|Nmb_b#-!fHur&thue1+JUl57zWlOb@-d!SX1QDrS678* zUSB7x?mzF$_pYmQwpAa_S$q9h30g6=u}-kICTxD$yE~pmMMj^WpFe);6qmWVxsb5% z&Z4KMUVncYG+XoVj}xg6HVRyMc69$)Ez^uY3BRi!>~z_=;>A{htwOuro~)c`xUq#T zS@Dx~!K?2USCZJb`6}u~2&M-da#*)`fs5#lJ)Bu3ftMbaJ8k9bTHBMfNObCk6Z4a& z>=8Tq`C!SWJAYE^%tN)LOtVrd;#Y_1zIpRzN5Mm;(%09P*8cw1($eza?c1}{bfaI~ z+N!Olre=Anv#(Fh)by%CRb*#(_u-?ioqM0EeW^^$%RARDUw7i+;daovK6U?jDgXcd zt*EH5`MGw+3<=vE+MEB1>&Kn>{ycVjUhLujk@*q(JM8RM`#(Q7cX8g`U2ga91}=8n zyDxr2nRLQ?hKOk9S9~p1hYu=EzwvkBM6aCN85vVQX5EU3V}AMl!NJlE>v+EFHGfmQ zapk;nJ+nt&jm)MBooA-IwHHocdpu=Ro=l@w?t&2C8+YVvN>8;a*0mQEp5T4{PvCEJ z()6(Vdn1$nTIrf^fAz3`SB>wx|34&cb_KsE+V}5Q_M5kFLA^PidCx9;oK1a~!q@Jx z)@;h<jmhq9Jd%gjMsL5dyIfz|Jnzg`nYCfvd-vM@|NFkaSVlW|S<l1&mzH`z-<|*c z-QCB3zu!N8>C&WivAc~*UIfI%#8}k+`eJ-LKW|>W{<%w+jN*TGE$To2D%j19O>1hG zd0Ua*g})7tBInKFf5^S?qR9&TLl*IeH3QUdFH<Z(cldp7TyOc>KeObx+rtDCr&_)L z^DAfn?pbyPC0t9EJN(Jpkh`eGI_H&U;;h*V12$QyxI2FJtDOFNC(pm@9CPeWOKNHI zH7`FjZ^iZ3^M7fH&D9QX4ysFx*dp0EGrQcY_eQhlRkl_=eMQBC8S_5&N}F%kw8`kx znN3_J&(3aMV`g3TWyQl<A0Hl0PR_Pk_1R{*T~TY(j`c`}tPVSSg8Qu3+NiA^{r&E% zuLf;Qa@7i3bK>dg>5`U3DGPs>y||z_Y0{)0KcCP4`RDWb!qU>Sg&QwsZI!XFyYu1S zrKR2~Dk=fX{pKqDe**~)kWoE7CSJ46a&KkZz4c#uhT-KdZmayzw2&jY#^;g}nN?Rw z?q8$*{LJJ!`{_4=xFV+MgJwLmjYHSS=l>6fOnE$;`2Wh|Na;wuP0$ICOX0u!{Br^q zYahu8a#GmlJ7t3VytsX<jihdx2kd13u&krB@c5RpY%gDnM$c)Yy=wj9XJ=gft{E~@ zH+oyj_jh;y{QLd>&(G)cYrfwt-;#G%YHO75Orund$W1ET;(97tT3w(<-(2hRXBx?u zmUzCow|6!(JD)+y2>~gyoQxUaIcaHa)2EAr=G*V?DmDJ}D@02a|7^+C^s1d7KYna! zZI#@+E@r3G%AlnlK0YccDlOU9*KJHZ%+}P@<l*CEa_7sIEn89!wQ#<<xw-xC@9)Mb zCj_Fl<#bM-96YhLvujcROq<pIZ*Olue(F@0Ve+wpPft9z<=k`%2$=A2o>N7Ig>m}1 zC-3g=ZZk5^y>+BZRJ-TZ$M4_ORaBPz_{*VX+V181@Y=~kl`lD~doGu}EGU(qQoXxF zYDK&7=Y`kW{f~s_a{0}7xRFzI=G=v)jz5@GQzrgp3cc(u8F++M+gzD9t~|Wsr?24a zH=7-b7GE?;y_I}qk-7Vtepzd`ZZX{zF*}Ratq%vM!M+>Kr?k?2LQ+Gg3B~{EnwkBb zY5MK$`SGAGU)q@&2NyUtSNwjv{pWG}e~BH>&&@XPzi=VI?$-<DvNtypEv9vD-D(P& zOEFGAm-6Dm!YgYcColD$F4bA|%x6~K-CdG%Z*NZbZ)$1+4H~q1Elv9Q>FJeqv9l*C zyBk%0O0luAnPHZD%lP+(w6juG-`-??;o{+0Qu+BAkBr5HPGR*+YopDTl$1Dlc%Hnv zy1MPA@YU7f=}%5fJTu2~vY@ithilRKl4r##<GNOXgIi2Y3{*=lS+eB9_Wby?^YhNm zFid`NXQwek`uTZJf4|@V{NG=7xo7Y0?*94n`TX8jk-N)u+xg||w(ftjW%q{V_A#7+ z%MRV$zo^A&ootZJ+onfWZh~trdp~q+di3($tJN(EGS#B%dUusvunT&0>N>yU3HAvU zGE(WgPu_Vl|J0l}b8Dyk_`G;_*Y!OwWjCzi(c8J^z}lD0&+D3c+`HQ6bjD_@^3{E; z53rR_$_*2;5j%Ww<%Ew5Dtc#f?cTj}_H5~}u&^E(OQY+#d%28j-&dBI*KaA6l6?M6 zBx~o+%(>+o-q^ftmHPGK;^LZbH`6Vhly8Ejt8Q=4e?C3F&Qai#Z`LNIb7&Jjru(~- z95^*)W;1#UCd9dYykh%j>dKOx6KfCpgl*FA()=tI@-0B@%@eU%9=o|0#ykJf+fnZM z@tN$s;5?;O#XGMqyM9Q@`stx7X;VLLobY{Wci4UHCo>W!t+xGgs^;Ad-3Ochx9W7A z+!uUiTJG)Qv(N8-JgM=p_trIU>H0}ij^=XJ_!UN+toZ#c*Kdx+!B<yTOWIa#>F5tI zfY09iD1y%3nC(BiFL~OJ{JKXi|FtUiRwl+t*>DMT1<X9Kyi(^v*7k)BZ-X?o#k-?3 zwr@}u+g^FCRrJoIPdyWM?67d_lL3tlyu7)2c}KqjhpY0nqq+08X3j0|`nuUp$~5cC z6#<XGzrJ#Raj^#NN&4KH^IDao>4Q`UxI1;|w6m_70E=Tqvu$>I`t#*-{asx`ueq8O z_GE25x6k6?!^7<|)@40sXPa-%xoHI6>`^H2y5H`XhI`chy1yAWHYjR`tyz$Kye}!% zQJ_U>(TU`1@7}$8b8D+NWM_%Z>pR~fYQDS>ykGY_cirjptd0UL;R@Hv%F1>wo30hw zWtx4h1G;M^{l16k<f5mip6=S+sQ?;&K5AuaJGc1xxy0n;$&Uk9tX#P=W^dKhsoLR2 zrLV3`zcmro!E@74JI^l2;&`H)>25+#N5_M;+wU#PySwYg&6^M3zV!_X5|Xd`p=g?Q z<-ny&Le<s3nQV)9XdJbAd*0!~Ywj;zzl|sK6jy(W^*`Lk3!3|nT6;~y7ShvLw0QC7 z&~v}OzMlVc#}%JGIon@O^S27g%Jwc^oV@RIbyd})7cVj@cJA2m;a>Io!Z$ZIKF>RS zcXxSVNr}!S-|TponN0y}Y+na1b_-nQBMBPWe|c%?Ow(*JNH?r6a&sDJhmzMcoy;3& zzATNeJat{?L-9&(r7JV%*wxMgZA4q{Ki_G)sfGr})~MVYs?SP6>)lIUUOKAKwmNKW z(t!p>(C|vp(^I0mVv384e|>$Oeq-+*jS9h3E~kxRua({VHk7@My0s;6p5)$)i%P3P zSGy%7D7?M3RoiT?m-U{mEy}Cs|6|Vkr1|Wuop#7i-`QrV|Ni_ed3B}p)6>)cb@y9< zmaE&G;hwTwXV=c1f>KgmpmC_!bxW73#@GKXow)6*>y${H$_nS3bFIxHZuTs234NOQ z=WLqxZyBe5=JFgmt8Fe@{%-!hIp1KzKC?S}CsbFjS#4MMz~0haUgI@S*}MxS(>C2t z=F@+*Z&Q8BAHN;NjHj-%x63`S@~SK=RXcd^)W6=f`_C6`lB?Uoe*4%3#oKCfsQtzM z?`3D4;>;>!4=H?qcXx5pQT5$cAuAWXk(g+@)?$HoS76c&|H_w>lDJ~)-rw81GHR<< z@$++Mjn995eO=NdLm)3NucE5TsQ8)BrAwC>KA^0VYtH?P-b-9;<m}}1;=)2^sopmI z{eLD&o98`Qz3-3A`BU3+Z?6bnA2-iG<P5L2wl=8ew7b{c)%D``{CE>7Ua4NT`1tt6 zvoC?_V&t`N1`OZd-#6!qjM-Zy8Xpf*8W$J0CT{Po4+0zaoI2rm&8T0_7St@cu{B%# z-o1M}cJ4H+_>hoych}cn-Cz6qMGk(u$5)&5@b3HryM$&$?cZT#Z^6qfr=>q#|KQKh z>hG)Po1eQ~)H&(id$TQ3>vHV3IWGQl)+=k0(xUH42b3A?`r6upAO5LIWuLxg_w4Im z8gJxEyuCi7#OtQzvr~L0DrOw*-n}?Scv`K#+vQ0c>IE#n)##*&R0R5b^NsmG?XX~Q z@V=kVq(O^Ax7;pQi&{Ia?(eU{_xEhW)<hiKl6e`lNzFL@oJohz-(O!rDSvbNdGN^c zojsM4Q%_IZm~v7mDJe<9qF{mJjG&+(&@O|=$NSSiJ~|58X8HPccij5=wA%Alc~2~4 zEe_n+n9Rw+u^{vEvdUWytFKO)IMLC~jct4W{bTp<&zCaIT5vJr!t1X;e*H>HO+DHr zs{P^ncXd0vdmG{(V_W@}y2Vh}!Oe}W_Sct#ckawNaKORt@0Vaut^e-s?$5DqapIRS zy24d^=c}xQbSIZ>VqXYd7k6^w)X>1BBu2Gqr@V8yv@WZ^_tn|FvUldBw795`tE~U5 zdgD`<v#W65g_Qx<IB(^Le2NSYG&}gVPT<{~=FO3AXH9n<YOe6G`m3S~T^HAtKF{+| zTx$Q(HMi$5X280W!fb-`F02StuKM!g;FXoZKfhj&@9mSdtC`_FU2kLA+o;1#ihJYE zUs&io(;$&aOiaw}r?Rp#Coiw6iHS&d_EByw4vqttFHg2Ef2XnEb#9-eahe3nmaMC* zwq#%Lo2>3%^#9-A<=4u;ytuer?!1bQP7f%BXI@?==@eUOSp4jaOw#^>hfX@Wx}ecX zc;7R7!^u|eQw5f0W@1~T&brIjx*Y8iEi5Wp6uCLgQtzL2`8yR$%b7nvKTl3gZJj+^ zy0f!0W@izru<+!XsS~C9<!qCFeR<gyduDaWN~hgrZ##N=mgL>twf?zyQ0_9G$I8<i zk2?j-7XNRy`pSZj&2Qf~J{NkrXwh}2D_$?QsXuo;c0@?3r}f1911s-84(OJ>VHR3u zy1laIzq(lj=kzHnn5LUM@;<%C_0f7^6#LOIx57<bUJ*~u8+yfY&o*~nv)pg)Eaf+b zg^!NNtQNbzF822^?rrnu%fH|ETkrL?wTEy2K6&BQqodtdR)wBEq1G#9s-&yis~x^B zV0D=8;-W>17km2pKAl^B?_{8ROw625wx))Lx883GTN`!b=1tH>lXv&`|G)BU-qm?N zHMO;d#>UEKX5VJkzQ4cU-p<aBP5<|mmBBxL{+u{(p5OU-wm&}{=C`c*VUT`q&ci1s zC%?JBU!I?zpJA3srqkzVXF(f-;^N{!(<A5RS|@`RH%$Jqv-tUn=<Vw+>bWd->kT@z znP2`{q+6X^d#{w~sl?OV;(B}bCGnn$Yp!NLa7!wnT;YoJx;JNM%ym|tdZR4ti{$!c zXP=s$%6rbguDLWdRlVq~^M;l4-T$$j@_YSaen;imcU~Gx4q7Z-BkjJxOIjmT*laty z|J<U)j{6H^WQq>&w0HTx;KtIc<?HuHr2n%B4hot#E9{QJ%3BOmLvK2rKYXs6OH|9C z>Pv>0PK3kew6pWx{aA6eZDDPmB5QSZ^}pZu|39+`TjnEq=<wmsI>x&XJYBwTPhY>h zz1-HQvr9ZD|9H^MzhV3K^PBBMSBEXF`>SrR(d*_M5+d^Y+S<jnzrXGI|L=E1RMe%d z+2L(`vR&QX+{^vvn;qGHeNCiuNr_4Hww%PDpPrtXZQgI1eNE!*-Sa0-oVXlZ7bSU9 zzwKv{&(*9FtGln?+D<8Me8(<w{?n5hj(CpVWsZLZkNuSLYqZ+id->g*_WQT@{4rZ? zq`a{|cl~uOr8Pm%=f=-}TfFKev-@&~Dy}2%*>0<O?Kr$_p3t(Ll3c2*or^?5-cKpt zIq&p?`rZRCH_ur(>ALTl&HUfv*>&zoHin*WJ@ujdwTT>SeejZ}|L_0*EC2uJ`T7~g z>3xc4FJ7F;Ev`3V%9NB3Y0l2hhQ`K=-Fl@gPpt@DE%x!_$BeB}%@MM;RU-BE^-Rpn zyiIj~eiY6!$xQ0_t)>F%%gPD~3(t?bzqv1dUyWo#+}^5%mtX$)cw8P->UvMp(cEBr z=FAz3k{1G=o}QpCW!u#?(cAM(ySm$3TMct=7|fY7N5V8qMAoWAK}DryU+r(Ho2hSa zZ3Rt|JGoz8=BsRLJJ)Zn)ziphn~y~O^ZdS^fk9*v=v;vH*NeZr2y~WEQB!McX=!ol ztTF7-)i8EgRo(_&Hfa7@@2Qwsz@k|nGhg1EqsuMrasDOCgn5h37-?!vIy7~r*0p~5 z_&`V(8nSAz$|hU+wCkQZn;*HVzX^MEwQb+3DKpB>s6Cart>$$?*<b&DsATUOX%5?d z(cS*v&fe8Lwuwizrrwalv?29*<`kKI(mJO_?p{52Wy;IT%cX5IH&lLpW?^ArkaUEj zPuBX_xw+OetxC1_R)0Ts>Cz<wk^Lnvg*-hyGfbqUOfn8MFfxPI9p2uafBgLU{#Bu? zrP{tun>Nj7hC!ok^|uZ6|LfX#B%MxA(=9A2s!FT<ndu+KUwmqcX3p(xz0U1?Pj9~0 z4qpd4!yqC;0yNNnc9!X%KcCNoT2(<yy(Z3>;o;%IaeZBE^5HgK7FO1YGiGE+H2(bk zdvn>_D8Ko3z5xLOA3uJyu(XuCdU0QE^_n$nB#hH|Km%K+r|Gh=vP!yq%S>GpxmoS{ zL@%|;YQ9O|-`$n5C}>c0Zo9A{(fRP4?;k!Cq@A0SS+cq4@-p8w5gQM!;Hj^#cXD#- zdY``_sCdN{k-WJ&bEePRaNNRoI$!vA$DP}|S2R{x7|LhW{&1<ey6nLh&X%)k$KUY8 zO10<*IEmfV4=}BrBIp{kp~(2sgVOTW8TY4Dlzxj;*m*HymeE_oq>HcRH`mD;tX#J6 z%omA}u+-wR9p|j4%#;gWanzu)ZeM@C*}wPo|BX4~5)u?HFY`To{knK|cJ`jVdnJw2 zdLGW1XIs4~;ULqcOP6LCrE;B~uAlzv%gY`aOQES=uFL)A@?8GKuqu50xe1ESGc1eM zIy*bJWL@ogd3pKs)%*TzQP<AP%L5PE&oFHEoo$wwHS2S>kc33WhhL66J<SUqIQ;tZ zvN>vP+Jgg)K65MtgM)*u%HDV+Bq%Vm^QkB(G<<w~{PWfD_>DO?jf8}SL2bmky1Ffy zmyc;INlr{W=x_h`$P~?B&_;&TQ&SSp%rGo@cSlm;yb*(0{ym?UmzMr~(9B=7<?gLp zv)1qX)iu*Nz3B5ZUr^`Xu6CE=lcH~LBKQ6OR}E^M&*<7w{XOs89LwhQ>(?)wvo-tr zrM=bPA8kCQ@OGV0_qx9ujs9HEepn+AW6g3_Tx5^UbwhzWuAK4~KOA1=re14{WAEF` zb=@u2DnnkgezKCn9eJUC=l+~vm)U=W>oWPQe`_etxy0AyUYjBm5y~che@^Q4FO6&O zoiaK4X`TP2w^7=KAExX$Zmv7u)I^6<t~)VYe(Bt!nP-;hyM3Mt>Ym)*mdjoGZt>d7 zCoHzNPg3SmJEYlt@8Fhm)~s<qHTKMtv8|eN-tM=~eeb{V(m|7_T9m#K+ff}j^JBn9 zLz7uaGWBQQFOmpw;yRwDaVU%A{`N=1uTc@n%UkMitue9_`?Rm<;;ZUb8DpQKt?h9$ z&&%#+t@*Zpf~(=dgR?b5f1NygU-$O5=d;f5PHs29y!o1HtX_dn)bx@_5ub{`8#R_! zEb;yK^Gl6w|Fd~<*Ch9ydA9v#xk+ECefKo<4z_ub{k1%2#@kDS!t}f(p0Jjxd|p|} zDx)#O{BOv-9qJrTAFuB)_gv#z(wcs8Mc`s{eHNuZx&g?ilDz((|NhS5O{+fH{%aH$ zcxx)){PfXVSA(-Vx|aoB5Zo%UMMd51@FHgZN4$L@GM}4Nob8O3AI{*-2wt-I*;+#( zQ74u&$8|m&^J!7z(&|~U;7-uH=l!bsdtyW^6i%!;|M^Y(_q)}5v)6CE@q2gu>+RR0 z>^ohQCMM}l^iUDfye0(a1g%j8agIhQP4rNKaJsg-C{6U(HOJ2Q?w)7YulTt)U6lO1 zXwE9Vi5^Q*|E@T)>s5Qi#tFgf+g8aZS#R04b^m^Qt*Ktgn>TJec>DJ3&(F`>PuewY z+O$PMD@`7$mzkEoyOVfzRVb(nQun7~neS}3k`j~9(9pT(jMdfIr+QsYTd{H8I^z!2 zklftdrA8i0Qtz(ypLcMv)gHal^d<odYinT<5ta^tKv!2+7gyJZ&!4*&6&dZ?wd-z_ zzpbrpO-)UJ*3`RdSKhsQCm|{M@csM#l`A!8&YYQZZ_mu8CZ=m^qrac{zx{4(dgqes z-KB+vh3hpuq8kIPov)tMU->KZb#s2*^6eL9|0!Gk$=t~3&^bS2yE#ECQ~v$=`Q+KN zq|D5lYjc;bUk_S0wOjXpue5nmLc)P}cXxvpWiSLU^Er6x6jywF{4|}&Ll+i0%fI}3 z@owom;X8X37Zt}_>NE-3B&vx$p1&vVh-J$+cKHrdk!&mT_=^3N4UOxMIb{01ekz$z zR)4TQicQ|2M#^VS;w5*bd&%6|tC%ib?<j~-wKVt<DPhaL=D+uv*t-W3%LVs;Ji6cP zXQAz%TnnC=9LC?WpZz{761e=NwAAU)Ih^a~@0P#4ku!Izqrc?h@O3c@&2v~;S!2Ui z?n)Be_S!KzwlHtHSxWQK^o$IT!a_r>sa><p^H=rDTNE^8US76x|LPE}O`A4FY)D|d zcI{e4MMZ|r-Jc5{i;9X$={2@LojQGb`}XbTW@cs;m6a1GO}dm8zJJ%QS+dq;8wwse zZ4EI0aEM!fL)F);clY*kJ0vD5GBPrP##7$B@o{l!X`8KLZ9UukUIlY@cJ{L~GY{+U z|FdXfd}O4gqN1XOr6p)_$fu{Lch>$cTm3XE>UmEOPfTpAWz`prckkZaxOsD9#zm#B zt}X@+e*WXv!-IRobfZ9nz_+f(F?f1<o|$3D9336~=kMR0g^%6di@#QmbJ}oM_~BXY z5AxOt2Lc3Nt=j$L@A(JS;W>~0Jbd{-=a1d{MQOL5|5y6<`%a^{+2Q>EO?$UJ$`97+ zZta-%^w1UG5AB~H2ylt-7ZQw_<z_B#D!oo+f#CX$KjteHo!P1!P`tfUG@Qx2E=#gI z(4F%>`vs+E$@!btM0any8!RFwW><F1r?%GCJpZ1Gm6cR@cz925Z)Sde>eEwGK}+i^ zJ|rAEbclnSJNf;+y>IRA&D*nT)vAimXU#Wm-=2PZTW(5vy0DPYrL>vr;`Vx#mX>zU zWA1oxz|PLDp<~;-$B&yQP86J9`%O|+Rkfw9Ehsef=&h~Un%dgQ_x4o!%(0lLzwbxW zojZ5LrhUA$)cfMKYieq0ZKqCoDJd&Q?kG^)UG}yr!+-UL4HG&#IKtM&boTY}$=7}n zWMpIn%?5zxKobr!ojQFwP;2Ux>C-1qnzTsJ_>*I9bX?rIHeP8^D?30#WKH~jIeUBi zeLtVg)_coXrdfJ5U;^9v`I$YAH|jZf=HA)+JoHO;(yx~evI{QcA2zundR*k!p;dBb zqI_pXHp<RjEPZ)tdsoMs%ikCB9X356;uGIud;U=CT7$5d_MR^d$^QcWZ0@k-RFau_ zN;q%cE_sdb<w^C9vpP23FgYXH@V2_ZOi1q!?;5c$aT}-A9`6$t7YFsHj_pf4+*bJF z!a}~M#_8u|Vq#*z<1;!sYn+eYo@}P5=&0LLRaJH4#*KoHkB*wT?mrl1Ze~`OaMORD z&B>>yr{COHYwhOd_KN-bBvtQ-jY+J9g@rF(z1mdx*zMQX*X@fJD{s%cn{=4%;@>l; zPAS>i&i(SGWGn0b%*$$X=FZjB)I50M!iUD^`^(?U$=Cf@Xmx4l%9WaVd3h<Rsfqdd z=MOY8dwP2xzI%7>V)y=}j116zi`!SXm6n#aw6_~)UQz*_S5i=1{P@n!;=SLWF5b58 z#j*6G2d-#bxc2(5`J`!PH`*K?Wk2{Mu6X9_)(L-q{(Z3RtXvOQ?S@M6P1{VmzA^|) z7<syw<_o;mZg1WFgfsZW?`?r=K2JVa)0UylD?fW<LH8d4olD!EO?%1vKS^`1?D3;V zTYvnh_`0q1b=bU`PoCG-L|$H4Gq3WQ<k#odj=W4fetYt_L#^Bq(b0>SU$6MQEzQ(C zAt{Mz!NWtDUU6}9t*xywyGl5@xw*FnG<O^VrNgb+*H4^0dGO%D#=5^!y87zs>R+FK zetteU5;XtH?dRubVQKmCR`&XpYk#-jdma^KVP&;ye{@7dLQ;~GpC2DrYtzfi%O_8n z!gAnXGyBI69~>42Y+0Qv%EijZ$EW*gU&+g$_xlX)esj8LdBaY~ua$FuY4#kBCjI%B z?tJrqH`9oJTk9*MA8+f{@6zGVdf#+$bMBJujkhCb>2(LLzgOO>@M+ga;TgNQR$G5} zSbSUMzlXQD2ebcvX0~aEp6lzrp68sH)*M!U*suR^USDG)<KyG~`45GAdwOy{n@^oO zRrlM=*RSnA*zjB5o42L3v{ZNgg<HAyi{1NVKsji+|9sHePO0NrSy?k|tIfQp>s=N2 z|Lo_rD_1f&l7ky_7i`-$?cw3}&FSaoh27pBJgt4(wq5%`lRzII9TgE3oj7gUv3<3_ zt?q8)t=t~=Jnra%!Vj+s6C>yS7EW<%d>mC_7GOO0u+)Y*%XhASq9jxBR`PXJ%*yY7 zyS5%$bnQ}}b#3kD?5Zm{CnA`yKAkY1$$3u8?!y^P1()ymus`M4F_%|4F3&ptxx|m% z%00Eam#%h+x^~y!e!2tOzweP#8dtv9FLNvRdF88>%TJs?f4$=1wU7nXTJPq2Embl$ z4qhCSer`^t@!om!<l^GuK#NGHOr4r3<L%+GV9S;%n!(E!1g$)A^5n%2=a(;EzIgTO z(<de>Z``oq!IhQ4Qn?=<_uFShtp54)=ap;Ml5%o-Hf}VmtgL*cIFWzxzJ2q0dXAmA zvUBH75fPDu#6-peOFSoExOPp=#zv;NxR}@bSK^gx*NT39$^82L^mP5;fPf2c7uW3a z_<Mvypnvg)Q;LR*9%VUgo_&a8p277yY&_XBm+e}V`t9n|1@=2$cSX<9bX&zEU~9$J zC#E;&c4Y37|IhyhO8dsBG|y{mT)aTR^-8Gh#MsySO8>4cXyhpr((5-{Ta!Iw15cl> z$a{t*5%x-7cq<O&+yAv)ELFaDli1TuA{WeGe7bD<BeuJ%%fP_EVP%MrsHkgMnOS`O zU(=H(PugDMS-<BK7guZ3gb4yh#>O{ym+Q0h$y7Y(-t^!>f|i!n4C8b@(D;_FZtsc} z8ux0y$AY$6?kId*@owjH&}Q4l#>P2TrCm>+q&PV{gEkKS`t_@#q9PzV`t+vM)1VV} z?(eJ3xxX*AmM=OwIwvRR!`H7*e|&tbqNXM!B-Au>=FD47cemw6ubx)UtR22iMOC%+ z@$vr66(5siWMpO-IR4NrEiIjCmMc|QSa@cZ>1t<vwy$5mMs7@EUAb~4=sYjbN}A{M z>*sAuK5iHH{lJCi2`^M0O1<ov8aLtAn%QBz|E<`XkCg{9zJB;-{((omZXd5+Yuw2F z;7nCi&$$(=o6h_f)a!o6zant6YyYEHi4t~;JFmWF+*$ZN-ei~k9*@54*55DW>!&6C z^|&MVY@0;QjP7+`SL^<@o2Cb1AKH^0FJc-|QvL0X<H7&|NlDMDDyz7-I2p^LCGKjI zOl(}X<=#H__4W0S-@d6C8cuxhAc2in>WhQ9e@%@I=yaW%n_3$h7=(m`Ku5AYeE2YH zyF*Tnj@MEldwY8)XXnE5@^JqCV6CZd?(CdAX_C;r%IC6WZ*Cl1<~!RY2DH^C?aT~A z7FO1cSy#1|`OQ6bYist^%twzO|9rRm{jD|Ef4|@F@8ZJZJxwR^%8Ec2clYd$qQe0v zBR8j&t~l$~BjFejARs6x$il{!l$yFU@LQZ`sOFM=%-1I!3E0t<eMq$EZ_9=))?K9= z1lG)7{BS!{;!C-&VtO1`U(eM}jy1h<Pq^;sA>j#Ms&|x1shL$5zWd^CsAm1s_hJ3M z^5BTG_jft`Pc%5UKK0(>w8QJI7d(r5oFTz5S-e&L&!zi`F4jk)!a0M@o!m68{JFOK zm(S6oNB5=`Je+BqUh#72bgQqotJ|*yea_Z8b>Ir$-*tb^>%EBBRZ{Wn@#8~Vv#(o} zy^)BEi_4l{l#`>=+1dH#*4Eb>*MOFM<nRCc%{kWF(9lptO>I;C|GHl`Q@6KT#9MMK zoqnW){c-1m9d4KZ-@4~%s1U=o{LsQ5@(a=xbiS_quibWWtJ`NzW8X|W&0`0=c<#>L zv#<2JOQ`0O^=*F^2b4udd|n*SJo~%U>E($_t{*ZJ{+LkoH|TT3rI?QwKJ9bs7F1ii z&3&)L`P!!nXa4PrRy!(VCv*OQx-{>yX3oyF%ZlgUyy5*KSYP6G*XJGO7Hbage|h@F z%a@=tgtWA@K79G2qORV4-v0lb)YH?x-n6>EvlvwNZYq5pHcdbN+<w--Y@FR!UiS0* zJ)e2;SKZ;|2lvmsYgUsc{6F8i;@{-H`P<KOfA^emi!r=q8q>Y3<VTZk-{YI+?R_Su zX3GD4b$_FHoHG6i?K$7Ewd(4gUwx$_U)1(qT^@c%+9-v?(9qDu&F$02<MPQ_S*QN| z{QU9Dmp7YB_f>t>a&&a`nQyn(|9bGHasy-Ir<azVmim3h*Z0>lX;8mQPJGsG$E@t^ zof9TIJMN1pJACGfi1ukislz!>dE7c(lwKx^aIrpKvqmC4^=g`wWpkj?L=QRUB@x~# zLY*Snpnjdl#%UfZlj?<^aD&uW9@+Ef)B7c<pq^i?Ah_#y>H5)KTegJk?Roa}^z_c& zUQpq&DO6RcbIJCO(x4!ryu7?6%a;d-hPpa9Fns*@5j0Bj=HA}uZEIYVCVpYt`0vYQ z|Bqk3q@0?fsiLZCSn$B%+uPgj1qBB2wO^;^M1ma2n^gPvSLvO*cQ0PQ{`^R%@Qz)( z7A;+Rw1rc6N8R6DFg3P0Hw-}2+-sw^d-(buJ$sh7q4@c^OqRf@9x6hf{9Rkuuh+kL z@#2{|mcr4|(K@=iH#ennzrMac{oS3Nn^Hjz=Kfi)J8{<R+1_<^cHh2z`||$&{K@M6 zOa_%j&kx-?ts0~%)VZY8%A|SYvSn_MckkQ@+I8|Oxv#J9)p;wcqM{`(N)t;&|Fd(g XYMCf`)UlC)fq}u()z4*}Q$iB}r!wFG diff --git a/001-Jupyter/001-Tutorials/001-Basic-Tutorials/003-Notebook/images/.ipynb_checkpoints/tabs-checkpoint.png b/001-Jupyter/001-Tutorials/001-Basic-Tutorials/003-Notebook/images/.ipynb_checkpoints/tabs-checkpoint.png deleted file mode 100644 index bc9e09ace4edc30c4d2b3d5056c409564f98b514..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23272 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 F2>>8(3!?x4 diff --git a/002-Methods/001-Computing/.ipynb_checkpoints/Howto_Dask_onJUWELS-checkpoint.ipynb b/002-Methods/001-Computing/.ipynb_checkpoints/Howto_Dask_onJUWELS-checkpoint.ipynb deleted file mode 100644 index b56c82b..0000000 --- a/002-Methods/001-Computing/.ipynb_checkpoints/Howto_Dask_onJUWELS-checkpoint.ipynb +++ /dev/null @@ -1,346 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Dask Extension" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "This notebook will give you a short introduction into the Dask Extension on JUWELS. It allows you to run Jobs on the compute nodes, even if your JupyterLab is running interactively on the login node. \n", - "First you have to define on which project and partition it should be running." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "queue = \"batch\" # batch, gpus, develgpus, etc.\n", - "project = \"training2005\" # your project: zam, training19xx, etc.\n", - "port = 56755" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Monte-Carlo Estimate of $\\pi$\n", - "\n", - "We want to estimate the number $\\pi$ using a [Monte-Carlo method](https://en.wikipedia.org/wiki/Pi#Monte_Carlo_methods) exploiting that the area of a quarter circle of unit radius is $\\pi/4$ and that hence the probability of any randomly chosen point in a unit square to lie in a unit circle centerd at a corner of the unit square is $\\pi/4$ as well. So for N randomly chosen pairs $(x, y)$ with $x\\in[0, 1)$ and $y\\in[0, 1)$, we count the number $N_{circ}$ of pairs that also satisfy $(x^2 + y^2) < 1$ and estimage $\\pi \\approx 4 \\cdot N_{circ} / N$.\n", - "\n", - "[<img src=\"https://upload.wikimedia.org/wikipedia/commons/8/84/Pi_30K.gif\" \n", - " width=\"50%\" \n", - " align=top\n", - " alt=\"PI monte-carlo estimate\">](https://en.wikipedia.org/wiki/Pi#Monte_Carlo_methods)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Core Lessons\n", - "\n", - "- setting up SLURM (and other jobqueue) clusters\n", - "- Scaling clusters\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Set up a Slurm cluster\n", - "\n", - "We'll create a SLURM cluster and have a look at the job-script used to start workers on the HPC scheduler." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import dask\n", - "from dask.distributed import Client\n", - "from dask_jobqueue import SLURMCluster\n", - "import os\n", - "\n", - "cluster = SLURMCluster(\n", - " cores=96,\n", - " processes=4,\n", - " memory=\"70GB\",\n", - " shebang=\"#!/usr/bin/env bash\",\n", - " queue=queue,\n", - " dashboard_address=\":\"+str(port),\n", - " walltime=\"00:30:00\",\n", - " local_directory=\"/tmp\",\n", - " death_timeout=\"30s\",\n", - " log_directory=f'{os.environ[\"HOME\"]}/dask_jobqueue_logs/',\n", - " interface=\"ib1\",\n", - " project=project,\n", - " extra=['--host $SLURMD_NODENAME.ib.juwels.fzj.de'],\n", - ")\n", - "# optional: job_extra=[\"--reservation=reservation_name\"]\n", - "# interface can be skipped if the master process runs on a comput node" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(cluster.job_script())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cluster" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "client = Client(cluster)\n", - "client" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## You can visit the Dask Dashboard at the following url: \n", - "```\n", - "https://jupyter-jsc.fz-juelich.de/user/<user_name>/<lab_name>/proxy/<port>/status\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## You can integrate it into your JupyterLab environment by putting the link into the Dask Extension" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Afterwards you can press on the orange buttons to open a new tab in your JupyterLab Environment." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Scale the cluster to two nodes\n", - "\n", - "A look at the Dashboard reveals that there are no workers in the clusetr. Let's start 4 workers (in 2 SLURM jobs).\n", - "\n", - "For the distiction between _workers_ and _jobs_, see [the Dask jobqueue docs](https://jobqueue.dask.org/en/latest/howitworks.html#workers-vs-jobs)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cluster.scale(4) # scale to 4 _workers_" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## The Monte Carlo Method" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import dask.array as da\n", - "import numpy as np\n", - "\n", - "\n", - "def calc_pi_mc(size_in_bytes, chunksize_in_bytes=200e6):\n", - " \"\"\"Calculate PI using a Monte Carlo estimate.\"\"\"\n", - "\n", - " size = int(size_in_bytes / 8)\n", - " chunksize = int(chunksize_in_bytes / 8)\n", - "\n", - " xy = da.random.uniform(0, 1, size=(size / 2, 2), chunks=(chunksize / 2, 2))\n", - "\n", - " in_circle = (xy ** 2).sum(axis=-1) < 1\n", - " pi = 4 * in_circle.mean()\n", - "\n", - " return pi\n", - "\n", - "\n", - "def print_pi_stats(size, pi, time_delta, num_workers):\n", - " \"\"\"Print pi, calculate offset from true value, and print some stats.\"\"\"\n", - " print(\n", - " f\"{size / 1e9} GB\\n\"\n", - " f\"\\tMC pi: {pi : 13.11f}\"\n", - " f\"\\tErr: {abs(pi - np.pi) : 10.3e}\\n\"\n", - " f\"\\tWorkers: {num_workers}\"\n", - " f\"\\t\\tTime: {time_delta : 7.3f}s\"\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## The actual calculations\n", - "\n", - "We loop over different volumes of double-precision random numbers and estimate $\\pi$ as described above." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from time import time, sleep" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for size in (1e9 * n for n in (1, 10, 100)):\n", - "\n", - " start = time()\n", - " pi = calc_pi_mc(size).compute()\n", - " elaps = time() - start\n", - "\n", - " print_pi_stats(\n", - " size, pi, time_delta=elaps, num_workers=len(cluster.scheduler.workers)\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Is it running?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To check if something has been started for you just use the following command in a terminal: \n", - "```\n", - "squeue | grep ${USER}\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Scaling the Cluster to twice its size\n", - "\n", - "We increase the number of workers by 2 and the re-run the experiments." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "new_num_workers = 2 * len(cluster.scheduler.workers)\n", - "\n", - "print(f\"Scaling from {len(cluster.scheduler.workers)} to {new_num_workers} workers.\")\n", - "\n", - "cluster.scale(new_num_workers)\n", - "\n", - "sleep(10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "client" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Re-run same experiments with doubled cluster" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for size in (1e9 * n for n in (1, 10, 100)):\n", - "\n", - " start = time()\n", - " pi = calc_pi_mc(size).compute()\n", - " elaps = time() - start\n", - "\n", - " print_pi_stats(\n", - " size, pi, time_delta=elaps, num_workers=len(cluster.scheduler.workers)\n", - " )" - ] - } - ], - "metadata": { - "anaconda-cloud": {}, - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.8" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} -- GitLab